UNPKG

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
"use strict"; 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