sqlite.bend

bend-kit-sqlite@0.1.0.0 · 67 lines · 0 definitions

1# Prepared SQLite statements through libsqlite3. Source: https://github.com/paymog/bend-kit/tree/main/sqlite
2import Base
3
4# Handles are opaque U32 IDs. Close each database after finalizing all its statements.
5# Every effect returns (SQLite error code, message) on failure.
6# BEND_LIBSQLITE selects a custom libsqlite3 path.
7def db.open(path: String) -> IO(Result<&1, &1, U32 & String, U32>):
8  import "./effs/sqlite.c"
9  import "./effs/sqlite.js"
10
11def db.close(db: U32) -> IO(Result<&1, &1, U32 & String, Unit>):
12  import "./effs/sqlite.c"
13  import "./effs/sqlite.js"
14
15# Exactly one SQL statement is accepted; use bind operations for values.
16def stmt.prepare(db: U32, sql: String) -> IO(Result<&1, &1, U32 & String, U32>):
17  import "./effs/sqlite.c"
18  import "./effs/sqlite.js"
19
20def stmt.finalize(stmt: U32) -> IO(Result<&1, &1, U32 & String, Unit>):
21  import "./effs/sqlite.c"
22  import "./effs/sqlite.js"
23
24# Bind positions start at 1. Integer values are unsigned 32-bit.
25def stmt.bind.int(stmt: U32, index: U32, value: U32) -> IO(Result<&1, &1, U32 & String, Unit>):
26  import "./effs/sqlite.c"
27  import "./effs/sqlite.js"
28
29def stmt.bind.text(stmt: U32, index: U32, text: String) -> IO(Result<&1, &1, U32 & String, Unit>):
30  import "./effs/sqlite.c"
31  import "./effs/sqlite.js"
32
33def stmt.bind.null(stmt: U32, index: U32) -> IO(Result<&1, &1, U32 & String, Unit>):
34  import "./effs/sqlite.c"
35  import "./effs/sqlite.js"
36
37# Blob octets are packed four per U32, least-significant byte first.
38def stmt.bind.blob(stmt: U32, index: U32, len: U32, words: Array<U32>) -> IO(Result<&1, &1, U32 & String, Unit>):
39  import "./effs/sqlite.c"
40  import "./effs/sqlite.js"
41
42# True means a row is available; False means no more rows.
43def stmt.step(stmt: U32) -> IO(Result<&1, &1, U32 & String, Bool>):
44  import "./effs/sqlite.c"
45  import "./effs/sqlite.js"
46
47def stmt.reset(stmt: U32) -> IO(Result<&1, &1, U32 & String, Unit>):
48  import "./effs/sqlite.c"
49  import "./effs/sqlite.js"
50
51# Column indexes start at 0. Read columns only after a True step.
52# SQLite kinds: 1 integer, 2 float, 3 text, 4 blob, 5 null.
53def stmt.column.kind(stmt: U32, index: U32) -> IO(Result<&1, &1, U32 & String, U32>):
54  import "./effs/sqlite.c"
55  import "./effs/sqlite.js"
56
57def stmt.column.int(stmt: U32, index: U32) -> IO(Result<&1, &1, U32 & String, U32>):
58  import "./effs/sqlite.c"
59  import "./effs/sqlite.js"
60
61def stmt.column.text(stmt: U32, index: U32) -> IO(Result<&1, &1, U32 & String, String>):
62  import "./effs/sqlite.c"
63  import "./effs/sqlite.js"
64
65def stmt.column.blob(stmt: U32, index: U32) -> IO(Result<&1, &1, U32 & String, U32 & Array<U32>>):
66  import "./effs/sqlite.c"
67  import "./effs/sqlite.js"