Skip to content

🐛 fix(database): 修复元数据缓存与查询安全回归 #214

Description

@ZhaoXingPeng

版本与环境

受影响提交:46730ff(main)。环境为 GitHub Actions 的 Python 单元测试;本 Issue 不需要真实数据库凭据,SQLite 使用内存数据库,PostgreSQL 行为由 SQL tokenizer 回归测试覆盖。

问题与预期行为

main CI 的 17 个单元测试失败:代码生成路径出现重复斜杠,ConnectionManager 缺少连接级元数据缓存,且只读 SQL 对 PostgreSQL dollar-quoted literal、顶层 FETCH 限制和 FETCH WITH TIES 处理不正确。预期是缓存隔离且可失效、生成路径规范化、只读查询安全边界保持严格并正确收紧结果上限。

最小复现

PYTHONPATH=src pytest -q tests/unit

失败示例包括 test_entity_path_includes_packagetest_describe_table_reuses_connection_scoped_cache_and_returns_copiestest_db_query_execute_ignores_keywords_inside_dollar_quoted_literalstest_db_query_execute_rejects_fetch_with_ties_before_execution

验收标准

  • 元数据缓存按 connection_id/table/schema 隔离,容量为 256,返回深拷贝,DDL 与关闭连接时失效。
  • packageSuffix 不生成重复 /
  • dollar-quoted literal 内的关键字和分号不参与安全判断,未闭合 literal 被拒绝。
  • 顶层 FETCH FIRST/NEXT 正确收紧,嵌套 FETCH 不被改写,FETCH WITH TIES 在执行前拒绝。
  • 相关单元测试和静态检查通过。

非目标、风险与安全

不改变公开 MCP 工具名称、数据库 schema、模板输出语义或真实数据库连接配置。SQL 仍只允许单条只读查询;本 Issue 不处理真实 MySQL/PostgreSQL 性能基线,相关工作保留在 Issue #213。回滚方式为回退关联 PR 的 squash commit。

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