Skip to content

feat: add Oracle-family trigger and native job management - #13403

Merged
t8y2 merged 1 commit into
t8y2:mainfrom
efeire:feat/oracle-family-triggers-v2
Oct 25, 2026
Merged

t8y2 merged 1 commit into
t8y2:mainfrom
efeire:feat/oracle-family-triggers-v2

Conversation

@efeire

@efeire efeire commented Oct 24, 2026 •

Copy link
Copy Markdown
Contributor

变更说明 / Change Description

补齐 Oracle 系触发器管理,并扩展现有达梦作业管理页,为 Oracle、OceanBase Oracle 和 DM 提供按原生语义适配的 Job/Scheduler 管理。

现有对象 / 作业入口 → 身份与定义 → 保真草稿 → SQL / 结构化预览 → 确认
                  → 写保护与并发基线 → 执行 → 状态、错误与结果读回
                                            └─ 未知 / 部分成功:保留草稿,不自动重放

触发器

  • 复用树、对象浏览器、表结构、源码标签/弹窗、依赖和无效对象诊断,接齐发现/筛选/分页、新建、替换、删除、启停、适用的 COMPILE 和 parent 导航。
  • Oracle、OceanBase Oracle、DM8 及已确认方言的 JDBC 使用可选 exact 元数据;保留旧调用、DM6 和其他数据库的既有合同。原始 owner/name、物理对象 ID、parent/scope 与执行 Schema 分开绑定。
  • 保留复杂定义及禁用状态;结构化修改须证明可无损重建。写入后权威读回,执行成功不冒充 VALID。
  • 全局远程搜索沿用 exact/catalog/缓存合同,菜单及批量动作按物理 ID 核实;确认删除后退役旧请求、精确移除原行并只读补查,unknown 保留原行和恢复入口,迟到响应不能复活已删对象。
  • 精确触发器元数据与包源码来源校验共用读取入口,保留 Schema、签名、可选来源及旧调用契约;结构编辑器保留恢复与草稿加载保护。
  • Legacy exact 混合列表保留 INDEX、TYPE/TYPE_BODY 与 TRIGGER 的身份、父对象及分页;Go 列表与源码使用一致 statement 表示并保留 GET_DDL 回退;写后失效两种 identity 的触发器缓存。

原生 Job / Scheduler

  • 保留达梦原入口、SYSJOB 多步骤/多调度、显式初始化及原调用契约,不替换为应用任务中心。
  • 接通 HTTP/Tauri、Oracle Go thin/OCI 和适用 JDBC/Generic JDBC;保留可靠 OUT ID、首次提交控制、独立授权/物理会话与不可变执行账本,不自动重放业务作业。
  • 保留引用、高级属性、参数默认值及 typed NULL;Oracle ANYDATA 标量采用精确类型与无损文本表示,未知值只读。
  • 结果区分别展示 Run/Stop 回执与原生观测;不能可靠归因的运行记录标为不确定。会话沿用主线 LOB 引用清理、分块读取及响应预算检查。

变更类型 / Change Type

  • 新功能 / New feature
  • Bug 修复 / Bug fix
  • 文档更新 / Documentation

前端 / Frontend

Schema 触发器列表、完整复杂定义及禁用/VALID 读回

DM Legacy 编辑
原位结果与执行观测

Job 截图来自实际生产组件,数据库边界为模拟数据,不计 DM8 实库验收。

验证 / Evidence

  • 已有触发器生产入口回归覆盖精确身份、复杂定义、分页/搜索、批量删除、取消、迟到响应及状态/错误读回;Job 回归覆盖预览、确认、读回、草稿保留、并发变化、未知提交不重放及独立 Run/Stop。相关历史格式、lint、类型检查、构建和独立审查结论仅用于未变范围。
  • OceanBase Oracle 4.2.5.7_107 触发器原生 Agent/JDBC API 与 Web GUI 已验收:复杂源码保存、预览取消、撤销重做、启停/编译、disabled/VALID、成功回执仍 INVALID、错误修正、所属对象/依赖导航、分页、精确名称及删除。该版本的嵌入双引号触发器名返回 INVALID/ORA-00900,边界空格名称被拒绝;保留原名和错误,不宣称此类名称可编译。
  • OceanBase Oracle 4.2.5.7 Job 的 Core/Agent、Generic JDBC 和 GUI 创建、编辑、控制、运行中独立停止已有验收。
  • 本次主线适配、反馈修复和联合入口完成静态核对、独立方案评估及规范/需求增量审查。按本轮约定未运行本地测试、类型检查、构建、GUI 或实库;当前联合 SHA 的运行验证与自动审查见本 PR Checks。
  • 包含主线 MCP Redis 错误文案的纯格式修正,以满足 Cargo fmt;不改变命令分派或权限行为。异步导入测试的 CI 修复由独立 test(import): wait for worksheet preview before editing mappings #13405 提供。

范围与限制

  • 原生 Oracle、DM8 实库及对应真实对象 GUI、原生 Desktop GUI 仍暂缓;尚缺实际目录/权限、ANYDATA 与 Legacy 提交语义、DM setter 容量/日期布局/TYPE9 副作用等验证。OceanBase、自动化测试与模拟 GUI 结果不替代这些验收。
  • Job 本期为阶段性交付。DM 后续项:已有 Scheduler 作业内联定义与 Program/命名 Schedule 的引用建立和解除、参数 RESET/恢复继承、Job 执行 schema 迁移的可靠写后判据,以及 Legacy DBMS_JOB SUBMIT 首次禁用与内部提交边界。
  • Windows H2 两项真实进程测试曾在外层 60 秒超时,错峰仍失败,未计通过;Linux CI 不消除本机缺口。make check、make cargo-check-fast 未完整执行。

Merge Danger

Door: one-way — 确认后的 DDL / 原生作业修改可能已提交,代码回退不能撤销数据库修改;unknown / 部分成功只读核实,不自动重放。

Blast Radius: Oracle-family Schema / Job — 两类入口保留各自身份、并发基线、写保护与会话隔离;不自动初始化环境或修改全局开关,可选参数缺省保留旧合同。

关联 Issue / Related Issue

Related https://github.com/t8y2/dbx/issues/12179。原生作业管理不是应用任务中心(#11658)。

Related #11641、#10592、#7632:本 PR 覆盖表结构触发器新增、启停及完整源码修改,Oracle Legacy DBMS_JOB / Scheduler 查看与管理;#7632 的会话与锁部分由已合并 #12773、诊断补充由 #13104 提供。原生 Oracle 等既有验收限制仍按本 PR 正文保留。

@efeire

efeire commented Oct 24, 2026 •

Copy link
Copy Markdown
Contributor Author

与 #13276 的范围重叠说明

历史源码对照基于触发器候选 d3a9acebf6 与 #13276 的 d965799e20,两者在 Oracle 的 Schema 级触发器分组、对象发现、查看源码、新建、编辑和删除入口上存在明显重叠,均涉及 #13149 及 #9861 的触发器部分。

两张 PR 的实现范围和路径有所不同:

  • fix(oracle): manage triggers from the object tree #13276 聚焦 Oracle 对象树的基础 CRUD,增加创建模板,并针对旧 Agent 的触发器发现请求走既有 Oracle 目录查询。
  • 本 PR 覆盖 Oracle、OceanBase Oracle、DM8 及已确认方言的适用 JDBC 路径,接通对象树、对象浏览器、表结构与源码入口;除 CRUD 外,还包含启停、适用的编译、精确 owner/name 与物理对象身份核查、完整定义保留,以及执行后的状态 / 错误读回和结果未知时不自动重放。

因此,直接将 #13276 整包合入本分支可能重复菜单、创建及删除路径;其旧 Agent 兼容场景值得单独对照本 PR 的 exact 元数据合同核查,目前尚未确认是本 PR 的实际遗漏,不能直接用旧目录路径替换精确身份流程。

本分支暂不合入 #13276,供维护者选择交付与合并顺序;若 #13276 先进入 main,本 PR 后续同步主线时再处理重叠,并保留必要的兼容行为。若发现独有且适用的修复或测试,再按具体缺口整合。

本说明为源码范围对照,不新增运行验收结论;原生 Oracle 实库验收仍暂缓。#9861 的原生 Job 部分现已纳入本联合 PR;#13276 仍只覆盖触发器对象树的基础范围。

@t8y2

t8y2 commented Oct 25, 2026

Copy link
Copy Markdown
Owner

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

@efeire
efeire deleted the feat/oracle-family-triggers-v2 branch October 25, 2026 23:53
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