SQLite database bindings for MoonBit - C FFI wrapper for SQLite3.
- Database management (open, close)
- SQL execution
- Type-safe prepared statements with
SqlValueenum - Array-based parameter binding with
bind_all() - Iterator-based query results with
iter() - Transaction support (BEGIN, COMMIT, ROLLBACK, SAVEPOINT)
- UTF-8 text encoding
- libsqlite3
- Ubuntu:
apt install libsqlite3-dev - Mac: Installed
- Ubuntu:
let db = match Database::open(":memory:") {
Some(d) => d
None => {
println("Failed to open database")
return
}
}
// Create table
db.exec("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)")
// Insert data with bind_all()
match db.prepare("INSERT INTO users (name, age) VALUES (?, ?)") {
Some(stmt) => {
stmt.bind_all([Text(cstring("Alice")), Int(30)]) |> ignore
stmt.execute() |> ignore
stmt.finalize()
}
None => println("Failed to prepare statement")
}
// Query with iterator
match db.query("SELECT id, name, age FROM users") {
Some(stmt) => {
for row in stmt.iter() {
let id = row.column_int(0)
let age = row.column_int(2)
println("id=\{id}, age=\{age}")
}
stmt.finalize()
}
None => println("Failed to prepare statement")
}
db.close()- SQLite3 library installed on your system
- Linked with
-lsqlite3flag
Database operations:
Database::open(path: String) -> Database?- Open databaseDatabase::close(self)- Close databaseDatabase::exec(self, sql: String) -> Bool- Execute SQLDatabase::prepare(self, sql: String) -> Statement?- Prepare statementDatabase::query(self, sql: String) -> Statement?- Prepare SELECT statement
Transaction API:
Database::begin(self) -> Bool- Begin transactionDatabase::commit(self) -> Bool- Commit transactionDatabase::rollback(self) -> Bool- Rollback transactionDatabase::savepoint(self, name: String) -> Bool- Create savepointDatabase::release(self, name: String) -> Bool- Release savepoint
Statement operations:
Statement::bind(idx: Int, value: SqlValue) -> Bool- Bind single parameterStatement::bind_all(values: Array[SqlValue]) -> Bool- Bind all parameters at onceStatement::execute() -> Bool- Execute INSERT/UPDATE/DELETEStatement::step() -> Bool- Step to next row (for SELECT)Statement::column(col: Int) -> SqlValue- Get column value as SqlValueStatement::column_int(col: Int) -> Int- Get column as IntStatement::column_text(col: Int) -> Bytes- Get column as BytesStatement::iter() -> Iter[Statement]- Create iterator for query resultsStatement::reset()- Reset statementStatement::finalize()- Finalize statement
SqlValue enum:
pub enum SqlValue {
Null
Int(Int)
Int64(Int64)
Double(Double)
Text(Bytes)
Blob(Bytes)
}Available for advanced usage. See source code for complete list.
MIT License