UNPKG

rawsql-ts

Version:

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

107 lines 2.93 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.OperatorPrecedence = void 0; /** * SQL operator precedence definitions * Higher numbers indicate higher precedence (tighter binding) */ class OperatorPrecedence { /** * Get the precedence of an operator * @param operator The operator string * @returns The precedence number (higher = tighter binding) */ static getPrecedence(operator) { const precedence = this.precedenceMap[operator.toLowerCase()]; return precedence !== undefined ? precedence : 0; } /** * Check if operator1 has higher or equal precedence than operator2 */ static hasHigherOrEqualPrecedence(operator1, operator2) { return this.getPrecedence(operator1) >= this.getPrecedence(operator2); } /** * Check if an operator is a logical operator (AND/OR) */ static isLogicalOperator(operator) { const op = operator.toLowerCase(); return op === 'and' || op === 'or'; } /** * Check if an operator is a BETWEEN operator */ static isBetweenOperator(operator) { const op = operator.toLowerCase(); return op === 'between' || op === 'not between'; } /** * Check if a string is a comparison operator */ static isComparisonOperator(operator) { const lowerOp = operator.toLowerCase(); return ['=', '!=', '<>', '<', '>', '<=', '>=', 'like', 'ilike', 'similar to', 'in', 'not in', '->', '->>', '#>', '#>>', '@>', '<@', '?', '?|', '?&', '~', '~*', '!~', '!~*', 'rlike', 'regexp'].includes(lowerOp); } } exports.OperatorPrecedence = OperatorPrecedence; OperatorPrecedence.precedenceMap = { // Logical operators (lowest precedence) 'or': 1, 'and': 2, // Comparison operators '=': 10, '!=': 10, '<>': 10, '<': 10, '<=': 10, '>': 10, '>=': 10, 'like': 10, 'ilike': 10, 'not like': 10, 'not ilike': 10, 'similar to': 10, 'not similar to': 10, 'in': 10, 'not in': 10, 'is': 10, 'is not': 10, // JSON operators (PostgreSQL/MySQL) '->': 10, '->>': 10, '#>': 10, '#>>': 10, '@>': 10, '<@': 10, '?': 10, '?|': 10, '?&': 10, // Regular expression operators (PostgreSQL/MySQL) '~': 10, '~*': 10, '!~': 10, '!~*': 10, 'rlike': 10, 'regexp': 10, // MySQL arithmetic/logical operators 'mod': 30, // Same precedence as % 'xor': 2, // Same precedence as OR 'between': 15, // BETWEEN has higher precedence than logical operators 'not between': 15, // Arithmetic operators '+': 20, '-': 20, '*': 30, '/': 30, '%': 30, '^': 40, // Type casting '::': 50, // Highest precedence operators 'unary+': 100, 'unary-': 100, 'not': 100 }; //# sourceMappingURL=OperatorPrecedence.js.map