Skip to content

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

Description

@ZhaoXingPeng

版本与环境

  • 受影响提交:2ef0ac0(当前代码生成分析分支)
  • 运行时:Windows,Python 3.10+,MCP db_table_describe
  • 数据库:PostgreSQL 12+;无需凭据即可用固定类型字符串复现
  • 安装方式:仓库 .venv / PYTHONPATH=src

问题与预期行为

db_table_describe(include_java_types=true) 使用 mcp_tools._get_java_type_mapping() 解析 PostgreSQL format_type() 返回的完整类型名。配置只覆盖了 TIMETIMESTAMPTIMESTAMP_WITH_TIME_ZONE,未覆盖 TIME WITHOUT TIME ZONETIMESTAMP WITHOUT TIME ZONETIMESTAMPTZ 这些合法的 PostgreSQL 类型别名,因此 MCP 返回 java_type=Object 且缺少标准库 import。生成器的 PostgreSQLDialect 已能正确映射同一输入,导致 MCP 描述与代码生成上下文不一致。

预期结果:三种别名分别映射为 LocalTimeLocalDateTimeOffsetDateTime,并返回对应 java.time import。

最小复现

PYTHONPATH=src python -c "from dbjavagenix.core.models import DatabaseType; from dbjavagenix.database.mcp_tools import _get_java_type_mapping; print(_get_java_type_mapping(DatabaseType.POSTGRESQL, 'timestamp without time zone')); print(_get_java_type_mapping(DatabaseType.POSTGRESQL, 'timestamptz'))"

修复前输出包含 {'java_type': 'Object', 'imports': []}

验收标准

  • TIME WITHOUT TIME ZONE 返回 LocalTimejava.time.LocalTime
  • TIMESTAMP WITHOUT TIME ZONE 返回 LocalDateTimejava.time.LocalDateTime
  • TIMESTAMPTZ 返回 OffsetDateTimejava.time.OffsetDateTime
  • 已有 UUIDJSONB 和完整时区类型映射保持不变。
  • PostgreSQL MCP 单元测试与完整单元测试通过。

非目标、风险与安全

本 Issue 不重写 MCP 映射架构、不调整 DialectAdapter 的 UUID 语义、不连接真实数据库,也不涉及凭据、SQL 或数据迁移。风险仅为配置别名补齐后返回更准确的 Java 类型;可通过回滚关联提交恢复旧行为。

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