Opublikowano wersję SQLite 3.45, lekkiej bazy danych w postaci biblioteki. Kod SQLite jest udostępniany jako własność publiczna (public domain), co oznacza, że może być używany bez ograniczeń i bezpłatnie w dowolnych celach. Finansowanie twórców SQLite zapewnia specjalnie powstały konsorcjum, w skład którego wchodzą takie firmy jak Bentley, Bloomberg, Expensify i Navigation Data Standard.
Główne zmiany:
- Wszystkie funkcje SQL do pracy z formatem JSON zostały przepisane i przekształcone w nowy wewnętrzny format drzewa analizy JSONB, który jest serializowany i może być przechowywany w bazie danych, aby wykluczyć ponowną analizę przy używaniu wartości JSON. Nowe wersje funkcji tworzących JSON teraz generują binarny format JSONB zamiast tekstowego. Do funkcji json_valid() dodano opcjonalny drugi argument, za pomocą którego można ustawić maskę bitową określającą cechy poprawnego JSON (na przykład, wskazując 0x04, blob JSONB będzie uznawany za poprawny, przy wskazaniu 0x01 poprawny będzie tekstowy JSON w formacie RFC-8259, a przy wskazaniu 0x05 oba warianty).
- Do wirtualnej tabeli FTS5, używanej do pełnotekstowego przeszukiwania, dodano opcję tokendata, pozwalającą na użycie własnych tokenizatorów.
- Domyślnie włączona jest optymalizacja SQLITE_DIRECT_OVERFLOW_READ, przy której strony overflow, większe od standardowego rozmiaru stron b-tree, są odczytywane z pliku bezpośrednio, omijając pamięć podręczną. Aby wyłączyć to podczas kompilacji, można użyć opcji „-DSQLITE_DIRECT_OVERFLOW_READ=0”.
- W planowaniu zapytań zwiększono efektywność optymalizacji transytywnych ograniczeń (transitive constraint) i poprawiono ignorowanie indeksów, które uznano za niskiej jakości podczas wykonywania operacji ANALYZE.
- W interfejsie linii poleceń poprawiono wyświetlanie zawartości w kodowaniu UTF-8 na platformie Windows. Zapewniono automatyczne wykrywanie użycia interfejsu CLI podczas odtwarzania skryptów „.dump” oraz odpowiednie zmiany w ustawieniach, takich jak „.dbconfig defensive off” i „.dbconfig dqs_dll on”.
- Do definiowanych po stronie aplikacji funkcji SQL dodano właściwość SQLITE_RESULT_SUBTYPE, która umożliwia wywoływanie z funkcji sqlite3_result_subtype() w celu inspekcji podtypów argumentów.
Dodatkowo można zauważyć, że w eksperymentalnych wersjach SQLite pojawił się nowy tryb prowadzenia dzienników transakcji — WAL2 („PRAGMA journal_mode = wal2”), w którym używane są dwa pliki wal („database-wal” i „database-wal2”) zamiast jednego. Podczas zapisywania danych w bazie, nowe dane są dodawane do pierwszego pliku wal. Jeśli pierwszy plik wal osiągnie wystarczająco dużą wielkość, następuje przełączenie na zapis do drugiego pliku. Po przełączeniu na drugi plik wal, pierwszy staje się dostępny do zatwierdzenia zmian (checkpoint) i nadpisania. W ten sposób, gdy drugi plik wal osiąga dużą wielkość, następuje przełączenie na pierwszy itd., co rozwiązuje problem z niekontrolowanym wzrostem pliku wal w sytuacjach, gdy transakcja nie jest długo zatwierdzana lub trwają długie procesy odczytu.
Źródło: opennet.ru
