sql quasi-qouter (#26)

This commit is contained in:
Evgeny Poberezkin
2021-01-22 07:51:45 +00:00
committed by Efim Poberezkin
parent 70fe7616f2
commit c30a4cd1ff
3 changed files with 20 additions and 34 deletions

View File

@@ -1,14 +0,0 @@
{-# LANGUAGE TemplateHaskell #-}
module Multiline (s) where
import GHC.Exts (IsString (..))
import Language.Haskell.TH.Quote
s :: QuasiQuoter
s =
QuasiQuoter
((\a -> [|fromString a|]) . filter (/= '\r') . dropWhile (== '\n'))
(error "pattern")
(error "type")
(error "dec")

View File

@@ -28,8 +28,8 @@ import qualified Database.SQLite.Simple as DB
import Database.SQLite.Simple.FromField
import Database.SQLite.Simple.Internal (Field (..))
import Database.SQLite.Simple.Ok
import Database.SQLite.Simple.QQ (sql)
import Database.SQLite.Simple.ToField
import Multiline (s)
import Network.Socket
import Simplex.Messaging.Agent.Store
import Simplex.Messaging.Agent.Store.SQLite.Schema
@@ -43,7 +43,7 @@ import UnliftIO.STM
addRcvQueueQuery :: Query
addRcvQueueQuery =
[s|
[sql|
INSERT INTO receive_queues
( server_id, rcv_id, rcv_private_key, snd_id, snd_key, decrypt_key, verify_key, status, ack_mode)
VALUES
@@ -123,7 +123,7 @@ upsertServer SQLiteStore {conn} srv@SMPServer {host, port} = do
r <- liftIO $ do
DB.execute
conn
[s|
[sql|
INSERT INTO servers (host, port, key_hash) VALUES (?, ?, ?)
ON CONFLICT (host, port) DO UPDATE SET
host=excluded.host,
@@ -173,7 +173,7 @@ getRcvQueue st@SQLiteStore {conn} queueRowId = do
liftIO $
DB.queryNamed
conn
[s|
[sql|
SELECT server_id, rcv_id, rcv_private_key, snd_id, snd_key, decrypt_key, verify_key, status, ack_mode
FROM receive_queues
WHERE receive_queue_id = :rowId;
@@ -190,7 +190,7 @@ getRcvQueueByRecipientId st@SQLiteStore {conn} rcvId host port = do
liftIO $
DB.queryNamed
conn
[s|
[sql|
SELECT server_id, rcv_id, rcv_private_key, snd_id, snd_key, decrypt_key, verify_key, status, ack_mode
FROM receive_queues
WHERE rcv_id = :rcvId AND server_id IN (
@@ -212,7 +212,7 @@ getSndQueue st@SQLiteStore {conn} queueRowId = do
liftIO $
DB.queryNamed
conn
[s|
[sql|
SELECT server_id, snd_id, snd_private_key, encrypt_key, sign_key, status, ack_mode
FROM send_queues
WHERE send_queue_id = :rowId;
@@ -228,7 +228,7 @@ insertRcvQueue store serverId rcvQueue =
insertWithLock
store
rcvQueuesLock
[s|
[sql|
INSERT INTO receive_queues
( server_id, rcv_id, rcv_private_key, snd_id, snd_key, decrypt_key, verify_key, status, ack_mode)
VALUES (?,?,?,?,?,?,?,?,?);
@@ -249,7 +249,7 @@ updateRcvConnectionWithSndQueue store connAlias sndQueueId =
executeWithLock
store
connectionsLock
[s|
[sql|
UPDATE connections
SET send_queue_id = ?
WHERE conn_alias = ?;
@@ -268,7 +268,7 @@ insertSndQueue store serverId sndQueue =
insertWithLock
store
sndQueuesLock
[s|
[sql|
INSERT INTO send_queues
( server_id, snd_id, snd_private_key, encrypt_key, sign_key, status, ack_mode)
VALUES (?,?,?,?,?,?,?);
@@ -289,7 +289,7 @@ updateSndConnectionWithRcvQueue store connAlias rcvQueueId =
executeWithLock
store
connectionsLock
[s|
[sql|
UPDATE connections
SET receive_queue_id = ?
WHERE conn_alias = ?;
@@ -317,7 +317,7 @@ getConnAliasByRcvQueue SQLiteStore {conn} rcvId = do
liftIO $
DB.queryNamed
conn
[s|
[sql|
SELECT c.conn_alias
FROM connections c
JOIN receive_queues rq
@@ -358,7 +358,7 @@ updateReceiveQueueStatus store rcvQueueId host port status =
executeWithLock
store
rcvQueuesLock
[s|
[sql|
UPDATE receive_queues
SET status = ?
WHERE rcv_id = ?
@@ -375,7 +375,7 @@ updateSendQueueStatus store sndQueueId host port status =
executeWithLock
store
sndQueuesLock
[s|
[sql|
UPDATE send_queues
SET status = ?
WHERE snd_id = ?
@@ -397,7 +397,7 @@ insertMsg store connAlias qDirection agentMsgId msg = do
insertWithLock
store
messagesLock
[s|
[sql|
INSERT INTO messages (conn_alias, agent_msg_id, timestamp, message, direction, msg_status)
VALUES (?,?,?,?,?,"MDTransmitted");
|]

View File

@@ -5,11 +5,11 @@
module Simplex.Messaging.Agent.Store.SQLite.Schema where
import Database.SQLite.Simple
import Multiline (s)
import Database.SQLite.Simple.QQ (sql)
servers :: Query
servers =
[s|
[sql|
CREATE TABLE IF NOT EXISTS servers
( server_id INTEGER PRIMARY KEY,
host TEXT NOT NULL,
@@ -21,7 +21,7 @@ servers =
receiveQueues :: Query
receiveQueues =
[s|
[sql|
CREATE TABLE IF NOT EXISTS receive_queues
( receive_queue_id INTEGER PRIMARY KEY,
server_id INTEGER REFERENCES servers(server_id) NOT NULL,
@@ -40,7 +40,7 @@ receiveQueues =
sendQueues :: Query
sendQueues =
[s|
[sql|
CREATE TABLE IF NOT EXISTS send_queues
( send_queue_id INTEGER PRIMARY KEY,
server_id INTEGER REFERENCES servers(server_id) NOT NULL,
@@ -56,7 +56,7 @@ sendQueues =
connections :: Query
connections =
[s|
[sql|
CREATE TABLE IF NOT EXISTS connections
( connection_id INTEGER PRIMARY KEY,
conn_alias TEXT UNIQUE,
@@ -67,7 +67,7 @@ connections =
messages :: Query
messages =
[s|
[sql|
CREATE TABLE IF NOT EXISTS messages
( message_id INTEGER PRIMARY KEY,
conn_alias TEXT REFERENCES connections(conn_alias),