def open
import bend-kit-commands@0.4.0.0/commands.bend as Commandsimport Base
import bend-kit-sqlite@0.1.0.1/sqlite.bend as Sqlite
166# Opens or creates the tables at path.
167# wait is how many ms a write waits for another connection's transaction before it fails with SQLITE_BUSY (5).
168def open(path: String, wait: U32) -> Run(Store):
169 do Run<Store>:
170 +db : U32 <- Sqlite.db.open(path)
171 sql(db, "PRAGMA busy_timeout = " ++ U32.show(wait))
172 sql(db, "CREATE TABLE IF NOT EXISTS commands_rows (k BLOB PRIMARY KEY, v BLOB NOT NULL) WITHOUT ROWID")
173 sql(db, "CREATE TABLE IF NOT EXISTS commands_seen (id TEXT PRIMARY KEY, payload BLOB NOT NULL, kind INTEGER NOT NULL, result BLOB NOT NULL, at INTEGER NOT NULL)")
174 sql(db, "CREATE INDEX IF NOT EXISTS commands_seen_at ON commands_seen (at)")
175 sql(db, "CREATE TABLE IF NOT EXISTS commands_outbox (seq INTEGER PRIMARY KEY AUTOINCREMENT, id TEXT NOT NULL, effect BLOB NOT NULL)")
176 begin : U32 <- Sqlite.stmt.prepare(db, "BEGIN IMMEDIATE")
177 commit : U32 <- Sqlite.stmt.prepare(db, "COMMIT")
178 rollback : U32 <- Sqlite.stmt.prepare(db, "ROLLBACK")
179 find : U32 <- Sqlite.stmt.prepare(db, "SELECT payload, kind, result, at FROM commands_seen WHERE id = ?")
180 read : U32 <- Sqlite.stmt.prepare(db, "SELECT v FROM commands_rows WHERE k = ?")
181 save : U32 <- Sqlite.stmt.prepare(db, "INSERT OR REPLACE INTO commands_rows (k, v) VALUES (?, ?)")
182 del : U32 <- Sqlite.stmt.prepare(db, "DELETE FROM commands_rows WHERE k = ?")
183 keep : U32 <- Sqlite.stmt.prepare(db, "INSERT INTO commands_seen (id, payload, kind, result, at) VALUES (?, ?, ?, ?, ?)")
184 emit : U32 <- Sqlite.stmt.prepare(db, "INSERT INTO commands_outbox (id, effect) VALUES (?, ?)")
185 return Store{db, begin, commit, rollback, find, read, save, del, keep, emit}
Uses (12)
Used by (0)
No other definition uses this definition.