È stato pubblicato il rilascio di SQLite 3.40, un database leggero presentato come libreria collegabile. Il codice di SQLite è distribuito come dominio pubblico, ovvero 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:
- È stata implementata una funzionalità sperimentale per compilare SQLite in codice intermedio WebAssembly, in grado di essere eseguito nel browser e adatto per gestire database da applicazioni web in JavaScript. Gli sviluppatori web hanno a disposizione un'interfaccia di programmazione orientata agli oggetti di alto livello per lavorare con i dati nello stile di sql.js o Node.js, un wrapper sopra l'API C a basso livello e un'API basata sul meccanismo Web Worker, che consente di creare gestori asincroni eseguiti in thread separati. I dati che le applicazioni web salvano nella versione WASM di SQLite possono essere memorizzati sul lato client utilizzando OPFS (Origin-Private FileSystem) o l'API window.localStorage.
- È stata aggiunta l'estensione recovery, progettata per il recupero di dati da file di database danneggiati. Nella riga di comando per il recupero si utilizza il comando «.recover».
- È stato migliorato il funzionamento dell'ottimizzatore delle query. Sono state rimosse le limitazioni nell'uso degli indici con tabelle che contano più di 63 colonne (in precedenza, nelle operazioni su colonne il cui numero supera 63, non veniva applicata l indicizzazione). È stata migliorata l'indicizzazione dei valori utilizzati nelle espressioni. È stata interrotta il caricamento da disco di lunghe righe e blob durante l'elaborazione degli operatori NOT NULL e IS NULL. È stata esclusa la materializzazione delle viste per le quali viene eseguita una scansione completa solo una volta.
- Nel codice sorgente, invece del tipo «char *» per rappresentare i nomi dei file, è stato utilizzato un tipo separato sqlite3_filename.
- È stata aggiunta la funzione interna sqlite3_value_encoding().
- È stata aggiunta la modalità SQLITE_DBCONFIG_DEFENSIVE, che vieta la modifica della versione dello schema di archiviazione dei dati.
- Sono state aggiunte ulteriori verifiche all'implementazione del parametro «PRAGMA integrity_check». Ad esempio, le tabelle senza il flag STRICT non devono contenere valori numerici nelle colonne di tipo TEXT e valori di tipo stringa nelle colonne di tipo NUMERIC. È stata anche aggiunta una verifica della correttezza dell'ordine delle righe nelle tabelle contrassegnate con «WITHOUT ROWID».
- Sono state considerate le impostazioni «PRAGMA synchronous» nell'espressione «VACUUM INTO».
- È stata aggiunta l'opzione di compilazione SQLITE_MAX_ALLOCATION_SIZE, che consente di limitare la dimensione dei blocchi durante l'allocazione della memoria.
- L'algoritmo di generazione di numeri pseudo-casuali integrato in SQLite è stato modificato per utilizzare Chacha20 invece del cifrario a flusso RC4.
- È ora consentito utilizzare indici con nomi identici in diversi schemi di dati.
- Sono state apportate ottimizzazioni delle prestazioni che hanno ridotto il carico della CPU di circa l'1% durante l'attività tipica.
Fonte: opennet.ru
