A fost lansată versiunea SQLite 3.35, un sistem de gestionare a bazelor de date ușor, disponibil ca bibliotecă de conectare. Codul SQLite este distribuit ca domeniu public, adică poate fi utilizat fără restricții și gratis în orice scop. Sprijinul financiar pentru dezvoltatorii SQLite este oferit de un consorțiu special creat, care include companii precum Adobe, Oracle, Mozilla, Bentley și Bloomberg.
Modificări principale:
- Au fost adăugate funcții matematice încorporate (log2(), cos(), tg(), exp(), ln(), pow() etc.) care pot fi utilizate în SQL. Pentru a activa funcțiile încorporate, este necesară compilarea cu opțiunea „-DSQLITE_ENABLE_MATH_FUNCTIONS”.
- A fost implementat suportul pentru expresia „ALTER TABLE DROP COLUMN” pentru a elimina coloanele dintr-un tabel și pentru a curăța datele stocate anterior în acea coloană.
- A fost extinsă implementarea operației UPSERT (adaugă sau modifică), permițând prin expresii de tipul „INSERT … ON CONFLICT DO NOTHING/UPDATE” să se ignore eroarea sau să se efectueze o actualizare în loc de inserție în caz de imposibilitate de a adăuga date prin „INSERT” (de exemplu, dacă înregistrarea există deja, în loc de INSERT se poate efectua UPDATE). În noua versiune este permisă specificarea mai multor blocuri „ON CONFLICT”, care vor fi procesate în ordinea apariției. În ultimul bloc „ON CONFLICT” este permis să nu se specifice parametrul de definire a conflictului pentru a utiliza „DO UPDATE”.
- În operațiile DELETE, INSERT și UPDATE a fost implementat suportul pentru expresia RETURNING, prin care se poate afișa conținutul unei înregistrări șterse, inserate sau modificate. De exemplu, expresia „insert into … returning id” va returna identificatorul rândului adăugat, iar „update … set price = price * 1.10 returning price” va returna valoarea modificată a prețului.
- Pentru expresiile de tabel comune (Common Table Expression, CTE), care permit utilizarea seturilor de rezultate temporare, definite prin operatorul WITH, este permisă alegerea modurilor „MATERIALIZED” și „NOT MATERIALIZED”. „MATERIALIZED” implică stocarea intermediară a cererii definite în vizualizare într-un tabel fizic separat, din care se vor extrage ulterior datele, iar în cazul „NOT MATERIALIZED” la fiecare accesare a vizualizării se vor efectua interogări repetate. Inițial, în SQLite era utilizat în mod implicit modul „NOT MATERIALIZED”, dar acum pentru CTE-urile utilizate de mai multe ori a fost schimbat în „MATERIALIZED”.
- Consumul de memorie a fost redus în timpul operațiunii VACUUM pentru Baze de Date care includ valori foarte mari cu tipurile TEXT sau BLOB.
- Au fost realizate lucrări pentru îmbunătățirea performanței optimizatorului și a planificatorului de interogări:
- Au fost adăugate optimizări pentru utilizarea funcțiilor min și max cu expresia „IN”.
- Executarea operatorului EXISTS a fost accelerată.
- A fost implementată desfășurarea subinterogărilor din expresiile UNION ALL utilizate în cadrul JOIN.
- Indexul a fost utilizat pentru expresiile IS NOT NULL.
- S-a asigurat transformarea „x IS NULL” și „x IS NOT NULL” în FALSE sau TRUE pentru coloanele care au proprietatea „NOT NULL”.
- Verificarea cheilor externe a fost omisă în UPDATE, dacă operația nu schimbă coloanele legate de cheia externă.
- Este permisă mutarea unor părți din blocul WHERE în subinterogări care conțin funcții de feronare, cu condiția ca aceste părți să fie limitate la lucrul cu constante și copii ale expresiilor din blocurile „PARTITION BY” utilizate în funcțiile de feronare.
- Modificări în interfața liniei de comandă:
- A fost adăugată comanda „.filectrl data_version”.
- În comenzile „.once” și „.output” a fost adăugată suport pentru redirecționarea ieșirii către un handler apelat folosind canale fără nume („|”).
- În comanda „.stats” au fost adăugate argumentele „stmt” și „vmstep” pentru a afișa statistici despre expresii și contoare pentru mașina virtuală.
Sursa: opennet.ro
