UNPKG

rawsql-ts

Version:

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

29 lines 1.45 kB
import { TokenType } from "../models/Lexeme"; import { InlineQuery, ParenExpression } from "../models/ValueComponent"; import { SelectQueryParser } from "./SelectQueryParser"; import { ValueParser } from "./ValueParser"; export class ParenExpressionParser { static parseFromLexeme(lexemes, index) { let idx = index; // check inline query if (idx + 1 < lexemes.length && lexemes[idx].type & TokenType.OpenParen && (lexemes[idx + 1].value === "select" || lexemes[idx + 1].value === "values" || lexemes[idx + 1].value === "with")) { idx += 1; // Skip the '(' token const result = SelectQueryParser.parseFromLexeme(lexemes, idx); idx = result.newIndex; // Check for closing parenthesis if (idx >= lexemes.length || lexemes[idx].type !== TokenType.CloseParen) { throw new Error(`Expected ')' at index ${idx}, but found ${lexemes[idx].value}`); } idx++; // Skip the ')' token const value = new InlineQuery(result.value); return { value, newIndex: idx }; } else { const result = ValueParser.parseArgument(TokenType.OpenParen, TokenType.CloseParen, lexemes, index); idx = result.newIndex; const value = new ParenExpression(result.value); return { value, newIndex: idx }; } } } //# sourceMappingURL=ParenExpressionParser.js.map