SQLite3 bindings for Koru with phantom type obligations
npm install @korulang/sqlite3SQLite3 bindings for Koru with phantom type obligations.
``bash`
koruc app.kz i
In your app.kz:`koru`
~std.package:requires.npm { "@korulang/sqlite3": "^0.0.1" }
- SQLite3 development libraries installed on your system
- macOS: brew install sqlite3 (usually pre-installed)apt install libsqlite3-dev
- Ubuntu/Debian: dnf install sqlite-devel
- Fedora:
`koru
~import "$koru/sqlite"
// Open a database (in-memory or file)
~koru.sqlite:open(path: ":memory:")
| db d |>
// Execute SQL
koru.sqlite:exec(d.conn, "CREATE TABLE users (id INTEGER, name TEXT)")
| ok c |>
koru.sqlite:exec(c.conn, "INSERT INTO users VALUES (1, 'Alice')")
| ok c2 |>
// Query with prepared statements
koru.sqlite:query(c2.conn, "SELECT * FROM users")
| row r |>
koru.sqlite:col.int(r.stmt, 0)
| value v |>
koru.sqlite:col.text(v.stmt, 1)
| value t |>
// Use t.text here (borrowed from statement)
koru.sqlite:next(r.conn, t.stmt)
| done conn |>
koru.sqlite:close(conn.conn)
| closed |> _
| empty c3 |>
koru.sqlite:close(c3.conn)
| closed |> _
| err e |> _
`
- open { path: []const u8 } - Open database, returns | db { conn[opened!] } or | errclose { conn[!opened] }
- - Close connection, returns | closed
- exec { conn[opened!], sql } - Execute SQL without results, returns | ok { conn } or | errquery { conn[opened!], sql }
- - Prepare and step, returns | row { conn, stmt[prepared!] }, | empty, or | errnext { conn[opened!], stmt[prepared!] }
- - Get next row, returns | row, | done, or | err
- col.int { stmt[prepared!], index } - Get integer columncol.text { stmt[prepared!], index }
- - Get text column (borrowed pointer, valid until next step)col.real { stmt[prepared!], index }
- - Get float column
This library uses Koru's phantom type system for compile-time safety:
- Connection[opened!] - Connection is open, must be closedStatement[prepared!]` - Statement is prepared, will be auto-finalized
-
The compiler ensures you can't use a closed connection or forget to close an open one.
MIT