SQLite 3.53.0 來了。這個(gè)裝在 30 億臺設(shè)備里的數(shù)據(jù)庫,這次更新像極了一個(gè)老派工匠——不聲不響,但工具箱里多了幾樣趁手家伙。
最顯眼的變化是 Query Result Formatter(QRF)。簡單說,就是命令行里跑 SQL,輸出結(jié)果終于不再是一坨擠在一起的字符,而是用 Unicode 方框字符畫成了表格。數(shù)字右對齊,邊框分明,肉眼可讀性直接上了一個(gè)臺階。交互式會話默認(rèn)啟用,批量模式為了兼容性還留著老樣子——這種"新用戶爽到,老用戶不慌"的分化設(shè)計(jì),很 SQLite。
ALTER TABLE 這次能加減 NOT NULL 和 CHECK 約束了。以前想改約束?導(dǎo)出、重建、導(dǎo)入,三步走。現(xiàn)在一句 SQL 搞定,相當(dāng)于從手動(dòng)擋換成了自動(dòng)擋,雖然底層還是那臺發(fā)動(dòng)機(jī)。
查詢規(guī)劃器的優(yōu)化更值得玩味。EXCEPT、INTERSECT、UNION 這些集合操作,現(xiàn)在一律用排序合并算法,因?yàn)閷?shí)測"幾乎總是比哈希表快"。SQLite 團(tuán)隊(duì)很少說絕對詞,這次用了"always",說明測試數(shù)據(jù)夠硬。另外,EXISTS 轉(zhuǎn) JOIN 的優(yōu)化也更激進(jìn),循環(huán)嵌套的束縛松了一些。
但有個(gè)細(xì)節(jié)可能讓腳本黨炸毛:dot-command 末尾的裸分號現(xiàn)在被忽略。比如你寫了 .tables;,以前能跑,現(xiàn)在 SQLite 當(dāng)你沒寫那個(gè)分號。官方文檔里輕飄飄標(biāo)了句"可能存在不兼容問題"——翻譯過來就是,你的祖?zhèn)髂_本可能要翻車。
浮點(diǎn)數(shù)默認(rèn)精度從 15 位提到 17 位,這是 IEEE 754 雙精度的滿血值。以前少那兩位,是怕某些場景下字符串來回轉(zhuǎn)換丟精度,現(xiàn)在算力便宜了,SQLite 決定不省了。想要舊行為?sqlite3_db_config 里自己調(diào)。
Windows RT 的支持正式下線。這個(gè) 2012 年隨 Surface RT 誕生的系統(tǒng),終于從 SQLite 的代碼庫里徹底消失。技術(shù)債清理得干凈利落,不留墓碑。
最后說個(gè)冷門的:新增了一整套會話擴(kuò)展接口,允許逐個(gè)字段地往 sqlite3_changegroup 里塞數(shù)據(jù)。做數(shù)據(jù)同步的工程師應(yīng)該能get到——以前要整行整行地喂,現(xiàn)在可以細(xì)粒度操作,像從用勺子吃飯改成了用筷子。
更新日志末尾有個(gè)用戶留言挺有意思:"你們終于把 .indexes 的 PATTERN 參數(shù)修好了,我等了八年。"SQLite 的哲學(xué)從來不是什么都有,但給的東西要夠穩(wěn)。這次也不例外。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.