Il 9 aprile è stata rilasciata la versione 3.53.0 del sistema di gestione di database integrato e cross-platform SQLite. Il codice del progetto è scritto in C e distribuito come pubblico dominio.
Novità:
- Corretto un errore bug di corruzione del database WAL-reset. Vedi la notizia precedente SQLite 3.51.3 con correzione di potenziale corruzione del database in modalità WAL.
- Aggiunta la libreria per la formattazione dei risultati delle query SQL Query Result Formatter (QRF) per una migliore leggibilità su schermo con caratteri a larghezza fissa.
- Aggiunto il metodo format a interfaccia TCL per accedere a QRF da TCL.
- QRF è ora utilizzato nell'utility della console sqlite per formattare i risultati delle query, migliorando la loro visualizzazione.
- Nuove funzionalità del linguaggio SQL:
- Migliorate le funzionalità del comando ALTER TABLE per consentire l'aggiunta e la rimozione di vincoli NOT NULL e CHECK.
- L'operatore REINDEX EXPRESSIONS esegue la reindicizzazione degli indici delle espressioni. Utile per recuperare indici delle espressioni obsoleti.
- Ora i trigger TEMP possono modificare e/o interrogare dati dalle tabelle dello schema principale.
- Migliorato il comando VACUUM INTO: se si utilizza come indirizzo un nome file nel formato URI, contenente il parametro di query reserve=N (dove N è un numero da 0 a 255), il volume di riserva per la copia del database creata è impostato su N.
- Sono state aggiunte nuove funzionalità SQL:
- Aggiornamenti in utilità da console:
- Miglioramenti significativi del comando .mode.
- Grazie all'estensione QRF, il formato dei risultati è stato migliorato. Ad esempio, i numeri ora si allineano a destra di default nella modalità output tabellare..
- Di default, QRF è ora utilizzato durante l'uso interattivo dell'utilità da console per visualizzare i risultati delle query in blocchi formati con caratteri Unicode per il disegno di blocchi, aumentando la leggibilità. Il formato di output obsoleto è utilizzato durante l'esecuzione batch dei comandi per garantire la compatibilità.
- Punti e virgola singoli (non racchiusi tra virgolette) alla fine dei comandi con punto vengono ignorati senza avviso. Questo potrebbe causare incompatibilità!
- Sono state corrette le istruzioni .testcase e .check. Ora funzionano davvero e vengono utilizzate negli script inclusi nel set standard di test SQLite, contenuto nel codice sorgente.
- Gli argomenti della riga di comando che corrispondono ai modelli *.sql o *.txt e rappresentano nomi di file non vuoti vengono letti e interpretati come script contenenti operatori SQL e/o [comandi con punto](https://sqlite.org/cli.html#dotcmd).
- Ora, come argomento per il comando .timer, è possibile specificare once per attivare il timer solo durante l'esecuzione della prossima query SQL.
- Il nuovo parametro —timeout S del comando .progress porta all'interruzione dell'esecuzione delle query SQL dopo S secondi.
- Il comando .indexes è stato modificato in modo che l'argomento PATTERN ora corrisponda al nome dell'indice, e non al nome della tabella indicizzata (rendendo così l'argomento PATTERN davvero utile). Inoltre, sono state aggiunte alcune nuove opzioni al comando .indexes.
- Miglioramenti nell'API C:
- sqlite3_str_truncate()
- sqlite3_str_free()
- sqlite3_carray_bind_v2()
- Nella funzione sqlite3_prepare_v3() è stata aggiunta l'opzione SQLITE_PREPARE_FROM_DDL, che consente alle implementazioni delle tabelle virtuali di preparare in modo sicuro operatori SQL tratti dallo schema del database.
- Costante aggiunta SQLITE_UTF8_ZT, che può essere utilizzata come parametro di codifica nelle funzioni sqlite3_result_text64() o sqlite3_bind_text64() per indicare che il valore è codificato in UTF-8 e termina con zero.
- Nella funzione sqlite3_limit() è stata aggiunta l'opzione SQLITE_LIMIT_PARSER_DEPTH.
- Nella funzione sqlite3_db_config() è stata aggiunta l'opzione SQLITE_DBCONFIG_FP_DIGITS. Vedi anche il punto 9b qui sotto.
- Miglioramenti al pianificatore delle query:
- Per EXCEPT, INTERSECT e UNION viene sempre utilizzato un algoritmo di ordinamento e fusione, poiché di solito è più veloce rispetto all'uso delle tabelle hash.
- Miglioramenti nel meccanismo di selezione dell'ordine di join durante l'esecuzione di grandi join multifunzionali nella schema a stella.
- Ottimizzazione migliorata della trasformazione di EXISTS in JOIN in modo che le condizioni JOIN aggiunte non debbano necessariamente trovarsi nei cicli interni, a condizione che tutte le dipendenze per i cicli di trasformazione EXISTS in JOIN si trovino nei cicli esterni.
- Ottimizzazione migliorata omit-noop-join in modo da poter saltare una catena di unioni che non influenzano il risultato.
- Ottimizzazione delle query che utilizzano GROUP BY e1 ORDER BY e2, dove e1 ed e2 sono identici, tranne per l'ordine di ordinamento ASC/DESC, utilizzando un solo indice.
- Ottimizzazione dell'operatore DISTINCT nelle tabelle virtuali quando il set di risultati della query non corrisponde completamente alla condizione ORDER BY.
- In estensione della sessione sono state aggiunte nuove interfacce che consentono all'applicazione di aggiungere modifiche singole all'oggetto sqlite3_changegroup:
- Miglioramenti nella conversione tra numeri in virgola mobile ↔ testo.
- Il codice è stato completamente riscritto per migliorare le prestazioni.
- Ora, di default, il round-off viene eseguito fino a 17 cifre significative invece di 15, come nelle versioni precedenti. Questo valore può essere modificato tramite la funzione sqlite3_db_config con opzione SQLITE_DBCONFIG_FP_DIGITS (vedere il punto 6g sopra).
- È stata aggiunta la possibilità di autorecupero dell'indice per affrontare il problema indici delle espressioni obsoleti.
- Nell'utilità da console sqlite3_rsync è stata aggiunta l'opzione -p|--port.
- È stata interrotta la supporto per Windows RT.
- JavaScript/WASM
- È stato aggiunto VFS opfs-wl, funzionalmente identico a opfs, ma che utilizza Web Locks per le serrature, consentendo una distribuzione più equa dei blocchi rispetto al protocollo opfs. opfs-wl richiede la funzione Atomics.waitAsync(), quindi per il suo funzionamento sono necessarie versioni più recenti dei browser rispetto a opfs.
Fonte: linux.org.ru
