rawsql-ts
Version:
High-performance SQL parser and AST analyzer written in TypeScript. Provides fast parsing and advanced transformation capabilities.
65 lines • 3.63 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SimulatedSelectConverter = void 0;
const InsertQuery_1 = require("../models/InsertQuery");
const UpdateQuery_1 = require("../models/UpdateQuery");
const DeleteQuery_1 = require("../models/DeleteQuery");
const MergeQuery_1 = require("../models/MergeQuery");
const CreateTableQuery_1 = require("../models/CreateTableQuery");
const SimpleSelectQuery_1 = require("../models/SimpleSelectQuery");
const BinarySelectQuery_1 = require("../models/BinarySelectQuery");
const ValuesQuery_1 = require("../models/ValuesQuery");
const InsertResultSelectConverter_1 = require("./InsertResultSelectConverter");
const UpdateResultSelectConverter_1 = require("./UpdateResultSelectConverter");
const DeleteResultSelectConverter_1 = require("./DeleteResultSelectConverter");
const MergeResultSelectConverter_1 = require("./MergeResultSelectConverter");
const SelectResultSelectConverter_1 = require("./SelectResultSelectConverter");
class SimulatedSelectConverter {
/**
* Converts a SQL statement into a simulated SELECT statement for previewing results.
*
* Rules:
* 1. INSERT/UPDATE/DELETE/MERGE: Converted to SELECT statement showing affected rows.
* 2. SELECT: Preserved as is (with fixtures injected).
* 3. CREATE TEMPORARY TABLE ... AS SELECT: Preserved as is (with fixtures injected into inner SELECT).
* 4. Other DDL (CREATE TABLE, DROP, ALTER, etc.): Ignored (returns null).
*
* @param ast The SQL component to convert
* @param options Options for conversion (fixtures, table definitions, etc.)
* @returns The converted SqlComponent or null if the statement should be ignored.
*/
static convert(ast, options) {
if (ast instanceof InsertQuery_1.InsertQuery) {
return InsertResultSelectConverter_1.InsertResultSelectConverter.toSelectQuery(ast, options);
}
if (ast instanceof UpdateQuery_1.UpdateQuery) {
return UpdateResultSelectConverter_1.UpdateResultSelectConverter.toSelectQuery(ast, options);
}
if (ast instanceof DeleteQuery_1.DeleteQuery) {
return DeleteResultSelectConverter_1.DeleteResultSelectConverter.toSelectQuery(ast, options);
}
if (ast instanceof MergeQuery_1.MergeQuery) {
return MergeResultSelectConverter_1.MergeResultSelectConverter.toSelectQuery(ast, options);
}
if (ast instanceof SimpleSelectQuery_1.SimpleSelectQuery || ast instanceof BinarySelectQuery_1.BinarySelectQuery || ast instanceof ValuesQuery_1.ValuesQuery) {
// Use SelectResultSelectConverter to inject fixtures
return SelectResultSelectConverter_1.SelectResultSelectConverter.toSelectQuery(ast, options);
}
if (ast instanceof CreateTableQuery_1.CreateTableQuery) {
// Allow CreateTemporaryTableAsSelect
if (ast.isTemporary && ast.asSelectQuery) {
// Inject fixtures into the inner select query
// Note: We modify the AST in place as SelectResultSelectConverter does
const processedSelect = SelectResultSelectConverter_1.SelectResultSelectConverter.toSelectQuery(ast.asSelectQuery, options);
ast.asSelectQuery = processedSelect;
return ast;
}
// Ignore other Create Table statements
return null;
}
// Ignore all other statements (DDL, etc.)
return null;
}
}
exports.SimulatedSelectConverter = SimulatedSelectConverter;
//# sourceMappingURL=SimulatedSelectConverter.js.map