9 kwietnia wydano wersję 3.53.0 kompaktowej, wieloplatformowej wbudowanej bazy danych. SQLite. Kod projektu został napisany w języku C i jest rozpowszechniany jako własność publiczna (public domain).
Zmiany:
- Naprawiona usterka błąd korupcji bazy danych WAL-reset. Zobacz poprzednią wiadomość SQLite 3.51.3 z poprawką możliwego uszkodzenia bazy danych w trybie WAL.
- Dodano bibliotekę formatowania wyników zapytań SQL Formatter Wyników Zapytania (QRF) w celu zapewnienia wygody odczytu na ekranie z czcionką o stałej szerokości.
- Dodano metodę format do interfejsu TCL dla dostępu do QRF z TCL.
- QRF jest teraz używane w narzędziu konsolowym sqlite do formatowania wyników zapytań, co poprawiło ich wyświetlanie.
- Nowe możliwości języka SQL:
- Udoskonalone możliwości komendy ALTER TABLE w celu umożliwienia dodawania i usuwania ograniczeń NOT NULL i CHECK.
- Operator REINDEX EXPRESSIONS wykonuje reindeksację indeksów wyrażeń. Przydatne do przywracania nieaktualnych indeksów wyrażeń.
- pokazuje to, czego się spodziewano: triggery TEMP mogą zmieniać i/lub żądać danych z tabel głównego schematu.
- Udoskonalona komenda VACUUM INTO: w przypadku wykorzystania jako adresu docelowego nazwy pliku w formacie URI, zawierającego parametr zapytania reserve=N (gdzie N to liczba od 0 do 255), objętość rezerwacji dla tworzonej kopii bazy danych jest ustawiana na N.
- Dodano nowe funkcje SQL:
- Aktualizacje w narzędziu konsolowym:
- Znaczące ulepszenia komendy .mode.
- Dzięki rozszerzenia QRF ulepszono formatowanie wyników. Na przykład liczby są teraz domyślnie wyrównywane do prawej w trybie wyjścia tabelarycznego.
- Domyślnie QRF jest teraz używane podczas interaktywnego korzystania z narzędzia konsolowego do wyświetlania wyników zapytań w blokach utworzonych przy użyciu znaków Unicode dla rysowania bloków, co zwiększyło czytelność. Nieaktualny format wyjścia jest używany przy zbiorczym wykonywaniu komend w celu zapewnienia kompatybilności.
- Pojedyncze (niezamknięte w cudzysłowach) średniki na końcu komend z kropką są ignorowane bez ostrzeżenia. To możliwa niekompatybilność!
- Naprawiono komendy .testcase i .check. Teraz naprawdę działają i są używane w skryptach wchodzących w skład standardowego zestawu testów SQLite, jakie zawarte są w kodzie źródłowym.
- Argumenty wiersza poleceń, które odpowiadają wzorcom *.sql lub *.txt i są nazwami niepustych plików, są odczytywane i interpretowane jako skrypty zawierające polecenia SQL i/lub [komendy z kropką]((https://sqlite.org/cli.html#dotcmd).
- Teraz jako argument polecenia .timer można podać once, aby timer uruchomił się tylko przy wykonaniu następnego zapytania SQL.
- Nowy parametr —timeout S polecenia .progress przerywa wykonywanie zapytań SQL po upływie S sekund.
- Polecenie .indexes zostało zmienione w taki sposób, że argument PATTERN jest teraz dopasowywany do nazwy indeksu, a nie do nazwy tabeli indeksowanej (co czyni argument PATTERN naprawdę użytecznym). Dodatkowo, do polecenia .indexes dodano kilka nowych opcji.
- Ulepszenia w C API:
- sqlite3_str_truncate()
- sqlite3_str_free()
- sqlite3_carray_bind_v2()
- Do funkcji sqlite3_prepare_v3() dodano opcję SQLITE_PREPARE_FROM_DDL, która pozwala implementacjom wirtualnych tabel bezpiecznie przygotowywać polecenia SQL otrzymane z definicji bazy danych.
- Dodano stałą SQLITE_UTF8_ZT, którą można używać jako parametru kodowania w funkcjach sqlite3_result_text64() lub sqlite3_bind_text64() w celu wskazania, że wartość jest zakodowana w UTF-8 i kończy się zerem.
- Do funkcji sqlite3_limit() dodano opcję SQLITE_LIMIT_PARSER_DEPTH.
- Do funkcji sqlite3_db_config() dodano opcję SQLITE_DBCONFIG_FP_DIGITS. Zobacz także punkt 9b poniżej.
- Ulepszenia planowania zapytań:
- Dla EXCEPT, INTERSECT i UNION zawsze używany jest algorytm sortowania i scalania, ponieważ prawie zawsze działa on szybciej niż użycie tablic haszujących.
- Ulepszenia w mechanizmie wyboru kolejności złączeń podczas wykonywania dużych wielostronnych złączeń w schemacie gwiazdy.
- Udoskonalono optymalizację przekształcania EXISTS w JOIN tak, aby warunki JOIN mogły nie znajdować się obowiązkowo w wewnętrznych pętlach, pod warunkiem, że wszystkie zależności dla cykli przekształceń EXISTS w JOIN znajdują się w zewnętrznych cyklach.
- Udoskonalono optymalizację omit-noop-join, aby mogła pomijać łańcuch złączeń, które nie wpływają na wynik.
- Optymalizacja zapytań używających GROUP BY e1 ORDER BY e2, gdzie e1 i e2 są identyczne, z wyjątkiem kolejności sortowania ASC/DESC, za pomocą jednego indeksu.
- Optymalizacja operatora DISTINCT w wirtualnych tabelach w sytuacjach, gdy zestaw wyników zapytania nie odpowiada całkowicie warunkowi ORDER BY.
- W rozszerzenie sesji dodano nowe interfejsy umożliwiające aplikacji dodawanie zmian pojedynczo do obiektu sqlite3_changegroup:
- Ulepszenia w konwersji liczb zmiennoprzecinkowych ↔ tekst.
- Kod został całkowicie przepisany, aby poprawić wydajność.
- Teraz zaokrąglanie domyślnie jest wykonywane do 17 cyfr znaczących zamiast 15, jak miało to miejsce we wszystkich wcześniejszych wersjach. W razie potrzeby wartość tę można zmienić za pomocą funkcji sqlite3_db_config z opcją SQLITE_DBCONFIG_FP_DIGITS (patrz punkt 6g powyżej).
- Dodano możliwość automatycznego odtwarzania indeksu w celu rozwiązania problemu nieaktualnych indeksów wyrażeń.
- W narzędziu konsolowym sqlite3_rsync dodano opcję -p|—port.
- Zaprzestano wsparcia dla Windows RT.
- JavaScript/WASM
- Dodano VFS opfs-wl, funkcjonalnie identyczny z opfs, ale używający do blokad Web Locks, co pozwala na bardziej sprawiedliwe rozdzielanie blokad niż w protokole opfs. opfs-wl wymaga funkcji Atomics.waitAsync(), dlatego jego działanie wymaga nowszych wersji przeglądarek niż dla opfs.
Źródło: linux.org.ru
