uncle6me-web
|
c497ec418e
|
test(kbdb): 用真 SQLite 釘住 #94 的前後對照與跳脫邊界
只驗 SQL 形狀不算數——「% 被當成萬用字元」這件事,只有真的跑一次 LIKE 才看得見。
用 node:sqlite(與 library-map/embed-backfill 同款治具)跑真 SQL,每組驗收同時跑
「舊寫法」與「現行寫法」,讓前後對照直接長在測試裡。
守五件事:
① 前後對照 —— 100% / owner_id / 單打符號,改前撈回不相干的、改後只回字面命中
② 跳脫邊界 —— `\` 不跳脫會漏掉真正的 `C:\`,也會讓 `_` 的跳脫失效、萬用字元漏回來
③ ESCAPE 齊全 —— 沒有任何 `content LIKE ?` 是裸的(漏一個就等於那條路沒修)
④ 不退化 —— 不含 % _ \ 的查詢 pattern 逐字不變,最熱路徑仍是單一 LIKE
⑤ byte 預算 —— 滿是 % 的長查詢仍在 D1 的 50 bytes 上限內(承 2026-08-03 的 500 修復)
反向驗證(把修法拿掉,兩半分別驗,兩半都是承重的):
拿掉跳脫 → 8 failed / 204 passed,紅的正是病徵本身
拿掉 ESCAPE → 5 failed / 207 passed(含既有 search-long-query 2 條)
復原後 → 19 檔 213 pass(基線 18 檔 197 pass)
|
2026-08-12 11:59:36 +08:00 |
|