Rilis SQLite 3.35

Rilis SQLite 3.35, DBMS ringan yang dirancang sebagai pustaka plug-in, telah dipublikasikan. Kode SQLite didistribusikan di domain publik, mis. dapat digunakan tanpa batasan dan gratis untuk tujuan apa pun. Dukungan keuangan untuk pengembang SQLite disediakan oleh konsorsium yang dibuat khusus, yang mencakup perusahaan seperti Adobe, Oracle, Mozilla, Bentley, dan Bloomberg.

Perubahan besar:

  • Menambahkan fungsi matematika bawaan (log2(), cos(), tg(), exp(), ln(), pow(), dll.) yang dapat digunakan dalam SQL. Mengaktifkan fungsi bawaan memerlukan pembuatan dengan opsi "-DSQLITE_ENABLE_MATH_FUNCTIONS".
  • Menerapkan dukungan untuk ekspresi “ALTER TABLE DROP COLUMN” untuk menghapus kolom dari tabel dan menghapus data yang sebelumnya disimpan di kolom tertentu.
  • Implementasi operasi UPSERT (tambah-atau-modifikasi) telah diperluas, memungkinkan melalui ekspresi seperti “INSERT ... ON CONFLICT DO NOTHING/UPDATE” untuk mengabaikan kesalahan atau melakukan pembaruan alih-alih memasukkan jika tidak mungkin untuk menambahkan data melalui “INSERT” (misalnya, jika record sudah ada, Anda dapat melakukan UPDATE alih-alih INSERT). Versi baru memungkinkan Anda menentukan beberapa blok ON CONFLICT, yang akan diproses secara berurutan. Blok terakhir "ON CONFLICT" memungkinkan parameter penentuan konflik dihilangkan untuk menggunakan "DO UPDATE".
  • Operasi DELETE, INSERT dan UPDATE mendukung ekspresi RETURNING, yang dapat digunakan untuk menampilkan konten rekaman yang dihapus, disisipkan, atau diubah. Misalnya, ekspresi "masukkan ke ... id yang dikembalikan" akan mengembalikan pengidentifikasi baris yang ditambahkan, dan "perbarui ... set harga = harga * 1.10 harga yang dikembalikan" akan mengembalikan nilai harga yang diubah.
  • Untuk Common Table Expressions (CTE), yang memungkinkan penggunaan kumpulan hasil bernama sementara yang ditentukan menggunakan pernyataan WITH, pilihan mode “MATERIALIZED” dan “NOT MATERIALIZED” diperbolehkan. "MATERIALIZED" berarti menyimpan kueri yang ditentukan dalam tampilan dalam tabel fisik terpisah dan kemudian mengambil data dari tabel ini, dan dengan "TIDAK TERMATERIALISASI" kueri berulang akan dilakukan setiap kali tampilan diakses. SQLite awalnya defaultnya adalah "NOT MATERIALIZED", tetapi sekarang telah berubah menjadi "MATERIALIZED" untuk CTE yang digunakan lebih dari sekali.
  • Mengurangi konsumsi memori saat melakukan operasi VACUUM pada database yang menyertakan nilai TEXT atau BLOB yang sangat besar.
  • Pekerjaan telah dilakukan untuk meningkatkan kinerja pengoptimal dan perencana kueri:
    • Menambahkan optimalisasi saat menggunakan fungsi min dan max dengan ekspresi "IN".
    • Eksekusi pernyataan EXISTS telah dipercepat.
    • Menerapkan perluasan subkueri dari ekspresi UNION ALL yang digunakan sebagai bagian dari JOIN.
    • Indeks digunakan untuk ekspresi IS NOT NULL.
    • Memastikan bahwa "x IS NULL" dan "x IS NOT NULL" dikonversi menjadi FALSE atau TRUE untuk kolom yang memiliki atribut "NOT NULL".
    • Lewati pemeriksaan kunci asing di UPDATE jika operasi tidak mengubah kolom yang terkait dengan kunci asing.
    • Diperbolehkan untuk memindahkan bagian dari blok WHERE ke dalam subkueri yang berisi fungsi jendela, selama bagian tersebut dibatasi untuk bekerja dengan konstanta dan salinan ekspresi dari blok PARTITION BY yang digunakan dalam fungsi jendela.
  • Perubahan pada antarmuka baris perintah:
    • Menambahkan perintah ".filectrl data_version".
    • Perintah ".once" dan ".output" sekarang mendukung penyampaian output ke handler yang dipanggil menggunakan pipa tanpa nama ("|").
    • Argumen “stmt” dan “vmstep” telah ditambahkan ke perintah “.stats” untuk menampilkan statistik ekspresi dan penghitung mesin virtual.

Sumber: opennet.ru

Tambah komentar