diff --git a/apps/desktop/src/lib/__tests__/table/tableEditing.spec.ts b/apps/desktop/src/lib/__tests__/table/tableEditing.spec.ts index fb1fbb6c91..4f58508349 100644 --- a/apps/desktop/src/lib/__tests__/table/tableEditing.spec.ts +++ b/apps/desktop/src/lib/__tests__/table/tableEditing.spec.ts @@ -11,6 +11,7 @@ import { editableRowIdentifierColumns, hasCompleteTdengineRowIdentity, isClickHouseExistingRowReadonlyColumn, + isHiddenGridColumn, isTdengineExistingRowReadonlyColumn, isTableDataEditable, supportsDataGridTransaction, @@ -72,6 +73,13 @@ describe("tableEditing", () => { expect(shouldIncludeSyntheticRowId("oracle", [], "TABLE")).toBe(false); }); + it("keeps Xugu's internal ROWID hidden after primary-key metadata arrives", () => { + expect(isHiddenGridColumn("xugu", DBX_ROWID_COLUMN, ["ID"], "TABLE")).toBe(true); + expect(isHiddenGridColumn("xugu", DBX_ROWID_COLUMN, [], "TABLE")).toBe(true); + expect(isHiddenGridColumn("xugu", DBX_ROWID_COLUMN, ["ID"], "VIEW")).toBe(false); + expect(isHiddenGridColumn("xugu", "ID", ["ID"], "TABLE")).toBe(false); + }); + it("treats view data tabs as readonly", () => { expect(isTableDataEditable("oracle", [DBX_ROWID_COLUMN], "VIEW")).toBe(false); }); diff --git a/apps/desktop/src/lib/table/tableEditing.ts b/apps/desktop/src/lib/table/tableEditing.ts index 1d5b817246..06d38a916d 100644 --- a/apps/desktop/src/lib/table/tableEditing.ts +++ b/apps/desktop/src/lib/table/tableEditing.ts @@ -117,6 +117,9 @@ export function shouldIncludeSyntheticRowId(databaseType: DatabaseType | undefin export function isHiddenGridColumn(databaseType: DatabaseType | undefined, column: string, primaryKeys: string[], tableType?: string): boolean { if (databaseType === "neo4j" && column === DBX_NEO4J_ELEMENT_ID_COLUMN) return true; + // Xugu may inject ROWID before table metadata finishes loading. Keep this + // internal projection hidden even after the real primary keys arrive. + if (databaseType === "xugu" && !isViewTableType(tableType) && column.toUpperCase() === DBX_ROWID_COLUMN) return true; return shouldIncludeSyntheticRowId(databaseType, primaryKeys, tableType) && column.toUpperCase() === DBX_ROWID_COLUMN; }