• Data Governance Dev's avatar
    feat(web3): 查询只返回不合规行 + 改为全表流式扫描 · 8013322d
    Data Governance Dev authored
    判定口径修正:查询结果应是「不符合」校验规则的数据,之前合规行也一起返回了。
    
    - 字段内多条规则 = 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 条用例全过。
    8013322d
test_run_query_only_bad_rows.py 9.01 KB