Il 9 aprile è stata rilasciata la versione 3.53.0 del database embedded compatto cross-platform. SQLite. Il codice del progetto è scritto in linguaggio C ed è distribuito come pubblico dominio.
Modifiche:
- Corretto un errore bug di corruzione del database WAL-reset. Vedi notizia precedente SQLite 3.51.3 con correzione di un possibile danneggiamento del database in modalità WAL.
- Aggiunta la libreria per la formattazione dei risultati delle query SQL Query Result Formatter (QRF) per garantire una lettura comoda su schermo con font a larghezza fissa.
- È stato aggiunto il metodo format al interfaccia TCL per accedere a QRF da TCL.
- QRF è ora utilizzato nell'utilità da console sqlite per formattare i risultati delle query, migliorando la loro visualizzazione.
- Nuove funzionalità del linguaggio SQL:
- Migliorate le capacità del comando ALTER TABLE per consentire l'aggiunta e la rimozione di vincoli NOT NULL e CHECK.
- Operatore REINDEX EXPRESSIONS esegue la reindicizzazione degli indici delle espressioni. Utile per ripristinare indici delle espressioni obsoleti.
- Ora trigger TEMP possono modificare e/o interrogare dati dalle tabelle del schema principale.
- Migliorato il comando VACUUM INTO: nel caso venga utilizzato come indirizzo di destinazione un nome file in formato URI che contiene un parametro di richiesta reserve=N (dove N è un numero da 0 a 255), la quantità di riserva per la copia del database creata è impostata uguale a N.
- Aggiunte nuove funzioni SQL:
- Aggiornamenti in utilità da console:
- Importanti miglioramenti al comando .mode.
- Grazie a estensione QRF migliorata la formattazione dei risultati. Ad esempio, i numeri ora vengono allineati a destra per impostazione predefinita in modalità output tabellare.
- Per impostazione predefinita, QRF è ora utilizzato durante l'uso interattivo dell'utilità da console per mostrare i risultati delle query in blocchi formati con caratteri Unicode per l'arte dei blocchi, migliorando la leggibilità. Il formato di output obsoleto è utilizzato durante l'esecuzione di comandi batch per garantire compatibilità.
- Punti e virgola singoli (non racchiusi tra virgolette) alla fine comandi con punto vengono ignorati senza preavviso. Questa è una possibile incompatibilità!
- Corrette le comandi .testcase e .check. Ora funzionano effettivamente e vengono utilizzate negli script inclusi nel set di test standard di SQLite, contenuti 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 comandi SQL e/o [comandi con punto]((https://sqlite.org/cli.html#dotcmd).
- Ora, come argomento del comando .timer, è possibile specificare once per attivare il timer solo durante l'esecuzione della seguente 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 corrisponda ora al nome dell'indice e non al nome della tabella indicizzata (rendendo l'argomento PATTERN veramente utile). Inoltre, sono state aggiunte nuove opzioni al comando .indexes.
- Miglioramenti all'API C:
- sqlite3_str_truncate()
- sqlite3_str_free()
- sqlite3_carray_bind_v2()
- Nella funzione sqlite3_prepare_v3() aggiunta l'opzione SQLITE_PREPARE_FROM_DDL, che consente alle implementazioni di tabelle virtuali di preparare in modo sicuro comandi SQL provenienti dallo schema del database.
- È stata aggiunta la costante 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() aggiunta l'opzione SQLITE_LIMIT_PARSER_DEPTH.
- Nella funzione sqlite3_db_config() aggiunta l'opzione SQLITE_DBCONFIG_FP_DIGITS. Vedi anche il punto 9b qui sotto.
- Miglioramenti nell'ottimizzatore delle query:
- Per EXCEPT, INTERSECT e UNION viene sempre utilizzato l'algoritmo di ordinamento e fusione, poiché di solito funziona più velocemente rispetto all'utilizzo di tabelle hash.
- Miglioramenti nel meccanismo di selezione dell'ordine di join durante l'esecuzione di grandi join multipli in uno schema a stella.
- Ottimizzazione migliorata della trasformazione di EXISTS in JOIN affinché le condizioni di JOIN inserite non debbano necessariamente trovarsi nei cicli interni, a condizione che tutte le dipendenze per i cicli di trasformazione di EXISTS in JOIN siano situate nei cicli esterni.
- Ottimizzazione migliorata del omit-noop-join in modo che possa omettere una catena di join che non influiscono sul risultato.
- Ottimizzazione delle query che utilizzano GROUP BY e1 ORDER BY e2, dove e1 ed e2 sono identici, ad eccezione dell'ordine di ordinamento ASC/DESC, utilizzando un solo indice.
- Ottimizzazione dell'operatore DISTINCT nelle tabelle virtuali nei casi in cui il set di risultati della query non soddisfi completamente la condizione ORDER BY.
- In estensione della sessione Sono stati aggiunti nuovi interfacce che consentono all'app di applicare modifiche una alla volta all'oggetto sqlite3_changegroup:
- Miglioramenti nella conversione tra numeri a virgola mobile ↔ testo.
- Il codice è stato completamente riscritto per migliorare le prestazioni.
- Ora per impostazione predefinita l'arrotondamento viene effettuato fino a 17 cifre significative invece di 15, come accadeva in tutte le versioni precedenti. Questo valore può essere modificato se necessario tramite la funzione sqlite3_db_config con l'opzione SQLITE_DBCONFIG_FP_DIGITS (vedere punto 6g sopra).
- È stata aggiunta la possibilità auto-ripristino dell'indice per risolvere il problema indici delle espressioni obsoleti.
- Nell'utilità della console sqlite3_rsync è stata aggiunta l'opzione -p|--port.
- Supporto interrotto per Windows RT.
- JavaScript/WASM
- È stata aggiunta VFS opfs-wl, funzionalmente identica a opfs, ma utilizza per i blocchi Web Locks, il che consente una distribuzione dei blocchi più equa rispetto al protocollo opfs. opfs-wl richiede la funzione Atomics.waitAsync(), quindi per funzionare richiede versioni più recenti dei browser rispetto a opfs.
Fonte: linux.org.ru
