SQLite 3.35 發布

SQLite 3.35 版本已經發布,這是一個設計為插件庫的輕量級 DBMS。 SQLite 代碼分佈在公共領域,即可以不受限制地免費用於任何目的。 SQLite 開發人員的財務支持由專門創建的聯盟提供,該聯盟包括 Adob​​e、Oracle、Mozilla、Bentley 和 Bloomberg 等公司。

主要變化:

  • 新增了可在 SQL 中使用的內建數學函數(log2()、cos()、tg()、exp()、ln()、pow() 等)。 啟用內建函數需要使用“-DSQLITE_ENABLE_MATH_FUNCTIONS”選項進行建置。
  • 實現了對“ALTER TABLE DROP COLUMN”表達式的支持,以從表中刪除列並清除先前儲存在給定列中的資料。
  • UPSERT(添加或修改)操作的實現已擴展,允許通過諸如“INSERT ... ON CONFLICT DO NOTHING/UPDATE”之類的表達式來忽略錯誤或在無法添加時執行更新而不是插入通過“INSERT”取得資料(例如,如果一筆記錄已經存在,則可以執行UPDATE 而不是INSERT)。 新版本可讓您指定多個 ON CONFLICT 區塊,這些區塊將按順序處理。 最後一個「ON CONFLICT」區塊允許省略衝突定義參數,以便使用「DO UPDATE」。
  • DELETE、INSERT 和 UPDATE 操作支援 RETURNING 表達式,可用於顯示已刪除、插入或修改的記錄的內容。 例如,表達式「insert into...returning id」將傳回新增行的標識符,「update...setprice=price*1.10returningprice」將傳回更改後的價格值。
  • 對於允許使用透過WITH 語句指定的臨時命名結果集的公共表表達式(CTE),允許選擇「MATERIALIZED」和「NOT MATERIALIZED」模式。 「MATERIALIZED」表示將視圖中指定的查詢快取在單獨的實體表中,然後從該表中取得數據,而「NOT MATERIALIZED」則每次存取視圖時都會執行重複查詢。 SQLite 最初預設為“NOT MATERIALIZED”,但現在對於多次使用的 CTE 已更改為“MATERIALIZED”。
  • 在包含非常大的 TEXT 或 BLOB 值的資料庫上執行 VACUUM 操作時減少了記憶體消耗。
  • 已經完成了提高優化器和查詢規劃器效能的工作:
    • 新增了將 min 和 max 函數與「IN」表達式結合使用時的最佳化。
    • EXISTS 語句的執行速度已加快。
    • 實作了作為 JOIN 一部分的 UNION ALL 表達式的子查詢擴充。
    • 此索引用於 IS NOT NULL 表達式。
    • 確保對於具有“NOT NULL”屬性的列,“x IS NULL”和“x IS NOT NULL”轉換為 FALSE 或 TRUE。
    • 如果操作未變更與外鍵關聯的列,則跳過在 UPDATE 中檢查外鍵。
    • 允許將 WHERE 區塊的部分移動到包含視窗函數的子查詢中,只要這些部分僅限於使用視窗函數中使用的 PARTITION BY 區塊中的常數和表達式副本。
  • 命令列介面的變化:
    • 新增了“.filectrl data_version”命令。
    • “.once”和“.output”命令現在支援將輸出傳遞到使用未命名管道(“|”)呼叫的處理程序。
    • “stmt”和“vmstep”參數已新增至“.stats”命令中,以顯示表達式和虛擬機器計數器的統計資訊。

來源: opennet.ru

添加評論