È stato pubblicato il rilascio di SQLite 3.35, un sistema di gestione di database leggero, fornito come libreria collegabile. Il codice SQLite è distribuito come pubblico dominio, cioè può essere utilizzato senza restrizioni e gratuitamente per qualsiasi scopo. Il supporto finanziario per gli sviluppatori di SQLite è fornito da un consorzio appositamente creato, che include aziende come Adobe, Oracle, Mozilla, Bentley e Bloomberg.
Variazioni principali:
- Sono state aggiunte funzioni matematiche incorporate (log2(), cos(), tg(), exp(), ln(), pow(), ecc.), che possono essere utilizzate in SQL. Per abilitare le funzioni incorporate è necessaria una compilazione con l'opzione «-DSQLITE_ENABLE_MATH_FUNCTIONS».
- È stata implementata la supporto per l'istruzione «ALTER TABLE DROP COLUMN» per la rimozione di colonne da una tabella e la pulizia dei dati precedentemente memorizzati in quella colonna.
- È stata ampliata l'implementazione dell'operazione UPSERT (inserisci-o-modifica), che consente tramite espressioni come «INSERT … ON CONFLICT DO NOTHING/UPDATE» di ignorare l'errore o eseguire un aggiornamento invece di un'inserzione in caso di impossibilità ad aggiungere i dati tramite «INSERT» (ad esempio, se la registrazione esiste già, al posto di INSERT è possibile eseguire UPDATE). Nella nuova versione è consentito specificare più blocchi «ON CONFLICT», che saranno elaborati in ordine di apparizione. Nell'ultimo blocco «ON CONFLICT» è consentito non specificare il parametro di definizione del conflitto per utilizzare «DO UPDATE».
- Nelle operazioni DELETE, INSERT e UPDATE è stata implementata la supporto per l'espressione RETURNING, che consente di restituire il contenuto della registrazione eliminata, inserita o modificata. Ad esempio, l'espressione «insert into … returning id» restituirà l'identificatore della riga aggiunta, mentre «update … set price = price * 1.10 returning price» restituirà il valore modificato del prezzo.
- Per le espressioni di tabella comuni (Common Table Expression, CTE), che consentono di utilizzare set di risultati temporanei denominati stabiliti tramite l'istruzione WITH, è consentita la scelta dei modi «MATERIALIZED» e «NOT MATERIALIZED». «MATERIALIZED» implica la memorizzazione della query definita nella vista in una tabella fisica separata con successiva selezione dei dati da questa tabella, mentre con «NOT MATERIALIZED» verranno eseguite richieste ripetute ad ogni accesso alla vista. Inizialmente, SQLite utilizzava per impostazione predefinita il modo «NOT MATERIALIZED», ma ora per le CTE, utilizzate più di una volta, è cambiato in «MATERIALIZED».
- Ridotto il consumo di memoria durante l'esecuzione dell'operazione VACUUM per i database che includono valori molto grandi con tipi TEXT o BLOB.
- È stato effettuato un lavoro per aumentare le prestazioni dell'ottimizzatore e del pianificatore di query:
- Aggiunte ottimizzazioni nell'uso delle funzioni min e max con l'espressione 'IN'.
- Accelerata l'esecuzione dell'operatore EXISTS.
- Implementato il dispiegamento di sottoquery da espressioni UNION ALL utilizzate nel contesto di JOIN.
- Utilizzato un indice per espressioni IS NOT NULL.
- Assicurata la conversione di 'x IS NULL' e 'x IS NOT NULL' in FALSE o TRUE per le colonne con l'attributo 'NOT NULL'.
- Saltata la verifica delle chiavi esterne in UPDATE, se l'operazione non modifica le colonne collegate alla chiave esterna.
- Consentito il trasferimento di parti del blocco WHERE in sottoquery che contengono funzioni di finestra, se queste parti sono limitate a lavorare con costanti e copie di espressioni dai blocchi 'PARTITION BY' utilizzati nelle funzioni di finestra.
- Modifiche all'interfaccia della riga di comando:
- Aggiunta la comando '.filectrl data_version'.
- Nei comandi '.once' e '.output' aggiunta la supporto per inviare l'output a un gestore invocato tramite canali non nominati ('|').
- Nel comando '.stats' aggiunti gli argomenti 'stmt' e 'vmstep' per l'output delle statistiche delle espressioni e dei contatori della macchina virtuale.
Fonte: opennet.ru
