rawsql-ts
Version:
High-performance SQL parser and AST analyzer written in TypeScript. Provides fast parsing and advanced transformation capabilities.
36 lines • 1.68 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SelectResultSelectConverter = void 0;
const SimpleSelectQuery_1 = require("../models/SimpleSelectQuery");
const FixtureCteBuilder_1 = require("./FixtureCteBuilder");
const TableSourceCollector_1 = require("./TableSourceCollector");
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_1.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_1.FixtureCteBuilder.buildFixtures(neededFixtures);
if (query instanceof SimpleSelectQuery_1.SimpleSelectQuery) {
if (!query.withClause) {
query.appendWith(fixtureCtes);
}
else {
// Prepend fixtures to existing CTEs
query.withClause.tables = [...fixtureCtes, ...query.withClause.tables];
}
}
return query;
}
}
exports.SelectResultSelectConverter = SelectResultSelectConverter;
//# sourceMappingURL=SelectResultSelectConverter.js.map