Skip to content

fix: 结果操作生成 SQL 时限定表名重复拼接 schema - #440

Merged
feigeCode merged 1 commit into
mainfrom
fix/result-sql-schema-duplicate-400
Oct 22, 2026
Merged

feigeCode merged 1 commit into
mainfrom
fix/result-sql-schema-duplicate-400

Conversation

@feigeCode

Copy link
Copy Markdown
Owner

问题

查询 SQL 带模式名(如 SELECT * FROM ads.ads_tb_x)时,结果操作(复制为 INSERT / UPDATE / DELETE)生成的 SQL 出现模式名重复(ads.ads.ads_tb_x),执行报错。Closes #400

根因

SQL 结果网格的表名来自查询分析(direct_table_identity),是 schema.table 拼接形式。结果操作的 CopySqlRequest 同时携带:

  • table = ads.ads_tb_x(已含前缀)
  • schema = ads(连接/执行上下文的 schema)

而 format_copy_table_name 无脑拼接 schema.table,得到 ads.ads.ads_tb_x。

保存路径(format_resolved_table_reference)此前已修复过同类问题(限定名按段引用,不再拼前缀),复制路径漏掉了同样的处理。

修复

format_copy_table_name 识别限定表名:

  • 限定名(含 .) → 按 . 拆开逐段引用,直接使用("ads"."ads_tb_x")
  • 裸表名 → 保持原逻辑拼 schema 前缀

与保存路径 format_resolved_table_reference 语义对齐。

验证

  • 新增回归测试 copy_sql_qualified_table_name_is_not_prefixed_twice(限定名不重复拼 schema)
  • 新增回归测试 copy_sql_bare_table_name_keeps_schema_prefix(裸表名仍拼 schema)
  • cargo test -p db 全量 1322 测试通过
  • cargo clippy -p db --all-targets 无新增告警

查询 SQL 带模式名时,SQL 分析给出的表名是 schema.table 拼接形式,
结果操作(复制为 INSERT/UPDATE/DELETE)再拼一次 schema 会生成
schema.schema.table 重复引用导致执行报错。

format_copy_table_name 现在识别限定表名:限定名按段引用后直接使用,
裸表名才拼 schema 前缀,与保存路径 format_resolved_table_reference
的语义对齐。

Closes #400
@feigeCode
feigeCode merged commit e6813f4 into main Oct 22, 2026
8 checks passed
@feigeCode
feigeCode deleted the fix/result-sql-schema-duplicate-400 branch October 22, 2026 02:34
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.

[Bug]: 数据库结果操作的时候有个bug,如果查询sql带着模式名,生成的sql就多了模式名,重复了,会报错

1 participant