Выпуск СКБД 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

Дадаць каментар