diff --git a/package.yaml b/package.yaml index fb4aa6269..4bcec591e 100644 --- a/package.yaml +++ b/package.yaml @@ -22,6 +22,7 @@ dependencies: - network == 3.1.* - sqlite-simple == 0.4.* - stm + - text == 1.2.* - time == 1.9.* - unliftio == 0.2.* - unliftio-core == 0.1.* diff --git a/smp-agent.db b/smp-agent.db new file mode 100644 index 000000000..d16a954f9 Binary files /dev/null and b/smp-agent.db differ diff --git a/src/Simplex/Messaging/Agent/Env/SQLite.hs b/src/Simplex/Messaging/Agent/Env/SQLite.hs index f2e4be05a..2d57ec7d7 100644 --- a/src/Simplex/Messaging/Agent/Env/SQLite.hs +++ b/src/Simplex/Messaging/Agent/Env/SQLite.hs @@ -9,9 +9,11 @@ import Control.Monad.IO.Unlift import Crypto.Random import Data.Map.Strict (Map) import qualified Data.Map.Strict as M +import qualified Database.SQLite.Simple as DB import Network.Socket (HostName, ServiceName) import Numeric.Natural import Simplex.Messaging.Agent.Command +import Simplex.Messaging.Agent.Store.SQLite.Schema import qualified Simplex.Messaging.Server.Transmission as SMP import UnliftIO.STM @@ -24,7 +26,8 @@ data AgentConfig = AgentConfig data Env = Env { config :: AgentConfig, - idsDrg :: TVar ChaChaDRG + idsDrg :: TVar ChaChaDRG, + db :: DB.Connection } data AgentClient = AgentClient @@ -51,7 +54,14 @@ newServerClient qSize = do sndQ <- newTBQueue qSize return ServerClient {sndQ, commands = M.empty} +openDB :: MonadUnliftIO m => AgentConfig -> m DB.Connection +openDB AgentConfig {dbFile} = liftIO $ do + db <- DB.open dbFile + createSchema db + return db + newEnv :: (MonadUnliftIO m, MonadRandom m) => AgentConfig -> m Env newEnv config = do idsDrg <- drgNew >>= newTVarIO - return Env {config, idsDrg} + db <- openDB config + return Env {config, idsDrg, db} diff --git a/src/Simplex/Messaging/Agent/Store/SQLite/Schema.hs b/src/Simplex/Messaging/Agent/Store/SQLite/Schema.hs index 7d41da1e9..602c31977 100644 --- a/src/Simplex/Messaging/Agent/Store/SQLite/Schema.hs +++ b/src/Simplex/Messaging/Agent/Store/SQLite/Schema.hs @@ -3,13 +3,18 @@ module Simplex.Messaging.Agent.Store.SQLite.Schema where import Control.Monad.IO.Unlift +import qualified Data.Text as T import Database.SQLite.Simple createSchema :: MonadUnliftIO m => Connection -> m () createSchema conn = do sql "recipient_queues" - sql "sender_queues" - sql "connections" - sql "messages" + -- sql "sender_queues" + -- sql "connections" + -- sql "messages" + return () where - sql name = return () + sql name = liftIO $ do + q <- readFile $ "./src/Simplex/Messaging/Agent/Store/SQLite/sql/" <> name <> ".sql" + putStrLn q + execute_ conn . Query . T.pack $ q diff --git a/src/Simplex/Messaging/Agent/Store/SQLite/sql/recipient_queues.sql b/src/Simplex/Messaging/Agent/Store/SQLite/sql/recipient_queues.sql index e69de29bb..09d499123 100644 --- a/src/Simplex/Messaging/Agent/Store/SQLite/sql/recipient_queues.sql +++ b/src/Simplex/Messaging/Agent/Store/SQLite/sql/recipient_queues.sql @@ -0,0 +1,4 @@ +CREATE TABLE IF NOT EXISTS recipient_queues + ( id INTEGER PRIMARY KEY, + rcvId TEXT + ) \ No newline at end of file