UNPKG

rawsql-ts

Version:

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

48 lines 1.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.StringSpecifierTokenReader = void 0; const Lexeme_1 = require("../models/Lexeme"); const BaseTokenReader_1 = require("./BaseTokenReader"); const QUOTE_CHAR_CODE = 39; // ' const AMPERSAND_CHAR_CODE = 38; // & class StringSpecifierTokenReader extends BaseTokenReader_1.BaseTokenReader { /** * Try to read an escaped literal like e'...', x'...', etc. */ tryRead(previous) { const start = this.position; if (!this.canRead(1)) { return null; } const firstCode = this.input.charCodeAt(start); const secondCode = this.input.charCodeAt(start + 1); // Fast path for single-letter prefixes: e', E', x', X', b', B' if (secondCode === QUOTE_CHAR_CODE && this.isSingleLetterStringPrefix(firstCode)) { this.position = start + 1; return this.createLexeme(Lexeme_1.TokenType.StringSpecifier, this.input[start]); } // Fast path for unicode prefixes: u&', U&' if (this.canRead(2) && this.isUnicodePrefix(firstCode) && secondCode === AMPERSAND_CHAR_CODE && this.input.charCodeAt(start + 2) === QUOTE_CHAR_CODE) { this.position = start + 2; return this.createLexeme(Lexeme_1.TokenType.StringSpecifier, this.input.slice(start, start + 2)); } return null; } isSingleLetterStringPrefix(charCode) { return charCode === 69 || // E charCode === 101 || // e charCode === 88 || // X charCode === 120 || // x charCode === 66 || // B charCode === 98; // b } isUnicodePrefix(charCode) { return charCode === 85 || // U charCode === 117; // u } } exports.StringSpecifierTokenReader = StringSpecifierTokenReader; //# sourceMappingURL=StringSpecifierTokenReader.js.map