Skip to content

feat(oracle): 支持 dblink 补全、连接树展示与管理 - #8945

Merged
t8y2 merged 9 commits into
t8y2:mainfrom
zipg:codex/issues-7907-7619
Sep 12, 2026
Merged

feat(oracle): 支持 dblink 补全、连接树展示与管理#8945
t8y2 merged 9 commits into
t8y2:mainfrom
zipg:codex/issues-7907-7619

Conversation

@zipg

@zipg zipg commented Sep 12, 2026

Copy link
Copy Markdown
Collaborator

Oracle 查询编辑器在输入 DUAL@ 时,现在会列出当前登录用户可用的私有/公有 database link,并直接插入完整链接名(包括域名)。Oracle 连接下新增独立的「数据库链接」分组,可查看、搜索、创建、测试、更新保存的远程凭据和删除链接。

  • ALL_DB_LINKS 获取登录用户和 PUBLIC 的链接,切换到其他 Schema 后仅补全公有链接;同名链接在本用户 Schema 下优先私有链接。管理操作明确使用登录用户 Schema,避免被编辑器的 Schema 切换影响。
  • 链接使用独立树节点,不混入表列表。管理操作完成后同步刷新连接树,删除有明确确认。
  • 更新凭据使用 ALTER [PUBLIC] DATABASE LINK;更换远程用户或连接字符串需新建链接。操作保留现有只读/生产环境执行保护,并展示数据库实际权限错误。
  • 使用现有查询 API,最终变更不需要更新 Oracle Agent。

实际验证

基于 main 8ff56b483,从正式版 DBX 数据目录导入 7 个 Oracle 测试连接至隔离数据目录,用 PR 前端和本地构建后端通过真实 Oracle Agent 验证。

环境 已验证
Oracle 11g / SYSTEM 私有与公有链接创建、列表、查询、更新凭据、再次查询、删除及空列表;界面搜索、取消删除、树刷新、同名私有链接遮蔽提示
Oracle 19c / DBX_TEST 界面创建、列表、查询、删除;更新凭据按实际权限返回 ORA-01031
Oracle 18c、XE 11g/18c/21c、Free 23 真实连接及链接列表加载;这些测试账号没有 CREATE DATABASE LINK 权限,创建返回 ORA-01031(18c 已在界面验证),不声称其写操作成功

编辑器实测:输入 @ 自动弹出、大小写前缀、带点域名、光标中间替换、手动补全、选择后不追加所有者/别名;在 SYSTEM Schema 中使用私有链接、切换 DBX_TEST Schema 后使用公有链接,均返回 DBX_LINK_OK = 1;后者不会再建议无法使用的 SYSTEM 私有链接。亮色/暗色界面截图见下方。

本地检查:类型检查通过;补全、连接树元数据与主题/插入回归共 295 项通过;cargo build -p dbx-web --no-default-features --features dbx-core/sqlite-bundled 通过。临时链接和为 11g SYSTEM 测试临时授予的两项 ALTER 权限已清理。

边界:此次浏览器界面验证使用与桌面端共享的 Vue 编辑器、连接树及管理组件;未执行 Windows 打包客户端验证。上述低权限账号没有提升权限来声称所有 Oracle 版本均完成写操作。

截图

链接补全
链接管理(暗色)
跨链接查询

CI:推送后检查中,以本次提交的 Actions 结果为准。

Fixes #7907
Fixes #7619
Fixes #8677
Fixes #7792
Fixes #5998

@github-actions github-actions Bot added area/agents Database agents and agent runtime area/desktop Desktop application or Tauri shell db/oracle Database: Oracle enhancement New feature or request labels Sep 12, 2026
@zipg
zipg marked this pull request as draft September 12, 2026 13:41
@github-actions github-actions Bot added the ui-change Changes user-visible interface, text, or visual assets label Sep 12, 2026
@zipg zipg changed the title feat(oracle): 支持 dblink 语法提示 feat(oracle): 支持 dblink 补全、连接树展示与管理 Sep 12, 2026
@github-actions github-actions Bot added area/docs Documentation site or repository documentation and removed area/agents Database agents and agent runtime labels Sep 12, 2026
@zipg
zipg marked this pull request as ready for review September 12, 2026 14:52
zipg and others added 3 commits September 12, 2026 23:31
Oracle resolves object@link against the login user's private links and
PUBLIC links; ALTER SESSION SET CURRENT_SCHEMA never enables or
disables either, and the link query already restricts owners to
SESSION_USER and PUBLIC, so the current-schema filter only hid usable
links after a schema switch
@t8y2

t8y2 commented Sep 12, 2026

Copy link
Copy Markdown
Owner

感谢详细的自测报告,整体实现质量很高(树节点、DDL 权限钉定、防注入、竞态防护都符合仓库既有模式)。我在 aa70b759 补了一个 Oracle 语义修正:

私有链接的补全过滤依据应是登录用户,而不是当前 Schema。 原过滤的前提(注释 "Oracle resolves a private link in the current schema")与 Oracle 实际行为不符:object@link 的解析顺序是「登录用户的私有链接 → PUBLIC 链接」,ALTER SESSION SET CURRENT_SCHEMA 既不能使用别人的私有链接(ORA-02019),也不会使登录用户自己的私有链接失效(Ask TOM 关于 current_schema 不改变权限归属的说明;APEX 场景下 dblink 按连接用户解析的典型案例)。由于 ORACLE_DATABASE_LINKS_SQL 本身已限定 OWNER IN (SESSION_USER, 'PUBLIC'),这个过滤只会把仍然可用的私有链接藏起来(以 SYSTEM 登录、编辑器切到其他 Schema 后,T@私有链接 依然可用但不再补全)。补丁删除了该过滤并同步调整了测试用例,两个 spec 共 85 用例全过。

两个不阻塞的小备注:es/it/ja/ko/pt-BR/zh-TW 的 databaseLinks 整块目前是英文原文,后续补译即可;oracleDatabaseLinksFromResult 列名查找仅按大写匹配,可参照 doltVersionControl.ts 做两侧统一大小写的一行加固。

@t8y2 t8y2 left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Full review done across all heads. Implementation quality is high — the streaming bounded-memory core... correction: the tree node, DDL permission pinning, injection guards, and race protections all follow existing patterns. Your test compile follow-up and my two patches (login-user dblink completion semantics, readonly-list copy before sort) are in; all checks green. Merging.

@t8y2
t8y2 merged commit b8f39f9 into t8y2:main Sep 12, 2026
15 checks passed
@t8y2

t8y2 commented Sep 12, 2026

Copy link
Copy Markdown
Owner

Thanks for the contribution! Merged in b8f39f9, will be released in the next version.

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

Labels

area/desktop Desktop application or Tauri shell area/docs Documentation site or repository documentation db/oracle Database: Oracle enhancement New feature or request ui-change Changes user-visible interface, text, or visual assets

Projects

None yet

2 participants