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?

  1. Se mantiene un heap global (SQLITE_HEAP) con conexiones SQLite envueltas en Arc<Mutex<Connection>>
  2. Cada conexión se identifica por un índice numérico (handle)
  3. Las funciones nativas registradas en NativeRegistry operan sobre estas conexiones

API Pública (registrada en NativeRegistry)

Función nativaDescripción
_sqlite_abrir(ruta) -> handleAbre una base de datos SQLite, retorna un handle
_sqlite_cerrar(handle)Cierra una conexión SQLite
_sqlite_ejecutar(handle, sql) -> filas_afectadasEjecuta una sentencia SQL (INSERT, UPDATE, DELETE, CREATE)
_sqlite_consultar(handle, sql) -> json_resultadosEjecuta una consulta SELECT, retorna resultados como JSON
_sqlite_ultimo_id(handle) -> idObtiene el último ID insertado (LAST_INSERT_ROWID)
_sqlite_ejecutar_params(handle, sql, params) -> filas_afectadasEjecuta SQL con parámetros (protege contra SQL injection)
_sqlite_consultar_params(handle, sql, params) -> jsonConsulta parametrizada con protección contra SQL injection
_sqlite_tablas(handle) -> jsonLista las tablas de la base de datos
_sqlite_columnas(handle, tabla) -> jsonLista 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.