El 9 de abril se lanzó la versión 3.53.0 de la base de datos embebida multiplataforma compacta. SQLite. El código del proyecto está escrito en C y se distribuye como dominio público.
Cambios:
- Se corrigió un error en la falla de corrupción de la base de datos con reinicio WAL.. Ver la noticia anterior. SQLite 3.51.3 con corrección de posibles daños en la base de datos en modo WAL..
- Se añadió una biblioteca para formatear los resultados de las consultas SQL. Query Result Formatter (QRF) para facilitar la lectura en pantalla con fuente de ancho fijo.
- Se añadió el método format a a la interfaz TCL para acceder a QRF desde TCL.
- QRF ahora se utiliza en la utilidad de consola sqlite para formatear los resultados de las consultas, mejorando así su visualización.
- Nuevas funcionalidades del lenguaje SQL:
- Se mejoraron las capacidades del comando ALTER TABLE para permitir la adición y eliminación de las restricciones NOT NULL y CHECK.
- El operador REINDEX EXPRESSIONS realiza la reindexación de los índices de expresiones. Útil para restaurar índices de expresiones obsoletos..
- Ahora los triggers TEMP pueden modificar y/o consultar datos de las tablas del esquema principal.
- Se mejoró el comando VACUUM INTO: en caso de usar como destino un nombre de archivo en formato URI que contenga el parámetro reserve=N (donde N es un número del 0 al 255), el volumen de reserva para la copia de la base de datos creada se establece en N.
- Se añadieron nuevas funciones SQL:
- Actualizaciones en la utilidad de consola.:
- Mejoras significativas en el comando .mode.
- Gracias a se mejoró el formato de los resultados. Por ejemplo, los números ahora se alinean a la derecha por defecto en modo de salida tabular. Por defecto, QRF ahora se utiliza al interactuar con la utilidad de consola para mostrar los resultados de las consultas en bloques formados con caracteres Unicode de bloques, lo que ha mejorado la legibilidad. El formato de salida obsoleto se usa al ejecutar comandos en lote para mantener la compatibilidad..
- Los puntos y comas simples (no entre comillas) al final
- de comandos con punto se ignoran sin advertencia. Esto puede ser una incompatibilidad! Se corrigieron los comandos .testcase y .check. Ahora funcionan correctamente y se utilizan en los scripts incluidos en el conjunto de pruebas estándar de SQLite que están en el código fuente.
- Se han corregido los comandos .testcase y .check. Ahora funcionan correctamente y se utilizan en los scripts que forman parte del conjunto estándar de pruebas de SQLite, incluidos en el código fuente.
- Los argumentos de línea de comandos que coinciden con los patrones *.sql o *.txt y que representan nombres de archivos no vacíos se leen e interpretan como scripts que contienen operadores SQL y/o [comandos con punto]((https://sqlite.org/cli.html#dotcmd).
- Ahora, como argumento del comando .timer, se puede indicar once para activar el temporizador solo al ejecutar la siguiente consulta SQL.
- El nuevo parámetro —timeout S del comando .progress interrumpe la ejecución de las consultas SQL después de que S segundos hayan pasado.
- El comando .indexes se ha modificado para que el argumento PATTERN coincida ahora con el nombre del índice, y no con el nombre de la tabla indexada (lo que hace que el argumento PATTERN sea realmente útil). Además, se han agregado varias nuevas opciones al comando .indexes.
- Mejoras en la API de C:
- sqlite3_str_truncate()
- sqlite3_str_free()
- sqlite3_carray_bind_v2()
- En la función sqlite3_prepare_v3() opción añadida SQLITE_PREPARE_FROM_DDL, que permite a las implementaciones de tablas virtuales preparar de manera segura los operadores SQL obtenidos del esquema de la base de datos.
- Constante añadida SQLITE_UTF8_ZT, que se puede usar como parámetro de codificación en las funciones sqlite3_result_text64() o sqlite3_bind_text64() para indicar que el valor está codificado en UTF-8 y finaliza con un cero.
- En la función sqlite3_limit() opción añadida SQLITE_LIMIT_PARSER_DEPTH.
- En la función sqlite3_db_config() opción añadida SQLITE_DBCONFIG_FP_DIGITS. Véase también el punto 9b a continuación.
- Mejoras en el optimizador de consultas:
- Para EXCEPT, INTERSECT y UNION, se utiliza siempre el algoritmo de ordenamiento y fusión, ya que casi siempre funciona más rápido que el uso de tablas hash.
- Mejoras en el mecanismo de selección del orden de unión al realizar grandes uniones multidireccionales en un esquema en estrella.
- Se ha mejorado la optimización de la conversión EXISTS a JOIN de manera que las condiciones JOIN insertadas no necesiten estar necesariamente en bucles internos, siempre que todas las dependencias para los bucles de conversión EXISTS a JOIN estén en los bucles externos.
- Se ha mejorado la optimización omit-noop-join para que pueda omitir una cadena de uniones que no afectan el resultado.
- Optimización de consultas que utilizan GROUP BY e1 ORDER BY e2, donde e1 y e2 son idénticos, excepto por el orden de clasificación ASC/DESC, utilizando un solo índice.
- Optimización del operador DISTINCT en tablas virtuales en casos donde el conjunto de resultados de la consulta no cumple completamente con la condición ORDER BY.
- En extensión de sesión se han añadido nuevas interfaces que permiten a la aplicación agregar cambios uno por uno en el objeto sqlite3_changegroup:
- Mejoras en la conversión de números de punto flotante ↔ texto.
- El código ha sido completamente reescrito para mejorar el rendimiento.
- Ahora, por defecto, el redondeo se realiza a 17 dígitos significativos en lugar de 15, como se hacía en todas las versiones anteriores. Este valor se puede cambiar si es necesario utilizando la función sqlite3_db_config con la opción SQLITE_DBCONFIG_FP_DIGITS (ver el punto 6g arriba).
- Se ha añadido la posibilidad de autorreparación del índice para resolver el problema índices de expresiones obsoletos..
- En la utilidad de consola sqlite3_rsync se ha añadido la opción -p|--port.
- Soporte descontinuado para Windows RT.
- JavaScript/WASM
- Se ha añadido VFS opfs-wl, funcionalmente idéntica a opfs, pero utilizando Web Locks para bloqueos, lo que permite una distribución más justa de los bloqueos que en el protocolo opfs. opfs-wl requiere la función Atomics.waitAsync(), por lo que se necesitan versiones de navegador más recientes que para opfs.
Fuente: linux.org.ru
