Skip to content

feat(oracle): add invalid object compilation and session lock management - #12773

Merged
zipg merged 21 commits into
t8y2:mainfrom
efeire:feat/oracle-object-session-management
Oct 20, 2026
Merged

zipg merged 21 commits into
t8y2:mainfrom
efeire:feat/oracle-object-session-management

Conversation

@efeire

@efeire efeire commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

变更说明 / Change Description

补齐 Oracle 与 OceanBase Oracle 的无效对象编译、会话和锁管理,沿用对象浏览器、进程列表及源码编辑器。

无效对象 → 名称/类型筛选 → 勾选 / 全选筛选结果
         → 编译单个 / 所选 / 筛选结果 / 全部 → 既有安全守卫 → 串行执行
         ← 原列表更新图标:确认 VALID 移出,未解决项保留 → 原详情/源码修复
进程列表 → 会话/锁详情 → 定位阻塞会话 → 单会话终止确认 → 刷新读回
  • 一个滚动列表,不建独立结果框或分页;名称打开原诊断详情,checkbox 只选择。默认零勾选,支持名称字面包含和类型多选,显示匹配/清单/所选计数,一次清空筛选。过滤变化同步清空旧勾选;全选覆盖全部匹配可执行对象,不限虚拟窗口。
  • 普通连接点击编译即执行,无独立 SQL 预览或额外目标/范围确认;保留只读临时许可和生产保护。完整动作明确显示「编译全部(N)」或「编译筛选结果(N)」,SQL 收在详情展开控件。
  • 以无损 OBJECT_ID keyset 分页完整读取当前 schema 的可见 INVALID 集合,不受原有 501 行浏览窗口限制。完整读取失败/截断时禁完整动作,原单对象及已加载所选仍可用。前端复用动态虚拟滚动,长名称可换行并保留详情返回的滚动/焦点。
  • 冻结连接/schema、每项身份和 SQL,一次批次授权后逐项串行执行;提交前重新检查身份和 DDL 时间。已有效项无需重复编译;明确失败可继续,结果不明停止且不重发。停止仅阻止未开始项,已提交项等待结果。
  • 仅同原 ID、非截断单行 VALID 读回才移出;失败、仍无效、结果不明和未执行留在原列表。INVALID 清单缺席不算成功,待核实行禁重编译;显式刷新只读核实,不重发 DDL。管理会话不复用编辑器事务。
  • Oracle 与 OB 分别使用已验证的方言和能力矩阵;OB 自动编译限过程、函数、包规格和包体,其他类型保留诊断,具备源码读取能力时提供原源码入口;INDEX/JAVA CLASS 不创建非法源码标签。
  • 会话终止绑定完整会话、节点/代理及容器身份,保护管理会话;Oracle 未知版本按当前容器路径处理。锁明细支持定位持锁者,旧请求不覆盖新范围。其他数据库保留原批量行为。

变更类型 / Change Type

  • 新功能 / New feature
  • Bug 修复 / Bug fix

涉及前端 / Frontend Changes

  • 本 PR 涉及前端改动,已附截图/录屏 / Frontend screenshots attached.

当前单列表筛选/独立选择,720×800;真实生产组件与虚拟器,后端为隔离模拟字典:

名称过滤、类型多选和原列表选择

480×720 长名称运行态:进度换行,停止按钮完整可见。模拟 GUI 验证交互,实库证据单列:

长名称0/3运行态及停止按钮

原有会话/锁入口的 OB 实际 GUI:同资源 TR 锁的持有者与等待者,随后只终止本任务持有者、等待者完成、锁释放及最终值 11。截图不含连接地址。

lock-holder-and-waiter

验证 / Validation

  • make check 通过 / make check passes

  • make cargo-check-fast 通过 / make cargo-check-fast passes

  • 相关测试通过 / Relevant tests pass

  • 新交互真实组件 80 项、真实 guard 6 项通过;覆盖字面过滤、PACKAGE/BODY 交集、动态类型意图、跨虚拟窗口选择、冻结 SQL/身份/顺序、读取不完整、未知不重试、停止/关闭/范围变化及诊断迟到。未改虚拟器为全量展开 stub。相邻 52 项回归复用有效结果,单行身份/状态截断保护仍保持写前零 DDL、写后未知并停止。

  • 10 语言 Vue I18n/占位符通过,全部 9 目标语言离线新增键检查均为 all present;变更文件格式/lint、diff 检查通过。

  • 新 GUI:5001 项首/中/末可达、挂载池最多 33;中段/末项仅所选两条 DDL,VALID 原位移出。Space/Enter、跨回收窗口 Tab、28px 独立勾选区、深处详情锚点和名称焦点均通过;480/720/常规宽度实看。验收页曾漏载虚拟器定位 CSS 导致叠行,组件显式引入后已修正并复核。

  • 新 GUI:名称+类型过滤 3 项,运行 0/3→1/3 后停止,仅已提交两项完成,未开始包体保留;失败仍在原行进入诊断。剩余读取失败不清空原列表、不报清零;写后状态不明的缺席行保留且禁选,显式刷新确认 VALID 才移出,DDL 数仍为 1。生产过滤范围取消 0 DDL、许可后只执行该 1 项,等待期间筛选/选择禁用。

  • 复用未改数据库路径的 OB Oracle 4.2.5.7 证据:实际 Web/Core/发布 Agent 完整读取 524 项/2 页,与字典 COUNT 一致;生产组件转发真实 HTTP,521 条 DDL 各一次、外部目标变化跳过、包体已有效不重发,剩余 3 项及缓存事件一次。旧 GUI 已完成实库停止、只读拒绝/许可、生产拒绝/许可及原源码编辑器修复;旧范围确认/分页画面不作新交互验收。测试连接与 schema 已精确清理读回。

  • 实际 Core 编辑器手动事务入口 → 同发布 Agent → OB:3 条独立管理 DDL 后编辑器仍读未提交值 102,独立观察者仍为 2;关闭管理会话不改变该事务,显式回滚后仍为 2。Web 原本不暴露手动事务,此项不记为 GUI 手动事务验收。

  • 原有会话/锁闭环及未受影响回归复用既有有效证据:真实 SYS 错误用户名反例修复后目标计数为 0;完整正确身份仅终止本任务会话。GUI 锁持有者/等待者、长 SQL、管理会话禁终止、只读拒绝和源码修复已验证。旧 7 项自动代码意见按当前代码/测试复核已有修复覆盖。新增 3 项反馈已修复并经独立规范/需求增量审查:卸载后保留已完成范围缓存失效但跳过 UI/树刷新;managed 查询返回 execution_error 进入错误状态而非空列表/锁行;源码动作只接受现有 API 支持类型,保留 TYPE/BODY/TRIGGER 原修复路径。未自动解决外部线程。

  • 新反馈修复的 5 文件 188 项回归通过;缓存测试进一步收敛到外部 API 边界后的 16 项通过。真实组件覆盖 Oracle/OB 两驱动列表与锁的结构化错误、卸载期间缓存清理和正常刷新、合法来源类型正向及不支持类型阻断;真实浏览器确认 INDEX/JAVA 保留诊断但无错误源码按钮,VIEW 可读能力不被编译能力误挡。

  • 本交互增量未改 Rust、Agent、字典 SQL 或事务契约。完整本地 TSC 因资源余量不足未运行;最终 SHA 的两端完整 CI 类型检查通过。

CI: fork CI、上游 CI及双端 I18n 对 a37ba3f 通过;类型、前端分片、格式/lint/生成和 docs-export 构建/漂移检查通过。

获准暂缓: 原生 Oracle 实库的 RAC/root/PDB/non-CDB、权限与身份复用、会话终止/锁释放、各类型编译及 DDL 事务隔离,均未计通过;OB 结果不替代。实际浏览器使用 GNU Web,未做原生 Tauri 整包验收。

风险与恢复 / Merge Danger

Door: 代码可回退;编译 DDL、已提交的会话终止不能由代码回滚撤销。

Blast Radius: Oracle 管理入口与进程列表的可选单行扩展。管理会话、只读/生产守卫及其他驱动原使用方式保持独立。

关联 Issue / Related Issue

Related #11152

历史 #11560、#11561 和 #11715 均关闭未合并,本 PR 复用 #11152。已复核上游 87f1432fc4c3c2e5e8b42c52eb05beafc2b423c2 的变化及相关开放/关闭 PR,未覆盖本批管理入口;#12770 为例程依赖,#12775 为独立 TYPE/BODY 管理,#12704 为导航调整,#12067 为调试器编译入口,不在本 PR 中重复实施。

@efeire
efeire marked this pull request as draft October 20, 2026 00:02
@efeire
efeire marked this pull request as ready for review October 20, 2026 03:47

@zipg zipg left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

已审核 Oracle/OceanBase 无效对象编译、会话终止和锁详情流程,重点核对了对象身份冻结、写前安全守卫、执行后状态复核、未知结果不重试以及异步读取失效处理。定向测试 182 项通过,当前提交 CI 全部通过;UI 截图已提供,后续仍可补充原生实库验收材料。感谢贡献!

@zipg
zipg merged commit b5e4aab into t8y2:main Oct 20, 2026
27 checks passed
@efeire
efeire deleted the feat/oracle-object-session-management branch October 25, 2026 23:53
xue-ding-e pushed a commit to xue-ding-e/dbx that referenced this pull request Oct 27, 2026
…ent (t8y2#12773)

* feat(oracle): manage invalid objects and sessions

* fix(oracle): address invalid object and session review findings

* fix(oracle): invalidate completed compile scope safely

* fix(oracle): reveal source editor after invalid object lookup

* fix(oracle): ignore stale source-open results

* test: cover Oracle and OB management edge cases

* fix: remove unused process connection snapshot

* fix: keep invalid object dialog footer visible

* fix: use existing Oracle lock translations

* fix: quote OceanBase session user column

* fix: harden session management identities and lifecycles

* fix: avoid closing unused invalid-object sessions

* fix: keep Oracle session listing safe for unknown versions

* fix Oracle version probe generation guard

* fix(oceanbase): read actual session user identities

* feat(oracle): compile complete invalid object batches

* fix(oracle): use target-compatible paging cursor access

* fix(oracle): reject incomplete compile status reads

* feat(oracle): compile filtered invalid objects in one list

* test(oracle): assert guard call before reading audit SQL

* fix(oracle): preserve management read and source boundaries

(cherry picked from commit b5e4aab)
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.

2 participants