72 lines
3.3 KiB
TypeScript
72 lines
3.3 KiB
TypeScript
import { DOLT_DRIVER_PROFILE_EXTENSION } from "@/lib/database/doltProfile";
|
|
import type { SqlCompletionObject, SqlCompletionTable, SqlStatementKind } from "@/lib/sql/sqlCompletion";
|
|
import type { ConnectionConfig, TableNameFilter, TreeNodeType } from "@/types/database";
|
|
|
|
export type DriverProfileObjectTreeProfile = {
|
|
cacheKey: string;
|
|
groupOverrides: Array<{
|
|
nodeType: TreeNodeType;
|
|
label?: string;
|
|
tableNameFilter: TableNameFilter;
|
|
}>;
|
|
};
|
|
|
|
export type DriverProfileSqlCompletionContext = {
|
|
statementKind: SqlStatementKind;
|
|
suggestTables: boolean;
|
|
suggestRoutines: boolean;
|
|
exclusiveRoutineSuggestions: boolean;
|
|
prefix: string;
|
|
openingParenAfterCursor: boolean;
|
|
};
|
|
|
|
export type DriverProfileCompletionTableMetadata = Pick<SqlCompletionTable, "detail" | "boost">;
|
|
|
|
export type DriverProfileExtensionDefinition = {
|
|
id: string;
|
|
objectTreeProfile?: (config: ConnectionConfig) => DriverProfileObjectTreeProfile | undefined;
|
|
completionTableMetadata?: (tableName: string) => DriverProfileCompletionTableMetadata | undefined;
|
|
completionObjects?: (context: DriverProfileSqlCompletionContext) => SqlCompletionObject[];
|
|
completionTables?: (context: DriverProfileSqlCompletionContext) => SqlCompletionTable[];
|
|
sqlBuiltinTerms?: () => string;
|
|
routineSignatures?: () => Map<string, string[]>;
|
|
};
|
|
|
|
export const DRIVER_PROFILE_EXTENSIONS = [DOLT_DRIVER_PROFILE_EXTENSION] as const satisfies readonly DriverProfileExtensionDefinition[];
|
|
|
|
export function driverProfileExtension(driverProfile?: string): DriverProfileExtensionDefinition | undefined {
|
|
const normalized = driverProfile?.trim().toLowerCase();
|
|
if (!normalized) return undefined;
|
|
return DRIVER_PROFILE_EXTENSIONS.find((extension) => extension.id.toLowerCase() === normalized);
|
|
}
|
|
|
|
export function driverProfileObjectTreeProfileForConnection(config?: ConnectionConfig): DriverProfileObjectTreeProfile | undefined {
|
|
if (!config) return undefined;
|
|
return driverProfileExtension(config.driver_profile)?.objectTreeProfile?.(config);
|
|
}
|
|
|
|
export function driverProfileCompletionTableMetadata(driverProfile: string | undefined, tableName: string): DriverProfileCompletionTableMetadata | undefined {
|
|
return driverProfileExtension(driverProfile)?.completionTableMetadata?.(tableName);
|
|
}
|
|
|
|
export function driverProfileCompletionObjects(driverProfile: string | undefined, context: DriverProfileSqlCompletionContext): SqlCompletionObject[] {
|
|
return driverProfileExtension(driverProfile)?.completionObjects?.(context) ?? [];
|
|
}
|
|
|
|
export function driverProfileCompletionTables(driverProfile: string | undefined, context: DriverProfileSqlCompletionContext): SqlCompletionTable[] {
|
|
return driverProfileExtension(driverProfile)?.completionTables?.(context) ?? [];
|
|
}
|
|
|
|
export function driverProfileHasCompletionCandidates(driverProfile: string | undefined, context: DriverProfileSqlCompletionContext): boolean {
|
|
const extension = driverProfileExtension(driverProfile);
|
|
return Boolean(extension?.completionObjects?.(context).length || extension?.completionTables?.(context).length);
|
|
}
|
|
|
|
export function driverProfileSqlBuiltinTerms(driverProfile?: string): string {
|
|
return driverProfileExtension(driverProfile)?.sqlBuiltinTerms?.() ?? "";
|
|
}
|
|
|
|
export function driverProfileRoutineSignatures(driverProfile?: string): Map<string, string[]> {
|
|
return driverProfileExtension(driverProfile)?.routineSignatures?.() ?? new Map();
|
|
}
|