Opublikowano wydanie SQLite 3.42, lekkiej bazy danych, która jest dostępna jako biblioteka do podłączenia. Kod SQLite jest dostępny w domenie publicznej, co oznacza, że może być używany bez ograniczeń i bezpłatnie w dowolnym celu. Wsparcie finansowe dla programistów SQLite zapewnia specjalnie utworzony konsorcjum, w którego skład wchodzą firmy takie jak Adobe, Oracle, Mozilla, Bentley i Bloomberg.
Główne zmiany:
- Dla pełnotekstowych indeksów FTS5 wprowadzono polecenie secure-delete, które przeprowadza pełne usunięcie wszelkich pozostałych danych po usunięciu.
- W funkcjach do przetwarzania danych w formacie JSON wprowadzono wsparcie dla rozszerzeń JSON5.
- Udoskonalono planistę zapytań. Domyślnie włączono optymalizację „count-of-view”. Wykluczono przetwarzanie nieużywanych kolumn w podzapytaniach. Ulepszono realizację optymalizacji push-down.
- Interfejs wiersza poleceń otrzymał opcję „—unsafe-testing”, która pozwala na użycie niebezpiecznych poleceń, takich jak „.testctrl”, przeznaczonych do testowania. W trybie bezpiecznym („—safe”) dozwolone jest użycie poleceń „.log on” i „.log off”. Dodano wsparcie dla separatora „—“, po którym wyłączane jest przetwarzanie opcji. Dodano parametry „:inf” i „:nan”, związane z wartością nieskończoności i NaN.
- W nazwach definiowanych w aplikacji funkcji SQL dozwolone jest łączenie z kluczowymi słowami CROSS, FULL, INNER, LEFT, NATURAL, OUTER i RIGHT.
- Rozszerzono możliwości PRAGMA integrity_check. Dodano kontrolę wskazania wartości NaN w kolumnach z warunkiem NOT NULL. Ulepszono przekazywanie komunikatów o błędach.
- W dodatku session zezwolono na przechwytywanie zmian z tabel bez ROWID.
- W funkcji do pracy z czasem i datą dodano modyfikator „subsec” do wykorzystania części sekund.
- Głębokość rekurencji dla tablic i obiektów JSON domyślnie zmniejszona z 2000 do 1000.
Ponadto zaktualizowano wydanie bazy danych DuckDB 0.8.0, rozwijającej wariant SQLite, rozszerzonej o możliwości i optymalizacje do wykonywania zapytań analitycznych, obejmujących znaczną część danych przechowywanych, na przykład wykonujących agregację całej zawartości tabel lub łączenie kilku dużych tabel. Oferowany jest rozszerzony dialekt języka SQL, który zawiera dodatkowe możliwości do obsługi bardzo złożonych i czasochłonnych zapytań, a także wspiera złożone typy (tablice, struktury, złączenia), jednoczesne wykonywanie wielu zapytań oraz wykonanie zapytań bezpośrednio z plików w formacie CSV, JSON i Parquet. Istnieje możliwość importu z bazy danych PostgreSQL.
Oprócz kodu powłoki z SQLite projekt wykorzystuje przeniesiony do osobnej biblioteki parser z PostgreSQL, komponent Date Math z MonetDB, własną implementację funkcji okiennych (opartą na algorytmie Segment Tree Aggregation), silnik obsługi wyrażeń regularnych oparty na bibliotece RE2, własny optymalizator zapytań, mechanizm zarządzania jednoczesnym wykonywaniem zadań (Multi-Version Concurrency Control), a także wektorowy silnik wykonania zapytań oparty na algorytmie Hyper-Pipelining Query Execution, który umożliwia przetwarzanie dużych zbiorów wartości w jednej operacji. Kod projektu jest dystrybuowany na licencji MIT.
W nowej wersji DuckDB:
- Dodano nowe wyrażenia „PIVOT” i „UNPIVOT” do transformacji wierszy w kolumny i odwrotnie.
- Zoptymalizowano równoległość przy imporcie i eksporcie danych. Domyślnie zaimplementowano odczyt z plików w formacie CSV w wielu wątkach oraz wielowątkowe zapisanie przy użyciu formatów Parquet, CSV i JSON.
- Dodano operator „**” do rekurencyjnego przeszukiwania katalogów przy definiowaniu ścieżek plików (na przykład, FROM ‘data/glob/crawl/stackoverflow/**/*.csv’;).
- Dodano wsparcie dla operacji łączenia (JOIN) dla danych w postaci szeregów czasowych (wycinki wartości parametrów w określonych odstępach czasu), w których jako kryterium łączenia rekordów używana jest nie dokładna, a przybliżona zgodność wartości w polu czasu (na przykład, można połączyć rekordy, których czasy różnią się nie więcej niż o 1 minutę).
- Wdrożono opóźnione ładowanie metadanych bazy danych, co umożliwiło wielokrotne przyspieszenie uruchamiania bazy danych.
- Dodano wsparcie dla łączenia funkcji użytkownika w języku Python.
- Dodano wsparcie dla API ADBC (Arrow Database Connectivity) do przesyłania danych z wykorzystaniem Apache Arrow.
- Zrealizowano powiązanie do integracji z kodem w języku Swift.
- Zmieniono zachowanie operatora dzielenia ("/") tak, że domyślnie wykonuje obliczenia z użyciem zmiennoprzecinkowych zamiast operacji całkowitych. Wprowadzono nowy operator "//" do dzielenia całkowitego. Można przywrócić stare zachowanie ustawiając "SET integer_division=true;".
- Metoda uwzględniania wartości NULL podczas sortowania zmieniona z "NULLS FIRST" na "NULLS LAST", tzn. wartości NULL będą teraz wyświetlane na końcu listy, a nie na początku. Można przywrócić stare zachowanie przez ustawienie "SET default_null_order='nulls_first';".
Dodatkowo można zauważyć rozwijany przez firmę Facebook projekt CG/SQL, dostarczający generator kodu do użycia z procedurami składowymi w SQLite. CG/SQL pozwala na definiowanie procedur składowych w specjalnym dialekcie T-SQL (Transact-SQL), który umożliwia wywoływanie funkcji standardowej biblioteki C i dostęp do danych w SQLite. Stworzone procedury składowe są kompilowane do kodu w języku C, który korzysta z SQLite C API do wykonywania określonych działań i przetwarzania złożonych zapytań. Skompilowane procedury składowe mogą być łączone z programami w językach C, Java i Objective-C. Kod projektu napisany jest w języku C i jest udostępniany na licencji MIT.
Źródło: opennet.ru
