From cac90c7b621f8fe66976b438d6f420fd4bdb486a Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Tue, 2 Jun 2026 18:50:00 +0800 Subject: [PATCH] fix(opengauss): open table structure editor --- .../src/components/objects/ObjectBrowser.vue | 10 +- .../structure/TableStructureEditor.vue | 22 ++- .../src/lib/tableStructureEditorState.ts | 9 +- crates/dbx-core/src/db/postgres.rs | 185 +++++++++++++----- .../tableStructureEditorState.test.ts | 6 + 5 files changed, 181 insertions(+), 51 deletions(-) diff --git a/apps/desktop/src/components/objects/ObjectBrowser.vue b/apps/desktop/src/components/objects/ObjectBrowser.vue index f45050681..225cda15c 100644 --- a/apps/desktop/src/components/objects/ObjectBrowser.vue +++ b/apps/desktop/src/components/objects/ObjectBrowser.vue @@ -167,7 +167,12 @@ const canOpenDiagram = computed(() => !!props.database && supportsSchemaDiagram( const canOpenTableImport = computed(() => !!props.database && supportsTableImport(props.connection.db_type)); const supportsTruncateTable = computed(() => supportsTableTruncate(props.connection.db_type)); const sourceDialect = computed<"mysql" | "postgres" | "sqlserver">(() => { - if (props.connection.db_type === "postgres" || props.connection.db_type === "gaussdb") return "postgres"; + if ( + props.connection.db_type === "postgres" || + props.connection.db_type === "gaussdb" || + props.connection.db_type === "opengauss" + ) + return "postgres"; if (props.connection.db_type === "sqlserver") return "sqlserver"; return "mysql"; }); @@ -178,6 +183,9 @@ const sourceFormatDialect = computed(() => { case "sqlite": case "sqlserver": return props.connection.db_type; + case "gaussdb": + case "opengauss": + return "postgres"; default: return "generic"; } diff --git a/apps/desktop/src/components/structure/TableStructureEditor.vue b/apps/desktop/src/components/structure/TableStructureEditor.vue index 62f7ba36f..e8b1c07b3 100644 --- a/apps/desktop/src/components/structure/TableStructureEditor.vue +++ b/apps/desktop/src/components/structure/TableStructureEditor.vue @@ -284,6 +284,7 @@ function onIndexColResize(e: MouseEvent, col: number) { const connection = computed(() => (props.connectionId ? store.getConfig(props.connectionId) : undefined)); const databaseType = computed(() => connection.value?.db_type); const structureCapabilities = computed(() => getTableStructureCapabilities(databaseType.value)); +const structureDialect = computed(() => structureCapabilities.value.dialect); const isTableCommentDisabled = computed(() => !structureCapabilities.value.comment); const dataTypeOptions = computed(() => getDataTypeOptions(databaseType.value)); @@ -295,12 +296,23 @@ const indexTypesByDb: Record = { sqlite: ["BTREE"], }; const indexTypeOptions = computed(() => - structureCapabilities.value.indexType ? (indexTypesByDb[databaseType.value ?? ""] ?? []) : [], + structureCapabilities.value.indexType ? (indexTypesByDb[structureDialect.value] ?? []) : [], ); +function isPostgresIdentityType(dbType: string | undefined): boolean { + return ( + dbType === "postgres" || + dbType === "gaussdb" || + dbType === "opengauss" || + dbType === "highgo" || + dbType === "vastbase" || + dbType === "kingbase" + ); +} + const showExtendedProperties = computed(() => { const dt = databaseType.value; - return dt === "mysql" || dt === "postgres" || dt === "sqlserver"; + return dt === "mysql" || isPostgresIdentityType(dt) || dt === "sqlserver"; }); const extendedPropertiesColumnIndex = 8; const visibleColWidths = computed(() => @@ -1010,7 +1022,7 @@ watch(
-