mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-05-12 12:19:47 +08:00
- 统一 DuckDB 文件库与 Parquet 文件接入能力 - 补充 URI、文件选择、只读挂载与连接缓存键处理 - 去掉数据源卡片点击前的同步驱动查询,修复打开卡顿 - refs #166
87 lines
1.9 KiB
TypeScript
87 lines
1.9 KiB
TypeScript
import type { ConnectionConfig } from '../types';
|
|
|
|
type ConnectionLike = Pick<ConnectionConfig, 'type' | 'driver'> | null | undefined;
|
|
|
|
const normalizeDataSourceToken = (raw: string): string => {
|
|
const normalized = String(raw || '').trim().toLowerCase();
|
|
switch (normalized) {
|
|
case 'doris':
|
|
return 'diros';
|
|
case 'postgresql':
|
|
return 'postgres';
|
|
case 'dm':
|
|
return 'dameng';
|
|
default:
|
|
return normalized;
|
|
}
|
|
};
|
|
|
|
export const resolveDataSourceType = (config: ConnectionLike): string => {
|
|
if (!config) return '';
|
|
const type = normalizeDataSourceToken(String(config.type || ''));
|
|
if (type === 'custom') {
|
|
const driver = normalizeDataSourceToken(String(config.driver || ''));
|
|
return driver || 'custom';
|
|
}
|
|
return type;
|
|
};
|
|
|
|
const SQL_QUERY_EXPORT_TYPES = new Set([
|
|
'mysql',
|
|
'mariadb',
|
|
'diros',
|
|
'sphinx',
|
|
'postgres',
|
|
'kingbase',
|
|
'highgo',
|
|
'vastbase',
|
|
'sqlserver',
|
|
'sqlite',
|
|
'duckdb',
|
|
'oracle',
|
|
'dameng',
|
|
'tdengine',
|
|
'clickhouse',
|
|
]);
|
|
|
|
const COPY_INSERT_TYPES = new Set([
|
|
'mysql',
|
|
'mariadb',
|
|
'diros',
|
|
'sphinx',
|
|
'postgres',
|
|
'kingbase',
|
|
'highgo',
|
|
'vastbase',
|
|
'sqlserver',
|
|
'sqlite',
|
|
'duckdb',
|
|
'oracle',
|
|
'dameng',
|
|
'tdengine',
|
|
'clickhouse',
|
|
]);
|
|
|
|
const QUERY_EDITOR_DISABLED_TYPES = new Set(['redis']);
|
|
const FORCE_READ_ONLY_QUERY_TYPES = new Set(['tdengine', 'clickhouse']);
|
|
|
|
export type DataSourceCapabilities = {
|
|
type: string;
|
|
supportsQueryEditor: boolean;
|
|
supportsSqlQueryExport: boolean;
|
|
supportsCopyInsert: boolean;
|
|
forceReadOnlyQueryResult: boolean;
|
|
};
|
|
|
|
export const getDataSourceCapabilities = (config: ConnectionLike): DataSourceCapabilities => {
|
|
const type = resolveDataSourceType(config);
|
|
return {
|
|
type,
|
|
supportsQueryEditor: !QUERY_EDITOR_DISABLED_TYPES.has(type),
|
|
supportsSqlQueryExport: SQL_QUERY_EXPORT_TYPES.has(type),
|
|
supportsCopyInsert: COPY_INSERT_TYPES.has(type),
|
|
forceReadOnlyQueryResult: FORCE_READ_ONLY_QUERY_TYPES.has(type),
|
|
};
|
|
};
|
|
|