Skip to content

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

Description

@ZhaoXingPeng

版本与环境

  • 受影响路径:database/codegen_tools.py 的 CodegenAnalyzer._calculate_imports_needed()。
  • 运行时:Python 3.10+,模板上下文分析和 MCP 代码生成分析响应。
  • 数据库:固定 PostgreSQL/MySQL/SQLite 类型字符串即可复现,不需要真实连接。
  • 安装方式:仓库虚拟环境,PYTHONPATH=src。

问题与预期行为

CodegenAnalyzer 当前自行遍历 Java 类型,只添加 BigDecimal、LocalDate、LocalTime 和 LocalDateTime 四种导入;TemplateContextBuilder 已通过 DialectAdapter 支持 TIMESTAMPTZ -> OffsetDateTime、Instant、UUID 和 BigInteger 等类型。同一张表会因此出现分析响应 imports_needed 不完整、实际模板上下文却已有 import 的不一致。

预期行为:分析结果与模板上下文复用同一方言映射和导入表,未知或基础类型不产生额外导入,结果稳定去重排序。

最小复现

使用包含 PostgreSQL TIMESTAMPTZ、UUID 和 NUMERIC 列的固定 ColumnInfo 集合,分别调用分析器和 TemplateContextBuilder。修复前两条路径的 imports 不一致;预期 TIMESTAMPTZ 返回 java.time.OffsetDateTime,且两条路径的标准 imports 集合一致。

验收标准

  • _calculate_imports_needed() 与 TemplateContextBuilder 对同一列集合返回相同标准 Java imports。
  • PostgreSQL TIMESTAMPTZ 返回 OffsetDateTime,现有 MySQL/SQLite 导入行为保持不变。
  • imports 去重并稳定排序,未知或基础类型不增加导入。
  • 返回字段、排序、数据库类型参数和未知类型语义保持兼容。
  • 相关单元测试、Ruff、格式检查和 git diff --check 通过。

非目标、风险与安全

本 Issue 不复制新的类型表、不改变 PostgreSQL UUID 的既有语义、不修改模板文件或真实数据库声明,不涉及 SQL、凭据或性能承诺。风险限于分析响应中的导入集合变得更准确;关联提交可单独回滚。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions