审批质询遮罩收口:说明跟上实现——「夹住」越过的连接词含异或、条件长到细看不过来时多遮几个阈值写进已知局限

- 模块说明的已知局限补一句:条件长到细看不过来(PIN_WORK)时,两边都隔开的一律按夹住算,会多遮几个阈值
- 测试说明对齐:同一个条件里夹住的那组用例越过的连接词含异或(XOR 用例),HAVING 的用例已挪到自己那条测试;年龄段那条
  补上说明
This commit is contained in:
ThearchyHelios
2026-10-06 12:32:48 +08:00
parent f0e97f614f
commit 8ca750d7ee
2 changed files with 5 additions and 3 deletions
+2 -1
View File
@@ -40,7 +40,8 @@
安全,宁可多遮;数个数要用 COUNT。按遮罩列分档的 CASE(CASE WHEN age < 30 THEN '30岁以下' …)同理,标签列整列遮,
标签文字也成了遮罩值,SQL 和回答正文里写着的同样的字一并换掉(换掉的标签不是数,不牵连阈值)
- 「夹住某一个值」只在同一个条件里认(_pinned):把找值拆进子查询、CTE 的写法(WHERE age >= 25 AND id IN
(SELECT id FROM t WHERE age <= 25))认不出,两个边界都当阈值照原样留着
(SELECT id FROM t WHERE age <= 25))认不出,两个边界都当阈值照原样留着;反过来,条件长到细看不过来(PIN_WORK)时,
两边都隔开的一律按夹住算,会多遮几个阈值
- 遮罩值最多收 SECRETS_MAX 种写法,再多的按值认不出(按列遮照旧)
"""
from __future__ import annotations
+3 -2
View File
@@ -356,8 +356,8 @@ def test_a_range_that_pins_a_single_value_is_a_lookup(phones, sql, shown):
"SELECT COUNT(*) FROM sales WHERE age >= 已遮罩 XOR age > 已遮罩"),
])
def test_a_value_pinned_within_one_condition_is_still_a_lookup(phones, kind, sql, shown):
"""「夹住某一个值」只在同一个条件里认(从比较往上只越过且、或、非、括号),同一个条件里夹住的照样换:旁边还有
别的条件、写在 CASE WHEN 或 HAVING 里、整数的开区间。"""
"""「夹住某一个值」只在同一个条件里认(从比较往上只越过且、或、非、异或、括号),同一个条件里夹住的照样换:旁边
还有别的条件、写在 CASE WHEN 里、整数的开区间、XOR。"""
assert inquiry_mod._scrub_sql(sql, phones, {"buyer_phone", "age"}, kind) == shown
@@ -411,6 +411,7 @@ def ages() -> inquiry_mod._Secrets:
"COUNT(*) AS 人数 FROM sales GROUP BY 1", {"18", "30", "45"}),
])
def test_overlapping_age_bands_are_thresholds(ages, sql, shown):
"""年龄段的两个 WHEN 分支共用边界 30:同上,是分档的界。"""
assert inquiry_mod._scrub_sql(sql, ages, {"age"}, "sqlite") == sql
assert inquiry_mod._shown_literals([(sql, "sqlite", {"age"})], ages) == shown