• Data Governance Dev's avatar
    feat(web3): 查询改分页拉取 + 中断按钮 + 后端 session 隔离 · 63b3b770
    Data Governance Dev authored
    把原来 /api/queries/run 单次同步全表扫描改成 3 个端点:
      POST /api/queries/start    COUNT + 编译规则 + 建 session(UUID)
      POST /api/queries/page     按页号拉一页,跑规则,只返回不合规的行
      POST /api/queries/cancel   摘掉 session(best-effort 中断)
    
    session_manager.py 用模块级 dict + Lock 存 QuerySession,TTL 30min 懒清理。
    每页新开 DBConnection → fetchall(避开 cursor 生命周期管理),~50ms 重连可接受。
    
    dialect 兼容:
      mysql    : LIMIT <n> OFFSET <m>
      dameng   : OFFSET <m> ROWS FETCH NEXT <n> ROWS ONLY (SQL:2008)
      oracle   : ROWNUM 三层嵌套(兼容 11g/10g;T4 任务实测 11g 服务端用 OFFSET/FETCH NEXT 报 ORA-00933)
      postgres / sqlserver : 同 dameng
    
    前端友好的关键点:
      - /start 一次返回 fields(含 rule_list + field_comment),前端 resultFields 不再变
      - 后端给每行注入 __row_index = (page_no-1)*page_size + idx,给前端做 Vue row-key
      - /page 失败不摘 session,让前端可以重试或走 /cancel
    
    测试:新增 web3/tests/test_queries.py 15 条(start / page / cancel / paginate_sql / 并发 / TTL),
    老的 test_run_query_only_bad_rows.py 和 test_rule_types_e2e.py 适配新端点(删 max_rows 那条,
    end-to-end 改成 /start + /page 聚合)。73 条全过。
    63b3b770
queries.py 17.1 KB