Skip to content

🐛 fix(codegen): 统一分析结果与模板导入映射 - #168

Merged
ZhaoXingPeng merged 2 commits into
fix/165-codegen-path-normalizationfrom
fix/167-codegen-imports
Sep 9, 2026
Merged

ZhaoXingPeng merged 2 commits into
fix/165-codegen-path-normalizationfrom
fix/167-codegen-imports

Conversation

@ZhaoXingPeng

Copy link
Copy Markdown
Owner

关联 Issue

Closes #167

背景(Situation)

CodegenAnalyzer._calculate_imports_needed() 目前自行遍历 Java 类型,只添加 BigDecimalLocalDateLocalTimeLocalDateTime 四种导入。TemplateContextBuilder._build_imports() 已通过 DialectAdapter 支持更多类型,例如 PostgreSQL TIMESTAMPTZ -> OffsetDateTime。同一张表因此会出现分析响应 imports_needed 不完整、但实际模板上下文已有 import 的不一致,调用方若依据分析结果组装代码会漏导入。

任务(Task)

让代码生成分析结果复用模板上下文的方言映射和导入表,保持返回字段、排序、数据库类型参数和未知类型语义不变。

行动(Action)

  • 提交:2ef0ac0
  • _calculate_imports_needed() 改为调用 TemplateContextBuilder._build_imports(..., template_category="Default"),消除重复的四类型分支。
  • 新增 PostgreSQL TIMESTAMPTZ + Decimal 回归,断言 OffsetDateTimeBigDecimal 导入完整、去重且排序稳定。
  • 机械格式化本次触碰的历史文件,以满足 changed-file format gate;没有改变其他生成逻辑。
  • 不调整 PostgreSQL UUID 既有语义、模板内容、MCP 输入 schema 或真实数据库行为。

验证(Verification)

环境:Windows,仓库 .venv,Python 3.12.12,pytest 9.1.1,Ruff 来自 .venv

python -m pytest tests/unit/test_codegen_analyzer.py tests/unit/test_template_context_builder.py -q
73 passed in 4.00s

python -m pytest tests/unit/ -q
689 passed in 12.07s

ruff check src/ tests/ scripts/
All checks passed!

ruff format --check(本次修改的 CodegenAnalyzer 与测试文件)
2 files already formatted

git diff --check
无输出

实验与证据(Evidence)

固定输入包含 PostgreSQL TIMESTAMPTZDECIMAL(12,2) 两列。修复前手写分支无法返回 java.time.OffsetDateTime;当前分析器与模板上下文均返回 java.math.BigDecimaljava.time.OffsetDateTime,且输出按字典序排列。未运行真实 MySQL/PostgreSQL 或性能实验,因此不宣称生产方言覆盖或性能提升。

兼容性、风险与回滚

  • 公共分析结果字段、imports 字符串、排序和同步/异步 API 保持不变;新增导入只补齐模板已支持的类型。
  • 风险:后续方言若新增 Java 类型,导入表由模板上下文集中维护,需同步对应映射和测试。
  • 回滚:恢复单一提交 2ef0ac0 即可,不涉及数据库、配置迁移或生成物。
  • 本 PR base 为 fix/165-codegen-path-normalization,仅包含本主题一个新增提交;待前置代码生成 PR 按顺序合并后再切回 main

后续(Next)

合并前仅对最终 HEAD 检查一次 required checks;后续可继续盘点 legacy TemplateContext 与新 TemplateContextBuilder 的重复导入逻辑,另开 Issue 处理。

@ZhaoXingPeng

Copy link
Copy Markdown
Owner Author

实现完成(2026-09-09)

当前结论

Issue #167 已完成。CodegenAnalyzer 不再维护独立的四类型 imports 分支,而是复用 TemplateContextBuilder 的方言感知导入表;分析结果与最终模板上下文因此使用同一来源。

变更与设计取舍

  • 提交:2ef0ac0
  • 输入/输出字段未变,只替换 imports 计算实现;返回值仍为去重后的稳定排序列表。
  • 选择复用现有私有 helper,是因为两者位于同一生成模块且无需新增公共 API;没有引入第二份类型表,也没有改变 UUID 等既有方言语义。
  • 本 PR 以 fix/165-codegen-path-normalization 为 base,仅新增本主题一个提交。

验证与证据

  • python -m pytest tests/unit/test_codegen_analyzer.py tests/unit/test_template_context_builder.py -q73 passed in 4.00s
  • 新增回归覆盖 PostgreSQL TIMESTAMPTZ 与 Decimal,验证 OffsetDateTime/BigDecimal imports 完整。
  • ruff check src/ tests/ scripts/All checks passed!
  • ruff format --check(2 个变更 Python 文件):2 files already formatted

兼容性与下一步

@ZhaoXingPeng

Copy link
Copy Markdown
Owner Author

验证完成(2026-09-09)

当前结论

完整单元套件和定向方言回归均通过。新测试证明 imports 计算不再遗漏模板上下文已经支持的 PostgreSQL 时区类型;没有真实数据库或性能结论被写入本 PR。

变更与设计取舍

  • 提交:2ef0ac0
  • 固定列输入:TIMESTAMPTZDECIMAL(12,2);预期导入分别为 java.time.OffsetDateTimejava.math.BigDecimal
  • 当前结果:两项均返回且按字典序稳定排列;基础类型不会产生额外导入。
  • 机械格式化仅为 changed-file gate 所需,不改变运行时语义。

验证与证据

  • python -m pytest tests/unit/ -q689 passed in 12.07s
  • ruff check src/ tests/ scripts/All checks passed!
  • ruff format --check(本次变更文件):2 files already formatted
  • git diff --check:无输出。
  • 未运行 CI、真实 MySQL/PostgreSQL、Java/Maven 或性能实验。

兼容性与下一步

  • 公共分析字段和 API 保持不变;回滚提交为 2ef0ac0
  • 合并前只检查一次最终 HEAD 的 required checks;后续 legacy context 的重复逻辑另开 Issue。

* 🐛 fix(mcp): 补齐 PostgreSQL 时间类型别名映射

* 🐛 fix(codegen): 补齐自增主键模板上下文标记 (#172)

* 🐛 fix(codegen): 补齐自增主键模板上下文标记

* 🐛 fix(generator): 修正遗留实体上下文自增标志 (#174)

* 🐛 fix(generator): 修正遗留实体上下文自增标志

* 🐛 fix(generator): 保留 Java 属性名内部大小写 (#176)

* 🐛 fix(generator): 保留 Java 属性名内部大小写

* 🐛 fix(template): 仅为自增主键启用 generated keys (#178)

* 🐛 fix(template): 仅为自增主键启用 generated keys

* 🐛 fix(codegen): 统一主键列表与列上下文 (#180)

* 🐛 fix(codegen): 统一主键列表与列上下文

* 🐛 fix(mcp): 统一描述与代码生成类型映射 (#182)

* 🐛 fix(mcp): 统一描述与代码生成类型映射

* 🐛 fix(codegen): 统一旧入口方言表名发现 (#184)

* 🐛 fix(codegen): 统一旧入口方言表名发现

* ♻️ refactor(codegen): 复用统一表名元数据合同 (#186)

* ♻️ refactor(codegen): 复用统一表名元数据合同

* 🐛 fix(codegen): 补齐批量分析表名上下文 (#188)

* 🐛 fix(codegen): 补齐批量分析表名上下文

* 🐛 fix(database): 持久化 SQLite execute_query 写入 (#190)

* 🐛 fix(database): 持久化 SQLite execute_query 写入

* 🐛 fix(governance): 对齐工具注册表数据库能力 (#192)

* 🐛 fix(governance): 对齐工具注册表数据库能力

* 🔒 security(mcp-apps): 收紧代码 diff 路径边界 (#194)

* 🔒 security(mcp-apps): 收紧代码 diff 路径边界

* 🐛 fix(codegen): 对齐生成文件写入统计与结果状态 (#196)

* 🐛 fix(codegen): 对齐生成文件写入统计与结果状态

* ✨ feat(codegen): 统一 DTO 与 VO 生成选项合同 (#198)

* ✨ feat(codegen): 统一 DTO 与 VO 生成选项合同

* 📚 docs(governance): 固化 GitHub 元数据正文门禁 (#200)

* 📚 docs(governance): 固化 GitHub 元数据正文门禁

* 🐛 fix(database): 回滚失败 SQLite 查询事务 (#202)

* 🐛 fix(database): 回滚失败 SQLite 查询事务

* 🐛 fix(schema): 规范图算法重复表输入 (#204)

* 🐛 fix(schema): 规范图算法重复表输入

* 🐛 fix(dependencies): 隔离版本分析状态 (#206)

* 🐛 fix(dependencies): 隔离版本分析状态

* 🐛 fix(cli): 统一解析 MCP 响应 (#208)

* 🐛 fix(cli): 统一解析 MCP 响应

* ✨ feat(connection): 增加 MCP 连接释放工具 (#210)

* ✨ feat(connection): 增加 MCP 连接释放工具

* ⚡ perf(mcp): 隔离同步数据库调用与事件循环 (#212)
@ZhaoXingPeng
ZhaoXingPeng merged commit cf259ad into fix/165-codegen-path-normalization Sep 9, 2026
ZhaoXingPeng added a commit that referenced this pull request Sep 9, 2026
* 🐛 fix(codegen): 规范无前缀模板输出路径

* 🐛 fix(codegen): 统一分析结果与模板导入映射 (#168)

* 🐛 fix(codegen): 统一分析结果与模板导入映射

* 🐛 fix(mcp): 补齐 PostgreSQL 时间类型别名映射 (#170)

* 🐛 fix(mcp): 补齐 PostgreSQL 时间类型别名映射

* 🐛 fix(codegen): 补齐自增主键模板上下文标记 (#172)

* 🐛 fix(codegen): 补齐自增主键模板上下文标记

* 🐛 fix(generator): 修正遗留实体上下文自增标志 (#174)

* 🐛 fix(generator): 修正遗留实体上下文自增标志

* 🐛 fix(generator): 保留 Java 属性名内部大小写 (#176)

* 🐛 fix(generator): 保留 Java 属性名内部大小写

* 🐛 fix(template): 仅为自增主键启用 generated keys (#178)

* 🐛 fix(template): 仅为自增主键启用 generated keys

* 🐛 fix(codegen): 统一主键列表与列上下文 (#180)

* 🐛 fix(codegen): 统一主键列表与列上下文

* 🐛 fix(mcp): 统一描述与代码生成类型映射 (#182)

* 🐛 fix(mcp): 统一描述与代码生成类型映射

* 🐛 fix(codegen): 统一旧入口方言表名发现 (#184)

* 🐛 fix(codegen): 统一旧入口方言表名发现

* ♻️ refactor(codegen): 复用统一表名元数据合同 (#186)

* ♻️ refactor(codegen): 复用统一表名元数据合同

* 🐛 fix(codegen): 补齐批量分析表名上下文 (#188)

* 🐛 fix(codegen): 补齐批量分析表名上下文

* 🐛 fix(database): 持久化 SQLite execute_query 写入 (#190)

* 🐛 fix(database): 持久化 SQLite execute_query 写入

* 🐛 fix(governance): 对齐工具注册表数据库能力 (#192)

* 🐛 fix(governance): 对齐工具注册表数据库能力

* 🔒 security(mcp-apps): 收紧代码 diff 路径边界 (#194)

* 🔒 security(mcp-apps): 收紧代码 diff 路径边界

* 🐛 fix(codegen): 对齐生成文件写入统计与结果状态 (#196)

* 🐛 fix(codegen): 对齐生成文件写入统计与结果状态

* ✨ feat(codegen): 统一 DTO 与 VO 生成选项合同 (#198)

* ✨ feat(codegen): 统一 DTO 与 VO 生成选项合同

* 📚 docs(governance): 固化 GitHub 元数据正文门禁 (#200)

* 📚 docs(governance): 固化 GitHub 元数据正文门禁

* 🐛 fix(database): 回滚失败 SQLite 查询事务 (#202)

* 🐛 fix(database): 回滚失败 SQLite 查询事务

* 🐛 fix(schema): 规范图算法重复表输入 (#204)

* 🐛 fix(schema): 规范图算法重复表输入

* 🐛 fix(dependencies): 隔离版本分析状态 (#206)

* 🐛 fix(dependencies): 隔离版本分析状态

* 🐛 fix(cli): 统一解析 MCP 响应 (#208)

* 🐛 fix(cli): 统一解析 MCP 响应

* ✨ feat(connection): 增加 MCP 连接释放工具 (#210)

* ✨ feat(connection): 增加 MCP 连接释放工具

* ⚡ perf(mcp): 隔离同步数据库调用与事件循环 (#212)
ZhaoXingPeng added a commit that referenced this pull request Sep 9, 2026
* 🐛 fix(codegen): 规范无前缀模板输出路径

* 🐛 fix(codegen): 统一分析结果与模板导入映射 (#168)

* 🐛 fix(codegen): 统一分析结果与模板导入映射

* 🐛 fix(mcp): 补齐 PostgreSQL 时间类型别名映射 (#170)

* 🐛 fix(mcp): 补齐 PostgreSQL 时间类型别名映射

* 🐛 fix(codegen): 补齐自增主键模板上下文标记 (#172)

* 🐛 fix(codegen): 补齐自增主键模板上下文标记

* 🐛 fix(generator): 修正遗留实体上下文自增标志 (#174)

* 🐛 fix(generator): 修正遗留实体上下文自增标志

* 🐛 fix(generator): 保留 Java 属性名内部大小写 (#176)

* 🐛 fix(generator): 保留 Java 属性名内部大小写

* 🐛 fix(template): 仅为自增主键启用 generated keys (#178)

* 🐛 fix(template): 仅为自增主键启用 generated keys

* 🐛 fix(codegen): 统一主键列表与列上下文 (#180)

* 🐛 fix(codegen): 统一主键列表与列上下文

* 🐛 fix(mcp): 统一描述与代码生成类型映射 (#182)

* 🐛 fix(mcp): 统一描述与代码生成类型映射

* 🐛 fix(codegen): 统一旧入口方言表名发现 (#184)

* 🐛 fix(codegen): 统一旧入口方言表名发现

* ♻️ refactor(codegen): 复用统一表名元数据合同 (#186)

* ♻️ refactor(codegen): 复用统一表名元数据合同

* 🐛 fix(codegen): 补齐批量分析表名上下文 (#188)

* 🐛 fix(codegen): 补齐批量分析表名上下文

* 🐛 fix(database): 持久化 SQLite execute_query 写入 (#190)

* 🐛 fix(database): 持久化 SQLite execute_query 写入

* 🐛 fix(governance): 对齐工具注册表数据库能力 (#192)

* 🐛 fix(governance): 对齐工具注册表数据库能力

* 🔒 security(mcp-apps): 收紧代码 diff 路径边界 (#194)

* 🔒 security(mcp-apps): 收紧代码 diff 路径边界

* 🐛 fix(codegen): 对齐生成文件写入统计与结果状态 (#196)

* 🐛 fix(codegen): 对齐生成文件写入统计与结果状态

* ✨ feat(codegen): 统一 DTO 与 VO 生成选项合同 (#198)

* ✨ feat(codegen): 统一 DTO 与 VO 生成选项合同

* 📚 docs(governance): 固化 GitHub 元数据正文门禁 (#200)

* 📚 docs(governance): 固化 GitHub 元数据正文门禁

* 🐛 fix(database): 回滚失败 SQLite 查询事务 (#202)

* 🐛 fix(database): 回滚失败 SQLite 查询事务

* 🐛 fix(schema): 规范图算法重复表输入 (#204)

* 🐛 fix(schema): 规范图算法重复表输入

* 🐛 fix(dependencies): 隔离版本分析状态 (#206)

* 🐛 fix(dependencies): 隔离版本分析状态

* 🐛 fix(cli): 统一解析 MCP 响应 (#208)

* 🐛 fix(cli): 统一解析 MCP 响应

* ✨ feat(connection): 增加 MCP 连接释放工具 (#210)

* ✨ feat(connection): 增加 MCP 连接释放工具

* ⚡ perf(mcp): 隔离同步数据库调用与事件循环 (#212)
ZhaoXingPeng added a commit that referenced this pull request Sep 9, 2026
* 🐛 fix(mcp): 收口全部 MCP 响应 JSON 序列化

* 🐛 fix(codegen): 规范无前缀模板输出路径 (#166)

* 🐛 fix(codegen): 规范无前缀模板输出路径

* 🐛 fix(codegen): 统一分析结果与模板导入映射 (#168)

* 🐛 fix(codegen): 统一分析结果与模板导入映射

* 🐛 fix(mcp): 补齐 PostgreSQL 时间类型别名映射 (#170)

* 🐛 fix(mcp): 补齐 PostgreSQL 时间类型别名映射

* 🐛 fix(codegen): 补齐自增主键模板上下文标记 (#172)

* 🐛 fix(codegen): 补齐自增主键模板上下文标记

* 🐛 fix(generator): 修正遗留实体上下文自增标志 (#174)

* 🐛 fix(generator): 修正遗留实体上下文自增标志

* 🐛 fix(generator): 保留 Java 属性名内部大小写 (#176)

* 🐛 fix(generator): 保留 Java 属性名内部大小写

* 🐛 fix(template): 仅为自增主键启用 generated keys (#178)

* 🐛 fix(template): 仅为自增主键启用 generated keys

* 🐛 fix(codegen): 统一主键列表与列上下文 (#180)

* 🐛 fix(codegen): 统一主键列表与列上下文

* 🐛 fix(mcp): 统一描述与代码生成类型映射 (#182)

* 🐛 fix(mcp): 统一描述与代码生成类型映射

* 🐛 fix(codegen): 统一旧入口方言表名发现 (#184)

* 🐛 fix(codegen): 统一旧入口方言表名发现

* ♻️ refactor(codegen): 复用统一表名元数据合同 (#186)

* ♻️ refactor(codegen): 复用统一表名元数据合同

* 🐛 fix(codegen): 补齐批量分析表名上下文 (#188)

* 🐛 fix(codegen): 补齐批量分析表名上下文

* 🐛 fix(database): 持久化 SQLite execute_query 写入 (#190)

* 🐛 fix(database): 持久化 SQLite execute_query 写入

* 🐛 fix(governance): 对齐工具注册表数据库能力 (#192)

* 🐛 fix(governance): 对齐工具注册表数据库能力

* 🔒 security(mcp-apps): 收紧代码 diff 路径边界 (#194)

* 🔒 security(mcp-apps): 收紧代码 diff 路径边界

* 🐛 fix(codegen): 对齐生成文件写入统计与结果状态 (#196)

* 🐛 fix(codegen): 对齐生成文件写入统计与结果状态

* ✨ feat(codegen): 统一 DTO 与 VO 生成选项合同 (#198)

* ✨ feat(codegen): 统一 DTO 与 VO 生成选项合同

* 📚 docs(governance): 固化 GitHub 元数据正文门禁 (#200)

* 📚 docs(governance): 固化 GitHub 元数据正文门禁

* 🐛 fix(database): 回滚失败 SQLite 查询事务 (#202)

* 🐛 fix(database): 回滚失败 SQLite 查询事务

* 🐛 fix(schema): 规范图算法重复表输入 (#204)

* 🐛 fix(schema): 规范图算法重复表输入

* 🐛 fix(dependencies): 隔离版本分析状态 (#206)

* 🐛 fix(dependencies): 隔离版本分析状态

* 🐛 fix(cli): 统一解析 MCP 响应 (#208)

* 🐛 fix(cli): 统一解析 MCP 响应

* ✨ feat(connection): 增加 MCP 连接释放工具 (#210)

* ✨ feat(connection): 增加 MCP 连接释放工具

* ⚡ perf(mcp): 隔离同步数据库调用与事件循环 (#212)
@ZhaoXingPeng
ZhaoXingPeng deleted the fix/167-codegen-imports branch September 9, 2026 02:30
ZhaoXingPeng added a commit that referenced this pull request Sep 9, 2026
* 🐛 fix(mcp): 收口全部 MCP 响应 JSON 序列化

* 🐛 fix(codegen): 规范无前缀模板输出路径 (#166)

* 🐛 fix(codegen): 规范无前缀模板输出路径

* 🐛 fix(codegen): 统一分析结果与模板导入映射 (#168)

* 🐛 fix(codegen): 统一分析结果与模板导入映射

* 🐛 fix(mcp): 补齐 PostgreSQL 时间类型别名映射 (#170)

* 🐛 fix(mcp): 补齐 PostgreSQL 时间类型别名映射

* 🐛 fix(codegen): 补齐自增主键模板上下文标记 (#172)

* 🐛 fix(codegen): 补齐自增主键模板上下文标记

* 🐛 fix(generator): 修正遗留实体上下文自增标志 (#174)

* 🐛 fix(generator): 修正遗留实体上下文自增标志

* 🐛 fix(generator): 保留 Java 属性名内部大小写 (#176)

* 🐛 fix(generator): 保留 Java 属性名内部大小写

* 🐛 fix(template): 仅为自增主键启用 generated keys (#178)

* 🐛 fix(template): 仅为自增主键启用 generated keys

* 🐛 fix(codegen): 统一主键列表与列上下文 (#180)

* 🐛 fix(codegen): 统一主键列表与列上下文

* 🐛 fix(mcp): 统一描述与代码生成类型映射 (#182)

* 🐛 fix(mcp): 统一描述与代码生成类型映射

* 🐛 fix(codegen): 统一旧入口方言表名发现 (#184)

* 🐛 fix(codegen): 统一旧入口方言表名发现

* ♻️ refactor(codegen): 复用统一表名元数据合同 (#186)

* ♻️ refactor(codegen): 复用统一表名元数据合同

* 🐛 fix(codegen): 补齐批量分析表名上下文 (#188)

* 🐛 fix(codegen): 补齐批量分析表名上下文

* 🐛 fix(database): 持久化 SQLite execute_query 写入 (#190)

* 🐛 fix(database): 持久化 SQLite execute_query 写入

* 🐛 fix(governance): 对齐工具注册表数据库能力 (#192)

* 🐛 fix(governance): 对齐工具注册表数据库能力

* 🔒 security(mcp-apps): 收紧代码 diff 路径边界 (#194)

* 🔒 security(mcp-apps): 收紧代码 diff 路径边界

* 🐛 fix(codegen): 对齐生成文件写入统计与结果状态 (#196)

* 🐛 fix(codegen): 对齐生成文件写入统计与结果状态

* ✨ feat(codegen): 统一 DTO 与 VO 生成选项合同 (#198)

* ✨ feat(codegen): 统一 DTO 与 VO 生成选项合同

* 📚 docs(governance): 固化 GitHub 元数据正文门禁 (#200)

* 📚 docs(governance): 固化 GitHub 元数据正文门禁

* 🐛 fix(database): 回滚失败 SQLite 查询事务 (#202)

* 🐛 fix(database): 回滚失败 SQLite 查询事务

* 🐛 fix(schema): 规范图算法重复表输入 (#204)

* 🐛 fix(schema): 规范图算法重复表输入

* 🐛 fix(dependencies): 隔离版本分析状态 (#206)

* 🐛 fix(dependencies): 隔离版本分析状态

* 🐛 fix(cli): 统一解析 MCP 响应 (#208)

* 🐛 fix(cli): 统一解析 MCP 响应

* ✨ feat(connection): 增加 MCP 连接释放工具 (#210)

* ✨ feat(connection): 增加 MCP 连接释放工具

* ⚡ perf(mcp): 隔离同步数据库调用与事件循环 (#212)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant