Wydanie SQLite 3.35

Opublikowano wydanie SQLite 3.35, lekkiego systemu DBMS zaprojektowanego jako biblioteka wtyczek. Kod SQLite jest rozpowszechniany w domenie publicznej, tj. mogą być wykorzystywane bez ograniczeń i bezpłatnie w dowolnym celu. Wsparcie finansowe dla programistów SQLite zapewnia specjalnie utworzone konsorcjum, w skład którego wchodzą takie firmy jak Adobe, Oracle, Mozilla, Bentley czy Bloomberg.

Główne zmiany:

  • Dodano wbudowane funkcje matematyczne (log2(), cos(), tg(), exp(), ln(), pow() itp.), których można używać w języku SQL. Włączenie funkcji wbudowanych wymaga budowania z opcją „-DSQLITE_ENABLE_MATH_FUNCTIONS”.
  • Zaimplementowano obsługę wyrażenia „ALTER TABLE DROP COLUMN” służącego do usuwania kolumn z tabeli i czyszczenia danych przechowywanych wcześniej w danej kolumnie.
  • Rozszerzono implementację operacji UPSERT (dodaj lub zmodyfikuj), umożliwiając za pomocą wyrażeń takich jak „WSTAW... W KONFLIKCIE NIC/AKTUALIZUJ” zignorowanie błędu lub wykonanie aktualizacji zamiast wstawiania, jeśli nie można dodać dane poprzez „INSERT” (na przykład, jeśli rekord już istnieje, możesz wykonać UPDATE zamiast INSERT). Nowa wersja umożliwia określenie wielu bloków ON CONFLICT, które będą przetwarzane w określonej kolejności. Ostatni blok „ON CONFLICT” pozwala na pominięcie parametru definicji konfliktu w celu użycia „DO AKTUALIZACJI”.
  • Operacje DELETE, INSERT i UPDATE obsługują wyrażenie RETURNING, którego można użyć do wyświetlenia zawartości usuniętego, wstawionego lub zmodyfikowanego rekordu. Przykładowo wyrażenie „wstaw do… zwracanego id” zwróci identyfikator dodanej linii, a „aktualizuj… ustaw cenę = cena * 1.10 zwracana cena” zwróci zmienioną wartość ceny.
  • W przypadku wspólnych wyrażeń tabelowych (CTE), które pozwalają na użycie tymczasowych nazwanych zestawów wyników określonych za pomocą instrukcji WITH, dozwolony jest wybór trybów „MATERIALIZED” i „NOT MATERIALIZED”. „ZMATERIALIZOWANE” oznacza buforowanie zapytania określonego w widoku w osobnej tabeli fizycznej, a następnie pobranie danych z tej tabeli, a w przypadku „NIE ZMATERIALIZOWANE” powtarzające się zapytania będą wykonywane przy każdym dostępie do widoku. Pierwotnie SQLite miał domyślnie ustawioną opcję „NOT MATERIALIZED”, ale teraz zmieniono ją na „MATERIALIZED” w przypadku CTE używanych więcej niż raz.
  • Zmniejszone zużycie pamięci podczas wykonywania operacji VACUUM na bazach danych zawierających bardzo duże wartości TEKST lub BLOB.
  • Włożono wiele pracy, aby zwiększyć wydajność optymalizatora i narzędzia do planowania zapytań:
    • Dodano optymalizacje podczas korzystania z funkcji min i max z wyrażeniem „IN”.
    • Wykonywanie instrukcji EXISTS zostało przyspieszone.
    • Zaimplementowano rozwinięcie podzapytań z wyrażeń UNION ALL używanych w ramach JOIN.
    • Indeks jest używany dla wyrażeń IS NOT NULL.
    • Zapewnia, że ​​wartości „x IS NULL” i „x IS NOT NULL” są konwertowane na FAŁSZ lub PRAWDA w przypadku kolumn z atrybutem „NOT NULL”.
    • Pomiń sprawdzanie kluczy obcych w UPDATE, jeśli operacja nie zmienia kolumn skojarzonych z kluczem obcym.
    • Dopuszczalne jest przenoszenie części bloku WHERE do podzapytań zawierających funkcje okna, o ile części te ograniczają się do pracy ze stałymi i kopiami wyrażeń z bloków PARTITION BY używanych w funkcjach okna.
  • Zmiany w interfejsie wiersza poleceń:
    • Dodano polecenie „.filectrl data_version”.
    • Polecenia „.once” i „.output” obsługują teraz przekazywanie danych wyjściowych do procedury obsługi wywoływanej przy użyciu nienazwanych potoków („|”).
    • Do polecenia „.stats” dodano argumenty „stmt” i „vmstep” umożliwiające wyświetlanie statystyk wyrażeń i liczników maszyn wirtualnych.

Źródło: opennet.ru

Dodaj komentarz