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