ktx/packages/cli/src/context/connections/local-query-executor.ts

35 lines
1.3 KiB
TypeScript
Raw Normal View History

2026-05-10 23:12:26 +02:00
import { createPostgresQueryExecutor } from './postgres-query-executor.js';
import type {
2026-05-10 23:51:24 +02:00
KtxSqlQueryExecutionInput,
KtxSqlQueryExecutionResult,
KtxSqlQueryExecutorPort,
2026-05-10 23:12:26 +02:00
} from './query-executor.js';
import { createSqliteQueryExecutor } from './sqlite-query-executor.js';
export interface DefaultLocalQueryExecutorOptions {
2026-05-10 23:51:24 +02:00
postgres?: KtxSqlQueryExecutorPort;
sqlite?: KtxSqlQueryExecutorPort;
2026-05-10 23:12:26 +02:00
}
2026-05-10 23:51:24 +02:00
function driverFor(input: KtxSqlQueryExecutionInput): string {
2026-05-10 23:12:26 +02:00
return String(input.connection?.driver ?? '').toLowerCase();
}
2026-05-10 23:51:24 +02:00
export function createDefaultLocalQueryExecutor(options: DefaultLocalQueryExecutorOptions = {}): KtxSqlQueryExecutorPort {
2026-05-10 23:12:26 +02:00
const postgres = options.postgres ?? createPostgresQueryExecutor();
const sqlite = options.sqlite ?? createSqliteQueryExecutor();
return {
2026-05-10 23:51:24 +02:00
async execute(input: KtxSqlQueryExecutionInput): Promise<KtxSqlQueryExecutionResult> {
2026-05-10 23:12:26 +02:00
const driver = driverFor(input);
if (driver === 'postgres' || driver === 'postgresql') {
return postgres.execute(input);
}
if (driver === 'sqlite' || driver === 'sqlite3') {
return sqlite.execute(input);
}
throw new Error(`No local query executor is configured for driver "${input.connection?.driver ?? 'unknown'}".`);
},
};
}