feat(web3): 查询只返回不合规行 + 改为全表流式扫描
判定口径修正:查询结果应是「不符合」校验规则的数据,之前合规行也一起返回了。 - 字段内多条规则 = AND:任一条不满足该字段即不合规,且所有未通过的规则 都进 issues(去掉原来命中第一条就 break 的逻辑),备注列能看全原因 - 行内多个字段 = AND:任一字段不合规整行就被查出来 - 全部规则通过的行直接丢弃,不再进 rows - total 从 len(raw_rows) 改为 bad_rows,与 rows 对齐 全表扫描(原来固定 LIMIT 1000,只校验前 1000 行): - db_adapter 新增 DBConnection.iter_rows(),fetchmany 流式逐行读。 MySQL 必须用 SSDictCursor —— 普通 Cursor 是客户端缓冲的,execute 时 整个结果集就进内存了,fetchmany 省不了内存;达梦/Oracle 驱动默认 就是服务端游标,普通 cursor 即可 - SQL 去掉 LIMIT,读取与校验合成一个流式 pass,只有命中的不合规行进内存 - 请求参数 limit(扫描上限)→ max_rows(返回上限,默认 5000); 超上限后 continue 而非 break,继续扫完全表,保证 scanned / bad_rows 始终是全表真值,避免计数被截断成假数字 - 响应新增 truncated 标志 + 截断提示文案 顺带修复: - SELECT 的列从「有规则的字段」改为「有规则 ∪ show_default」, 否则勾了默认展示但没配规则的列在结果表里全空 - field_list_out 去掉对 Rule 的重复查询,抽 rules_by_field 复用 前端:runQuery 参数改 max_rows,文案改「全表扫描」,truncated 时顶部 常驻横幅 + 信息栏提示仅展示前 N 条。 测试:新增 web3/tests/test_run_query_only_bad_rows.py,临时 sqlite 当配置库 + monkeypatch DBConnection 喂假数据,不依赖真实 MySQL/达梦,9 条用例全过。
Showing
Please register or sign in to comment