docs(rules): 补 ADT Data Preview SQL 方言实测约束

真机侦察(S4T / NW 7.40)确认 data preview freestyle 解析器只接受窄 SQL 子集:
- 选择列必须逗号分隔;WHERE 不支持 =,只支持 IN / LIKE
- 现状 --where 'F=X' 会 400 并抛未捕获堆栈(非友好报错)

新增:错误速查 3 行 + 方言/元数据表对照小节(DD02T/DD40T/DD04T/DD01T + TADIR);
sap-tool-constraints 规则 9 + 自检项 10。references/ 与 .claude/rules/ 已同步。

顺带记录:info 的传输请求恒为 (无法获取)——E071 查询用的 = 在该方言必 400,异常被吞。
This commit is contained in:
吴让宇
2026-09-11 01:17:21 +08:00
parent d84099d5b3
commit a58275aa51
4 changed files with 90 additions and 0 deletions
+16
View File
@@ -120,6 +120,21 @@ python main.py read-table --name ZSAPILOT_OBJ --max-rows 50
- ❌ 把「S4T 演示机通过」表述为「CEM/生产验证通过」
- ❌ 多会话并发操作同一批对象(派下一会话前先确认前一个已退出)
## 🚫 规则 9read-table 的 `--where` 只能写 `IN` / `LIKE`
`read-table` 走 ADT Data Preview freestyle 解析器,只接受很窄的 SQL 子集。**用 `=` 会返回 400,并以未捕获异常打印堆栈**(不是友好报错)。
| 写法 | 实测结果 |
|------|----------|
| `--where "TABNAME IN ('ZMM_BIP_001_HEADER')"` | ✅ 200 |
| `--where "OBJ_NAME LIKE 'ZMM_BIP%'"` | ✅ 200 |
| `--where "TABNAME='ZMM_BIP_001_HEADER'"` | ❌ 400 `A Boolean expression was expected` |
| `--fields "A,B"`(逗号分隔) | ✅ 200 |
| `--fields "A B"`(空格分隔) | ❌ 400 要求逗号分隔 |
- 要按多个值过滤,**一次 `IN` 查完**,不要循环单点查。
- 更多方言细节与元数据表对照见 `error-handling.md`「ADT Data Preview SQL 方言」。
## 自检清单
每次执行 SAP 操作前,确认:
@@ -133,3 +148,4 @@ python main.py read-table --name ZSAPILOT_OBJ --max-rows 50
7. ✅ 我按「本地改 → 同步 → 语法检查 → 循环至 0 错误 → 激活 → 测试」执行了吗?
8. ✅ 我核实过被调函数/结构的存在性与签名了吗(E04/E05)?
9. ✅ 同一任务只有一个开发者会话在跑吗?
10.`read-table``--where` 我用的是 `IN` / `LIKE` 而不是 `=` 吗?`--fields` 是逗号分隔吗?