Publicouse a versión de SQLite 3.35, un DBMS lixeiro deseñado como biblioteca de complementos. O código SQLite distribúese no dominio público, é dicir. pódese usar sen restricións e de forma gratuíta para calquera propósito. O apoio financeiro aos desenvolvedores de SQLite é proporcionado por un consorcio especialmente creado, que inclúe empresas como Adobe, Oracle, Mozilla, Bentley e Bloomberg.
Principais cambios:
- Engadíronse funcións matemáticas integradas (log2(), cos(), tg(), exp(), ln(), pow(), etc.) que se poden usar en SQL. Para activar as funcións integradas, é necesario construír coa opción "-DSQLITE_ENABLE_MATH_FUNCTIONS".
- Compatibilidade implementada para a expresión "ALTER TABLE DROP COLUMN" para eliminar columnas dunha táboa e borrar os datos almacenados anteriormente nunha determinada columna.
- Ampliouse a implementación da operación UPSERT (engadir ou modificar), permitindo a través de expresións como "INSERT ... EN CONFLICTO NON FACER NADA/ACTUALIZAR" ignorar un erro ou realizar unha actualización en lugar de inserir se é imposible engadir datos a través de "INSERT" (por exemplo, se xa existe un rexistro, en lugar de INSERTAR pode realizar ACTUALIZACIÓN). A nova versión permite especificar varios bloques ON CONFLICT, que se procesarán por orde. O último bloque "ON CONFLICT" permite omitir o parámetro de definición de conflito para utilizar "DO ACTUALIZACIÓN".
- As operacións DELETE, INSERT e UPDATE admiten a expresión RETURNING, que se pode usar para mostrar o contido dun rexistro eliminado, inserido ou modificado. Por exemplo, a expresión "inserir en... identificador de retorno" devolverá o identificador da liña engadida e "actualizar ... establecer prezo = prezo * 1.10 prezo de retorno" devolverá o valor do prezo modificado.
- Para as expresións de táboa comúns (CTE), que permiten o uso de conxuntos de resultados nomeados temporais especificados mediante a instrución WITH, permítese a elección dos modos "MATERIALIZADO" e "NON MATERIALIZADO". "MATERIALIZADO" implica almacenar en caché a consulta especificada na vista nunha táboa física separada e despois recuperar datos desta táboa, e con "NON MATERIALIZADO" realizaranse consultas repetidas cada vez que se acceda á vista. SQLite tiña orixinalmente o modo predeterminado "NON MATERIALIZADO", pero agora cambiou a "MATERIALIZADO" para os CTE utilizados máis dunha vez.
- Consumo de memoria reducido ao realizar unha operación VACUUM en bases de datos que inclúen valores moi grandes de TEXTO ou BLOB.
- Traballouse para aumentar o rendemento do optimizador e do planificador de consultas:
- Engadíronse optimizacións ao usar as funcións min e max coa expresión "IN".
- Acelerouse a execución da declaración EXISTS.
- Implementouse a expansión das subconsultas das expresións UNION ALL usadas como parte de JOIN.
- O índice utilízase para as expresións IS NOT NULL.
- Asegura que "x IS NULL" e "x IS NOT NULL" se convertan en FALSE ou TRUE para as columnas que teñen o atributo "NOT NULL".
- Omita a comprobación das chaves estranxeiras en UPDATE se a operación non cambia as columnas asociadas á chave externa.
- Permítese mover partes dun bloque WHERE a subconsultas que conteñan funcións de xanela, sempre que esas partes se limiten a traballar con constantes e copias de expresións dos bloques PARTITION BY utilizados nas funcións da xanela.
- Cambios na interface da liña de comandos:
- Engadiuse o comando ".filectrl data_version".
- Os comandos ".once" e ".output" agora admiten pasar a saída a un controlador chamado usando canalizacións sen nome ("|").
- Engadíronse os argumentos "stmt" e "vmstep" ao comando ".stats" para mostrar estatísticas sobre expresións e contadores de máquinas virtuais.
Fonte: opennet.ru