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"