10000 Prepared statement storage · postgres-haskell/postgres-wire@47e3488 · GitHub
[go: up one dir, main page]

Skip to content

Commit 47e3488

Browse files
Prepared statement storage
1 parent 9615e10 commit 47e3488

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

postgres-wire.cabal

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,16 @@ library
2121
, Database.PostgreSQL.Protocol.Connection
2222
, Database.PostgreSQL.Protocol.Encoders
2323
, Database.PostgreSQL.Protocol.Decoders
24+
, Database.PostgreSQL.Protocol.StatementStorage
2425
build-depends: base >= 4.7 && < 5
2526
, bytestring
2627
, socket
2728
, socket-unix
2829
, vector
2930
, binary
3031
, time
32+
, hashable
33+
, hashtables
3134
default-language: Haskell2010
3235
default-extensions: OverloadedStrings
3336

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
module Database.PostgreSQL.Protocol.StatementStorage where
2+
3+
import qualified Data.HashTable.IO as H
4+
import qualified Data.ByteString as B
5+
import Data.ByteString.Char8 (pack)
6+
import Data.Word (Word)
7+
import Data.IORef
8+
9+
import Database.PostgreSQL.Protocol.Types
10+
11+
-- | Prepared statement storage
12+
data StatementStorage = StatementStorage
13+
(H.CuckooHashTable StatementSQL StatementName) (IORef Word)
14+
15+
newStatementStorage :: IO StatementStorage
16+
newStatementStorage = StatementStorage <$> H.new <*> newIORef 0
17+
18+
lookupStatement :: StatementStorage -> StatementSQL -> IO (Maybe StatementName)
19+
lookupStatement (StatementStorage table _) = H.lookup table
20+
21+
storageStatement :: StatementStorage -> StatementSQL -> IO StatementName
22+
storageStatement (StatementStorage table counter) stmt = do
23+
n <- readIORef counter
24+
writeIORef counter $ n + 1
25+
let name = pack $ show n
26+
H.insert table name stmt
27+
pure name
28+

0 commit comments

Comments
 (0)
0