UNPKG

rawsql-ts

Version:

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

39 lines 1.8 kB
// Provides parsing for SET clauses in UPDATE queries. import { TokenType } from "../models/Lexeme"; import { SetClause, SetClauseItem } from "../models/Clause"; import { ValueParser } from "./ValueParser"; import { FullNameParser } from "./FullNameParser"; /** * Parse SET clause from lexemes (including 'SET' keyword check). */ export 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 === TokenType.Identifier) { // Parse fully qualified column name (e.g. table.column, schema.table.column) const { namespaces, name, newIndex } = FullNameParser.parseFromLexeme(lexemes, idx); idx = newIndex; if (((_a = lexemes[idx]) === null || _a === void 0 ? void 0 : _a.type) !== 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.parseFromLexeme(lexemes, idx); setClauseItems.push(new SetClauseItem({ namespaces, column: name }, value.value)); idx = value.newIndex; if (((_b = lexemes[idx]) === null || _b === void 0 ? void 0 : _b.type) === TokenType.Comma) { idx++; } else { break; } } return { setClause: new SetClause(setClauseItems), newIndex: idx }; } } //# sourceMappingURL=SetClauseParser.js.map