8000 Minimal API for sending queries · postgres-haskell/postgres-wire@d659375 · GitHub
[go: up one dir, main page]

Skip to content

Commit d659375

Browse files
Minimal API for sending queries
1 parent 076c81b commit d659375

File tree

2 files changed

+36
-60
lines changed

2 files changed

+36
-60
lines changed

src/Database/PostgreSQL/Protocol/Connection.hs

Lines changed: 32 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import Data.Traversable
1616
import Data.Foldable
1717
import Control.Applicative
1818
import Data.Monoid
19-
import Control.Concurrent (forkIO, killThread, ThreadId)
19+
import Control.Concurrent (forkIO, killThread, ThreadId, threadDelay)
2020
import Data.Binary.Get ( runGetIncremental, pushChunk)
2121
import qualified Data.Binary.Get as BG (Decoder(..))
2222
import Data.Maybe (fromJust)
@@ -107,7 +107,6 @@ readAuthMessage s =
107107
receiverThread :: UnixSocket -> InChan ServerMessage -> IO ()
108108
receiverThread sock chan = forever $ do
109109
r <- receive sock 4096 mempty
110-
print r
111110
go r
112111
where
113112
decoder = runGetIncremental decodeServerMessage
@@ -119,53 +118,43 @@ receiverThread sock chan = forever $ do
119118
BG.Partial _ -> error "Partial"
120119
BG.Fail _ _ e -> error e
121120

122-
-- data QQuery a = QQuery
123-
-- { qName :: B.ByteString
124-
-- , qStmt :: B.ByteString
125-
-- , qOids :: V.Vector Oid
126-
-- , qValues :: V.Vector B.ByteString
127-
-- } deriving Show
128-
129-
-- query1 = QQuery "test1" "SELECT $1 + $2" [23, 23] ["1", "3"]
130-
-- query2 = QQuery "test2" "SELECT $1 + $2" [23, 23] ["2", "3"]
131-
-- query3 = QQuery "test3" "SELECT $1 + $2" [23, 23] ["3", "3"]
132-
-- query4 = QQuery "test4" "SELECT $1 + $2" [23, 23] ["4", "3"]
133-
-- query5 = QQuery "test5" "SELECT $1 + $2" [23, 23] ["5", "3"]
121+
data Query = Query
122+
{ qStatement :: B.ByteString
123+
, qOids :: V.Vector Oid
124+
, qValues :: V.Vector B.ByteString
125+
} deriving (Show)
126+
127+
query1 = Query "SELECT $1 + $2" [Oid 23, Oid 23] ["1", "3"]
128+
query2 = Query "SELECT $1 + $2" [Oid 23, Oid 23] ["2", "3"]
129+
query3 = Query "SELECT $1 + $2" [Oid 23, Oid 23] ["3", "3"]
130+
query4 = Query "SELECT $1 + $2" [Oid 23, Oid 23] ["4", "3"]
131+
query5 = Query "SELECT * FROM a where v > $1 + $2 LIMIT 100" [Oid 23, Oid 23] ["5", "3"]
134132
-- query1 = QQuery "test1" "select sum(v) from a" [] []
135133
-- query2 = QQuery "test2" "select sum(v) from a" [] []
136134
-- query3 = QQuery "test3" "select sum(v) from a" [] []
137135
-- query4 = QQuery "test4" "select sum(v) from a" [] []
138136
-- query5 = QQuery "test5" "select sum(v) from a" [] []
139137

140-
-- sendBatch :: Connection -> [QQuery] -> IO ()
141-
-- sendBatch (Connection s _) qs = do
142-
-- traverse sendSingle $ take 5 qs
143-
-- sendMessage s $ encodeClientMessage Sync
144-
-- where
145-
-- sendSingle q = do
146-
-- sendMessage s $ encodeClientMessage $
147-
-- Parse (qName q) (qStmt q) (qOids q)
148-
-- sendMessage s $ encodeClientMessage $
149-
-- Bind (qName q) (qName q) Text (qValues q) Text
150-
-- sendMessage s $ encodeClientMessage $ Execute (qName q)
151-
152-
153-
-- sendQuery :: Connection -> IO ()
154-
-- sendQuery (Connection s _) = do
155-
-- sendMessage s $ encodeClientMessage $ Parse "test" "SELECT $1 + $2" [23, 23]
156-
-- sendMessage s $ encodeClientMessage $
157-
-- Bind "test" "test" Text ["2", "3"] Text
158-
-- sendMessage s $ encodeClientMessage $ Execute "test"
159-
-- sendMessage s $ encodeClientMessage Sync
160-
161-
-- test :: IO ()
162-
-- test = do
163-
-- c <- connect defaultConnectionSettings
164-
-- -- sendQuery c
165-
-- getPOSIXTime >>= \t -> print "Start " >> print t
166-
-- sendBatch c [query1, query2, query3, query4, query5]
167-
-- threadDelay $ 5 * 1000 * 1000
168-
-- close c
138+
sendBatch :: Connection -> [Query] -> IO ()
139+
sendBatch conn qs = do
140+
traverse sendSingle $ take 5 qs
141+
sendMessage s Sync
142+
where
143+
s = connSocket conn
144+
sendSingle q = do
145+
let sname = StatementName ""
146+
pname = PortalName ""
147+
sendMessage s $ Parse sname (StatementSQL $ qStatement q) (qOids q)
148+
sendMessage s $ Bind pname sname Text (qValues q) Text
149+
sendMessage s $ Execute pname noLimitToReceive
150+
151+
152+
test :: IO ()
153+
test = do
154+
c <- connect defaultConnectionSettings
155+
sendBatch c [query1, query2, query3, query4, query5]
156+
threadDelay $ 1 * 1000 * 1000
157+
close c
169158

170159

171160
-- sendBatchAndSync :: IsQuery a => [a] -> Connection -> IO ()
@@ -187,20 +176,3 @@ receiverThread sock chan = forever $ do
187176

188177
-- data Request = forall a . Request (QQuery a)
189178

190-
-- query :: Decode a => QQuery a -> Session a
191-
-- query q = Send One [Request q] $ Receive Done
192-
193-
194-
195-
-- sendBatch :: Connection -> [Request] -> IO ()
196-
-- sendBatch (Connection s _ _) rs = do
197-
-- traverse sendSingle rs
198-
-- sendMessage s $ encodeClientMessage Sync
199-
-- where
200-
-- sendSingle (Request q) = do
201-
-- sendMessage s $ encodeClientMessage $
202-
-- Parse (qName q) (qStmt q) (qOids q)
203-
-- sendMessage s $ encodeClientMessage $
204-
-- Bind (qName q) (qName q) Text (qValues q) Text
205-
-- sendMessage s $ encodeClientMessage $ Execute (qName q)
206-

src/Database/PostgreSQL/Protocol/Types.hs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ newtype RowsCount = RowsCount Word deriving (Show)
3232
-- returns rows (ignored otherwise). Zero denotes "no limit".
3333
newtype RowsToReceive = RowsToReceive Int32 deriving (Show)
3434

35+
-- | Query will returned unlimited rows.
36+
noLimitToReceive :: RowsToReceive
37+
noLimitToReceive = RowsToReceive 0
38+
3539
-- | Information about completed command.
3640
data CommandResult
3741
-- oid is the object ID of the inserted row if rows is 1 and

0 commit comments

Comments
 (0)
0