SQLite 3.46 llega con mejoras en PRAGMA optimize, funciones SQL y mas
Hace pocos días se dio a conocer el lanzamiento de la nueva versión de SQLite 3.46, la cual llega con una serie de mejoras significativas que mejoran la funcionalidad de esta popular base de datos y entre los cambios más notables se destaca las mejoras en PRAGMA optimize, la adición de la función SQL json_pretty(), la inclusión de caracteres de control ASCII , entre otras cosas más.
Para quienes desconocen de SQLite, deben saber que este es un motor de base de datos relacional liviano accesible a través del lenguaje SQL. A diferencia de los servidores de bases de datos tradicionales, como MySQL o PostgreSQL, su particularidad es no reproducir el esquema cliente-servidor habitual, sino integrarse directamente en los programas.
Gracias a su extrema ligereza, SQLite es uno de los motores de bases de datos más utilizados en el mundo. Se utiliza en muchos programas de consumo y también es muy popular en los sistemas integrados, incluidos los teléfonos inteligentes más modernos.
Principales novedades de SQLite 3.46
Esta nueva versión que se presenta de SQLite 3.46 se han mejorado las capacidades de la operación PRAGMA optimize, de múltiples maneras para hacerlo más sencillo de utilizar, optimizando la base de datos y todos los esquemas de datos para un mejor rendimiento de las consultas. Ahora, PRAGMA optimize implementa automáticamente un límite de análisis temporal para evitar ejecuciones excesivas en bases de datos grandes. Se ha añadido una nueva opción de máscara de bits «PRAGMA optimize (0x10000)» para comprobar actualizaciones en todas las tablas, y se realiza automáticamente un reanálisis de las tablas que no tienen entradas sqlite_stat1.
Otra de las novedades que presenta SQLite 3.46, son las mejoras en funciones, ya que se ha ampliado el soporte de la función SQL strftime() para incluir %G, %g, %U y %V, además se han introducido los modificadores ‘ceiling’ y ‘floor’ en las funciones SQL para controlar el algoritmo utilizado en la resolución de fechas ambiguas al desplazar una fecha por un número entero de meses y/o años. Además, los modificadores ‘utc’ y ‘localtime’ ahora son no operativos si SQLite sabe que la hora ya está en UTC o en la hora local, respectivamente.
Además de ello, se ha implementado la optimización «VALUES-as-coroutine» para permitir que las declaraciones INSERT con miles de filas en VALUES se analicen y ejecuten en aproximadamente la mitad del tiempo y utilicen aproximadamente la mitad de la memoria.
Por otra parte, se permite el uso de un índice para consultas como «SELECT count(DISTINCT col) FROM …» incluso si los registros de índice no son más pequeños que los registros de la tabla. Se ha mejorado el reconocimiento de los casos en los que el valor de una función SQL es constante porque todos sus argumentos son constantes. También se ha mejorado la optimización de empuje de cláusulas WHERE para que pueda empujar cláusulas WHERE que contienen subconsultas no correlacionadas.
De los demás cambios que se destacan:
- Adición de soporte para caracteres de subrayado («_») entre dígitos en literales numéricos.
- Incorporación de la función SQL json_pretty() para generar una salida JSON más legible y formateada con sangría de bloque.
- Asignación de memoria adicional desde el montón para la pila del analizador SQL si esta se desborda, en lugar de reportar un error «parser stack overflow».
- Se permite la inclusión de caracteres de control ASCII en literales de cadena JSON5.
- Se han corregido los operadores -> y ->> para que, cuando el operando del lado derecho sea una cadena que parezca un entero, todavía se trate como una cadena, tal como lo hace PostgreSQL.
- Permitir el uso de literales hexadecimales largos como valor por defecto para una columna de tabla.
- Se ha introducido el uso del separador «_» en números para una representación visual más clara de literales numéricos (por ejemplo, 1_234_567).
- Se ha mejorado la gestión de desbordamiento de la pila del analizador para asignar memoria adicional del montón en caso de memoria insuficiente en la pila.
- Ahora, el valor DEFAULT permite especificar literales hexadecimales grandes en las columnas de la tabla.
Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.