UNPKG

rawsql-ts

Version:

[beta]High-performance SQL parser and AST analyzer written in TypeScript. Provides fast parsing and advanced transformation capabilities.

43 lines 2.02 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SetClauseParser = void 0; // Provides parsing for SET clauses in UPDATE queries. const Lexeme_1 = require("../models/Lexeme"); const Clause_1 = require("../models/Clause"); const ValueParser_1 = require("./ValueParser"); const FullNameParser_1 = require("./FullNameParser"); /** * Parse SET clause from lexemes (including 'SET' keyword check). */ class SetClauseParser { static parseFromLexeme(lexemes, idx) { var _a, _b; if (lexemes[idx].value !== "set") { throw new Error(`Syntax error at position ${idx}: Expected 'SET' but found '${lexemes[idx].value}'.`); } idx++; let setClauseItems = []; while (idx < lexemes.length && lexemes[idx].type === Lexeme_1.TokenType.Identifier) { // Parse fully qualified column name (e.g. table.column, schema.table.column) const { namespaces, name, newIndex } = FullNameParser_1.FullNameParser.parseFromLexeme(lexemes, idx); idx = newIndex; if (((_a = lexemes[idx]) === null || _a === void 0 ? void 0 : _a.type) !== Lexeme_1.TokenType.Operator || lexemes[idx].value !== "=") { throw new Error(`Syntax error at position ${idx}: Expected '=' after column name in SET clause.`); } idx++; // Parse value expression const value = ValueParser_1.ValueParser.parseFromLexeme(lexemes, idx); setClauseItems.push(new Clause_1.SetClauseItem({ namespaces, column: name }, value.value)); idx = value.newIndex; if (((_b = lexemes[idx]) === null || _b === void 0 ? void 0 : _b.type) === Lexeme_1.TokenType.Comma) { idx++; } else { break; } } return { setClause: new Clause_1.SetClause(setClauseItems), newIndex: idx }; } } exports.SetClauseParser = SetClauseParser; //# sourceMappingURL=SetClauseParser.js.map