def open

bend-kit-commands@0.4.0.0 · commands.bend:166

import bend-kit-commands@0.4.0.0/commands.bend as Commands
import 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.