SQLite 3.51.0 發佈 - 新聞 詳情

SQLite 是一個 C 語言庫,實現了一個小型、快速、獨立、高可靠性、全功能的 SQL 數據庫引擎。SQLite 是世界上使用最多的數據庫引擎。SQLite 的源代碼屬於公共領域,每個人都可以免費使用,用於任何目的。

SQLite 3.51.0 現已發佈,更新內容如下:

  1. sqlite3.h中的新宏:
    1. SQLITE_SCM_BRANCH → 獲取源代碼的分支名稱。
    2. SQLITE_SCM_TAGS → 源代碼簽入時以空格分隔的標籤列表。
    3. SQLITE_SCM_DATETIME → 源代碼簽入的 ISO-8601 日期和時間。
  2. 新增的兩個 JSON 函數 jsonb_each() 和 jsonb_tree() 與現有的 json_each() 和 json_tree() 函數的功能相同,只是當“type”為“array”或“object”時,它們會為“value”列返回 JSONB。
  3.  carray  percentile擴展現在已內置到合併中,但默認情況下處於禁用狀態,必須在編譯時分別使用 -DSQLITE_ENABLE_CARRAY 和/或-DSQLITE_ENABLE_PERCENTILE 選項激活。
  4. Enhancements to TCL Interface:
    1. eval命令中添加-asdictflag,使其將行數據設置為 dict 而不是 array。
    2. 用户自定義函數現在可以break返回 SQL NULL 值。
  5. CLI enhancements:
    1. 將“.timer”的精度提高到微秒級。
    2. 增強“box”和“column”格式模式,以處理雙倍寬度的字符。
    3. “.imposter”命令提供只讀的 imposter tables,可與 VACUUM 一起使用,並且不需要--unsafe-testing選項。
    4. 將 --ifexists 選項添加到 CLI 命令行選項和 .open 命令中。
    5. 將“.width”命令設置的列寬限制在 30,000 或以下,因為沒有充分的理由使用更寬的列,且寬列易被惡意利用
  6. 性能提升:
    1. 提交 read transaction 時,應使用更少的 CPU 週期。
    2. 及早發現由於一個或多個表中沒有行而導致的連接未返回任何行。
    3. 若子查詢結果不影響整體表達式結果,則避免對 scalar subqueries 進行評估。
    4. 當使用“ BETWEEN :x FOLLOWING AND :y FOLLOWING ”且 :y 值較大 時,窗口函數查詢速度更快。
  7. 添加 PRAGMA wal_checkpoint=NOOP; 命令和 sqlite3_wal_checkpoint_v2() 的 SQLITE_CHECKPOINT_NOOP 參數。
  8. 添加 sqlite3_set_errmsg() API 供擴展程序使用。
  9. 添加 sqlite3_db_status64() API,其工作方式與現有的 sqlite3_db_status() API相同 ,只是它返回 64 位結果。
  10. 將 SQLITE_DBSTATUS_TEMPBUF_SPILL 選項添加到 sqlite3_db_status() 和 sqlite3_db_status64() 接口。
  11. 在會話擴展中添加 sqlite3changeset_apply_v3() 接口。
  12. 對於內置的 printf() 函數和 format() SQL 函數,如果省略了“+”標誌,但存在“#”標誌,並且所有顯示的數字均為“0”,則應省略負浮點數的前導“-”。使用“%#f”或類似符號可以避免輸出類似“-0.00”的內容,而只顯示“0.00”。
  13. 改進了 FTS5 生成的錯誤消息。
  14. 強制計算列採用 STRICT 類型檢查。
  15. 改進了對 VxWorks 的支持
  16. JavaScript/WASM 現在支持 64 位 WASM。官方構建版本仍然是 32 位,但現在創建自己的 64 位構建版本就像運行“make”命令一樣簡單。
  17. 提高了對因應用程序 使用 close() 破壞 Posix advisory locks 而導致的數據庫損壞的抵抗能力。

更多詳情可查看:https://sqlite.org/releaselog/3_51_0.html