面向 MyBatis SQL 的分析与优化工具链,支持从扫描到补丁应用的可恢复工作流。
- 端到端流程:
run -> status/resume -> report -> apply - 可恢复执行:支持中断后继续,支持
report-rebuild - 产物可追溯:
runs/<run-id>/下保留状态、报告与中间产物 - proof-driven patching:
validate持久化patchTarget,patch_generate只消费该 contract - 自动补丁门槛:仅对 frozen safe-baseline families 输出
AUTO_PATCH,且必须同时通过 replay、syntax、git apply --check - 支持数据库:
postgresql、mysql(5.6+,不含 MariaDB)
# 设置 PYTHONPATH
export PYTHONPATH=$(pwd)/python
# 或在每次命令前添加
PYTHONPATH=python python3 scripts/sqlopt_cli.py --helpPYTHONPATH=python python3 scripts/sqlopt_cli.py run --config sqlopt.yml
PYTHONPATH=python python3 scripts/sqlopt_cli.py status
PYTHONPATH=python python3 scripts/sqlopt_cli.py resume
PYTHONPATH=python python3 scripts/sqlopt_cli.py apply如果 status.next_action=report-rebuild:
PYTHONPATH=python python3 scripts/sqlopt_cli.py run --config sqlopt.yml --to-stage report --run-id <run-id>PYTHONPATH=python python3 scripts/sqlopt_cli.py --help
PYTHONPATH=python python3 scripts/sqlopt_cli.py run --help
PYTHONPATH=python python3 scripts/sqlopt_cli.py resume --help
PYTHONPATH=python python3 scripts/sqlopt_cli.py status --help
PYTHONPATH=python python3 scripts/sqlopt_cli.py apply --help
PYTHONPATH=python python3 scripts/sqlopt_cli.py validate-config --config sqlopt.yml局部调试优先:
PYTHONPATH=python python3 scripts/sqlopt_cli.py run --config sqlopt.yml \
--mapper-path src/main/resources/com/example/mapper/user/advanced_user_mapper.xml \
--sql-key demo.user.advanced.listUsersFilteredAliased当前推荐:日常开发优先局部 run,full run 只用于阶段验收。
- PostgreSQL 方言(如
ILIKE)在 MySQL 平台不会自动兼容 - 此类语法问题会在 report 中以
OPTIMIZE_DB_EXPLAIN_SYNTAX_ERROR暴露 status/resume/apply省略--run-id时自动选择最新 run(可用--project限定目录)
python3 -m pytest -q
python3 scripts/ci/release_acceptance.py测试与 harness 目录当前分层:
tests/unit/:单元测试tests/contract/:契约测试tests/harness/engine/:python/sqlopt/devtools/harness/自测tests/harness/workflow/:运行控制与 golden workflow 场景tests/harness/fixture/:sample project / fixture 场景tests/ci/:脚本与验收入口测试
python/sqlopt/devtools/harness/ 是正式开发工具层,当前包含 runtime / assertions / scenarios / benchmark 四层;tests/harness/ 只负责验证这层工具和具体场景。