Se ha publicado la versión SQLite 3.42, una base de datos ligera presentada como una biblioteca de enlace. El código de SQLite se distribuye como dominio público, es decir, puede ser utilizado sin restricciones y de forma gratuita para cualquier propósito. El apoyo financiero a los desarrolladores de SQLite es proporcionado por un consorcio creado específicamente, que incluye empresas como Adobe, Oracle, Mozilla, Bentley y Bloomberg.
Principales cambios:
- Para los índices de texto completo FTS5 se ha implementado el comando secure-delete, que realiza una limpieza completa de todos los datos residuales tras la eliminación.
- Las funciones para procesamiento de datos en formato JSON ahora incluyen soporte para extensiones JSON5.
- Se ha mejorado el planificador de consultas. Por defecto, se ha habilitado la optimización ‘count-of-view’. Se ha excluido el procesamiento de columnas no utilizadas en subconsultas. Se ha mejorado la implementación de la optimización push-down.
- Se ha agregado la opción ‘—unsafe-testing’ en la interfaz de línea de comandos que permite utilizar ciertos comandos peligrosos, como ‘.testctrl’, destinados a ser usados durante pruebas. En modo seguro (‘—safe’), se permite el uso de los comandos ‘.log on’ y ‘.log off’. Se ha añadido el soporte para el separador ‘—‘, para los argumentos después de los cuales se desactiva el procesamiento de opciones. Se han introducido los nuevos parámetros ‘:inf’ y ‘:nan’, relacionados con los valores infinito y NaN.
- En los nombres de las funciones SQL definidas del lado de la aplicación se permite la intersección con las palabras clave CROSS, FULL, INNER, LEFT, NATURAL, OUTER y RIGHT.
- Se han ampliado las capacidades de PRAGMA integrity_check. Se ha añadido la verificación para indicar un valor NaN en columnas con la condición NOT NULL. Se ha mejorado la claridad de los mensajes de error.
- En la extensión session se ha permitido la interceptación de cambios en tablas sin ROWID.
- En las funciones para trabajar con tiempo y fechas se ha añadido el modificador ‘subsec’ para utilizar fracciones de segundo.
- La profundidad de recursión para arreglos y objetos JSON se ha reducido de 2000 a 1000 por defecto.
Además, se ha lanzado la versión 0.8.0 de la base de datos DuckDB, que desarrolla una variante de SQLite, ampliada con capacidades y optimizaciones para ejecutar consultas analíticas que abarcan una parte significativa de los datos almacenados, como la agregación de todo el contenido de las tablas o la combinación de varias tablas grandes. Se proporciona un dialecto SQL ampliado, que incluye funcionalidades adicionales para el procesamiento de consultas muy complejas y prolongadas, además de soportar tipos complejos (arreglos, estructuras, uniones), la ejecución simultánea de varias consultas y la ejecución de consultas directamente desde archivos en formato CSV, JSON y Parquet. Existe la posibilidad de importar desde bases de datos PostgreSQL.
Además del código de la interfaz de línea de comandos de SQLite, el proyecto utiliza un parser separado de PostgreSQL, el componente Date Math de MonetDB, su propia implementación de funciones de ventana (basado en el algoritmo de Segment Tree Aggregation), un manejador de expresiones regulares basado en la biblioteca RE2, su propio optimizador de consultas, un mecanismo MVCC de control de concurrencia de múltiples versiones (Multi-Version Concurrency Control), y un motor de ejecución de consultas vectorizado basado en el algoritmo de Ejecución de Consultas Hyper-Pipelining, que permite procesar grandes conjuntos de valores en una sola operación. El código del proyecto se distribuye bajo la licencia MIT.
En la nueva versión de DuckDB:
- Se han añadido nuevas expresiones "PIVOT" y "UNPIVOT" para transformar filas en columnas y viceversa.
- Se ha mejorado el paralelismo al importar y exportar datos. Por defecto, se implementa la lectura de archivos en formato CSV en múltiples hilos y la escritura multihilo al utilizar los formatos Parquet, CSV y JSON.
- Se ha añadido el operador "**" para la exploración recursiva de directorios al definir rutas de archivos (por ejemplo, FROM "‘data/glob/crawl/stackoverflow/**/*.csv’;“).
- Se ha añadido soporte para operaciones de unión (JOIN) para datos en forma de series temporales (cortes de valores de parámetros en intervalos de tiempo definidos), donde el criterio de unión de registros utiliza coincidencias aproximadas en lugar de exactas en el campo temporal (por ejemplo, se pueden unir registros con tiempos que difieren no más de 1 minuto).
- Se ha implementado la carga diferida de metadatos de la base de datos, lo que ha permitido acelerar el inicio de la base de datos en decenas de veces.
- Se ha añadido soporte para la conexión de funciones personalizadas en Python.
- Se ha añadido soporte para la API ADBC (Arrow Database Connectivity) para la transferencia de datos utilizando Apache Arrow.
- Se ha implementado el enlace para la integración con código en Swift.
- Se ha cambiado el comportamiento del operador de división ("/") para que ahora, por defecto, realice cálculos de punto flotante en lugar de operaciones de enteros. Para la división entera se ha propuesto un nuevo operador "//". El comportamiento anterior se puede restaurar configurando "SET integer_division=true;".
- El método de manejo de registros nulos al ordenar ha cambiado de "NULLS FIRST" a "NULLS LAST", es decir, los valores NULL ahora se mostrarán al final en lugar de al principio de la lista. El comportamiento anterior se puede restaurar configurando "SET default_null_order='nulls_first';".
Adicionalmente, se puede destacar el proyecto CG/SQL desarrollado por Facebook, que proporciona un generador de código para usar procedimientos almacenados con SQLite. CG/SQL permite redactar procedimientos almacenados en un dialecto especial de T-SQL (Transact-SQL), que permite la llamada a funciones de la biblioteca estándar de C y el acceso a datos en SQLite. Los procedimientos almacenados generados se compilan en código en C, que utiliza la API de C de SQLite para llevar a cabo las acciones deseadas y procesar consultas complejas. Los procedimientos almacenados compilados pueden conectarse a programas en lenguajes como C, Java y Objective-C. El código del proyecto está escrito en C y se distribuye bajo la licencia MIT.
Fuente: opennet.ru
