Wydanie systemu baz danych SQLite 3.35

Opublikowano wydanie SQLite 3.35, lekkiej bazy danych w postaci biblioteki dołączanej. Kod SQLite jest udostępniany jako domena publiczna, co oznacza, że może być używany bez ograniczeń i bezpłatnie do wszelkich celów. Wsparcie finansowe dla deweloperów SQLite zapewnia specjalnie utworzony konsorcjum, w którego skład wchodzą takie firmy jak Adobe, Oracle, Mozilla, Bentley i Bloomberg.

Główne zmiany:

  • Dodano wbudowane funkcje matematyczne (log2(), cos(), tg(), exp(), ln(), pow() itd.), które można wykorzystać w SQL. Aby włączyć wbudowane funkcje, potrzebna jest kompilacja z opcją „-DSQLITE_ENABLE_MATH_FUNCTIONS”.
  • Wprowadzono wsparcie dla wyrażenia „ALTER TABLE DROP COLUMN”, które pozwala na usuwanie kolumn z tabeli oraz czyszczenie wcześniej przechowywanych w tej kolumnie danych.
  • Rozszerzono realizację operacji UPSERT (dodaj-lub-modyfikuj), która pozwala poprzez wyrażenia w rodzaju „INSERT … ON CONFLICT DO NOTHING/UPDATE” ignorować błąd lub wykonać aktualizację zamiast dodania w przypadku niemożności dodania danych przez „INSERT” (na przykład, jeśli rekord już istnieje, zamiast INSERT można wykonać UPDATE). W nowej wersji dozwolone jest wskazanie wielu bloków „ON CONFLICT”, które będą przetwarzane w kolejności ich występowania. W ostatnim bloku „ON CONFLICT” nie ma potrzeby określania parametru definiującego konflikt dla użycia „DO UPDATE”.
  • W operacjach DELETE, INSERT i UPDATE wdrożono wsparcie dla wyrażenia RETURNING, za pomocą którego można wyświetlić zawartość usuniętego, wstawionego lub zmienionego rekordu. Na przykład, wyrażenie „insert into … returning id” zwróci identyfikator dodanego wiersza, a „update … set price = price * 1.10 returning price” zwróci zmienioną wartość price.
  • Dla ogólnych wyrażeń tabelarycznych (Common Table Expression, CTE), które pozwalają używać tymczasowych, nazwanych zestawów wyników definiowanych przy użyciu operatora WITH, zezwolono na wybór trybów „MATERIALIZED” i „NOT MATERIALIZED”. „MATERIALIZED” oznacza buforowanie podanego w zapytaniu w widoku w oddzielnej fizycznej tabeli z późniejszym pobieraniem danych z tej tabeli, a w trybie „NOT MATERIALIZED” przy każdym odwołaniu do widoku będą realizowane ponowne zapytania. Pierwotnie w SQLite domyślnie używany był tryb „NOT MATERIALIZED”, ale teraz dla CTE, które są używane więcej niż raz, zmieniono na „MATERIALIZED”.
  • Zmniejszone zużycie pamięci podczas wykonywania operacji VACUUM dla baz danych zawierających bardzo duże wartości typu TEXT lub BLOB.
  • Przeprowadzono prace nad zwiększeniem wydajności optymalizatora i planera zapytań:
    • Dodano optymalizacje przy użyciu funkcji min i max z wyrażeniem „IN”.
    • Przyspieszono wykonywanie operatora EXISTS.
    • Zrealizowano rozwój podzapytania z wyrażeń UNION ALL używanych w składni JOIN.
    • Wykorzystano indeks dla wyrażeń IS NOT NULL.
    • Zapewniono przekształcenie „x IS NULL” i „x IS NOT NULL” w FALSE lub TRUE dla kolumn z oznaczeniem „NOT NULL”.
    • Pominięto sprawdzenie kluczy obcych w UPDATE, jeśli operacja nie zmienia kolumn związanych z kluczem obcym.
    • Zezwolono na przeniesienie części bloku WHERE do podzapytań zawierających funkcje okienne, jeśli te części są ograniczone do pracy z stałymi i kopiami wyrażeń z bloków „PARTITION BY” używanych w funkcjach okiennych.
  • Zmiany w interfejsie wiersza poleceń:
    • Dodano polecenie „.filectrl data_version”.
    • W poleceniach „.once” i „.output” dodano wsparcie dla przesyłania wyjścia do obrotnika wywoływanego przy użyciu nazwanych kanałów („|”).
    • Do polecenia „.stats” dodano argumenty „stmt” i „vmstep” do wyświetlania statystyk dla wyrażeń i liczników maszyny wirtualnej.

Źródło: opennet.ru

Kup niezawodny hosting stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron z ochroną DDoS, serwery VPS VDS - ProHoster