rawsql-ts
Version:
High-performance SQL parser and AST analyzer written in TypeScript. Provides fast parsing and advanced transformation capabilities.
32 lines • 1.43 kB
JavaScript
import { SimpleSelectQuery } from '../models/SimpleSelectQuery';
import { FixtureCteBuilder } from './FixtureCteBuilder';
import { TableSourceCollector } from './TableSourceCollector';
export class SelectResultSelectConverter {
static toSelectQuery(query, options) {
var _a;
const fixtureTables = (_a = options === null || options === void 0 ? void 0 : options.fixtureTables) !== null && _a !== void 0 ? _a : [];
if (fixtureTables.length === 0) {
return query;
}
const collector = new TableSourceCollector(false);
const sources = collector.collect(query);
const referencedTables = new Set();
sources.forEach(s => referencedTables.add(s.getSourceName().toLowerCase()));
const neededFixtures = fixtureTables.filter(f => referencedTables.has(f.tableName.toLowerCase()));
if (neededFixtures.length === 0) {
return query;
}
const fixtureCtes = FixtureCteBuilder.buildFixtures(neededFixtures);
if (query instanceof SimpleSelectQuery) {
if (!query.withClause) {
query.appendWith(fixtureCtes);
}
else {
// Prepend fixtures to existing CTEs
query.withClause.tables = [...fixtureCtes, ...query.withClause.tables];
}
}
return query;
}
}
//# sourceMappingURL=SelectResultSelectConverter.js.map