on dev help sign in
libpq funcions
commit97f710869158aec74ee7b106475304feaa6d5e93 authorEitan Chatav <eitan.chatav@gmail.com> dateTue 14 Mar 2017, 07:39 (10 years ago) parentc6b24ca
6 files changed+75−18
squeel-postgresql/squeel-postgresql.cabal+1−1 squeel-postgresql/src/Squeel/PostgreSQL/Connection.hs−12 squeel-postgresql/src/Squeel/PostgreSQL/PQ.hs+70 squeel-postgresql/src/Squeel/PostgreSQL/Query.hs+1−1 squeel-postgresql/src/Squeel/PostgreSQL/Query/Expression.hs−4 squeel-postgresql/src/Squeel/PostgreSQL/Value.hs+3
squeel-postgresql/squeel-postgresql.cabal+1−1
@@ -14,7 +14,7 @@ library
1414 hs-source-dirs: src
1515 exposed-modules:
1616 Squeel.PostgreSQL
17− Squeel.PostgreSQL.Connection
17+ Squeel.PostgreSQL.PQ
1818 Squeel.PostgreSQL.Query
1919 Squeel.PostgreSQL.Query.Expression
2020 Squeel.PostgreSQL.Query.Relation
squeel-postgresql/src/Squeel/PostgreSQL/Connection.hsdeleted−12
@@ -1,12 +0,0 @@
1−{-# LANGUAGE
2− DataKinds
3−#-}
4−
5−module Squeel.PostgreSQL.Connection where
6−
7−import qualified Database.PostgreSQL.LibPQ as LibPQ
8−
9−newtype Connection db = Connection LibPQ.Connection
10−
11−newtype PQ m db0 db1 x = PQ
12− { runPQ :: Connection db0 -> m (x, Connection db1) }
squeel-postgresql/src/Squeel/PostgreSQL/PQ.hsnew file+70
@@ -0,0 +1,70 @@
1+{-# LANGUAGE
2+ DataKinds
3+ , PolyKinds
4+ , ScopedTypeVariables
5+ , TypeApplications
6+ , TypeOperators
7+#-}
8+
9+module Squeel.PostgreSQL.PQ where
10+
11+import Control.Monad.IO.Class
12+import Data.ByteString (ByteString)
13+import Data.Proxy
14+import Data.Text (Text)
15+
16+import qualified Database.PostgreSQL.LibPQ as LibPQ
17+
18+import Squeel.PostgreSQL.Query
19+import Squeel.PostgreSQL.Value
20+
21+newtype Connection db = Connection { unConnection :: LibPQ.Connection }
22+
23+newtype PQ m db0 db1 x = PQ
24+ { runPQ :: Connection db0 -> m (x, Connection db1) }
25+
26+connectdb :: MonadIO io => ByteString -> io (Connection db)
27+connectdb = fmap Connection . liftIO . LibPQ.connectdb
28+
29+connectStart :: MonadIO io => ByteString -> io (Connection db)
30+connectStart = fmap Connection . liftIO . LibPQ.connectStart
31+
32+newNullConnection :: MonadIO io => io (Connection db)
33+newNullConnection = Connection <$> liftIO LibPQ.newNullConnection
34+
35+finish :: MonadIO io => Connection db -> io ()
36+finish = liftIO . LibPQ.finish . unConnection
37+
38+newtype Result xs = Result { unResult :: LibPQ.Result }
39+
40+exec :: MonadIO io => Query db0 db1 '[] xs -> PQ io db0 db1 (Result xs)
41+exec = undefined
42+
43+newtype RowNumber = RowNumber { unRowNumber :: LibPQ.Row }
44+
45+newtype ColumnNumber cs c = ColumnNumber { unColumnNumber :: LibPQ.Column }
46+
47+colNum0 :: ColumnNumber (c0:cs) c0
48+colNum0 = ColumnNumber 0
49+
50+colNum1 :: ColumnNumber (c0:c1:cs) c1
51+colNum1 = ColumnNumber 1
52+
53+colNum2 :: ColumnNumber (c0:c1:c2:cs) c2
54+colNum2 = ColumnNumber 2
55+
56+colNum3 :: ColumnNumber (c0:c1:c2:c3:cs) c3
57+colNum3 = ColumnNumber 3
58+
59+colNum4 :: ColumnNumber (c0:c1:c2:c3:c4:cs) c4
60+colNum4 = ColumnNumber 4
61+
62+getvalue
63+ :: (FromValue x y, MonadIO io)
64+ => Proxy x
65+ -> Result xs
66+ -> RowNumber
67+ -> ColumnNumber xs x
68+ -> io (Maybe (Either Text y))
69+getvalue proxy (Result result) (RowNumber r) (ColumnNumber c) = liftIO $
70+ fmap (fmap (decodeValue proxy)) (LibPQ.getvalue result r c)
squeel-postgresql/src/Squeel/PostgreSQL/Query.hs+1−1
@@ -6,4 +6,4 @@ module Squeel.PostgreSQL.Query where
66
77import Data.ByteString (ByteString)
88
9−newtype Query db0 db1 ps x = Query { unQuery :: ByteString }
9+newtype Query db0 db1 ps xs = Query { unQuery :: ByteString }
squeel-postgresql/src/Squeel/PostgreSQL/Query/Expression.hs−4
@@ -15,12 +15,8 @@ module Squeel.PostgreSQL.Query.Expression where
1515
1616import Data.ByteString (ByteString)
1717import Data.Monoid
18−import Data.Proxy
1918import Data.String
2019
21−import qualified PostgreSQL.Binary.Encoder as Encoder
22−
23−import Squeel.PostgreSQL.Value
2420import Squeel.PostgreSQL.Type
2521
2622data Expression (ps :: [PGType]) (cols :: [Column]) (x :: PGType) =
squeel-postgresql/src/Squeel/PostgreSQL/Value.hs+3
@@ -28,6 +28,9 @@ import Data.Word (Word16, Word32, Word64)
2828
2929import Squeel.PostgreSQL.Type
3030
31+decodeValue :: FromValue pg x => Proxy pg -> ByteString -> Either Text x
32+decodeValue = Decoder.run . fromValue
33+
3134class FromValue (pg :: PGType) x where
3235 fromValue :: Proxy pg -> Decoder x
3336instance (Integral x, Bits x) => FromValue ('PGType "int") x where