SQLite Nativo — Bindings a Base de Datos
Archivo: src/native_sqlite.rs (543 líneas)
¿Por qué existe?
Proporciona acceso a bases de datos SQLite desde programas Forja mediante bindings directos a rusqlite. Almacena las conexiones en un heap global con bloqueo Mutex (la VM Forja es single-threaded, por lo que el Mutex nunca tiene contención real).
¿Cómo funciona?
- Se mantiene un heap global (
SQLITE_HEAP) con conexiones SQLite envueltas enArc<Mutex<Connection>> - Cada conexión se identifica por un índice numérico (handle)
- Las funciones nativas registradas en
NativeRegistryoperan sobre estas conexiones
API Pública (registrada en NativeRegistry)
| Función nativa | Descripción |
|---|---|
_sqlite_abrir(ruta) -> handle | Abre una base de datos SQLite, retorna un handle |
_sqlite_cerrar(handle) | Cierra una conexión SQLite |
_sqlite_ejecutar(handle, sql) -> filas_afectadas | Ejecuta una sentencia SQL (INSERT, UPDATE, DELETE, CREATE) |
_sqlite_consultar(handle, sql) -> json_resultados | Ejecuta una consulta SELECT, retorna resultados como JSON |
_sqlite_ultimo_id(handle) -> id | Obtiene el último ID insertado (LAST_INSERT_ROWID) |
_sqlite_ejecutar_params(handle, sql, params) -> filas_afectadas | Ejecuta SQL con parámetros (protege contra SQL injection) |
_sqlite_consultar_params(handle, sql, params) -> json | Consulta parametrizada con protección contra SQL injection |
_sqlite_tablas(handle) -> json | Lista las tablas de la base de datos |
_sqlite_columnas(handle, tabla) -> json | Lista las columnas de una tabla |
Uso desde Forja
Las funciones se exponen a través del módulo sqlite.fa de la stdlib, que provee una API en español con funciones como sqlite_abrir, sqlite_cerrar, sqlite_ejecutar, sqlite_consultar, sqlite_ultimo_id, y sqlite_tablas.
💡 Seguridad: Las funciones
*_params usan consultas parametrizadas de SQLite para prevenir ataques de SQL injection. Siempre que se incluyan datos del usuario en una consulta, deben usarse estas funciones.