mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-19 10:46:00 +00:00
60 lines
1.6 KiB
TypeScript
60 lines
1.6 KiB
TypeScript
import { SchemaInfo, SqlDialect } from 'dbgate-types';
|
|
|
|
export function findDefaultSchema(schemaList: SchemaInfo[], dialect: SqlDialect, schemaInStorage: string = null) {
|
|
if (!schemaList) {
|
|
return null;
|
|
}
|
|
|
|
if (schemaInStorage && schemaList.find(x => x.schemaName == schemaInStorage)) {
|
|
return schemaInStorage;
|
|
}
|
|
|
|
const dynamicDefaultSchema = schemaList.find(x => x.isDefault);
|
|
if (dynamicDefaultSchema) {
|
|
return dynamicDefaultSchema.schemaName;
|
|
}
|
|
if (dialect?.defaultSchemaName && schemaList.find(x => x.schemaName == dialect.defaultSchemaName)) {
|
|
return dialect.defaultSchemaName;
|
|
}
|
|
return schemaList[0]?.schemaName;
|
|
}
|
|
|
|
export function isCompositeDbName(name: string) {
|
|
return name?.includes('::');
|
|
}
|
|
|
|
export function splitCompositeDbName(name: string) {
|
|
if (!isCompositeDbName(name)) return null;
|
|
const [database, schema] = name.split('::');
|
|
return { database, schema };
|
|
}
|
|
|
|
export function extractDbNameFromComposite(name: string) {
|
|
return isCompositeDbName(name) ? splitCompositeDbName(name).database : name;
|
|
}
|
|
|
|
export function extractSchemaNameFromComposite(name: string) {
|
|
return splitCompositeDbName(name)?.schema;
|
|
}
|
|
|
|
export function dbNameLogCategory(database: string): string {
|
|
if (isCompositeDbName(database)) {
|
|
return '~composite';
|
|
}
|
|
if (database) {
|
|
return '~simple';
|
|
}
|
|
return '~nodb';
|
|
}
|
|
|
|
export function compositeDbNameIfNeeded(
|
|
connnection: { useSeparateSchemas: boolean },
|
|
database: string,
|
|
schema: string
|
|
) {
|
|
if (connnection?.useSeparateSchemas) {
|
|
return `${database}::${schema}`;
|
|
}
|
|
return database;
|
|
}
|