Wydano wydanie SQLite 3.46, lekkiej bazy danych w postaci biblioteki do podłączenia. Kod SQLite jest udostępniany jako domena publiczna, co oznacza, że może być wykorzystywany bez ograniczeń i bezpłatnie do dowolnych celów. Finansowe wsparcie dla programistów SQLite zapewnia specjalnie utworzony konsorcjum.
Główne zmiany:
- Dodano możliwość używania separatora „_” w liczbach w celu lepszego przedstawienia literałów liczbowych (np. 1_234_567).
- Dodana funkcja SQL json_pretty() do generowania bardziej czytelnego wyjścia w formacie JSON, sformatowanego z użyciem wcięć blokowych.
- Rozszerzono możliwości operacji „PRAGMA optimize”, która optymalizuje bazę danych i wszystkie schemy danych, aby osiągnąć najlepszą wydajność zapytań. Wprowadzono automatycznie stosowany limit na czas analizy bazy danych, eliminujący zbyt długi czas przetwarzania dużych baz danych. Dodano nową maskę bitową „PRAGMA optimize(0x10000)” do osobnego sprawdzania aktualizacji we wszystkich tabelach. Zapewniono automatyczną ponowną analizę tabel, w których brak jest rekordów sqlite_stat1.
- W funkcji SQL strftime() dodano wsparcie dla substytutów %G, %g, %U i %V.
- W funkcjach SQL do pracy z datami i czasem dodano nowe modyfikatory ceiling i floor do zarządzania przetwarzaniem niejednoznacznych dat, powstających podczas operacji przesunięcia dat o określoną liczbę miesięcy lub lat. Zapewniono ignorowanie modyfikatorów utc i localtime, jeśli SQLite ma wiedzę o tym, że czas jest już w formacie UTC lub localtime.
- Wprowadzono optymalizacje w planowaniu zapytań. Dla wyrażeń INSERT zawierających tysiące wartości w sekcji VALUES domyślnie włączono optymalizację „VALUES-as-coroutine”, która pozwala na około dwukrotne przyspieszenie analizy takich wyrażeń i dwukrotne zmniejszenie zużycia pamięci. Dla zapytań typu „SELECT count(DISTINCT col) FROM …” zezwolono na użycie indeksów, nawet jeśli rozmiar rekordów w indeksie nie jest mniejszy niż w tabeli. Ulepszono logikę określania sytuacji, w których argumenty funkcji SQL zawierają stałe. Zapewniono zastosowanie optymalizacji push-down dla wyrażeń WHERE, zawierających niespowiązane podzapytania.
- Zmieniono logikę obsługi przepełnienia stosu — po wykryciu braku pamięci dla stosu parser teraz próbuje przydzielić dodatkową pamięć z sterty, zamiast zgłaszać błąd „przepełnienie stosu parsera”.
- W JSONie zezwala się na określenie znaków sterujących w dosłownych napisach JSON5. Zmieniono logikę działania operatorów „->” i „>>”, gdy w prawej części operandu tekstowego znajdują się wyłącznie cyfry (analogicznie do PostgreSQL, takie operandy są teraz traktowane jako napis).
- Wartości DEFAULT w kolumnach tabeli zezwalają na określenie dużych literali szesnastkowych.
Źródło: opennet.ru
