Выпуск Π‘Π£Π‘Π” SQLite 3.35

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ Ρ€Π΅Π»ΠΈΠ· SQLite 3.35, лСгковСсной Π‘Π£Π‘Π”, ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½ΠΎΠΉ Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Код SQLite распространяСтся ΠΊΠ°ΠΊ общСствСнноС достояниС (public domain), Ρ‚.Π΅. ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±Π΅Π· ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΠΈ Π±Π΅Π·Π²ΠΎΠ·ΠΌΠ΅Π·Π΄Π½ΠΎ Π² Π»ΡŽΠ±Ρ‹Ρ… цСлях. Π€ΠΈΠ½Π°Π½ΡΠΎΠ²ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² SQLite осущСствляСт ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ созданный консорциум, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ входят Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, ΠΊΠ°ΠΊ Adobe, Oracle, Mozilla, Bentley ΠΈ Bloomberg.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ измСнСния:

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ встроСнныС матСматичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (log2(), cos(), tg(), exp(), ln(), pow() ΠΈ Ρ‚.ΠΏ.), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² SQL. Для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ трСбуСтся сборка с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ «-DSQLITE_ENABLE_MATH_FUNCTIONS».
  • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° выраТСния «ALTER TABLE DROP COLUMN» для удалСния столбцов ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ очистки Ρ€Π°Π½Π΅Π΅ Ρ…Ρ€Π°Π½ΠΈΠ²ΡˆΠΈΡ…ΡΡ Π² Π΄Π°Π½Π½ΠΎΠΌ столбцС Π΄Π°Π½Π½Ρ‹Ρ….
  • Π Π°ΡΡˆΠΈΡ€Π΅Π½Π° рСализация ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ UPSERT (Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ-ΠΈΠ»ΠΈ-ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅ΠΉ Ρ‡Π΅Ρ€Π΅Π· выраТСния Π²ΠΈΠ΄Π° «INSERT … ON CONFLICT DO NOTHING/UPDATE» ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΈΠ»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ вмСсто вставки Π² случаС нСвозмоТности добавлСния Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· «INSERT» (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли запись ΡƒΠΆΠ΅ сущСствуСт, вмСсто INSERT ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ UPDATE). Π’ Π½ΠΎΠ²ΠΎΠΉ вСрсии Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π±Π»ΠΎΠΊΠΎΠ² «ON CONFLICT», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ Π² порядкС слСдования. Π’ послСднСм Π±Π»ΠΎΠΊΠ΅ «ON CONFLICT» Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ опрСдСлСния ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° для использования «DO UPDATE».
  • Π’ опСрациях DELETE, INSERT ΠΈ UPDATE Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° выраТСния RETURNING, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ вывСсти содСрТимоС ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠΉ, вставлСнной ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½ΠΎΠΉ записи. НапримСр, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ «insert into … returning id» Π²Π΅Ρ€Π½Ρ‘Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠΉ строки, Π° «update … set price = price * 1.10 returning price» Π²Π΅Ρ€Π½Ρ‘Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ price.
  • Для ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Ρ… Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ (Common Table Expression, CTE), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Π½Π°Π±ΠΎΡ€Ρ‹, Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° WITH, Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½ Π²Ρ‹Π±ΠΎΡ€ Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² «MATERIALIZED» ΠΈ «NOT MATERIALIZED». «MATERIALIZED» ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π² прСдставлСнии запроса Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ физичСской Ρ‚Π°Π±Π»ΠΈΡ†Π΅ с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· этой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π° ΠΏΡ€ΠΈ «NOT MATERIALIZED» ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Π΅ запросы. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π² SQLite ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ использовался Ρ€Π΅ΠΆΠΈΠΌ «NOT MATERIALIZED», Π½ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ для CTE, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π°, ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½ Π½Π° «MATERIALIZED».
  • Π‘ΠΎΠΊΡ€Π°Ρ‰Π΅Π½ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ VACUUM для Π‘Π”, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΡ… ΠΎΡ‡Π΅Π½ΡŒ большиС значСния с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ TEXT ΠΈΠ»ΠΈ BLOB.
  • ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Π° ΠΈ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° запросов:
    • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈ использовании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ min ΠΈ max с Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ «IN».
    • УскорСно Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° EXISTS.
    • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Ρ€Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ подзапросов ΠΈΠ· Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ UNION ALL, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² составС JOIN.
    • ЗадСйствован индСкс для Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ IS NOT NULL.
    • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ «x IS NULL» ΠΈ «x IS NOT NULL» Π² FALSE ΠΈΠ»ΠΈ TRUE для столбцов, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ «NOT NULL».
    • ΠŸΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π² UPDATE, Ссли опСрация Π½Π΅ мСняСт столбцов, связанных с внСшним ΠΊΠ»ΡŽΡ‡ΠΎΠΌ.
    • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ частСй Π±Π»ΠΎΠΊΠ° WHERE Π² подзапросы, содСрТащиС ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ссли эти части ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ с константами ΠΈ копиями Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ· Π±Π»ΠΎΠΊΠΎΠ² «PARTITION BY», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² ΠΎΠΊΠΎΠ½Π½Ρ‹Ρ… функциях.
  • ИзмСнСния Π² интСрфСйсС ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки:
    • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° «.filectrl data_version».
    • Π’ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ… «.once» ΠΈ «.output» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ с использованиСм Π½Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ² («|»).
    • Π’ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ «.stats» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ «stmt» ΠΈ «vmstep» для Π²Ρ‹Π²ΠΎΠ΄Π° статистики ΠΏΠΎ выраТСниям ΠΈ счётчиков Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru