fix(export): show all dameng databases in export dropdown

This commit is contained in:
高桥凉介 authored and GitHub committed 2026-08-07 13:48:10 +08:00
1 parent 143fd96c3f
commit 9bb1b7aa91
10 files changed
+143 -33

No files matched your search

@@ -2,6 +2,7 @@ import type { DatabaseType, QueryResult } from "@/types/database.ts";
import * as api from "@/lib/backend/api.ts";
import { buildTableSelectSql } from "@/lib/table/tableSelectSql.ts";
import { uuid } from "@/lib/common/utils.ts";
import { SINGLE_DATABASE_TYPES } from "@/lib/database/databaseCapabilitySets";
export const DATABASE_EXPORT_ROW_LIMIT = 10_000;
export const DATABASE_EXPORT_PAGE_SIZE = 500;
@@ -58,6 +59,10 @@ export interface AllDatabaseExportPlanInput {
databases: string[];
schemaAware: boolean;
schemasByDatabase?: Record<string, string[]>;
/** 数据库类型,用于判断是否为单数据库架构(如达梦、Oracle)。
* 对于这类数据库,选中的"数据库"实际上就是 schema 本身,
* 不应再对每个"数据库"展开所有 schema 做笛卡尔积。 */
dbType?: DatabaseType;
}
export interface AllDatabaseExportPlanItem {
@@ -130,6 +135,19 @@ export async function runWithDatabaseBackupSnapshot<T>(options: DatabaseBackupSn
}
export function buildAllDatabaseExportPlan(options: AllDatabaseExportPlanInput): AllDatabaseExportPlanItem[] {
// 对于 schema-aware 的单库类型(达梦、Oracle、OceanBase-Oracle 等),选中的"数据库"
// 实际上就是 schema 本身,不应再展开所有 schema 做笛卡尔积,直接将选中项作为 schema 导出。
// firebird/questdb/access 等单库但非 schema-aware 类型必须走 flatMap 保留真实 database,
// 否则 database:"" 会覆盖后端 db_config.database 破坏连接。
const singleDatabase = options.dbType ? SINGLE_DATABASE_TYPES.has(options.dbType) : false;
if (singleDatabase && options.schemaAware) {
return options.databases.map((schema) => ({
database: "",
schema,
fileStem: schema,
displayName: schema,
}));
}
return options.databases.flatMap((database) => {
const schemas = options.schemaAware ? (options.schemasByDatabase?.[database] ?? []).filter((schema) => schema.trim()) : [database];
const exportSchemas = schemas.length > 0 ? schemas : [database];