feat(oracle): support safe trigger structure editing

This commit is contained in:
mikodream authored and GitHub committed 2026-07-29 04:32:27 +08:00
1 parent 0a5fbb6f8c
commit fdaef62518
5 files changed
+44 -16

No files matched your search

@@ -41,6 +41,7 @@ import type { TableInfoTab, TableStructureEditorDraft, TableStructureEditorTarge
import {
applyManticoreDdlColumnExtras,
buildStructureTargetLabel,
canEditStructuredTriggerDraft,
canEditManticoreColumnProperties,
combineDataTypeForDatabase,
combineDataTypeForDatabaseWithLengthUnit,
@@ -2158,7 +2159,7 @@ function toggleDropTrigger(trigger: EditableStructureTrigger) {
}
function canEditTriggerDraft(trigger: EditableStructureTrigger): boolean {
return !triggersLoading.value && canEditTriggers.value && !trigger.markedForDrop;
return !triggersLoading.value && canEditTriggers.value && !trigger.markedForDrop && canEditStructuredTriggerDraft(databaseType.value, trigger);
}
function primarySqlOperation(sql: string): string {
@@ -1,8 +1,10 @@
import { describe, expect, it } from "vitest";
import {
canEditStructuredTriggerDraft,
combineDataTypeForDatabase,
combineDataTypeForDatabaseWithLengthUnit,
createColumnDrafts,
createTriggerDrafts,
dataTypeLengthInputValue,
dataTypeLengthUnitValue,
DATA_TYPE_OPTIONS,
@@ -24,6 +26,25 @@ import {
} from "@/lib/table/tableStructureEditorState";
describe("tableStructureEditorState", () => {
it("keeps existing Oracle trigger drafts read-only until full source editing is available", () => {
const [existing] = createTriggerDrafts([{ name: "ORDERS_AUDIT", timing: "AFTER EACH ROW", event: "INSERT OR UPDATE", statement: "BEGIN NULL; END;" }]);
if (!existing) throw new Error("expected an existing trigger draft");
expect(canEditStructuredTriggerDraft("oracle", existing)).toBe(false);
expect(canEditStructuredTriggerDraft(undefined, existing)).toBe(false);
expect(canEditStructuredTriggerDraft("mysql", existing)).toBe(true);
expect(
canEditStructuredTriggerDraft("oracle", {
id: "new:trigger",
name: "ORDERS_AUDIT",
timing: "AFTER EACH ROW",
event: "INSERT",
statement: "BEGIN NULL; END;",
markedForDrop: false,
}),
).toBe(true);
});
it("hydrates Kingbase type parameters returned separately from the data type", () => {
const columns = createColumnDrafts(
[
@@ -816,6 +816,10 @@ export function createTriggerDrafts(triggers: TriggerInfo[]): EditableStructureT
}));
}
export function canEditStructuredTriggerDraft(databaseType: DatabaseType | undefined, trigger: EditableStructureTrigger): boolean {
return !trigger.original || (databaseType !== undefined && databaseType !== "oracle");
}
export function toColumnNames(columns: string[]): string {
return columns.join(", ");
}