UNPKG

snowflake-sql-validator

Version:

Snowflake SQL validator for React applications

104 lines 5.06 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CaseInsensitiveSnowflakeLexer = void 0; const SnowflakeLexer_1 = require("./parser/snowflake/SnowflakeLexer"); /** * Case-insensitive wrapper for SnowflakeLexer that handles lowercase SQL keywords * Optimized for performance with Map-based keyword lookup */ class CaseInsensitiveSnowflakeLexer extends SnowflakeLexer_1.SnowflakeLexer { constructor(input) { super(input); } /** * Override the nextToken method to handle case-insensitive matching * Optimized with Map lookup and minimal string operations */ nextToken() { const token = super.nextToken(); // If it's an identifier, check if it matches any SQL keywords (case-insensitive) if (token.type === SnowflakeLexer_1.SnowflakeLexer.ID && token.text) { const text = token.text.toUpperCase(); const keywordType = CaseInsensitiveSnowflakeLexer.keywordMap.get(text); if (keywordType) { // Check if the text is a valid case pattern for SQL keywords const isLowerCase = token.text === token.text.toLowerCase(); const isUpperCase = token.text === token.text.toUpperCase(); if (isLowerCase || isUpperCase) { // Valid case pattern - convert to keyword token const newToken = { ...token, type: keywordType }; return newToken; } else { // Mixed case keywords are not allowed - keep as identifier but mark as invalid // This will be caught by the validation visitor const newToken = { ...token, type: SnowflakeLexer_1.SnowflakeLexer.ID // Keep as identifier but with mixed case }; return newToken; } } } return token; } } exports.CaseInsensitiveSnowflakeLexer = CaseInsensitiveSnowflakeLexer; // Static keyword map for efficient lookup - initialized once CaseInsensitiveSnowflakeLexer.keywordMap = new Map([ ['SELECT', SnowflakeLexer_1.SnowflakeLexer.SELECT], ['FROM', SnowflakeLexer_1.SnowflakeLexer.FROM], ['WHERE', SnowflakeLexer_1.SnowflakeLexer.WHERE], ['INSERT', SnowflakeLexer_1.SnowflakeLexer.INSERT], ['UPDATE', SnowflakeLexer_1.SnowflakeLexer.UPDATE], ['DELETE', SnowflakeLexer_1.SnowflakeLexer.DELETE], ['CREATE', SnowflakeLexer_1.SnowflakeLexer.CREATE], ['DROP', SnowflakeLexer_1.SnowflakeLexer.DROP], ['ALTER', SnowflakeLexer_1.SnowflakeLexer.ALTER], ['AS', SnowflakeLexer_1.SnowflakeLexer.AS], ['AND', SnowflakeLexer_1.SnowflakeLexer.AND], ['OR', SnowflakeLexer_1.SnowflakeLexer.OR], ['INTO', SnowflakeLexer_1.SnowflakeLexer.INTO], ['VALUES', SnowflakeLexer_1.SnowflakeLexer.VALUES], ['SET', SnowflakeLexer_1.SnowflakeLexer.SET], ['JOIN', SnowflakeLexer_1.SnowflakeLexer.JOIN], ['LEFT', SnowflakeLexer_1.SnowflakeLexer.LEFT], ['RIGHT', SnowflakeLexer_1.SnowflakeLexer.RIGHT], ['INNER', SnowflakeLexer_1.SnowflakeLexer.INNER], ['OUTER', SnowflakeLexer_1.SnowflakeLexer.OUTER], ['ON', SnowflakeLexer_1.SnowflakeLexer.ON], ['GROUP', SnowflakeLexer_1.SnowflakeLexer.GROUP], ['BY', SnowflakeLexer_1.SnowflakeLexer.BY], ['ORDER', SnowflakeLexer_1.SnowflakeLexer.ORDER], ['HAVING', SnowflakeLexer_1.SnowflakeLexer.HAVING], ['LIMIT', SnowflakeLexer_1.SnowflakeLexer.LIMIT], ['OFFSET', SnowflakeLexer_1.SnowflakeLexer.OFFSET], ['UNION', SnowflakeLexer_1.SnowflakeLexer.UNION], ['ALL', SnowflakeLexer_1.SnowflakeLexer.ALL], ['DISTINCT', SnowflakeLexer_1.SnowflakeLexer.DISTINCT], ['COUNT', SnowflakeLexer_1.SnowflakeLexer.COUNT], ['SUM', SnowflakeLexer_1.SnowflakeLexer.SUM], ['AVG', SnowflakeLexer_1.SnowflakeLexer.AVG], ['CASE', SnowflakeLexer_1.SnowflakeLexer.CASE], ['WHEN', SnowflakeLexer_1.SnowflakeLexer.WHEN], ['THEN', SnowflakeLexer_1.SnowflakeLexer.THEN], ['ELSE', SnowflakeLexer_1.SnowflakeLexer.ELSE], ['END', SnowflakeLexer_1.SnowflakeLexer.END], ['IS', SnowflakeLexer_1.SnowflakeLexer.IS], ['NULL', SnowflakeLexer_1.SnowflakeLexer.NULL_], ['NOT', SnowflakeLexer_1.SnowflakeLexer.NOT], ['LIKE', SnowflakeLexer_1.SnowflakeLexer.LIKE], ['IN', SnowflakeLexer_1.SnowflakeLexer.IN], ['BETWEEN', SnowflakeLexer_1.SnowflakeLexer.BETWEEN], ['EXISTS', SnowflakeLexer_1.SnowflakeLexer.EXISTS], ['CAST', SnowflakeLexer_1.SnowflakeLexer.CAST], ['CURRENT_DATE', SnowflakeLexer_1.SnowflakeLexer.CURRENT_DATE], ['CURRENT_TIME', SnowflakeLexer_1.SnowflakeLexer.CURRENT_TIME], ['CURRENT_TIMESTAMP', SnowflakeLexer_1.SnowflakeLexer.CURRENT_TIMESTAMP], ['TRUE', SnowflakeLexer_1.SnowflakeLexer.TRUE], ['FALSE', SnowflakeLexer_1.SnowflakeLexer.FALSE] ]); //# sourceMappingURL=CaseInsensitiveSnowflakeLexer.js.map