fix: Oracle/DM数据库侧边栏不显示'默认模式'节点

This commit is contained in:
jonclex
2026-04-13 12:39:14 +08:00
parent 605e266eab
commit d849cd49af
2 changed files with 50 additions and 4 deletions

View File

@@ -45,7 +45,7 @@ import { getTableDataDangerActionMeta, supportsTableTruncateAction, type TableDa
import { useAutoFetchVisibility } from '../utils/autoFetchVisibility';
import FindInDatabaseModal from './FindInDatabaseModal';
import { buildRpcConnectionConfig } from '../utils/connectionRpcConfig';
import { normalizeSidebarViewName } from '../utils/sidebarMetadata';
import { normalizeSidebarViewName, resolveSidebarRuntimeDatabase } from '../utils/sidebarMetadata';
const { Search } = Input;
@@ -1202,7 +1202,11 @@ const Sidebar: React.FC<{ onEditConnection?: (conn: SavedConnection) => void }>
routineEntries.forEach((entry) => getSchemaBucket(entry.schemaName).routines.push(buildRoutineNode(entry)));
triggerEntries.forEach((entry) => getSchemaBucket(entry.schemaName).triggers.push(buildTriggerNode(entry)));
const dialect = getMetadataDialect(conn as SavedConnection);
const isOracleLike = (dialect === 'oracle' || dialect === 'dm');
const schemaNodes: TreeNode[] = Array.from(schemaMap.values())
.filter((bucket) => !(isOracleLike && !bucket.schemaName))
.sort((a, b) => {
if (!a.schemaName && !b.schemaName) return 0;
if (!a.schemaName) return -1;
@@ -1210,8 +1214,8 @@ const Sidebar: React.FC<{ onEditConnection?: (conn: SavedConnection) => void }>
return a.schemaName.toLowerCase().localeCompare(b.schemaName.toLowerCase());
})
.map((bucket) => {
const schemaNodeKey = `${key}-schema-${bucket.schemaName || 'default'}`;
const schemaTitle = bucket.schemaName || '默认模式';
const schemaNodeKey = `${key}-schema-${bucket.schemaName || 'default'}`;
const schemaTitle = bucket.schemaName || '默认模式';
const groupedNodes: TreeNode[] = [
buildObjectGroup(schemaNodeKey, 'tables', '表', <TableOutlined />, bucket.tables, { schemaName: bucket.schemaName }),
buildObjectGroup(schemaNodeKey, 'views', '视图', <EyeOutlined />, bucket.views, { schemaName: bucket.schemaName }),
@@ -2141,7 +2145,13 @@ const Sidebar: React.FC<{ onEditConnection?: (conn: SavedConnection) => void }>
const buildRuntimeConfig = (conn: any, overrideDatabase?: string, clearDatabase: boolean = false) => {
return buildRpcConnectionConfig(conn.config, {
database: clearDatabase ? '' : ((overrideDatabase ?? conn.config.database) || ''),
database: resolveSidebarRuntimeDatabase(
conn?.config?.type,
conn?.config?.driver,
conn?.config?.database,
overrideDatabase,
clearDatabase,
),
});
};

View File

@@ -11,6 +11,19 @@ const splitQualifiedName = (qualifiedName: string): { schemaName: string; object
};
};
const normalizeSidebarConnectionDialect = (type: string, driver: string): string => {
const normalizedType = String(type || '').trim().toLowerCase();
if (normalizedType === 'custom') {
const normalizedDriver = String(driver || '').trim().toLowerCase();
if (normalizedDriver === 'postgresql' || normalizedDriver === 'postgres' || normalizedDriver === 'pg') return 'postgres';
if (normalizedDriver === 'dameng' || normalizedDriver === 'dm' || normalizedDriver === 'dm8') return 'dm';
if (normalizedDriver.includes('oracle')) return 'oracle';
return normalizedDriver;
}
if (normalizedType === 'dameng') return 'dm';
return normalizedType;
};
export const normalizeSidebarViewName = (dialect: string, dbName: string, schemaName: string, viewName: string): string => {
const normalizedDialect = String(dialect || '').trim().toLowerCase();
const normalizedDbName = String(dbName || '').trim();
@@ -35,3 +48,26 @@ export const normalizeSidebarViewName = (dialect: string, dbName: string, schema
return `${normalizedSchemaName}.${normalizedViewName}`;
};
export const resolveSidebarRuntimeDatabase = (
type: string,
driver: string,
savedDatabase: string,
overrideDatabase?: string,
clearDatabase: boolean = false,
): string => {
if (clearDatabase) return '';
const normalizedSavedDatabase = String(savedDatabase || '').trim();
const normalizedOverrideDatabase = String(overrideDatabase || '').trim();
if (!normalizedOverrideDatabase) {
return normalizedSavedDatabase;
}
const dialect = normalizeSidebarConnectionDialect(type, driver);
if (dialect === 'oracle' || dialect === 'dm') {
return normalizedSavedDatabase || normalizedOverrideDatabase;
}
return normalizedOverrideDatabase;
};