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
JavaScript
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
;