Bylo publikováno vydání SQLite 3.35, lehkého databázového systému, který je poskytován jako připojitelná knihovna. Kód SQLite je k dispozici jako veřejné vlastnictví (public domain), což znamená, že může být používán bez omezení a bezplatně pro jakékoli účely. Finanční podporu vývojářům SQLite zajišťuje speciálně vytvořený konsorcium, které zahrnuje společnosti jako Adobe, Oracle, Mozilla, Bentley a Bloomberg.
Hlavní změny:
- Byly přidány vestavěné matematické funkce (log2(), cos(), tg(), exp(), ln(), pow() atd.), které lze používat v SQL. Pro zahrnutí vestavěných funkcí je nutné sestavení s možností „-DSQLITE_ENABLE_MATH_FUNCTIONS“.
- Byla implementována podpora výrazu „ALTER TABLE DROP COLUMN“ pro odstranění sloupců z tabulky a vyčištění dříve uložených dat v tomto sloupci.
- Byla rozšířena implementace operace UPSERT (přidat-nebo-upravit), která umožňuje pomocí výrazů jako „INSERT … ON CONFLICT DO NOTHING/UPDATE“ ignorovat chybu nebo provést aktualizaci místo vkládání v případě nemožnosti přidání dat přes „INSERT“ (například když záznam již existuje, místo INSERT lze provést UPDATE). V nové verzi je povoleno určení více bloků „ON CONFLICT“, které budou zpracovány v pořadí, v jakém jsou uvedeny. V posledním bloku „ON CONFLICT“ není povinné uvádět parametr definice konfliktu pro použití „DO UPDATE“.
- V operacích DELETE, INSERT a UPDATE byla implementována podpora výrazu RETURNING, pomocí kterého lze vrátit obsah odstraněného, vloženého nebo změněného záznamu. Například výraz „insert into … returning id“ vrátí identifikátor přidaného řádku, a „update … set price = price * 1.10 returning price“ vrátí změněnou hodnotu price.
- Pro obecné tabulkové výrazy (Common Table Expression, CTE), které umožňují používat dočasné pojmenované výsledkové sady definované pomocí operátoru WITH, jsou nyní k dispozici režimy „MATERIALIZED“ a „NOT MATERIALIZED“. „MATERIALIZED“ zahrnuje mezipaměť zadanou v dotazu v samostatné fyzické tabulce s následným získáváním dat z této tabulky, zatímco při „NOT MATERIALIZED“ se při každém přístupu k výrazu budou provádět opakované dotazy. Původně byl v SQLite ve výchozím nastavení používán režim „NOT MATERIALIZED“, ale nyní byl pro CTE používané více než jednou změněn na „MATERIALIZED“.
- Snížená spotřeba paměti při provádění operace VACUUM pro databáze, které obsahují velmi velké hodnoty typu TEXT nebo BLOB.
- Byla provedena práce na zvýšení výkonu optimalizátoru a plánovače dotazů:
- Byly přidány optimalizace při použití funkcí min a max s výrazem „IN“.
- Zrychleno provádění operátoru EXISTS.
- Byla implementována rozšiřitelnost poddotazů z výrazů UNION ALL, používaných v rámci JOIN.
- Byl využit index pro výrazy IS NOT NULL.
- Bylo zajištěno převedení „x IS NULL“ a „x IS NOT NULL“ na FALSE nebo TRUE pro sloupce, které mají atribut „NOT NULL“.
- Přeskočeno ověření cizích klíčů v UPDATE, pokud operace nemění sloupce spojené s cizím klíčem.
- Bylo povoleno přesouvání částí bloku WHERE do poddotazů, které obsahují oknové funkce, pokud tyto části jsou omezeny na práci s konstantami a kopiemi výrazů z bloků „PARTITION BY“, používajícími se v oknových funkcích.
- Změny v rozhraní příkazového řádku:
- Přidán příkaz „.filectrl data_version“.
- V příkazech „.once“ a „.output“ byla přidána podpora pro přenos výstupu do zpracovatele, který je volán pomocí nejmenovaných kanálů („|“).
- Do příkazu „.stats“ byly přidány argumenty „stmt“ a „vmstep“ pro výstup statistiky podle výrazů a čítačů virtuálního stroje.
Zdroj: opennet.ru
