BookinglyTech News
Software

Extralite 3.1.0 cachea automáticamente las consultas parametrizadas

La biblioteca de Ruby para SQLite incorpora caché automática de consultas parametrizadas y sube el motor embebido a SQLite 3.53.4; el autor estudia retirar la clase de consultas preparadas.

2 min de lecturaLobsters0 vistas

Extralite 3.1.0 ya está disponible. La biblioteca de Ruby que envuelve SQLite añade caché automática de consultas parametrizadas, la novedad principal de esta entrega, y actualiza el motor embebido a SQLite 3.53.4. No hay cambios de licencia ni rupturas de API anunciadas: quien ya la use puede subir de versión sin tocar código.

Hasta ahora, cada vez que se lanzaba la misma SQL con parámetros distintos a través de Database#query_xxx o Database#execute, Extralite creaba un sqlite3_stmt nuevo. Eso obligaba a SQLite a analizar y compilar la misma sentencia una y otra vez. A partir de 3.1.0 la biblioteca guarda ese objeto y lo reutiliza en las llamadas siguientes, con lo que bajan las asignaciones y el coste de parseo. El autor lo describe como una forma de exprimir más rendimiento en aplicaciones apoyadas en SQLite.

El efecto práctico es que desaparece buena parte del motivo para preparar consultas a mano con Database#prepare. Se puede emitir la misma SQL parametrizada y dejar que Extralite se encargue de la caché por debajo, algo que ya hacían sus ayudantes query_splat o query_single_row sin que el desarrollador tuviera que gestionar el ciclo de vida de la sentencia.

El resto del envoltorio

Extralite configura WAL y la comprobación de claves foráneas por defecto, con opción de desactivarlas para bases de datos heredadas. A eso suma ejecución por lotes de consultas parametrizadas, savepoints, copias de seguridad y changesets. También incluye transformadas estructuradas, que construyen grafos de objetos con mapas de identidad a partir del resultado de una consulta: se recuperan entidades junto con sus asociaciones en un solo viaje, sin ORM de por medio.

El objetivo declarado del proyecto es cubrir justo ese hueco, aplicaciones sobre SQLite sin ORM y con SQL crudo como interfaz principal. Todo el código está en el repositorio.

Una decisión abierta

El autor plantea eliminar Extralite::Query, la clase que encapsula una consulta preparada, porque considera que la caché automática cubre ya casi todo su valor. No hay fecha ni decisión cerrada: pide a quien la use que diga si esa abstracción le hace falta y deja la puerta abierta a cambiar de idea. Para quien tenga código apoyado en esa clase, es el punto que conviene revisar antes de actualizar, porque es lo único de esta versión que apunta a un futuro cambio incompatible.