std/sqlite ofrece bindings de SQLite3 cargados en tiempo de ejecución vía dlopen. sqlite_open(":memory:") crea una base de datos en memoria, sqlite_exec ejecuta sentencias DDL/DML, y sqlite_query devuelve filas como arreglos de strings. No se necesitan dependencias externas — SQLite viene incluido en la mayoría de los sistemas operativos.
// SQLite — in-memory database with SQL queries // SQLite — base de datos en memoria con consultas SQL import "std/sqlite" fn main() -> int { // Open an in-memory database. The handle is an opaque pointer (*int); // sqlite_open returns NULL on failure. let db = sqlite_open(":memory:") // Create a table sqlite_exec(db, "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)") // Insert rows sqlite_exec(db, "INSERT INTO users (name, age) VALUES ('Alice', 30)") sqlite_exec(db, "INSERT INTO users (name, age) VALUES ('Bob', 25)") sqlite_exec(db, "INSERT INTO users (name, age) VALUES ('Charlie', 35)") // Query all rows let rows: Array = sqlite_query(db, "SELECT name, age FROM users ORDER BY age") var i: int = 0 while i < rows.length() { let row: Array = rows[i] let name: String = row[0] let age: String = row[1] print(name + " is " + age + " years old") i = i + 1 } // Query with a condition let seniors: Array = sqlite_query(db, "SELECT name FROM users WHERE age >= 30") print("users 30+: " + int_to_string(seniors.length())) sqlite_close(db) return 0 }
Bob is 25 years old Alice is 30 years old Charlie is 35 years old users 30+: 2
Cómo funciona
sqlite_open devuelve un handle opaco de base de datos (*int, NULL en caso de fallo). La ruta especial ":memory:" crea una base de datos temporal en memoria que se descarta al cerrar el handle. Para almacenamiento persistente, pasar una ruta de archivo como "data.db".
sqlite_query devuelve un arreglo de filas, donde cada fila es un arreglo de valores string (SQLite almacena internamente todos los valores como texto). El orden de las columnas coincide con la cláusula SELECT. sqlite_exec se usa para sentencias que no devuelven datos (CREATE, INSERT, UPDATE, DELETE).