mirror of
https://github.com/t8y2/dbx.git
synced 2026-10-19 16:16:45 +00:00
2.7 KiB
2.7 KiB
OceanBase Oracle 查询结果 ROWID 编辑
问题与复现
在 OceanBase Oracle 模式中创建无主键普通表,插入两行相同业务值。执行 SELECT * FROM APP.ITEMS t 或 SELECT t.* FROM APP.ITEMS t。修复前不会附加隐藏定位键,结果缺少可用于单行编辑的身份。
对视图或尚未确认类型的对象执行 SELECT t.ROWID AS RID, t.LABEL FROM APP.ITEMS t。修复前显式返回 ROWID 可以绕过普通表确认,错误开放编辑。
行为与验收
- 已确认的无主键单基表星号查询附加隐藏
ROWIDTOCHAR(ROWID);保留原别名、引号、提示和注释。相同业务值的两行保持独立定位键。 - 物理主键优先。业务列
"rowid"、"__DBX_PK_0"保持可见,隐藏别名避让已有名称。 - 视图、未知对象、其他 schema 的同名表不能赋予 ROWID 编辑权限;DISTINCT、分组、联表和集合运算保持原 SQL。
PARTITION(P0)、SUBPARTITION(P0)、PARTITION FOR (...)不得被误当表别名。语义解析器尚不能可靠区分这些后缀,隐藏键构造跳过改写,保留原 SQL;不生成PARTITION.*。- PIVOT、UNPIVOT 及其他未完整解析的来源后缀保持原 SQL 且只读;引号别名、普通联表和 SQL Server
WITH (...)表提示保留现有来源映射。 - 数据库更新行数保护报告过期 ROWID 时,显示错误并保留修改草稿。删除返回 0 行沿用现有冲突提示及刷新行为,不将已经结束的删除保留为自动重试任务。
- 单行、单条普通 ROWID UPDATE 返回已知影响 0 行时报告冲突,保留草稿并暂停自动重试。此保护补齐既有零行更新缺口,不从混合批次总行数、缺失或负数计数、PL/SQL 未知计数推断匹配失败。
- 只读网格不准备或执行保存;正常保存与执行失败反馈分别验证。
自动验证
Store 测试从 executeTabSql 进入,只在后端 API 和连接元数据边界提供夹具。新增用例在基线复现 10 项失败,修复后通过。隐藏键测试验证实际 SQL 构造;DataGrid 测试挂载组件并点击保存工具栏,覆盖只读、正常删除、零行删除、执行失败及过期更新草稿。
相关文件:
queryStore.oceanbaseRowId.spec.tsqueryStore.hiddenPrimaryKey.spec.tseditableQueryHiddenKeys.spec.tsuseDataGridEditor.spec.tsDataGridRowIdSaveFeedback.spec.ts
待完成验收
本批次未重新执行 OceanBase 实库或桌面 GUI 验收。需要在隔离普通表中操作两条相同值,只更新选中行并读回;验证视图只读、业务列可见,以及另一会话删除目标后更新失败保留草稿。组件测试和 SQL 构造测试不替代数据库或 GUI 验收。原生 Oracle 行为需要单独实库回归。