From 152f186a2e5b67aca4d68a6a8bc949b0bf0d38c4 Mon Sep 17 00:00:00 2001 From: HSunboy Date: Thu, 5 Jul 2018 11:16:30 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8pegjs=E9=87=8D=E5=86=99=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/astParser.js | 36 +- core/comment.js | 997 +++++ core/nquery.js | 9254 --------------------------------------------- lib/filter.js | 81 +- package.json | 3 +- peg/build.js | 14 + peg/comment.pegjs | 72 + peg/nquery.pegjs | 6 +- test/example.js | 2 +- test/index.js | 4 +- 10 files changed, 1099 insertions(+), 9370 deletions(-) create mode 100644 core/comment.js delete mode 100644 core/nquery.js create mode 100644 peg/build.js create mode 100644 peg/comment.pegjs diff --git a/core/astParser.js b/core/astParser.js index c427b06..850d032 100644 --- a/core/astParser.js +++ b/core/astParser.js @@ -330,17 +330,8 @@ module.exports = (function(){ function parse_init() { var result0; - var pos0, pos1; - pos0 = pos; - pos1 = pos; - result0 = []; - if (result0 !== null) { - result0 = (function(offset) { params = []; return true; })(pos0); - } - if (result0 === null) { - pos = pos0; - } + result0 = (function(offset) { params = []; return true; })(pos) ? "" : null; return result0; } @@ -491,6 +482,7 @@ module.exports = (function(){ } if (result0 !== null) { result0 = (function(offset, s) { + console.log(s); return s[2]; })(pos0, result0); } @@ -2323,24 +2315,15 @@ module.exports = (function(){ function parse_expr_list_or_empty() { var result0; - var pos0, pos1; result0 = parse_expr_list(); if (result0 === null) { - pos0 = pos; - pos1 = pos; - result0 = []; - if (result0 !== null) { - result0 = (function(offset) { + result0 = (function(offset, l) { return { type : 'expr_list', value : [] } - })(pos0); - } - if (result0 === null) { - pos = pos0; - } + })(pos, result0) ? "" : null; } return result0; } @@ -7462,17 +7445,8 @@ module.exports = (function(){ function parse_proc_init() { var result0; - var pos0, pos1; - pos0 = pos; - pos1 = pos; - result0 = []; - if (result0 !== null) { - result0 = (function(offset) { varList = []; return true; })(pos0); - } - if (result0 === null) { - pos = pos0; - } + result0 = (function(offset) { varList = []; return true; })(pos) ? "" : null; return result0; } diff --git a/core/comment.js b/core/comment.js new file mode 100644 index 0000000..daf3fc2 --- /dev/null +++ b/core/comment.js @@ -0,0 +1,997 @@ +module.exports = (function(){ + /* + * Generated by PEG.js 0.7.0. + * + * http://pegjs.majda.cz/ + */ + + function quote(s) { + /* + * ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a + * string literal except for the closing quote character, backslash, + * carriage return, line separator, paragraph separator, and line feed. + * Any character may appear in the form of an escape sequence. + * + * For portability, we also escape escape all control and non-ASCII + * characters. Note that "\0" and "\v" escape sequences are not used + * because JSHint does not like the first and IE the second. + */ + return '"' + s + .replace(/\\/g, '\\\\') // backslash + .replace(/"/g, '\\"') // closing quote character + .replace(/\x08/g, '\\b') // backspace + .replace(/\t/g, '\\t') // horizontal tab + .replace(/\n/g, '\\n') // line feed + .replace(/\f/g, '\\f') // form feed + .replace(/\r/g, '\\r') // carriage return + .replace(/[\x00-\x07\x0B\x0E-\x1F\x80-\uFFFF]/g, escape) + + '"'; + } + + var result = { + /* + * Parses the input with a generated parser. If the parsing is successfull, + * returns a value explicitly or implicitly specified by the grammar from + * which the parser was generated (see |PEG.buildParser|). If the parsing is + * unsuccessful, throws |PEG.parser.SyntaxError| describing the error. + */ + parse: function(input, startRule) { + var parseFunctions = { + "start": parse_start, + "union_stmt": parse_union_stmt, + "comment": parse_comment, + "singleLine": parse_singleLine, + "multiLine": parse_multiLine, + "quote": parse_quote, + "kw_start": parse_kw_start, + "KW_SINGLE_LINE_START": parse_KW_SINGLE_LINE_START, + "KW_SINGLE_LINE_END": parse_KW_SINGLE_LINE_END, + "KW_MULTI_LINE_START": parse_KW_MULTI_LINE_START, + "KW_MULTI_LINE_END": parse_KW_MULTI_LINE_END, + "__": parse___, + "whitespace": parse_whitespace + }; + + if (startRule !== undefined) { + if (parseFunctions[startRule] === undefined) { + throw new Error("Invalid rule name: " + quote(startRule) + "."); + } + } else { + startRule = "start"; + } + + var pos = 0; + var reportFailures = 0; + var rightmostFailuresPos = 0; + var rightmostFailuresExpected = []; + + function padLeft(input, padding, length) { + var result = input; + + var padLength = length - input.length; + for (var i = 0; i < padLength; i++) { + result = padding + result; + } + + return result; + } + + function escape(ch) { + var charCode = ch.charCodeAt(0); + var escapeChar; + var length; + + if (charCode <= 0xFF) { + escapeChar = 'x'; + length = 2; + } else { + escapeChar = 'u'; + length = 4; + } + + return '\\' + escapeChar + padLeft(charCode.toString(16).toUpperCase(), '0', length); + } + + function matchFailed(failure) { + if (pos < rightmostFailuresPos) { + return; + } + + if (pos > rightmostFailuresPos) { + rightmostFailuresPos = pos; + rightmostFailuresExpected = []; + } + + rightmostFailuresExpected.push(failure); + } + + function parse_start() { + var result0; + var pos0; + + pos0 = pos; + result0 = parse_union_stmt(); + if (result0 !== null) { + result0 = (function(offset, union_stmt) { + return union_stmt; + })(pos0, result0); + } + if (result0 === null) { + pos = pos0; + } + return result0; + } + + function parse_union_stmt() { + var result0, result1, result2, result3; + var pos0, pos1, pos2, pos3, pos4, pos5, pos6; + + pos0 = pos; + pos1 = pos; + result0 = []; + pos2 = pos; + pos3 = pos; + result1 = []; + pos4 = pos; + pos5 = pos; + pos6 = pos; + reportFailures++; + result2 = parse_kw_start(); + reportFailures--; + if (result2 === null) { + result2 = ""; + } else { + result2 = null; + pos = pos6; + } + if (result2 !== null) { + if (input.length > pos) { + result3 = input.charAt(pos); + pos++; + } else { + result3 = null; + if (reportFailures === 0) { + matchFailed("any character"); + } + } + if (result3 !== null) { + result2 = [result2, result3]; + } else { + result2 = null; + pos = pos5; + } + } else { + result2 = null; + pos = pos5; + } + if (result2 !== null) { + result2 = (function(offset, word) {return word})(pos4, result2[1]); + } + if (result2 === null) { + pos = pos4; + } + while (result2 !== null) { + result1.push(result2); + pos4 = pos; + pos5 = pos; + pos6 = pos; + reportFailures++; + result2 = parse_kw_start(); + reportFailures--; + if (result2 === null) { + result2 = ""; + } else { + result2 = null; + pos = pos6; + } + if (result2 !== null) { + if (input.length > pos) { + result3 = input.charAt(pos); + pos++; + } else { + result3 = null; + if (reportFailures === 0) { + matchFailed("any character"); + } + } + if (result3 !== null) { + result2 = [result2, result3]; + } else { + result2 = null; + pos = pos5; + } + } else { + result2 = null; + pos = pos5; + } + if (result2 !== null) { + result2 = (function(offset, word) {return word})(pos4, result2[1]); + } + if (result2 === null) { + pos = pos4; + } + } + if (result1 !== null) { + pos4 = pos; + result2 = parse_comment(); + if (result2 !== null) { + result2 = (function(offset, comment) {return ''})(pos4, result2); + } + if (result2 === null) { + pos = pos4; + } + if (result2 === null) { + pos4 = pos; + result2 = parse_quote(); + if (result2 !== null) { + result2 = (function(offset, quote) {return quote})(pos4, result2); + } + if (result2 === null) { + pos = pos4; + } + } + if (result2 !== null) { + result1 = [result1, result2]; + } else { + result1 = null; + pos = pos3; + } + } else { + result1 = null; + pos = pos3; + } + if (result1 !== null) { + result1 = (function(offset, words, stmt) {return words.join("")+stmt})(pos2, result1[0], result1[1]); + } + if (result1 === null) { + pos = pos2; + } + while (result1 !== null) { + result0.push(result1); + pos2 = pos; + pos3 = pos; + result1 = []; + pos4 = pos; + pos5 = pos; + pos6 = pos; + reportFailures++; + result2 = parse_kw_start(); + reportFailures--; + if (result2 === null) { + result2 = ""; + } else { + result2 = null; + pos = pos6; + } + if (result2 !== null) { + if (input.length > pos) { + result3 = input.charAt(pos); + pos++; + } else { + result3 = null; + if (reportFailures === 0) { + matchFailed("any character"); + } + } + if (result3 !== null) { + result2 = [result2, result3]; + } else { + result2 = null; + pos = pos5; + } + } else { + result2 = null; + pos = pos5; + } + if (result2 !== null) { + result2 = (function(offset, word) {return word})(pos4, result2[1]); + } + if (result2 === null) { + pos = pos4; + } + while (result2 !== null) { + result1.push(result2); + pos4 = pos; + pos5 = pos; + pos6 = pos; + reportFailures++; + result2 = parse_kw_start(); + reportFailures--; + if (result2 === null) { + result2 = ""; + } else { + result2 = null; + pos = pos6; + } + if (result2 !== null) { + if (input.length > pos) { + result3 = input.charAt(pos); + pos++; + } else { + result3 = null; + if (reportFailures === 0) { + matchFailed("any character"); + } + } + if (result3 !== null) { + result2 = [result2, result3]; + } else { + result2 = null; + pos = pos5; + } + } else { + result2 = null; + pos = pos5; + } + if (result2 !== null) { + result2 = (function(offset, word) {return word})(pos4, result2[1]); + } + if (result2 === null) { + pos = pos4; + } + } + if (result1 !== null) { + pos4 = pos; + result2 = parse_comment(); + if (result2 !== null) { + result2 = (function(offset, comment) {return ''})(pos4, result2); + } + if (result2 === null) { + pos = pos4; + } + if (result2 === null) { + pos4 = pos; + result2 = parse_quote(); + if (result2 !== null) { + result2 = (function(offset, quote) {return quote})(pos4, result2); + } + if (result2 === null) { + pos = pos4; + } + } + if (result2 !== null) { + result1 = [result1, result2]; + } else { + result1 = null; + pos = pos3; + } + } else { + result1 = null; + pos = pos3; + } + if (result1 !== null) { + result1 = (function(offset, words, stmt) {return words.join("")+stmt})(pos2, result1[0], result1[1]); + } + if (result1 === null) { + pos = pos2; + } + } + if (result0 !== null) { + result1 = []; + if (input.length > pos) { + result2 = input.charAt(pos); + pos++; + } else { + result2 = null; + if (reportFailures === 0) { + matchFailed("any character"); + } + } + while (result2 !== null) { + result1.push(result2); + if (input.length > pos) { + result2 = input.charAt(pos); + pos++; + } else { + result2 = null; + if (reportFailures === 0) { + matchFailed("any character"); + } + } + } + if (result1 !== null) { + result0 = [result0, result1]; + } else { + result0 = null; + pos = pos1; + } + } else { + result0 = null; + pos = pos1; + } + if (result0 !== null) { + result0 = (function(offset, stmt, other) {return stmt.join("")+other.join("")})(pos0, result0[0], result0[1]); + } + if (result0 === null) { + pos = pos0; + } + return result0; + } + + function parse_comment() { + var result0; + var pos0; + + pos0 = pos; + result0 = parse_multiLine(); + if (result0 === null) { + result0 = parse_singleLine(); + } + if (result0 !== null) { + result0 = (function(offset, comment) { + return comment; + })(pos0, result0); + } + if (result0 === null) { + pos = pos0; + } + return result0; + } + + function parse_singleLine() { + var result0, result1, result2; + var pos0, pos1; + + pos0 = pos; + pos1 = pos; + result0 = parse_KW_SINGLE_LINE_START(); + if (result0 !== null) { + result1 = []; + if (/^[^\r\n]/.test(input.charAt(pos))) { + result2 = input.charAt(pos); + pos++; + } else { + result2 = null; + if (reportFailures === 0) { + matchFailed("[^\\r\\n]"); + } + } + while (result2 !== null) { + result1.push(result2); + if (/^[^\r\n]/.test(input.charAt(pos))) { + result2 = input.charAt(pos); + pos++; + } else { + result2 = null; + if (reportFailures === 0) { + matchFailed("[^\\r\\n]"); + } + } + } + if (result1 !== null) { + result0 = [result0, result1]; + } else { + result0 = null; + pos = pos1; + } + } else { + result0 = null; + pos = pos1; + } + if (result0 !== null) { + result0 = (function(offset, start, words) { + return start+words.join("") + })(pos0, result0[0], result0[1]); + } + if (result0 === null) { + pos = pos0; + } + return result0; + } + + function parse_multiLine() { + var result0, result1, result2, result3; + var pos0, pos1, pos2, pos3, pos4; + + pos0 = pos; + pos1 = pos; + result0 = parse_KW_MULTI_LINE_START(); + if (result0 !== null) { + result1 = []; + pos2 = pos; + pos3 = pos; + pos4 = pos; + reportFailures++; + if (input.substr(pos, 2) === "*/") { + result2 = "*/"; + pos += 2; + } else { + result2 = null; + if (reportFailures === 0) { + matchFailed("\"*/\""); + } + } + reportFailures--; + if (result2 === null) { + result2 = ""; + } else { + result2 = null; + pos = pos4; + } + if (result2 !== null) { + if (input.length > pos) { + result3 = input.charAt(pos); + pos++; + } else { + result3 = null; + if (reportFailures === 0) { + matchFailed("any character"); + } + } + if (result3 !== null) { + result2 = [result2, result3]; + } else { + result2 = null; + pos = pos3; + } + } else { + result2 = null; + pos = pos3; + } + if (result2 !== null) { + result2 = (function(offset, word) {return word })(pos2, result2[1]); + } + if (result2 === null) { + pos = pos2; + } + while (result2 !== null) { + result1.push(result2); + pos2 = pos; + pos3 = pos; + pos4 = pos; + reportFailures++; + if (input.substr(pos, 2) === "*/") { + result2 = "*/"; + pos += 2; + } else { + result2 = null; + if (reportFailures === 0) { + matchFailed("\"*/\""); + } + } + reportFailures--; + if (result2 === null) { + result2 = ""; + } else { + result2 = null; + pos = pos4; + } + if (result2 !== null) { + if (input.length > pos) { + result3 = input.charAt(pos); + pos++; + } else { + result3 = null; + if (reportFailures === 0) { + matchFailed("any character"); + } + } + if (result3 !== null) { + result2 = [result2, result3]; + } else { + result2 = null; + pos = pos3; + } + } else { + result2 = null; + pos = pos3; + } + if (result2 !== null) { + result2 = (function(offset, word) {return word })(pos2, result2[1]); + } + if (result2 === null) { + pos = pos2; + } + } + if (result1 !== null) { + result2 = parse_KW_MULTI_LINE_END(); + if (result2 !== null) { + result0 = [result0, result1, result2]; + } else { + result0 = null; + pos = pos1; + } + } else { + result0 = null; + pos = pos1; + } + } else { + result0 = null; + pos = pos1; + } + if (result0 !== null) { + result0 = (function(offset, start, words, end) {return start+words.join("")+end })(pos0, result0[0], result0[1], result0[2]); + } + if (result0 === null) { + pos = pos0; + } + return result0; + } + + function parse_quote() { + var result0, result1, result2; + var pos0, pos1; + + pos0 = pos; + pos1 = pos; + if (input.charCodeAt(pos) === 34) { + result0 = "\""; + pos++; + } else { + result0 = null; + if (reportFailures === 0) { + matchFailed("\"\\\"\""); + } + } + if (result0 !== null) { + result1 = []; + if (/^[^"]/.test(input.charAt(pos))) { + result2 = input.charAt(pos); + pos++; + } else { + result2 = null; + if (reportFailures === 0) { + matchFailed("[^\"]"); + } + } + while (result2 !== null) { + result1.push(result2); + if (/^[^"]/.test(input.charAt(pos))) { + result2 = input.charAt(pos); + pos++; + } else { + result2 = null; + if (reportFailures === 0) { + matchFailed("[^\"]"); + } + } + } + if (result1 !== null) { + if (input.charCodeAt(pos) === 34) { + result2 = "\""; + pos++; + } else { + result2 = null; + if (reportFailures === 0) { + matchFailed("\"\\\"\""); + } + } + if (result2 !== null) { + result0 = [result0, result1, result2]; + } else { + result0 = null; + pos = pos1; + } + } else { + result0 = null; + pos = pos1; + } + } else { + result0 = null; + pos = pos1; + } + if (result0 !== null) { + result0 = (function(offset, start, words, end) {return start+words.join("")+end;})(pos0, result0[0], result0[1], result0[2]); + } + if (result0 === null) { + pos = pos0; + } + if (result0 === null) { + pos0 = pos; + pos1 = pos; + if (input.charCodeAt(pos) === 39) { + result0 = "'"; + pos++; + } else { + result0 = null; + if (reportFailures === 0) { + matchFailed("\"'\""); + } + } + if (result0 !== null) { + result1 = []; + if (/^[^']/.test(input.charAt(pos))) { + result2 = input.charAt(pos); + pos++; + } else { + result2 = null; + if (reportFailures === 0) { + matchFailed("[^']"); + } + } + while (result2 !== null) { + result1.push(result2); + if (/^[^']/.test(input.charAt(pos))) { + result2 = input.charAt(pos); + pos++; + } else { + result2 = null; + if (reportFailures === 0) { + matchFailed("[^']"); + } + } + } + if (result1 !== null) { + if (input.charCodeAt(pos) === 39) { + result2 = "'"; + pos++; + } else { + result2 = null; + if (reportFailures === 0) { + matchFailed("\"'\""); + } + } + if (result2 !== null) { + result0 = [result0, result1, result2]; + } else { + result0 = null; + pos = pos1; + } + } else { + result0 = null; + pos = pos1; + } + } else { + result0 = null; + pos = pos1; + } + if (result0 !== null) { + result0 = (function(offset, start, words, end) {return start+words.join("")+end;})(pos0, result0[0], result0[1], result0[2]); + } + if (result0 === null) { + pos = pos0; + } + } + return result0; + } + + function parse_kw_start() { + var result0; + + result0 = parse_KW_SINGLE_LINE_START(); + if (result0 === null) { + result0 = parse_KW_MULTI_LINE_START(); + if (result0 === null) { + if (input.charCodeAt(pos) === 34) { + result0 = "\""; + pos++; + } else { + result0 = null; + if (reportFailures === 0) { + matchFailed("\"\\\"\""); + } + } + if (result0 === null) { + if (input.charCodeAt(pos) === 39) { + result0 = "'"; + pos++; + } else { + result0 = null; + if (reportFailures === 0) { + matchFailed("\"'\""); + } + } + } + } + } + return result0; + } + + function parse_KW_SINGLE_LINE_START() { + var result0; + + if (input.substr(pos, 2) === "--") { + result0 = "--"; + pos += 2; + } else { + result0 = null; + if (reportFailures === 0) { + matchFailed("\"--\""); + } + } + return result0; + } + + function parse_KW_SINGLE_LINE_END() { + var result0; + + if (/^[\r\n]/.test(input.charAt(pos))) { + result0 = input.charAt(pos); + pos++; + } else { + result0 = null; + if (reportFailures === 0) { + matchFailed("[\\r\\n]"); + } + } + return result0; + } + + function parse_KW_MULTI_LINE_START() { + var result0; + + if (input.substr(pos, 2) === "/*") { + result0 = "/*"; + pos += 2; + } else { + result0 = null; + if (reportFailures === 0) { + matchFailed("\"/*\""); + } + } + return result0; + } + + function parse_KW_MULTI_LINE_END() { + var result0; + + if (input.substr(pos, 2) === "*/") { + result0 = "*/"; + pos += 2; + } else { + result0 = null; + if (reportFailures === 0) { + matchFailed("\"*/\""); + } + } + return result0; + } + + function parse___() { + var result0, result1; + + result0 = []; + result1 = parse_whitespace(); + while (result1 !== null) { + result0.push(result1); + result1 = parse_whitespace(); + } + return result0; + } + + function parse_whitespace() { + var result0; + + if (/^[ \t\r\n]/.test(input.charAt(pos))) { + result0 = input.charAt(pos); + pos++; + } else { + result0 = null; + if (reportFailures === 0) { + matchFailed("[ \\t\\r\\n]"); + } + } + return result0; + } + + + function cleanupExpected(expected) { + expected.sort(); + + var lastExpected = null; + var cleanExpected = []; + for (var i = 0; i < expected.length; i++) { + if (expected[i] !== lastExpected) { + cleanExpected.push(expected[i]); + lastExpected = expected[i]; + } + } + return cleanExpected; + } + + function computeErrorPosition() { + /* + * The first idea was to use |String.split| to break the input up to the + * error position along newlines and derive the line and column from + * there. However IE's |split| implementation is so broken that it was + * enough to prevent it. + */ + + var line = 1; + var column = 1; + var seenCR = false; + + for (var i = 0; i < Math.max(pos, rightmostFailuresPos); i++) { + var ch = input.charAt(i); + if (ch === "\n") { + if (!seenCR) { line++; } + column = 1; + seenCR = false; + } else if (ch === "\r" || ch === "\u2028" || ch === "\u2029") { + line++; + column = 1; + seenCR = true; + } else { + column++; + seenCR = false; + } + } + + return { line: line, column: column }; + } + + + var result = parseFunctions[startRule](); + + /* + * The parser is now in one of the following three states: + * + * 1. The parser successfully parsed the whole input. + * + * - |result !== null| + * - |pos === input.length| + * - |rightmostFailuresExpected| may or may not contain something + * + * 2. The parser successfully parsed only a part of the input. + * + * - |result !== null| + * - |pos < input.length| + * - |rightmostFailuresExpected| may or may not contain something + * + * 3. The parser did not successfully parse any part of the input. + * + * - |result === null| + * - |pos === 0| + * - |rightmostFailuresExpected| contains at least one failure + * + * All code following this comment (including called functions) must + * handle these states. + */ + if (result === null || pos !== input.length) { + var offset = Math.max(pos, rightmostFailuresPos); + var found = offset < input.length ? input.charAt(offset) : null; + var errorPosition = computeErrorPosition(); + + throw new this.SyntaxError( + cleanupExpected(rightmostFailuresExpected), + found, + offset, + errorPosition.line, + errorPosition.column + ); + } + + return result; + }, + + /* Returns the parser source code. */ + toSource: function() { return this._source; } + }; + + /* Thrown when a parser encounters a syntax error. */ + + result.SyntaxError = function(expected, found, offset, line, column) { + function buildMessage(expected, found) { + var expectedHumanized, foundHumanized; + + switch (expected.length) { + case 0: + expectedHumanized = "end of input"; + break; + case 1: + expectedHumanized = expected[0]; + break; + default: + expectedHumanized = expected.slice(0, expected.length - 1).join(", ") + + " or " + + expected[expected.length - 1]; + } + + foundHumanized = found ? quote(found) : "end of input"; + + return "Expected " + expectedHumanized + " but " + foundHumanized + " found."; + } + + this.name = "SyntaxError"; + this.expected = expected; + this.found = found; + this.message = buildMessage(expected, found); + this.offset = offset; + this.line = line; + this.column = column; + }; + + result.SyntaxError.prototype = Error.prototype; + + return result; +})(); diff --git a/core/nquery.js b/core/nquery.js deleted file mode 100644 index 0d4303d..0000000 --- a/core/nquery.js +++ /dev/null @@ -1,9254 +0,0 @@ -module.exports = (function(){ - /* - * Generated by PEG.js 0.7.0. - * - * http://pegjs.majda.cz/ - */ - - function quote(s) { - /* - * ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a - * string literal except for the closing quote character, backslash, - * carriage return, line separator, paragraph separator, and line feed. - * Any character may appear in the form of an escape sequence. - * - * For portability, we also escape escape all control and non-ASCII - * characters. Note that "\0" and "\v" escape sequences are not used - * because JSHint does not like the first and IE the second. - */ - return '"' + s - .replace(/\\/g, '\\\\') // backslash - .replace(/"/g, '\\"') // closing quote character - .replace(/\x08/g, '\\b') // backspace - .replace(/\t/g, '\\t') // horizontal tab - .replace(/\n/g, '\\n') // line feed - .replace(/\f/g, '\\f') // form feed - .replace(/\r/g, '\\r') // carriage return - .replace(/[\x00-\x07\x0B\x0E-\x1F\x80-\uFFFF]/g, escape) - + '"'; - } - - var result = { - /* - * Parses the input with a generated parser. If the parsing is successfull, - * returns a value explicitly or implicitly specified by the grammar from - * which the parser was generated (see |PEG.buildParser|). If the parsing is - * unsuccessful, throws |PEG.parser.SyntaxError| describing the error. - */ - parse: function(input, startRule) { - var parseFunctions = { - "start": parse_start, - "init": parse_init, - "union_stmt": parse_union_stmt, - "select_stmt": parse_select_stmt, - "select_stmt_nake": parse_select_stmt_nake, - "column_clause": parse_column_clause, - "column_list_item": parse_column_list_item, - "alias_clause": parse_alias_clause, - "from_clause": parse_from_clause, - "table_ref_list": parse_table_ref_list, - "table_ref": parse_table_ref, - "table_join": parse_table_join, - "table_base": parse_table_base, - "join_op": parse_join_op, - "db_name": parse_db_name, - "table_name": parse_table_name, - "on_clause": parse_on_clause, - "where_clause": parse_where_clause, - "group_by_clause": parse_group_by_clause, - "column_ref_list": parse_column_ref_list, - "having_clause": parse_having_clause, - "order_by_clause": parse_order_by_clause, - "order_by_list": parse_order_by_list, - "order_by_element": parse_order_by_element, - "number_or_param": parse_number_or_param, - "limit_clause": parse_limit_clause, - "update_stmt": parse_update_stmt, - "set_list": parse_set_list, - "set_item": parse_set_item, - "replace_insert_stmt": parse_replace_insert_stmt, - "replace_insert": parse_replace_insert, - "value_clause": parse_value_clause, - "on_duplicate_key_update": parse_on_duplicate_key_update, - "value_list": parse_value_list, - "value_item": parse_value_item, - "expr_list": parse_expr_list, - "expr_list_or_empty": parse_expr_list_or_empty, - "or_expr": parse_or_expr, - "and_expr": parse_and_expr, - "not_expr": parse_not_expr, - "comparison_expr": parse_comparison_expr, - "comparison_op_right": parse_comparison_op_right, - "arithmetic_op_right": parse_arithmetic_op_right, - "arithmetic_comparison_operator": parse_arithmetic_comparison_operator, - "is_op_right": parse_is_op_right, - "between_op_right": parse_between_op_right, - "like_op": parse_like_op, - "in_op": parse_in_op, - "contains_op": parse_contains_op, - "like_op_right": parse_like_op_right, - "in_op_right": parse_in_op_right, - "contains_op_right": parse_contains_op_right, - "additive_expr": parse_additive_expr, - "additive_operator": parse_additive_operator, - "multiplicative_expr": parse_multiplicative_expr, - "multiplicative_operator": parse_multiplicative_operator, - "primary": parse_primary, - "column_ref": parse_column_ref, - "column_list": parse_column_list, - "ident": parse_ident, - "column": parse_column, - "column_name": parse_column_name, - "ident_name": parse_ident_name, - "ident_start": parse_ident_start, - "ident_part": parse_ident_part, - "column_part": parse_column_part, - "param": parse_param, - "aggr_func": parse_aggr_func, - "aggr_fun_smma": parse_aggr_fun_smma, - "KW_SUM_MAX_MIN_AVG": parse_KW_SUM_MAX_MIN_AVG, - "aggr_fun_count": parse_aggr_fun_count, - "count_arg": parse_count_arg, - "star_expr": parse_star_expr, - "func_call": parse_func_call, - "literal": parse_literal, - "literal_list": parse_literal_list, - "literal_null": parse_literal_null, - "literal_bool": parse_literal_bool, - "literal_string": parse_literal_string, - "single_char": parse_single_char, - "double_char": parse_double_char, - "escape_char": parse_escape_char, - "line_terminator": parse_line_terminator, - "literal_numeric": parse_literal_numeric, - "number": parse_number, - "int": parse_int, - "frac": parse_frac, - "exp": parse_exp, - "digits": parse_digits, - "digit": parse_digit, - "digit19": parse_digit19, - "hexDigit": parse_hexDigit, - "e": parse_e, - "KW_NULL": parse_KW_NULL, - "KW_TRUE": parse_KW_TRUE, - "KW_FALSE": parse_KW_FALSE, - "KW_SHOW": parse_KW_SHOW, - "KW_DROP": parse_KW_DROP, - "KW_SELECT": parse_KW_SELECT, - "KW_UPDATE": parse_KW_UPDATE, - "KW_CREATE": parse_KW_CREATE, - "KW_DELETE": parse_KW_DELETE, - "KW_INSERT": parse_KW_INSERT, - "KW_REPLACE": parse_KW_REPLACE, - "KW_EXPLAIN": parse_KW_EXPLAIN, - "KW_INTO": parse_KW_INTO, - "KW_FROM": parse_KW_FROM, - "KW_SET": parse_KW_SET, - "KW_AS": parse_KW_AS, - "KW_TABLE": parse_KW_TABLE, - "KW_ON": parse_KW_ON, - "KW_LEFT": parse_KW_LEFT, - "KW_INNER": parse_KW_INNER, - "KW_JOIN": parse_KW_JOIN, - "KW_UNION": parse_KW_UNION, - "KW_VALUES": parse_KW_VALUES, - "KW_EXISTS": parse_KW_EXISTS, - "KW_WHERE": parse_KW_WHERE, - "KW_GROUP": parse_KW_GROUP, - "KW_BY": parse_KW_BY, - "KW_ORDER": parse_KW_ORDER, - "KW_HAVING": parse_KW_HAVING, - "KW_LIMIT": parse_KW_LIMIT, - "KW_ASC": parse_KW_ASC, - "KW_DESC": parse_KW_DESC, - "KW_ALL": parse_KW_ALL, - "KW_DISTINCT": parse_KW_DISTINCT, - "KW_DUPLICATE": parse_KW_DUPLICATE, - "KW_BETWEEN": parse_KW_BETWEEN, - "KW_IN": parse_KW_IN, - "KW_IS": parse_KW_IS, - "KW_LIKE": parse_KW_LIKE, - "KW_CONTAINS": parse_KW_CONTAINS, - "KW_KEY": parse_KW_KEY, - "KW_NOT": parse_KW_NOT, - "KW_AND": parse_KW_AND, - "KW_OR": parse_KW_OR, - "KW_COUNT": parse_KW_COUNT, - "KW_MAX": parse_KW_MAX, - "KW_MIN": parse_KW_MIN, - "KW_SUM": parse_KW_SUM, - "KW_AVG": parse_KW_AVG, - "DOT": parse_DOT, - "COMMA": parse_COMMA, - "STAR": parse_STAR, - "LPAREN": parse_LPAREN, - "RPAREN": parse_RPAREN, - "LBRAKE": parse_LBRAKE, - "RBRAKE": parse_RBRAKE, - "__": parse___, - "char": parse_char, - "whitespace": parse_whitespace, - "EOL": parse_EOL, - "EOF": parse_EOF, - "proc_stmts": parse_proc_stmts, - "proc_stmt": parse_proc_stmt, - "proc_init": parse_proc_init, - "assign_stmt": parse_assign_stmt, - "return_stmt": parse_return_stmt, - "proc_expr": parse_proc_expr, - "proc_additive_expr": parse_proc_additive_expr, - "proc_multiplicative_expr": parse_proc_multiplicative_expr, - "proc_join": parse_proc_join, - "proc_primary": parse_proc_primary, - "proc_func_call": parse_proc_func_call, - "proc_primary_list": parse_proc_primary_list, - "proc_array": parse_proc_array, - "var_decl": parse_var_decl, - "mem_chain": parse_mem_chain, - "KW_VAR_PRE": parse_KW_VAR_PRE, - "KW_RETURN": parse_KW_RETURN, - "KW_ASSIGN": parse_KW_ASSIGN - }; - - if (startRule !== undefined) { - if (parseFunctions[startRule] === undefined) { - throw new Error("Invalid rule name: " + quote(startRule) + "."); - } - } else { - startRule = "start"; - } - - var pos = 0; - var reportFailures = 0; - var rightmostFailuresPos = 0; - var rightmostFailuresExpected = []; - - function padLeft(input, padding, length) { - var result = input; - - var padLength = length - input.length; - for (var i = 0; i < padLength; i++) { - result = padding + result; - } - - return result; - } - - function escape(ch) { - var charCode = ch.charCodeAt(0); - var escapeChar; - var length; - - if (charCode <= 0xFF) { - escapeChar = 'x'; - length = 2; - } else { - escapeChar = 'u'; - length = 4; - } - - return '\\' + escapeChar + padLeft(charCode.toString(16).toUpperCase(), '0', length); - } - - function matchFailed(failure) { - if (pos < rightmostFailuresPos) { - return; - } - - if (pos > rightmostFailuresPos) { - rightmostFailuresPos = pos; - rightmostFailuresExpected = []; - } - - rightmostFailuresExpected.push(failure); - } - - function parse_start() { - var result0, result1, result2; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - pos2 = pos; - reportFailures++; - result0 = parse_init(); - reportFailures--; - if (result0 !== null) { - result0 = ""; - pos = pos2; - } else { - result0 = null; - } - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_union_stmt(); - if (result2 === null) { - result2 = parse_update_stmt(); - if (result2 === null) { - result2 = parse_replace_insert_stmt(); - } - } - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, ast) { - return { - ast : ast, - param : params - } - })(pos0, result0[2]); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - result0 = parse_proc_stmts(); - if (result0 !== null) { - result0 = (function(offset, ast) { - return { - ast : ast - } - })(pos0, result0); - } - if (result0 === null) { - pos = pos0; - } - } - return result0; - } - - function parse_init() { - var result0; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = []; - if (result0 !== null) { - result0 = (function(offset) { params = []; return true; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_union_stmt() { - var result0, result1, result2, result3, result4, result5; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - result0 = parse_select_stmt(); - if (result0 !== null) { - result1 = []; - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_KW_UNION(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_select_stmt(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - while (result2 !== null) { - result1.push(result2); - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_KW_UNION(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_select_stmt(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, head, tail) { - var cur = head; - for (var i = 0; i < tail.length; i++) { - cur._next = tail[i][3]; - cur = cur._next - } - return head; - })(pos0, result0[0], result0[1]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_select_stmt() { - var result0, result1, result2, result3, result4; - var pos0, pos1; - - result0 = parse_select_stmt_nake(); - if (result0 === null) { - pos0 = pos; - pos1 = pos; - if (input.charCodeAt(pos) === 40) { - result0 = "("; - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"(\""); - } - } - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_select_stmt(); - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - if (input.charCodeAt(pos) === 41) { - result4 = ")"; - pos++; - } else { - result4 = null; - if (reportFailures === 0) { - matchFailed("\")\""); - } - } - if (result4 !== null) { - result0 = [result0, result1, result2, result3, result4]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, s) { - return s[2]; - })(pos0, result0); - } - if (result0 === null) { - pos = pos0; - } - } - return result0; - } - - function parse_select_stmt_nake() { - var result0, result1, result2, result3, result4, result5, result6, result7, result8, result9, result10, result11, result12, result13, result14; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_KW_SELECT(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_KW_DISTINCT(); - result2 = result2 !== null ? result2 : ""; - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result4 = parse_column_clause(); - if (result4 !== null) { - result5 = parse___(); - if (result5 !== null) { - result6 = parse_from_clause(); - result6 = result6 !== null ? result6 : ""; - if (result6 !== null) { - result7 = parse___(); - if (result7 !== null) { - result8 = parse_where_clause(); - result8 = result8 !== null ? result8 : ""; - if (result8 !== null) { - result9 = parse___(); - if (result9 !== null) { - result10 = parse_group_by_clause(); - result10 = result10 !== null ? result10 : ""; - if (result10 !== null) { - result11 = parse___(); - if (result11 !== null) { - result12 = parse_order_by_clause(); - result12 = result12 !== null ? result12 : ""; - if (result12 !== null) { - result13 = parse___(); - if (result13 !== null) { - result14 = parse_limit_clause(); - result14 = result14 !== null ? result14 : ""; - if (result14 !== null) { - result0 = [result0, result1, result2, result3, result4, result5, result6, result7, result8, result9, result10, result11, result12, result13, result14]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, d, c, f, w, g, o, l) { - return { - type : 'select', - distinct : d, - columns : c, - from : f, - where : w, - groupby : g, - orderby : o, - limit : l - } - })(pos0, result0[2], result0[4], result0[6], result0[8], result0[10], result0[12], result0[14]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_column_clause() { - var result0, result1, result2, result3, result4, result5; - var pos0, pos1, pos2; - - pos0 = pos; - result0 = parse_KW_ALL(); - if (result0 === null) { - pos1 = pos; - result0 = parse_STAR(); - if (result0 !== null) { - pos2 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos2; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } - if (result0 !== null) { - result0 = (function(offset) { - return '*'; - })(pos0); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - pos1 = pos; - result0 = parse_column_list_item(); - if (result0 !== null) { - result1 = []; - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_COMMA(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_column_list_item(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - while (result2 !== null) { - result1.push(result2); - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_COMMA(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_column_list_item(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, head, tail) { - return createList(head, tail); - })(pos0, result0[0], result0[1]); - } - if (result0 === null) { - pos = pos0; - } - } - return result0; - } - - function parse_column_list_item() { - var result0, result1, result2; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_additive_expr(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_alias_clause(); - result2 = result2 !== null ? result2 : ""; - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, e, alias) { - return { - expr : e, - as : alias - }; - })(pos0, result0[0], result0[2]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_alias_clause() { - var result0, result1, result2; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_KW_AS(); - result0 = result0 !== null ? result0 : ""; - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_ident(); - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, i) { return i; })(pos0, result0[2]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_from_clause() { - var result0, result1, result2; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_KW_FROM(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_table_ref_list(); - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, l) { return l; })(pos0, result0[2]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_table_ref_list() { - var result0, result1, result2; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_table_base(); - if (result0 !== null) { - result1 = []; - result2 = parse_table_ref(); - while (result2 !== null) { - result1.push(result2); - result2 = parse_table_ref(); - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, head, tail) { - tail.unshift(head); - return tail; - })(pos0, result0[0], result0[1]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_table_ref() { - var result0, result1, result2, result3; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse___(); - if (result0 !== null) { - result1 = parse_COMMA(); - if (result1 !== null) { - result2 = parse___(); - if (result2 !== null) { - result3 = parse_table_base(); - if (result3 !== null) { - result0 = [result0, result1, result2, result3]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, t) { return t; })(pos0, result0[3]); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - pos1 = pos; - result0 = parse___(); - if (result0 !== null) { - result1 = parse_table_join(); - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, t) { return t; })(pos0, result0[1]); - } - if (result0 === null) { - pos = pos0; - } - } - return result0; - } - - function parse_table_join() { - var result0, result1, result2, result3, result4; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_join_op(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_table_base(); - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result4 = parse_on_clause(); - result4 = result4 !== null ? result4 : ""; - if (result4 !== null) { - result0 = [result0, result1, result2, result3, result4]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, op, t, expr) { - t.join = op; - t.on = expr; - return t; - /* - return { - db : t.db, - table : t.table, - as : t.as, - join : op, - on : expr - } - */ - })(pos0, result0[0], result0[2], result0[4]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_table_base() { - var result0, result1, result2, result3, result4, result5, result6, result7, result8; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_db_name(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_DOT(); - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result4 = parse_table_name(); - if (result4 !== null) { - result5 = parse___(); - if (result5 !== null) { - result6 = parse_KW_AS(); - result6 = result6 !== null ? result6 : ""; - if (result6 !== null) { - result7 = parse___(); - if (result7 !== null) { - result8 = parse_ident(); - result8 = result8 !== null ? result8 : ""; - if (result8 !== null) { - result0 = [result0, result1, result2, result3, result4, result5, result6, result7, result8]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, db, t, alias) { - if (t.type == 'var') { - t.as = alias; - return t; - } else { - return { - db : db, - table : t, - as : alias - } - } - })(pos0, result0[0], result0[4], result0[8]); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - pos1 = pos; - result0 = parse_table_name(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_KW_AS(); - result2 = result2 !== null ? result2 : ""; - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result4 = parse_ident(); - result4 = result4 !== null ? result4 : ""; - if (result4 !== null) { - result0 = [result0, result1, result2, result3, result4]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, t, alias) { - if (t.type == 'var') { - t.as = alias; - return t; - } else { - return { - db : '', - table : t, - as : alias - } - } - })(pos0, result0[0], result0[4]); - } - if (result0 === null) { - pos = pos0; - } - } - return result0; - } - - function parse_join_op() { - var result0, result1, result2; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - result0 = parse_KW_LEFT(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_KW_JOIN(); - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset) { return 'LEFT JOIN'; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - pos1 = pos; - pos2 = pos; - result0 = parse_KW_INNER(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos2; - } - } else { - result0 = null; - pos = pos2; - } - result0 = result0 !== null ? result0 : ""; - if (result0 !== null) { - result1 = parse_KW_JOIN(); - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset) { return 'INNER JOIN'; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - } - return result0; - } - - function parse_db_name() { - var result0; - var pos0; - - pos0 = pos; - result0 = parse_ident_name(); - if (result0 !== null) { - result0 = (function(offset, db) { - return db; - })(pos0, result0); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_table_name() { - var result0; - var pos0; - - pos0 = pos; - result0 = parse_ident(); - if (result0 !== null) { - result0 = (function(offset, table) { - return table; - })(pos0, result0); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - result0 = parse_var_decl(); - if (result0 !== null) { - result0 = (function(offset, v) { - return v.name; - })(pos0, result0); - } - if (result0 === null) { - pos = pos0; - } - } - return result0; - } - - function parse_on_clause() { - var result0, result1, result2; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_KW_ON(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_or_expr(); - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, e) { return e; })(pos0, result0[2]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_where_clause() { - var result0, result1, result2; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_KW_WHERE(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_or_expr(); - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, e) { return e; })(pos0, result0[2]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_group_by_clause() { - var result0, result1, result2, result3, result4; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_KW_GROUP(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_KW_BY(); - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result4 = parse_column_ref_list(); - if (result4 !== null) { - result0 = [result0, result1, result2, result3, result4]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, l) { return l; })(pos0, result0[4]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_column_ref_list() { - var result0, result1, result2, result3, result4, result5; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - result0 = parse_column_ref(); - if (result0 !== null) { - result1 = []; - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_COMMA(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_column_ref(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - while (result2 !== null) { - result1.push(result2); - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_COMMA(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_column_ref(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, head, tail) { - return createList(head, tail); - })(pos0, result0[0], result0[1]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_having_clause() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_KW_HAVING(); - if (result0 !== null) { - result1 = parse_or_expr(); - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, e) { return e; })(pos0, result0[1]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_order_by_clause() { - var result0, result1, result2, result3, result4; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_KW_ORDER(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_KW_BY(); - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result4 = parse_order_by_list(); - if (result4 !== null) { - result0 = [result0, result1, result2, result3, result4]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, l) { return l; })(pos0, result0[4]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_order_by_list() { - var result0, result1, result2, result3, result4, result5; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - result0 = parse_order_by_element(); - if (result0 !== null) { - result1 = []; - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_COMMA(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_order_by_element(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - while (result2 !== null) { - result1.push(result2); - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_COMMA(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_order_by_element(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, head, tail) { - return createList(head, tail); - })(pos0, result0[0], result0[1]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_order_by_element() { - var result0, result1, result2; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_or_expr(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_KW_DESC(); - if (result2 === null) { - result2 = parse_KW_ASC(); - } - result2 = result2 !== null ? result2 : ""; - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, e, d) { - var obj = { - expr : e, - type : 'ASC' - } - if (d == 'DESC') { - obj.type = 'DESC'; - } - return obj; - })(pos0, result0[0], result0[2]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_number_or_param() { - var result0; - - result0 = parse_literal_numeric(); - if (result0 === null) { - result0 = parse_param(); - } - return result0; - } - - function parse_limit_clause() { - var result0, result1, result2, result3, result4, result5, result6; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - result0 = parse_KW_LIMIT(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_number_or_param(); - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - pos2 = pos; - result4 = parse_COMMA(); - if (result4 !== null) { - result5 = parse___(); - if (result5 !== null) { - result6 = parse_number_or_param(); - if (result6 !== null) { - result4 = [result4, result5, result6]; - } else { - result4 = null; - pos = pos2; - } - } else { - result4 = null; - pos = pos2; - } - } else { - result4 = null; - pos = pos2; - } - result4 = result4 !== null ? result4 : ""; - if (result4 !== null) { - result0 = [result0, result1, result2, result3, result4]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, i1, tail) { - var res = [i1]; - if (tail == '') { - res.unshift({ - type : 'number', - value : 0 - }); - } else { - res.push(tail[2]); - } - return res; - })(pos0, result0[2], result0[4]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_update_stmt() { - var result0, result1, result2, result3, result4, result5, result6, result7, result8, result9, result10, result11, result12; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_KW_UPDATE(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_db_name(); - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result4 = parse_DOT(); - if (result4 !== null) { - result5 = parse___(); - if (result5 !== null) { - result6 = parse_table_name(); - if (result6 !== null) { - result7 = parse___(); - if (result7 !== null) { - result8 = parse_KW_SET(); - if (result8 !== null) { - result9 = parse___(); - if (result9 !== null) { - result10 = parse_set_list(); - if (result10 !== null) { - result11 = parse___(); - if (result11 !== null) { - result12 = parse_where_clause(); - if (result12 !== null) { - result0 = [result0, result1, result2, result3, result4, result5, result6, result7, result8, result9, result10, result11, result12]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, db, t, l, w) { - return { - type : 'update', - db : db, - table : t, - set : l, - where : w - } - })(pos0, result0[2], result0[6], result0[10], result0[12]); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - pos1 = pos; - result0 = parse_KW_UPDATE(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_table_name(); - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result4 = parse_KW_SET(); - if (result4 !== null) { - result5 = parse___(); - if (result5 !== null) { - result6 = parse_set_list(); - if (result6 !== null) { - result7 = parse___(); - if (result7 !== null) { - result8 = parse_where_clause(); - if (result8 !== null) { - result0 = [result0, result1, result2, result3, result4, result5, result6, result7, result8]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, t, l, w) { - return { - type : 'update', - db : '', - table : t, - set : l, - where : w - } - })(pos0, result0[2], result0[6], result0[8]); - } - if (result0 === null) { - pos = pos0; - } - } - return result0; - } - - function parse_set_list() { - var result0, result1, result2, result3, result4, result5; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - result0 = parse_set_item(); - if (result0 !== null) { - result1 = []; - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_COMMA(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_set_item(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - while (result2 !== null) { - result1.push(result2); - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_COMMA(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_set_item(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, head, tail) { - return createList(head, tail); - })(pos0, result0[0], result0[1]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_set_item() { - var result0, result1, result2, result3, result4, result5, result6, result7, result8; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_column(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - if (input.charCodeAt(pos) === 61) { - result2 = "="; - pos++; - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("\"=\""); - } - } - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result4 = parse_additive_expr(); - if (result4 !== null) { - result0 = [result0, result1, result2, result3, result4]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, c, v) { - return { - column: c, - value : v - } - })(pos0, result0[0], result0[4]); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - pos1 = pos; - result0 = parse_ident(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_DOT(); - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result4 = parse_column(); - if (result4 !== null) { - result5 = parse___(); - if (result5 !== null) { - if (input.charCodeAt(pos) === 61) { - result6 = "="; - pos++; - } else { - result6 = null; - if (reportFailures === 0) { - matchFailed("\"=\""); - } - } - if (result6 !== null) { - result7 = parse___(); - if (result7 !== null) { - result8 = parse_additive_expr(); - if (result8 !== null) { - result0 = [result0, result1, result2, result3, result4, result5, result6, result7, result8]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, t, c, v) { - return { - table: t, - column: c, - value : v - } - })(pos0, result0[0], result0[4], result0[8]); - } - if (result0 === null) { - pos = pos0; - } - } - return result0; - } - - function parse_replace_insert_stmt() { - var result0, result1, result2, result3, result4, result5, result6, result7, result8, result9, result10, result11, result12, result13, result14, result15, result16; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_replace_insert(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_KW_INTO(); - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result4 = parse_db_name(); - if (result4 !== null) { - result5 = parse___(); - if (result5 !== null) { - result6 = parse_DOT(); - if (result6 !== null) { - result7 = parse___(); - if (result7 !== null) { - result8 = parse_table_name(); - if (result8 !== null) { - result9 = parse___(); - if (result9 !== null) { - result10 = parse_LPAREN(); - if (result10 !== null) { - result11 = parse___(); - if (result11 !== null) { - result12 = parse_column_list(); - if (result12 !== null) { - result13 = parse___(); - if (result13 !== null) { - result14 = parse_RPAREN(); - if (result14 !== null) { - result15 = parse___(); - if (result15 !== null) { - result16 = parse_value_clause(); - if (result16 !== null) { - result0 = [result0, result1, result2, result3, result4, result5, result6, result7, result8, result9, result10, result11, result12, result13, result14, result15, result16]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, ri, db, t, c, v) { - return { - type : ri, - db : db, - table : t, - columns : c, - values : v - } - })(pos0, result0[0], result0[4], result0[8], result0[12], result0[16]); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - pos1 = pos; - result0 = parse_replace_insert(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_KW_INTO(); - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result4 = parse_db_name(); - if (result4 !== null) { - result5 = parse___(); - if (result5 !== null) { - result6 = parse_DOT(); - if (result6 !== null) { - result7 = parse___(); - if (result7 !== null) { - result8 = parse_table_name(); - if (result8 !== null) { - result9 = parse___(); - if (result9 !== null) { - result10 = parse_KW_SET(); - if (result10 !== null) { - result11 = parse___(); - if (result11 !== null) { - result12 = parse_set_list(); - if (result12 !== null) { - result13 = parse___(); - if (result13 !== null) { - result14 = parse_on_duplicate_key_update(); - result14 = result14 !== null ? result14 : ""; - if (result14 !== null) { - result0 = [result0, result1, result2, result3, result4, result5, result6, result7, result8, result9, result10, result11, result12, result13, result14]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, ri, db, t, l, u) { - var v = { - type : ri, - db : db, - table : t, - set : l - }; - - if (u) { - v.duplicateSet = u; - } - - return v; - })(pos0, result0[0], result0[4], result0[8], result0[12], result0[14]); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - pos1 = pos; - result0 = parse_replace_insert(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_KW_INTO(); - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result4 = parse_table_name(); - if (result4 !== null) { - result5 = parse___(); - if (result5 !== null) { - result6 = parse_LPAREN(); - if (result6 !== null) { - result7 = parse___(); - if (result7 !== null) { - result8 = parse_column_list(); - if (result8 !== null) { - result9 = parse___(); - if (result9 !== null) { - result10 = parse_RPAREN(); - if (result10 !== null) { - result11 = parse___(); - if (result11 !== null) { - result12 = parse_value_clause(); - if (result12 !== null) { - result0 = [result0, result1, result2, result3, result4, result5, result6, result7, result8, result9, result10, result11, result12]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, ri, t, c, v) { - return { - type : ri, - db : '', - table : t, - columns : c, - values : v - } - })(pos0, result0[0], result0[4], result0[8], result0[12]); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - pos1 = pos; - result0 = parse_replace_insert(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_KW_INTO(); - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result4 = parse_table_name(); - if (result4 !== null) { - result5 = parse___(); - if (result5 !== null) { - result6 = parse_KW_SET(); - if (result6 !== null) { - result7 = parse___(); - if (result7 !== null) { - result8 = parse_set_list(); - if (result8 !== null) { - result9 = parse___(); - if (result9 !== null) { - result10 = parse_on_duplicate_key_update(); - result10 = result10 !== null ? result10 : ""; - if (result10 !== null) { - result0 = [result0, result1, result2, result3, result4, result5, result6, result7, result8, result9, result10]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, ri, t, l, u) { - var v = { - type : ri, - db : '', - table : t, - set : l - } - - if (u) { - v.duplicateSet = u; - } - - return v; - })(pos0, result0[0], result0[4], result0[8], result0[10]); - } - if (result0 === null) { - pos = pos0; - } - } - } - } - return result0; - } - - function parse_replace_insert() { - var result0; - var pos0; - - pos0 = pos; - result0 = parse_KW_INSERT(); - if (result0 !== null) { - result0 = (function(offset) { return 'insert'; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - result0 = parse_KW_REPLACE(); - if (result0 !== null) { - result0 = (function(offset) { return 'replace' })(pos0); - } - if (result0 === null) { - pos = pos0; - } - } - return result0; - } - - function parse_value_clause() { - var result0, result1, result2; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_KW_VALUES(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_value_list(); - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, l) { return l; })(pos0, result0[2]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_on_duplicate_key_update() { - var result0, result1, result2, result3, result4, result5, result6, result7, result8; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_KW_ON(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_KW_DUPLICATE(); - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result4 = parse_KW_KEY(); - if (result4 !== null) { - result5 = parse___(); - if (result5 !== null) { - result6 = parse_KW_UPDATE(); - if (result6 !== null) { - result7 = parse___(); - if (result7 !== null) { - result8 = parse_set_list(); - if (result8 !== null) { - result0 = [result0, result1, result2, result3, result4, result5, result6, result7, result8]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, l) { - return l; - })(pos0, result0[8]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_value_list() { - var result0, result1, result2, result3, result4, result5; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - result0 = parse_value_item(); - if (result0 !== null) { - result1 = []; - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_COMMA(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_value_item(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - while (result2 !== null) { - result1.push(result2); - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_COMMA(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_value_item(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, head, tail) { - return createList(head, tail); - })(pos0, result0[0], result0[1]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_value_item() { - var result0, result1, result2, result3, result4; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_LPAREN(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_expr_list(); - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result4 = parse_RPAREN(); - if (result4 !== null) { - result0 = [result0, result1, result2, result3, result4]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, l) { - return l; - })(pos0, result0[2]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_expr_list() { - var result0, result1, result2, result3, result4, result5; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - result0 = parse_or_expr(); - if (result0 !== null) { - result1 = []; - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_COMMA(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_or_expr(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - while (result2 !== null) { - result1.push(result2); - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_COMMA(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_or_expr(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, head, tail) { - var el = { - type : 'expr_list' - } - var l = createExprList(head, tail, el); - - el.value = l; - return el; - })(pos0, result0[0], result0[1]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_expr_list_or_empty() { - var result0; - var pos0, pos1; - - result0 = parse_expr_list(); - if (result0 === null) { - pos0 = pos; - pos1 = pos; - result0 = []; - if (result0 !== null) { - result0 = (function(offset) { - return { - type : 'expr_list', - value : [] - } - })(pos0); - } - if (result0 === null) { - pos = pos0; - } - } - return result0; - } - - function parse_or_expr() { - var result0, result1, result2, result3, result4, result5; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - result0 = parse_and_expr(); - if (result0 !== null) { - result1 = []; - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_KW_OR(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_and_expr(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - while (result2 !== null) { - result1.push(result2); - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_KW_OR(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_and_expr(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, head, tail) { - return createBinaryExprChain(head, tail); - })(pos0, result0[0], result0[1]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_and_expr() { - var result0, result1, result2, result3, result4, result5; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - result0 = parse_not_expr(); - if (result0 !== null) { - result1 = []; - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_KW_AND(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_not_expr(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - while (result2 !== null) { - result1.push(result2); - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_KW_AND(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_not_expr(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, head, tail) { - return createBinaryExprChain(head, tail); - })(pos0, result0[0], result0[1]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_not_expr() { - var result0, result1, result2; - var pos0, pos1, pos2, pos3; - - pos0 = pos; - pos1 = pos; - result0 = parse_KW_NOT(); - if (result0 === null) { - pos2 = pos; - if (input.charCodeAt(pos) === 33) { - result0 = "!"; - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"!\""); - } - } - if (result0 !== null) { - pos3 = pos; - reportFailures++; - if (input.charCodeAt(pos) === 61) { - result1 = "="; - pos++; - } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("\"=\""); - } - } - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos3; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos2; - } - } else { - result0 = null; - pos = pos2; - } - } - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_not_expr(); - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, expr) { - return createUnaryExpr('NOT', expr); - })(pos0, result0[2]); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - result0 = parse_comparison_expr(); - } - return result0; - } - - function parse_comparison_expr() { - var result0, result1, result2; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_additive_expr(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_comparison_op_right(); - result2 = result2 !== null ? result2 : ""; - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, left, rh) { - if (rh == '') { - return left; - } else { - var res = null; - if (rh.type == 'arithmetic') { - res = createBinaryExprChain(left, rh.tail); - } else { - res = createBinaryExpr(rh.op, left, rh.right); - } - return res; - } - })(pos0, result0[0], result0[2]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_comparison_op_right() { - var result0; - - result0 = parse_arithmetic_op_right(); - if (result0 === null) { - result0 = parse_in_op_right(); - if (result0 === null) { - result0 = parse_between_op_right(); - if (result0 === null) { - result0 = parse_is_op_right(); - if (result0 === null) { - result0 = parse_like_op_right(); - if (result0 === null) { - result0 = parse_contains_op_right(); - } - } - } - } - } - return result0; - } - - function parse_arithmetic_op_right() { - var result0, result1, result2, result3, result4; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result1 = parse___(); - if (result1 !== null) { - result2 = parse_arithmetic_comparison_operator(); - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result4 = parse_additive_expr(); - if (result4 !== null) { - result1 = [result1, result2, result3, result4]; - } else { - result1 = null; - pos = pos1; - } - } else { - result1 = null; - pos = pos1; - } - } else { - result1 = null; - pos = pos1; - } - } else { - result1 = null; - pos = pos1; - } - if (result1 !== null) { - result0 = []; - while (result1 !== null) { - result0.push(result1); - pos1 = pos; - result1 = parse___(); - if (result1 !== null) { - result2 = parse_arithmetic_comparison_operator(); - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result4 = parse_additive_expr(); - if (result4 !== null) { - result1 = [result1, result2, result3, result4]; - } else { - result1 = null; - pos = pos1; - } - } else { - result1 = null; - pos = pos1; - } - } else { - result1 = null; - pos = pos1; - } - } else { - result1 = null; - pos = pos1; - } - } - } else { - result0 = null; - } - if (result0 !== null) { - result0 = (function(offset, l) { - return { - type : 'arithmetic', - tail : l - } - })(pos0, result0); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_arithmetic_comparison_operator() { - var result0; - - if (input.substr(pos, 2) === ">=") { - result0 = ">="; - pos += 2; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\">=\""); - } - } - if (result0 === null) { - if (input.charCodeAt(pos) === 62) { - result0 = ">"; - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\">\""); - } - } - if (result0 === null) { - if (input.substr(pos, 2) === "<=") { - result0 = "<="; - pos += 2; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"<=\""); - } - } - if (result0 === null) { - if (input.substr(pos, 2) === "<>") { - result0 = "<>"; - pos += 2; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"<>\""); - } - } - if (result0 === null) { - if (input.charCodeAt(pos) === 60) { - result0 = "<"; - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"<\""); - } - } - if (result0 === null) { - if (input.charCodeAt(pos) === 61) { - result0 = "="; - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"=\""); - } - } - if (result0 === null) { - if (input.substr(pos, 2) === "!=") { - result0 = "!="; - pos += 2; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"!=\""); - } - } - } - } - } - } - } - } - return result0; - } - - function parse_is_op_right() { - var result0, result1, result2; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_KW_IS(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_additive_expr(); - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, op, right) { - return { - op : op, - right : right - } - })(pos0, result0[0], result0[2]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_between_op_right() { - var result0, result1, result2, result3, result4, result5, result6; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_KW_BETWEEN(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_additive_expr(); - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result4 = parse_KW_AND(); - if (result4 !== null) { - result5 = parse___(); - if (result5 !== null) { - result6 = parse_additive_expr(); - if (result6 !== null) { - result0 = [result0, result1, result2, result3, result4, result5, result6]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, op, begin, end) { - return { - op : op, - right : { - type : 'expr_list', - value : [begin, end] - } - } - })(pos0, result0[0], result0[2], result0[6]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_like_op() { - var result0, result1, result2; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_KW_NOT(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_KW_LIKE(); - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, nk) { return nk[0] + ' ' + nk[2]; })(pos0, result0); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - result0 = parse_KW_LIKE(); - } - return result0; - } - - function parse_in_op() { - var result0, result1, result2; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_KW_NOT(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_KW_IN(); - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, nk) { return nk[0] + ' ' + nk[2]; })(pos0, result0); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - result0 = parse_KW_IN(); - } - return result0; - } - - function parse_contains_op() { - var result0, result1, result2; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_KW_NOT(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_KW_CONTAINS(); - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, nk) { return nk[0] + ' ' + nk[2]; })(pos0, result0); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - result0 = parse_KW_CONTAINS(); - } - return result0; - } - - function parse_like_op_right() { - var result0, result1, result2; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_like_op(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_comparison_expr(); - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, op, right) { - return { - op : op, - right : right - } - })(pos0, result0[0], result0[2]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_in_op_right() { - var result0, result1, result2, result3, result4, result5, result6; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_in_op(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_LPAREN(); - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result4 = parse_expr_list(); - if (result4 !== null) { - result5 = parse___(); - if (result5 !== null) { - result6 = parse_RPAREN(); - if (result6 !== null) { - result0 = [result0, result1, result2, result3, result4, result5, result6]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, op, l) { - return { - op : op, - right : l - } - })(pos0, result0[0], result0[4]); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - pos1 = pos; - result0 = parse_in_op(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_var_decl(); - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, op, e) { - return { - op : op, - right : e - } - })(pos0, result0[0], result0[2]); - } - if (result0 === null) { - pos = pos0; - } - } - return result0; - } - - function parse_contains_op_right() { - var result0, result1, result2, result3, result4, result5, result6; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_contains_op(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_LPAREN(); - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result4 = parse_expr_list(); - if (result4 !== null) { - result5 = parse___(); - if (result5 !== null) { - result6 = parse_RPAREN(); - if (result6 !== null) { - result0 = [result0, result1, result2, result3, result4, result5, result6]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, op, l) { - return { - op : op, - right : l - } - })(pos0, result0[0], result0[4]); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - pos1 = pos; - result0 = parse_contains_op(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_var_decl(); - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, op, e) { - return { - op : op, - right : e - } - })(pos0, result0[0], result0[2]); - } - if (result0 === null) { - pos = pos0; - } - } - return result0; - } - - function parse_additive_expr() { - var result0, result1, result2, result3, result4, result5; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - result0 = parse_multiplicative_expr(); - if (result0 !== null) { - result1 = []; - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_additive_operator(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_multiplicative_expr(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - while (result2 !== null) { - result1.push(result2); - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_additive_operator(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_multiplicative_expr(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, head, tail) { - return createBinaryExprChain(head, tail); - })(pos0, result0[0], result0[1]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_additive_operator() { - var result0; - - if (input.charCodeAt(pos) === 43) { - result0 = "+"; - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"+\""); - } - } - if (result0 === null) { - if (input.charCodeAt(pos) === 45) { - result0 = "-"; - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"-\""); - } - } - } - return result0; - } - - function parse_multiplicative_expr() { - var result0, result1, result2, result3, result4, result5; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - result0 = parse_primary(); - if (result0 !== null) { - result1 = []; - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_multiplicative_operator(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_primary(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - while (result2 !== null) { - result1.push(result2); - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_multiplicative_operator(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_primary(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, head, tail) { - return createBinaryExprChain(head, tail) - })(pos0, result0[0], result0[1]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_multiplicative_operator() { - var result0; - - if (input.charCodeAt(pos) === 42) { - result0 = "*"; - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"*\""); - } - } - if (result0 === null) { - if (input.charCodeAt(pos) === 47) { - result0 = "/"; - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"/\""); - } - } - if (result0 === null) { - if (input.charCodeAt(pos) === 37) { - result0 = "%"; - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"%\""); - } - } - } - } - return result0; - } - - function parse_primary() { - var result0, result1, result2, result3, result4; - var pos0, pos1; - - result0 = parse_literal(); - if (result0 === null) { - result0 = parse_aggr_func(); - if (result0 === null) { - result0 = parse_func_call(); - if (result0 === null) { - result0 = parse_column_ref(); - if (result0 === null) { - result0 = parse_param(); - if (result0 === null) { - pos0 = pos; - pos1 = pos; - result0 = parse_LPAREN(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_or_expr(); - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result4 = parse_RPAREN(); - if (result4 !== null) { - result0 = [result0, result1, result2, result3, result4]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, e) { - e.paren = true; - return e; - })(pos0, result0[2]); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - result0 = parse_var_decl(); - } - } - } - } - } - } - return result0; - } - - function parse_column_ref() { - var result0, result1, result2, result3, result4; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_ident(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_DOT(); - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result4 = parse_column(); - if (result4 !== null) { - result0 = [result0, result1, result2, result3, result4]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, tbl, col) { - return { - type : 'column_ref', - table : tbl, - column : col - }; - })(pos0, result0[0], result0[4]); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - result0 = parse_column(); - if (result0 !== null) { - result0 = (function(offset, col) { - return { - type : 'column_ref', - table : '', - column: col - }; - })(pos0, result0); - } - if (result0 === null) { - pos = pos0; - } - } - return result0; - } - - function parse_column_list() { - var result0, result1, result2, result3, result4, result5; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - result0 = parse_column(); - if (result0 !== null) { - result1 = []; - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_COMMA(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_column(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - while (result2 !== null) { - result1.push(result2); - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_COMMA(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_column(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, head, tail) { - return createList(head, tail); - })(pos0, result0[0], result0[1]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_ident() { - var result0, result1, result2; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_ident_name(); - if (result0 !== null) { - result1 = (function(offset, name) { return reservedMap[name.toUpperCase()] === true; })(pos, result0) ? null : ""; - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, name) { - return name; - })(pos0, result0[0]); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - pos1 = pos; - if (input.charCodeAt(pos) === 96) { - result0 = "`"; - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"`\""); - } - } - if (result0 !== null) { - if (/^[^`]/.test(input.charAt(pos))) { - result2 = input.charAt(pos); - pos++; - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("[^`]"); - } - } - if (result2 !== null) { - result1 = []; - while (result2 !== null) { - result1.push(result2); - if (/^[^`]/.test(input.charAt(pos))) { - result2 = input.charAt(pos); - pos++; - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("[^`]"); - } - } - } - } else { - result1 = null; - } - if (result1 !== null) { - if (input.charCodeAt(pos) === 96) { - result2 = "`"; - pos++; - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("\"`\""); - } - } - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, chars) { - return chars.join(''); - })(pos0, result0[1]); - } - if (result0 === null) { - pos = pos0; - } - } - return result0; - } - - function parse_column() { - var result0, result1, result2; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_column_name(); - if (result0 !== null) { - result1 = (function(offset, name) { return reservedMap[name.toUpperCase()] === true; })(pos, result0) ? null : ""; - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, name) { - return name; - })(pos0, result0[0]); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - pos1 = pos; - if (input.charCodeAt(pos) === 96) { - result0 = "`"; - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"`\""); - } - } - if (result0 !== null) { - if (/^[^`]/.test(input.charAt(pos))) { - result2 = input.charAt(pos); - pos++; - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("[^`]"); - } - } - if (result2 !== null) { - result1 = []; - while (result2 !== null) { - result1.push(result2); - if (/^[^`]/.test(input.charAt(pos))) { - result2 = input.charAt(pos); - pos++; - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("[^`]"); - } - } - } - } else { - result1 = null; - } - if (result1 !== null) { - if (input.charCodeAt(pos) === 96) { - result2 = "`"; - pos++; - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("\"`\""); - } - } - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, chars) { - return chars.join(''); - })(pos0, result0[1]); - } - if (result0 === null) { - pos = pos0; - } - } - return result0; - } - - function parse_column_name() { - var result0, result1, result2; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_ident_start(); - if (result0 !== null) { - result1 = []; - result2 = parse_column_part(); - while (result2 !== null) { - result1.push(result2); - result2 = parse_column_part(); - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, start, parts) { return start + parts.join(''); })(pos0, result0[0], result0[1]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_ident_name() { - var result0, result1, result2; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_ident_start(); - if (result0 !== null) { - result1 = []; - result2 = parse_ident_part(); - while (result2 !== null) { - result1.push(result2); - result2 = parse_ident_part(); - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, start, parts) { return start + parts.join(''); })(pos0, result0[0], result0[1]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_ident_start() { - var result0; - - if (/^[A-Za-z_]/.test(input.charAt(pos))) { - result0 = input.charAt(pos); - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("[A-Za-z_]"); - } - } - return result0; - } - - function parse_ident_part() { - var result0; - - if (/^[A-Za-z0-9_]/.test(input.charAt(pos))) { - result0 = input.charAt(pos); - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("[A-Za-z0-9_]"); - } - } - return result0; - } - - function parse_column_part() { - var result0; - - if (/^[A-Za-z0-9_:]/.test(input.charAt(pos))) { - result0 = input.charAt(pos); - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("[A-Za-z0-9_:]"); - } - } - return result0; - } - - function parse_param() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - if (input.charCodeAt(pos) === 58) { - result0 = ":"; - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\":\""); - } - } - if (result0 !== null) { - result1 = parse_ident_name(); - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, l) { - var p = { - type : 'param', - value: l[1] - } - //var key = 'L' + line + 'C' + column; - //debug(key); - //params[key] = p; - params.push(p); - return p; - })(pos0, result0); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_aggr_func() { - var result0; - - result0 = parse_aggr_fun_count(); - if (result0 === null) { - result0 = parse_aggr_fun_smma(); - } - return result0; - } - - function parse_aggr_fun_smma() { - var result0, result1, result2, result3, result4, result5, result6; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_KW_SUM_MAX_MIN_AVG(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_LPAREN(); - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result4 = parse_additive_expr(); - if (result4 !== null) { - result5 = parse___(); - if (result5 !== null) { - result6 = parse_RPAREN(); - if (result6 !== null) { - result0 = [result0, result1, result2, result3, result4, result5, result6]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, name, e) { - return { - type : 'aggr_func', - name : name, - args : { - expr : e - } - } - })(pos0, result0[0], result0[4]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_KW_SUM_MAX_MIN_AVG() { - var result0; - - result0 = parse_KW_SUM(); - if (result0 === null) { - result0 = parse_KW_MAX(); - if (result0 === null) { - result0 = parse_KW_MIN(); - if (result0 === null) { - result0 = parse_KW_AVG(); - } - } - } - return result0; - } - - function parse_aggr_fun_count() { - var result0, result1, result2, result3, result4, result5, result6; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_KW_COUNT(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_LPAREN(); - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result4 = parse_count_arg(); - if (result4 !== null) { - result5 = parse___(); - if (result5 !== null) { - result6 = parse_RPAREN(); - if (result6 !== null) { - result0 = [result0, result1, result2, result3, result4, result5, result6]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, name, arg) { - return { - type : 'aggr_func', - name : name, - args : arg - } - })(pos0, result0[0], result0[4]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_count_arg() { - var result0, result1, result2; - var pos0, pos1; - - pos0 = pos; - result0 = parse_star_expr(); - if (result0 !== null) { - result0 = (function(offset, e) { - return { - expr : e - } - })(pos0, result0); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - pos1 = pos; - result0 = parse_KW_DISTINCT(); - result0 = result0 !== null ? result0 : ""; - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_column_ref(); - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, d, c) { - return { - distinct : d, - expr : c - } - })(pos0, result0[0], result0[2]); - } - if (result0 === null) { - pos = pos0; - } - } - return result0; - } - - function parse_star_expr() { - var result0; - var pos0; - - pos0 = pos; - if (input.charCodeAt(pos) === 42) { - result0 = "*"; - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"*\""); - } - } - if (result0 !== null) { - result0 = (function(offset) { - return { - type : 'star', - value : '*' - } - })(pos0); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_func_call() { - var result0, result1, result2, result3, result4, result5, result6; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_ident(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_LPAREN(); - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result4 = parse_expr_list_or_empty(); - if (result4 !== null) { - result5 = parse___(); - if (result5 !== null) { - result6 = parse_RPAREN(); - if (result6 !== null) { - result0 = [result0, result1, result2, result3, result4, result5, result6]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, name, l) { - return { - type : 'function', - name : name, - args : l - } - })(pos0, result0[0], result0[4]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_literal() { - var result0; - - result0 = parse_literal_string(); - if (result0 === null) { - result0 = parse_literal_numeric(); - if (result0 === null) { - result0 = parse_literal_bool(); - if (result0 === null) { - result0 = parse_literal_null(); - } - } - } - return result0; - } - - function parse_literal_list() { - var result0, result1, result2, result3, result4, result5; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - result0 = parse_literal(); - if (result0 !== null) { - result1 = []; - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_COMMA(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_literal(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - while (result2 !== null) { - result1.push(result2); - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_COMMA(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_literal(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, head, tail) { - return createList(head, tail); - })(pos0, result0[0], result0[1]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_literal_null() { - var result0; - var pos0; - - pos0 = pos; - result0 = parse_KW_NULL(); - if (result0 !== null) { - result0 = (function(offset) { - return { - type : 'null', - value : null - }; - })(pos0); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_literal_bool() { - var result0; - var pos0; - - pos0 = pos; - result0 = parse_KW_TRUE(); - if (result0 !== null) { - result0 = (function(offset) { - return { - type : 'bool', - value : true - }; - })(pos0); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - result0 = parse_KW_FALSE(); - if (result0 !== null) { - result0 = (function(offset) { - return { - type : 'bool', - value : false - }; - })(pos0); - } - if (result0 === null) { - pos = pos0; - } - } - return result0; - } - - function parse_literal_string() { - var result0, result1, result2; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - if (input.charCodeAt(pos) === 34) { - result0 = "\""; - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"\\\"\""); - } - } - if (result0 !== null) { - result1 = []; - result2 = parse_double_char(); - while (result2 !== null) { - result1.push(result2); - result2 = parse_double_char(); - } - if (result1 !== null) { - if (input.charCodeAt(pos) === 34) { - result2 = "\""; - pos++; - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("\"\\\"\""); - } - } - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 === null) { - pos1 = pos; - if (input.charCodeAt(pos) === 39) { - result0 = "'"; - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"'\""); - } - } - if (result0 !== null) { - result1 = []; - result2 = parse_single_char(); - while (result2 !== null) { - result1.push(result2); - result2 = parse_single_char(); - } - if (result1 !== null) { - if (input.charCodeAt(pos) === 39) { - result2 = "'"; - pos++; - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("\"'\""); - } - } - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } - if (result0 !== null) { - result0 = (function(offset, ca) { - return { - type : 'string', - value : ca[1].join('') - } - })(pos0, result0); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_single_char() { - var result0; - - if (/^[^'\\\0-\x1F]/.test(input.charAt(pos))) { - result0 = input.charAt(pos); - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("[^'\\\\\\0-\\x1F]"); - } - } - if (result0 === null) { - result0 = parse_escape_char(); - } - return result0; - } - - function parse_double_char() { - var result0; - - if (/^[^"\\\0-\x1F]/.test(input.charAt(pos))) { - result0 = input.charAt(pos); - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("[^\"\\\\\\0-\\x1F]"); - } - } - if (result0 === null) { - result0 = parse_escape_char(); - } - return result0; - } - - function parse_escape_char() { - var result0, result1, result2, result3, result4; - var pos0, pos1; - - pos0 = pos; - if (input.substr(pos, 2) === "\\'") { - result0 = "\\'"; - pos += 2; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"\\\\'\""); - } - } - if (result0 !== null) { - result0 = (function(offset) { return "'"; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - if (input.substr(pos, 2) === "\\\"") { - result0 = "\\\""; - pos += 2; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"\\\\\\\"\""); - } - } - if (result0 !== null) { - result0 = (function(offset) { return '"'; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - if (input.substr(pos, 2) === "\\\\") { - result0 = "\\\\"; - pos += 2; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"\\\\\\\\\""); - } - } - if (result0 !== null) { - result0 = (function(offset) { return "\\"; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - if (input.substr(pos, 2) === "\\/") { - result0 = "\\/"; - pos += 2; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"\\\\/\""); - } - } - if (result0 !== null) { - result0 = (function(offset) { return "/"; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - if (input.substr(pos, 2) === "\\b") { - result0 = "\\b"; - pos += 2; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"\\\\b\""); - } - } - if (result0 !== null) { - result0 = (function(offset) { return "\b"; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - if (input.substr(pos, 2) === "\\f") { - result0 = "\\f"; - pos += 2; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"\\\\f\""); - } - } - if (result0 !== null) { - result0 = (function(offset) { return "\f"; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - if (input.substr(pos, 2) === "\\n") { - result0 = "\\n"; - pos += 2; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"\\\\n\""); - } - } - if (result0 !== null) { - result0 = (function(offset) { return "\n"; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - if (input.substr(pos, 2) === "\\r") { - result0 = "\\r"; - pos += 2; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"\\\\r\""); - } - } - if (result0 !== null) { - result0 = (function(offset) { return "\r"; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - if (input.substr(pos, 2) === "\\t") { - result0 = "\\t"; - pos += 2; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"\\\\t\""); - } - } - if (result0 !== null) { - result0 = (function(offset) { return "\t"; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - pos1 = pos; - if (input.substr(pos, 2) === "\\u") { - result0 = "\\u"; - pos += 2; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"\\\\u\""); - } - } - if (result0 !== null) { - result1 = parse_hexDigit(); - if (result1 !== null) { - result2 = parse_hexDigit(); - if (result2 !== null) { - result3 = parse_hexDigit(); - if (result3 !== null) { - result4 = parse_hexDigit(); - if (result4 !== null) { - result0 = [result0, result1, result2, result3, result4]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, h1, h2, h3, h4) { - return String.fromCharCode(parseInt("0x" + h1 + h2 + h3 + h4)); - })(pos0, result0[1], result0[2], result0[3], result0[4]); - } - if (result0 === null) { - pos = pos0; - } - } - } - } - } - } - } - } - } - } - return result0; - } - - function parse_line_terminator() { - var result0; - - if (/^[\n\r]/.test(input.charAt(pos))) { - result0 = input.charAt(pos); - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("[\\n\\r]"); - } - } - return result0; - } - - function parse_literal_numeric() { - var result0; - var pos0; - - pos0 = pos; - result0 = parse_number(); - if (result0 !== null) { - result0 = (function(offset, n) { - return { - type : 'number', - value : n - } - })(pos0, result0); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_number() { - var result0, result1, result2, result3; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_int(); - if (result0 !== null) { - result1 = parse_frac(); - if (result1 !== null) { - result2 = parse_exp(); - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result0 = [result0, result1, result2, result3]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, int_, frac, exp) { return parseFloat(int_ + frac + exp); })(pos0, result0[0], result0[1], result0[2]); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - pos1 = pos; - result0 = parse_int(); - if (result0 !== null) { - result1 = parse_frac(); - if (result1 !== null) { - result2 = parse___(); - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, int_, frac) { return parseFloat(int_ + frac); })(pos0, result0[0], result0[1]); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - pos1 = pos; - result0 = parse_int(); - if (result0 !== null) { - result1 = parse_exp(); - if (result1 !== null) { - result2 = parse___(); - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, int_, exp) { return parseFloat(int_ + exp); })(pos0, result0[0], result0[1]); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - pos1 = pos; - result0 = parse_int(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, int_) { return parseFloat(int_); })(pos0, result0[0]); - } - if (result0 === null) { - pos = pos0; - } - } - } - } - return result0; - } - - function parse_int() { - var result0, result1, result2; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_digit19(); - if (result0 !== null) { - result1 = parse_digits(); - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, digit19, digits) { return digit19 + digits; })(pos0, result0[0], result0[1]); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - result0 = parse_digit(); - if (result0 === null) { - pos0 = pos; - pos1 = pos; - if (input.charCodeAt(pos) === 45) { - result0 = "-"; - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"-\""); - } - } - if (result0 === null) { - if (input.charCodeAt(pos) === 43) { - result0 = "+"; - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"+\""); - } - } - } - if (result0 !== null) { - result1 = parse_digit19(); - if (result1 !== null) { - result2 = parse_digits(); - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, op, digit19, digits) { return "-" + digit19 + digits; })(pos0, result0[0], result0[1], result0[2]); - } - if (result0 === null) { - pos = pos0; - } - if (result0 === null) { - pos0 = pos; - pos1 = pos; - if (input.charCodeAt(pos) === 45) { - result0 = "-"; - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"-\""); - } - } - if (result0 === null) { - if (input.charCodeAt(pos) === 43) { - result0 = "+"; - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"+\""); - } - } - } - if (result0 !== null) { - result1 = parse_digit(); - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, op, digit) { return "-" + digit; })(pos0, result0[0], result0[1]); - } - if (result0 === null) { - pos = pos0; - } - } - } - } - return result0; - } - - function parse_frac() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - if (input.charCodeAt(pos) === 46) { - result0 = "."; - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\".\""); - } - } - if (result0 !== null) { - result1 = parse_digits(); - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, digits) { return "." + digits; })(pos0, result0[1]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_exp() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_e(); - if (result0 !== null) { - result1 = parse_digits(); - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, e, digits) { return e + digits; })(pos0, result0[0], result0[1]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_digits() { - var result0, result1; - var pos0; - - pos0 = pos; - result1 = parse_digit(); - if (result1 !== null) { - result0 = []; - while (result1 !== null) { - result0.push(result1); - result1 = parse_digit(); - } - } else { - result0 = null; - } - if (result0 !== null) { - result0 = (function(offset, digits) { return digits.join(""); })(pos0, result0); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_digit() { - var result0; - - if (/^[0-9]/.test(input.charAt(pos))) { - result0 = input.charAt(pos); - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("[0-9]"); - } - } - return result0; - } - - function parse_digit19() { - var result0; - - if (/^[1-9]/.test(input.charAt(pos))) { - result0 = input.charAt(pos); - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("[1-9]"); - } - } - return result0; - } - - function parse_hexDigit() { - var result0; - - if (/^[0-9a-fA-F]/.test(input.charAt(pos))) { - result0 = input.charAt(pos); - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("[0-9a-fA-F]"); - } - } - return result0; - } - - function parse_e() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - if (/^[eE]/.test(input.charAt(pos))) { - result0 = input.charAt(pos); - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("[eE]"); - } - } - if (result0 !== null) { - if (/^[+\-]/.test(input.charAt(pos))) { - result1 = input.charAt(pos); - pos++; - } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("[+\\-]"); - } - } - result1 = result1 !== null ? result1 : ""; - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, e, sign) { return e + sign; })(pos0, result0[0], result0[1]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_KW_NULL() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - if (input.substr(pos, 4).toLowerCase() === "null") { - result0 = input.substr(pos, 4); - pos += 4; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"NULL\""); - } - } - if (result0 !== null) { - pos1 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos1; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos0; - } - } else { - result0 = null; - pos = pos0; - } - return result0; - } - - function parse_KW_TRUE() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - if (input.substr(pos, 4).toLowerCase() === "true") { - result0 = input.substr(pos, 4); - pos += 4; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"TRUE\""); - } - } - if (result0 !== null) { - pos1 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos1; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos0; - } - } else { - result0 = null; - pos = pos0; - } - return result0; - } - - function parse_KW_FALSE() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - if (input.substr(pos, 5).toLowerCase() === "false") { - result0 = input.substr(pos, 5); - pos += 5; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"FALSE\""); - } - } - if (result0 !== null) { - pos1 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos1; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos0; - } - } else { - result0 = null; - pos = pos0; - } - return result0; - } - - function parse_KW_SHOW() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - if (input.substr(pos, 4).toLowerCase() === "show") { - result0 = input.substr(pos, 4); - pos += 4; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"SHOW\""); - } - } - if (result0 !== null) { - pos1 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos1; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos0; - } - } else { - result0 = null; - pos = pos0; - } - return result0; - } - - function parse_KW_DROP() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - if (input.substr(pos, 4).toLowerCase() === "drop") { - result0 = input.substr(pos, 4); - pos += 4; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"DROP\""); - } - } - if (result0 !== null) { - pos1 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos1; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos0; - } - } else { - result0 = null; - pos = pos0; - } - return result0; - } - - function parse_KW_SELECT() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - if (input.substr(pos, 6).toLowerCase() === "select") { - result0 = input.substr(pos, 6); - pos += 6; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"SELECT\""); - } - } - if (result0 !== null) { - pos1 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos1; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos0; - } - } else { - result0 = null; - pos = pos0; - } - return result0; - } - - function parse_KW_UPDATE() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - if (input.substr(pos, 6).toLowerCase() === "update") { - result0 = input.substr(pos, 6); - pos += 6; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"UPDATE\""); - } - } - if (result0 !== null) { - pos1 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos1; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos0; - } - } else { - result0 = null; - pos = pos0; - } - return result0; - } - - function parse_KW_CREATE() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - if (input.substr(pos, 6).toLowerCase() === "create") { - result0 = input.substr(pos, 6); - pos += 6; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"CREATE\""); - } - } - if (result0 !== null) { - pos1 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos1; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos0; - } - } else { - result0 = null; - pos = pos0; - } - return result0; - } - - function parse_KW_DELETE() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - if (input.substr(pos, 6).toLowerCase() === "delete") { - result0 = input.substr(pos, 6); - pos += 6; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"DELETE\""); - } - } - if (result0 !== null) { - pos1 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos1; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos0; - } - } else { - result0 = null; - pos = pos0; - } - return result0; - } - - function parse_KW_INSERT() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - if (input.substr(pos, 6).toLowerCase() === "insert") { - result0 = input.substr(pos, 6); - pos += 6; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"INSERT\""); - } - } - if (result0 !== null) { - pos1 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos1; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos0; - } - } else { - result0 = null; - pos = pos0; - } - return result0; - } - - function parse_KW_REPLACE() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - if (input.substr(pos, 7).toLowerCase() === "replace") { - result0 = input.substr(pos, 7); - pos += 7; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"REPLACE\""); - } - } - if (result0 !== null) { - pos1 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos1; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos0; - } - } else { - result0 = null; - pos = pos0; - } - return result0; - } - - function parse_KW_EXPLAIN() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - if (input.substr(pos, 7).toLowerCase() === "explain") { - result0 = input.substr(pos, 7); - pos += 7; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"EXPLAIN\""); - } - } - if (result0 !== null) { - pos1 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos1; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos0; - } - } else { - result0 = null; - pos = pos0; - } - return result0; - } - - function parse_KW_INTO() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - if (input.substr(pos, 4).toLowerCase() === "into") { - result0 = input.substr(pos, 4); - pos += 4; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"INTO\""); - } - } - if (result0 !== null) { - pos1 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos1; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos0; - } - } else { - result0 = null; - pos = pos0; - } - return result0; - } - - function parse_KW_FROM() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - if (input.substr(pos, 4).toLowerCase() === "from") { - result0 = input.substr(pos, 4); - pos += 4; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"FROM\""); - } - } - if (result0 !== null) { - pos1 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos1; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos0; - } - } else { - result0 = null; - pos = pos0; - } - return result0; - } - - function parse_KW_SET() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - if (input.substr(pos, 3).toLowerCase() === "set") { - result0 = input.substr(pos, 3); - pos += 3; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"SET\""); - } - } - if (result0 !== null) { - pos1 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos1; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos0; - } - } else { - result0 = null; - pos = pos0; - } - return result0; - } - - function parse_KW_AS() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - if (input.substr(pos, 2).toLowerCase() === "as") { - result0 = input.substr(pos, 2); - pos += 2; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"AS\""); - } - } - if (result0 !== null) { - pos1 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos1; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos0; - } - } else { - result0 = null; - pos = pos0; - } - return result0; - } - - function parse_KW_TABLE() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - if (input.substr(pos, 5).toLowerCase() === "table") { - result0 = input.substr(pos, 5); - pos += 5; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"TABLE\""); - } - } - if (result0 !== null) { - pos1 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos1; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos0; - } - } else { - result0 = null; - pos = pos0; - } - return result0; - } - - function parse_KW_ON() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - if (input.substr(pos, 2).toLowerCase() === "on") { - result0 = input.substr(pos, 2); - pos += 2; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"ON\""); - } - } - if (result0 !== null) { - pos1 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos1; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos0; - } - } else { - result0 = null; - pos = pos0; - } - return result0; - } - - function parse_KW_LEFT() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - if (input.substr(pos, 4).toLowerCase() === "left") { - result0 = input.substr(pos, 4); - pos += 4; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"LEFT\""); - } - } - if (result0 !== null) { - pos1 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos1; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos0; - } - } else { - result0 = null; - pos = pos0; - } - return result0; - } - - function parse_KW_INNER() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - if (input.substr(pos, 5).toLowerCase() === "inner") { - result0 = input.substr(pos, 5); - pos += 5; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"INNER\""); - } - } - if (result0 !== null) { - pos1 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos1; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos0; - } - } else { - result0 = null; - pos = pos0; - } - return result0; - } - - function parse_KW_JOIN() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - if (input.substr(pos, 4).toLowerCase() === "join") { - result0 = input.substr(pos, 4); - pos += 4; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"JOIN\""); - } - } - if (result0 !== null) { - pos1 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos1; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos0; - } - } else { - result0 = null; - pos = pos0; - } - return result0; - } - - function parse_KW_UNION() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - if (input.substr(pos, 5).toLowerCase() === "union") { - result0 = input.substr(pos, 5); - pos += 5; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"UNION\""); - } - } - if (result0 !== null) { - pos1 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos1; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos0; - } - } else { - result0 = null; - pos = pos0; - } - return result0; - } - - function parse_KW_VALUES() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - if (input.substr(pos, 6).toLowerCase() === "values") { - result0 = input.substr(pos, 6); - pos += 6; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"VALUES\""); - } - } - if (result0 !== null) { - pos1 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos1; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos0; - } - } else { - result0 = null; - pos = pos0; - } - return result0; - } - - function parse_KW_EXISTS() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - if (input.substr(pos, 6).toLowerCase() === "exists") { - result0 = input.substr(pos, 6); - pos += 6; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"EXISTS\""); - } - } - if (result0 !== null) { - pos1 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos1; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos0; - } - } else { - result0 = null; - pos = pos0; - } - return result0; - } - - function parse_KW_WHERE() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - if (input.substr(pos, 5).toLowerCase() === "where") { - result0 = input.substr(pos, 5); - pos += 5; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"WHERE\""); - } - } - if (result0 !== null) { - pos1 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos1; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos0; - } - } else { - result0 = null; - pos = pos0; - } - return result0; - } - - function parse_KW_GROUP() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - if (input.substr(pos, 5).toLowerCase() === "group") { - result0 = input.substr(pos, 5); - pos += 5; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"GROUP\""); - } - } - if (result0 !== null) { - pos1 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos1; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos0; - } - } else { - result0 = null; - pos = pos0; - } - return result0; - } - - function parse_KW_BY() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - if (input.substr(pos, 2).toLowerCase() === "by") { - result0 = input.substr(pos, 2); - pos += 2; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"BY\""); - } - } - if (result0 !== null) { - pos1 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos1; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos0; - } - } else { - result0 = null; - pos = pos0; - } - return result0; - } - - function parse_KW_ORDER() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - if (input.substr(pos, 5).toLowerCase() === "order") { - result0 = input.substr(pos, 5); - pos += 5; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"ORDER\""); - } - } - if (result0 !== null) { - pos1 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos1; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos0; - } - } else { - result0 = null; - pos = pos0; - } - return result0; - } - - function parse_KW_HAVING() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - if (input.substr(pos, 6).toLowerCase() === "having") { - result0 = input.substr(pos, 6); - pos += 6; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"HAVING\""); - } - } - if (result0 !== null) { - pos1 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos1; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos0; - } - } else { - result0 = null; - pos = pos0; - } - return result0; - } - - function parse_KW_LIMIT() { - var result0, result1; - var pos0, pos1; - - pos0 = pos; - if (input.substr(pos, 5).toLowerCase() === "limit") { - result0 = input.substr(pos, 5); - pos += 5; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"LIMIT\""); - } - } - if (result0 !== null) { - pos1 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos1; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos0; - } - } else { - result0 = null; - pos = pos0; - } - return result0; - } - - function parse_KW_ASC() { - var result0, result1; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - if (input.substr(pos, 3).toLowerCase() === "asc") { - result0 = input.substr(pos, 3); - pos += 3; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"ASC\""); - } - } - if (result0 !== null) { - pos2 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos2; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset) { return 'ASC'; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_KW_DESC() { - var result0, result1; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - if (input.substr(pos, 4).toLowerCase() === "desc") { - result0 = input.substr(pos, 4); - pos += 4; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"DESC\""); - } - } - if (result0 !== null) { - pos2 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos2; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset) { return 'DESC'; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_KW_ALL() { - var result0, result1; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - if (input.substr(pos, 3).toLowerCase() === "all") { - result0 = input.substr(pos, 3); - pos += 3; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"ALL\""); - } - } - if (result0 !== null) { - pos2 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos2; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset) { return 'ALL'; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_KW_DISTINCT() { - var result0, result1; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - if (input.substr(pos, 8).toLowerCase() === "distinct") { - result0 = input.substr(pos, 8); - pos += 8; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"DISTINCT\""); - } - } - if (result0 !== null) { - pos2 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos2; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset) { return 'DISTINCT'; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_KW_DUPLICATE() { - var result0, result1; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - if (input.substr(pos, 9).toLowerCase() === "duplicate") { - result0 = input.substr(pos, 9); - pos += 9; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"DUPLICATE\""); - } - } - if (result0 !== null) { - pos2 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos2; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset) { return 'DUPLICATE';})(pos0); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_KW_BETWEEN() { - var result0, result1; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - if (input.substr(pos, 7).toLowerCase() === "between") { - result0 = input.substr(pos, 7); - pos += 7; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"BETWEEN\""); - } - } - if (result0 !== null) { - pos2 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos2; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset) { return 'BETWEEN'; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_KW_IN() { - var result0, result1; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - if (input.substr(pos, 2).toLowerCase() === "in") { - result0 = input.substr(pos, 2); - pos += 2; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"IN\""); - } - } - if (result0 !== null) { - pos2 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos2; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset) { return 'IN'; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_KW_IS() { - var result0, result1; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - if (input.substr(pos, 2).toLowerCase() === "is") { - result0 = input.substr(pos, 2); - pos += 2; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"IS\""); - } - } - if (result0 !== null) { - pos2 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos2; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset) { return 'IS'; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_KW_LIKE() { - var result0, result1; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - if (input.substr(pos, 4).toLowerCase() === "like") { - result0 = input.substr(pos, 4); - pos += 4; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"LIKE\""); - } - } - if (result0 !== null) { - pos2 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos2; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset) { return 'LIKE'; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_KW_CONTAINS() { - var result0, result1; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - if (input.substr(pos, 8).toLowerCase() === "contains") { - result0 = input.substr(pos, 8); - pos += 8; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"CONTAINS\""); - } - } - if (result0 !== null) { - pos2 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos2; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset) { return 'CONTAINS'; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_KW_KEY() { - var result0, result1; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - if (input.substr(pos, 3).toLowerCase() === "key") { - result0 = input.substr(pos, 3); - pos += 3; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"KEY\""); - } - } - if (result0 !== null) { - pos2 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos2; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset) { return 'KEY'; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_KW_NOT() { - var result0, result1; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - if (input.substr(pos, 3).toLowerCase() === "not") { - result0 = input.substr(pos, 3); - pos += 3; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"NOT\""); - } - } - if (result0 !== null) { - pos2 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos2; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset) { return 'NOT'; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_KW_AND() { - var result0, result1; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - if (input.substr(pos, 3).toLowerCase() === "and") { - result0 = input.substr(pos, 3); - pos += 3; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"AND\""); - } - } - if (result0 !== null) { - pos2 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos2; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset) { return 'AND'; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_KW_OR() { - var result0, result1; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - if (input.substr(pos, 2).toLowerCase() === "or") { - result0 = input.substr(pos, 2); - pos += 2; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"OR\""); - } - } - if (result0 !== null) { - pos2 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos2; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset) { return 'OR'; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_KW_COUNT() { - var result0, result1; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - if (input.substr(pos, 5).toLowerCase() === "count") { - result0 = input.substr(pos, 5); - pos += 5; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"COUNT\""); - } - } - if (result0 !== null) { - pos2 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos2; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset) { return 'COUNT'; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_KW_MAX() { - var result0, result1; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - if (input.substr(pos, 3).toLowerCase() === "max") { - result0 = input.substr(pos, 3); - pos += 3; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"MAX\""); - } - } - if (result0 !== null) { - pos2 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos2; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset) { return 'MAX'; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_KW_MIN() { - var result0, result1; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - if (input.substr(pos, 3).toLowerCase() === "min") { - result0 = input.substr(pos, 3); - pos += 3; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"MIN\""); - } - } - if (result0 !== null) { - pos2 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos2; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset) { return 'MIN'; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_KW_SUM() { - var result0, result1; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - if (input.substr(pos, 3).toLowerCase() === "sum") { - result0 = input.substr(pos, 3); - pos += 3; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"SUM\""); - } - } - if (result0 !== null) { - pos2 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos2; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset) { return 'SUM'; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_KW_AVG() { - var result0, result1; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - if (input.substr(pos, 3).toLowerCase() === "avg") { - result0 = input.substr(pos, 3); - pos += 3; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"AVG\""); - } - } - if (result0 !== null) { - pos2 = pos; - reportFailures++; - result1 = parse_ident_start(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = pos2; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset) { return 'AVG'; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_DOT() { - var result0; - - if (input.charCodeAt(pos) === 46) { - result0 = "."; - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\".\""); - } - } - return result0; - } - - function parse_COMMA() { - var result0; - - if (input.charCodeAt(pos) === 44) { - result0 = ","; - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\",\""); - } - } - return result0; - } - - function parse_STAR() { - var result0; - - if (input.charCodeAt(pos) === 42) { - result0 = "*"; - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"*\""); - } - } - return result0; - } - - function parse_LPAREN() { - var result0; - - if (input.charCodeAt(pos) === 40) { - result0 = "("; - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"(\""); - } - } - return result0; - } - - function parse_RPAREN() { - var result0; - - if (input.charCodeAt(pos) === 41) { - result0 = ")"; - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\")\""); - } - } - return result0; - } - - function parse_LBRAKE() { - var result0; - - if (input.charCodeAt(pos) === 91) { - result0 = "["; - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"[\""); - } - } - return result0; - } - - function parse_RBRAKE() { - var result0; - - if (input.charCodeAt(pos) === 93) { - result0 = "]"; - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"]\""); - } - } - return result0; - } - - function parse___() { - var result0, result1; - - result0 = []; - result1 = parse_whitespace(); - while (result1 !== null) { - result0.push(result1); - result1 = parse_whitespace(); - } - return result0; - } - - function parse_char() { - var result0; - - if (input.length > pos) { - result0 = input.charAt(pos); - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("any character"); - } - } - return result0; - } - - function parse_whitespace() { - var result0; - - if (/^[ \t\n\r]/.test(input.charAt(pos))) { - result0 = input.charAt(pos); - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("[ \\t\\n\\r]"); - } - } - return result0; - } - - function parse_EOL() { - var result0, result1; - - result0 = parse_EOF(); - if (result0 === null) { - if (/^[\n\r]/.test(input.charAt(pos))) { - result1 = input.charAt(pos); - pos++; - } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("[\\n\\r]"); - } - } - if (result1 !== null) { - result0 = []; - while (result1 !== null) { - result0.push(result1); - if (/^[\n\r]/.test(input.charAt(pos))) { - result1 = input.charAt(pos); - pos++; - } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("[\\n\\r]"); - } - } - } - } else { - result0 = null; - } - } - return result0; - } - - function parse_EOF() { - var result0; - var pos0; - - pos0 = pos; - reportFailures++; - if (input.length > pos) { - result0 = input.charAt(pos); - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("any character"); - } - } - reportFailures--; - if (result0 === null) { - result0 = ""; - } else { - result0 = null; - pos = pos0; - } - return result0; - } - - function parse_proc_stmts() { - var result0, result1; - - result0 = []; - result1 = parse_proc_stmt(); - while (result1 !== null) { - result0.push(result1); - result1 = parse_proc_stmt(); - } - return result0; - } - - function parse_proc_stmt() { - var result0, result1, result2; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - pos2 = pos; - reportFailures++; - result0 = parse_proc_init(); - reportFailures--; - if (result0 !== null) { - result0 = ""; - pos = pos2; - } else { - result0 = null; - } - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_assign_stmt(); - if (result2 === null) { - result2 = parse_return_stmt(); - } - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, s) { - return { - stmt : s, - vars: varList - } - })(pos0, result0[2]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_proc_init() { - var result0; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = []; - if (result0 !== null) { - result0 = (function(offset) { varList = []; return true; })(pos0); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_assign_stmt() { - var result0, result1, result2, result3, result4; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_var_decl(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_KW_ASSIGN(); - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result4 = parse_proc_expr(); - if (result4 !== null) { - result0 = [result0, result1, result2, result3, result4]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, va, e) { - return { - type : 'assign', - left : va, - right: e - } - })(pos0, result0[0], result0[4]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_return_stmt() { - var result0, result1, result2; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_KW_RETURN(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_proc_expr(); - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, e) { - return { - type : 'return', - expr: e - } - })(pos0, result0[2]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_proc_expr() { - var result0; - - result0 = parse_select_stmt(); - if (result0 === null) { - result0 = parse_proc_join(); - if (result0 === null) { - result0 = parse_proc_additive_expr(); - if (result0 === null) { - result0 = parse_proc_array(); - } - } - } - return result0; - } - - function parse_proc_additive_expr() { - var result0, result1, result2, result3, result4, result5; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - result0 = parse_proc_multiplicative_expr(); - if (result0 !== null) { - result1 = []; - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_additive_operator(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_proc_multiplicative_expr(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - while (result2 !== null) { - result1.push(result2); - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_additive_operator(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_proc_multiplicative_expr(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, head, tail) { - return createBinaryExprChain(head, tail); - })(pos0, result0[0], result0[1]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_proc_multiplicative_expr() { - var result0, result1, result2, result3, result4, result5; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - result0 = parse_proc_primary(); - if (result0 !== null) { - result1 = []; - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_multiplicative_operator(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_proc_primary(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - while (result2 !== null) { - result1.push(result2); - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_multiplicative_operator(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_proc_primary(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, head, tail) { - return createBinaryExprChain(head, tail); - })(pos0, result0[0], result0[1]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_proc_join() { - var result0, result1, result2, result3, result4, result5, result6; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_var_decl(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_join_op(); - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result4 = parse_var_decl(); - if (result4 !== null) { - result5 = parse___(); - if (result5 !== null) { - result6 = parse_on_clause(); - if (result6 !== null) { - result0 = [result0, result1, result2, result3, result4, result5, result6]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, lt, op, rt, expr) { - return { - type : 'join', - ltable : lt, - rtable : rt, - op : op, - on : expr - } - })(pos0, result0[0], result0[2], result0[4], result0[6]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_proc_primary() { - var result0, result1, result2, result3, result4; - var pos0, pos1; - - result0 = parse_literal(); - if (result0 === null) { - result0 = parse_var_decl(); - if (result0 === null) { - result0 = parse_proc_func_call(); - if (result0 === null) { - result0 = parse_param(); - if (result0 === null) { - pos0 = pos; - pos1 = pos; - result0 = parse_LPAREN(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_proc_additive_expr(); - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result4 = parse_RPAREN(); - if (result4 !== null) { - result0 = [result0, result1, result2, result3, result4]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, e) { - e.paren = true; - return e; - })(pos0, result0[2]); - } - if (result0 === null) { - pos = pos0; - } - } - } - } - } - return result0; - } - - function parse_proc_func_call() { - var result0, result1, result2, result3, result4, result5, result6; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_ident(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_LPAREN(); - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result4 = parse_proc_primary_list(); - if (result4 !== null) { - result5 = parse___(); - if (result5 !== null) { - result6 = parse_RPAREN(); - if (result6 !== null) { - result0 = [result0, result1, result2, result3, result4, result5, result6]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, name, l) { - //compatible with original func_call - return { - type : 'function', - name : name, - args : { - type : 'expr_list', - value : l - } - } - })(pos0, result0[0], result0[4]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_proc_primary_list() { - var result0, result1, result2, result3, result4, result5; - var pos0, pos1, pos2; - - pos0 = pos; - pos1 = pos; - result0 = parse_proc_primary(); - if (result0 !== null) { - result1 = []; - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_COMMA(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_proc_primary(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - while (result2 !== null) { - result1.push(result2); - pos2 = pos; - result2 = parse___(); - if (result2 !== null) { - result3 = parse_COMMA(); - if (result3 !== null) { - result4 = parse___(); - if (result4 !== null) { - result5 = parse_proc_primary(); - if (result5 !== null) { - result2 = [result2, result3, result4, result5]; - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } else { - result2 = null; - pos = pos2; - } - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, head, tail) { - return createList(head, tail); - })(pos0, result0[0], result0[1]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_proc_array() { - var result0, result1, result2, result3, result4; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_LBRAKE(); - if (result0 !== null) { - result1 = parse___(); - if (result1 !== null) { - result2 = parse_proc_primary_list(); - if (result2 !== null) { - result3 = parse___(); - if (result3 !== null) { - result4 = parse_RBRAKE(); - if (result4 !== null) { - result0 = [result0, result1, result2, result3, result4]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, l) { - return { - type : 'array', - value : l - } - })(pos0, result0[2]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_var_decl() { - var result0, result1, result2; - var pos0, pos1; - - pos0 = pos; - pos1 = pos; - result0 = parse_KW_VAR_PRE(); - if (result0 !== null) { - result1 = parse_ident_name(); - if (result1 !== null) { - result2 = parse_mem_chain(); - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - } else { - result0 = null; - pos = pos1; - } - if (result0 !== null) { - result0 = (function(offset, name, m) { - //push for analysis - varList.push(name); - return { - type : 'var', - name : name, - members : m - } - })(pos0, result0[1], result0[2]); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_mem_chain() { - var result0, result1, result2; - var pos0, pos1; - - pos0 = pos; - result0 = []; - pos1 = pos; - if (input.charCodeAt(pos) === 46) { - result1 = "."; - pos++; - } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("\".\""); - } - } - if (result1 !== null) { - result2 = parse_ident_name(); - if (result2 !== null) { - result1 = [result1, result2]; - } else { - result1 = null; - pos = pos1; - } - } else { - result1 = null; - pos = pos1; - } - while (result1 !== null) { - result0.push(result1); - pos1 = pos; - if (input.charCodeAt(pos) === 46) { - result1 = "."; - pos++; - } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("\".\""); - } - } - if (result1 !== null) { - result2 = parse_ident_name(); - if (result2 !== null) { - result1 = [result1, result2]; - } else { - result1 = null; - pos = pos1; - } - } else { - result1 = null; - pos = pos1; - } - } - if (result0 !== null) { - result0 = (function(offset, l) { - var s = []; - for (var i = 0; i < l.length; i++) { - s.push(l[i][1]); - } - return s; - })(pos0, result0); - } - if (result0 === null) { - pos = pos0; - } - return result0; - } - - function parse_KW_VAR_PRE() { - var result0; - - if (input.charCodeAt(pos) === 36) { - result0 = "$"; - pos++; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"$\""); - } - } - return result0; - } - - function parse_KW_RETURN() { - var result0; - - if (input.substr(pos, 6).toLowerCase() === "return") { - result0 = input.substr(pos, 6); - pos += 6; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"return\""); - } - } - return result0; - } - - function parse_KW_ASSIGN() { - var result0; - - if (input.substr(pos, 2) === ":=") { - result0 = ":="; - pos += 2; - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\":=\""); - } - } - return result0; - } - - - function cleanupExpected(expected) { - expected.sort(); - - var lastExpected = null; - var cleanExpected = []; - for (var i = 0; i < expected.length; i++) { - if (expected[i] !== lastExpected) { - cleanExpected.push(expected[i]); - lastExpected = expected[i]; - } - } - return cleanExpected; - } - - function computeErrorPosition() { - /* - * The first idea was to use |String.split| to break the input up to the - * error position along newlines and derive the line and column from - * there. However IE's |split| implementation is so broken that it was - * enough to prevent it. - */ - - var line = 1; - var column = 1; - var seenCR = false; - - for (var i = 0; i < Math.max(pos, rightmostFailuresPos); i++) { - var ch = input.charAt(i); - if (ch === "\n") { - if (!seenCR) { line++; } - column = 1; - seenCR = false; - } else if (ch === "\r" || ch === "\u2028" || ch === "\u2029") { - line++; - column = 1; - seenCR = true; - } else { - column++; - seenCR = false; - } - } - - return { line: line, column: column }; - } - - - var util = require('util'); - var reservedMap = module.exports.reservedMap || {}; - - function debug(str){ - console.log(str); - } - - function inspect(obj){ - console.log(util.inspect(obj, false, 10)); - } - - function createUnaryExpr(op, e) { - return { - type : 'unary_expr', - operator : op, - expr : e - } - } - - function createBinaryExpr(op, left, right) { - return { - type : 'binary_expr', - operator : op, - left : left, - right : right - } - } - - function createList(head, tail) { - var result = [head]; - for (var i = 0; i < tail.length; i++) { - result.push(tail[i][3]); - } - return result; - } - - function createExprList(head, tail, room) { - var epList = createList(head, tail); - var exprList = []; - var ep; - for (var i = 0; i < epList.length; i++) { - ep = epList[i]; - //the ep has already added to the global params - if (ep.type == 'param') { - ep.room = room; - ep.pos = i; - } else { - exprList.push(ep); - } - } - return exprList; - } - - function createBinaryExprChain(head, tail) { - var result = head; - for (var i = 0; i < tail.length; i++) { - result = createBinaryExpr(tail[i][1], result, tail[i][3]); - } - return result; - } - - var cmpPrefixMap = { - '+' : true, - '-' : true, - '*' : true, - '/' : true, - '>' : true, - '<' : true, - '!' : true, - '=' : true, - - //between - 'B' : true, - 'b' : true, - //for is or in - 'I' : true, - 'i' : true, - //for like - 'L' : true, - 'l' : true, - //for not - 'N' : true, - 'n' : true, - //for contains - 'C' : true, - 'c' : true, - } - - //used for store refered parmas - var params = []; - - //used for dependency analysis - var varList = []; - - - var result = parseFunctions[startRule](); - - /* - * The parser is now in one of the following three states: - * - * 1. The parser successfully parsed the whole input. - * - * - |result !== null| - * - |pos === input.length| - * - |rightmostFailuresExpected| may or may not contain something - * - * 2. The parser successfully parsed only a part of the input. - * - * - |result !== null| - * - |pos < input.length| - * - |rightmostFailuresExpected| may or may not contain something - * - * 3. The parser did not successfully parse any part of the input. - * - * - |result === null| - * - |pos === 0| - * - |rightmostFailuresExpected| contains at least one failure - * - * All code following this comment (including called functions) must - * handle these states. - */ - if (result === null || pos !== input.length) { - var offset = Math.max(pos, rightmostFailuresPos); - var found = offset < input.length ? input.charAt(offset) : null; - var errorPosition = computeErrorPosition(); - - throw new this.SyntaxError( - cleanupExpected(rightmostFailuresExpected), - found, - offset, - errorPosition.line, - errorPosition.column - ); - } - - return result; - }, - - /* Returns the parser source code. */ - toSource: function() { return this._source; } - }; - - /* Thrown when a parser encounters a syntax error. */ - - result.SyntaxError = function(expected, found, offset, line, column) { - function buildMessage(expected, found) { - var expectedHumanized, foundHumanized; - - switch (expected.length) { - case 0: - expectedHumanized = "end of input"; - break; - case 1: - expectedHumanized = expected[0]; - break; - default: - expectedHumanized = expected.slice(0, expected.length - 1).join(", ") - + " or " - + expected[expected.length - 1]; - } - - foundHumanized = found ? quote(found) : "end of input"; - - return "Expected " + expectedHumanized + " but " + foundHumanized + " found."; - } - - this.name = "SyntaxError"; - this.expected = expected; - this.found = found; - this.message = buildMessage(expected, found); - this.offset = offset; - this.line = line; - this.column = column; - }; - - result.SyntaxError.prototype = Error.prototype; - - return result; -})(); diff --git a/lib/filter.js b/lib/filter.js index 73bac6d..2c6aa07 100644 --- a/lib/filter.js +++ b/lib/filter.js @@ -1,87 +1,12 @@ const replaceStrFormIndexArr = require("../utils").replaceStrFormIndexArr; +const commentFilter = require('../core/comment'); /** * 过滤--注释 * @param {String} sql */ function filterComments(sql) { - let tmpArr = []; - const comments = []; - - for (let i = 0; i < sql.length; i++) { - let char = sql[i]; - - //读取字符 - if (char == "'" || char == "\"" || char == "-" || char == "\n" || char == "/" || char == "*") { - //推入数组 - tmpArr.push({ - index: i, - char: char - }); - } - //校验数组是否有匹配语法 - if (tmpArr.length < 2) { - if (tmpArr[0] && (tmpArr[0].char == "\n" || tmpArr[0].char == "*")) { - tmpArr = []; - } - continue; - } - - let firstChar = tmpArr[0]; - let lastChar = tmpArr[tmpArr.length - 1]; - - if (firstChar.char == "'" || firstChar.char == "\"") { - //引号匹配,则清空 - if (lastChar.char == firstChar.char) { - tmpArr = []; - continue; - } - } else if (firstChar.char == "/") { - if (tmpArr[1].char != "*") { - tmpArr = []; - } else if (lastChar.char == "/") { - if (tmpArr.length > 3 && tmpArr[tmpArr.length - 2].char == "*") { - comments.push({ - begin: firstChar.index, - end: lastChar.index - }) - tmpArr = []; - } - } - continue; - } else if (firstChar.char == "-") { - //假如第一个是横线,则开始校验注释规则 - - //判断是否为两个注释符号,不是,则清空 - if (tmpArr[1].char != "-") { - tmpArr = []; - continue; - } - //为注释作用域,遇到换行符,则结束注释 - else if (lastChar.char == "\n") { - comments.push({ - begin: firstChar.index, - end: lastChar.index - }) - tmpArr = []; - continue; - } - //解析结束 - else if (i == sql.length - 1) { - comments.push({ - begin: firstChar.index, - end: i - }) - continue; - } - } else { - tmpArr = []; - } - } - - sql = replaceStrFormIndexArr(sql, '', comments) - - return sql; + return commentFilter.parse(sql) } /** @@ -89,7 +14,7 @@ function filterComments(sql) { * @param {String} sql */ function cleanSql(sql) { - return filterComments(sql).trim(); + return filterComments(sql); } /** diff --git a/package.json b/package.json index ac37e56..df2a2f5 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,8 @@ "description": "sql parser", "main": "index.js", "scripts": { - "build": "pegjs peg/nquery.pegjs core/astParser.js" + "build:parse": "pegjs peg/nquery.pegjs core/astParser.js", + "build:filter":"pegjs peg/comment.pegjs core/comment.js" }, "author": "xiaokang", "license": "ISC", diff --git a/peg/build.js b/peg/build.js new file mode 100644 index 0000000..22a309b --- /dev/null +++ b/peg/build.js @@ -0,0 +1,14 @@ +const pegjs=require("pegjs"); +const path=require("path"); +const fs=require("fs"); + +const files=[{ + source:path.resolve(process.cwd(),"./peg/comment.pegjs") , + target:path.resolve(process.cwd(),"./core/comment.js") , +},{ + source:path.resolve(process.cwd(),"./peg/nquery.pegjs") , + target:path.resolve(process.cwd(),"./core/astParser.js") , +}]; + +const file=fs.readFileSync(files[0].source,{encoding:"utf8"}) +pegjs.buildParser(file); \ No newline at end of file diff --git a/peg/comment.pegjs b/peg/comment.pegjs new file mode 100644 index 0000000..6c486e1 --- /dev/null +++ b/peg/comment.pegjs @@ -0,0 +1,72 @@ + + +start += union_stmt:union_stmt +{ + return union_stmt; +} + + +union_stmt +=stmt: +( + words:(!kw_start word:. {return word})* + stmt:(comment:comment {return ''}/quote:quote {return quote}) + {return words.join("")+stmt} +)* other:.* +{return stmt.join("")+other.join("")} + +comment +=comment:(multiLine/singleLine) +{ + return comment; +} + +singleLine += start:KW_SINGLE_LINE_START + words:[^\r\n]* + { + return start+words.join("") + } + + +multiLine +=start:KW_MULTI_LINE_START + words:(!"*/" word:. {return word })* + end:KW_MULTI_LINE_END + {return start+words.join("")+end } + +quote +=content:( + ( + start:"\"" + words:[^"]* + end:"\"" + {return start+words.join("")+end;} + ) + / + ( + start:"'" + words:[^']* + end:"'" + {return start+words.join("")+end;} + ) +) + + + + + +kw_start=KW_SINGLE_LINE_START/KW_MULTI_LINE_START/"\""/"'" + + +KW_SINGLE_LINE_START = "--"; +KW_SINGLE_LINE_END = [\r\n]; +KW_MULTI_LINE_START = "/*"; +KW_MULTI_LINE_END = "*/"; + + +__ = whitespace* + +whitespace += [ \t\r\n]; \ No newline at end of file diff --git a/peg/nquery.pegjs b/peg/nquery.pegjs index c24ae80..ce0c875 100644 --- a/peg/nquery.pegjs +++ b/peg/nquery.pegjs @@ -160,7 +160,7 @@ start } } -init = { params = []; return true; } +init = & { params = []; return true; } union_stmt = head:select_stmt tail:(__ KW_UNION __ select_stmt)* { @@ -424,7 +424,7 @@ expr_list expr_list_or_empty = l:expr_list - / { + / & { return { type : 'expr_list', value : [] @@ -931,7 +931,7 @@ proc_stmt } } -proc_init = { varList = []; return true; } +proc_init = & { varList = []; return true; } assign_stmt = va:var_decl __ KW_ASSIGN __ e:proc_expr { diff --git a/test/example.js b/test/example.js index 292c4a0..7c0f944 100644 --- a/test/example.js +++ b/test/example.js @@ -3,7 +3,7 @@ const example={ SELECT muyun_test_down1.id, muyun_test_down1.name, muyun_test_down2.age FROM muyun_test_down1 JOIN muyun_test_down2 - ON muyun_test_down1.id = muyun_test_down2.id + ON muyun_test_down1.id = muyun_test_down2.id `, test1:`/*asf*/create table sql_task_comment_test(id int comment 'id') comment 'sql test'; --sdfsss`, diff --git a/test/index.js b/test/index.js index b276abb..450ecc9 100644 --- a/test/index.js +++ b/test/index.js @@ -6,8 +6,8 @@ for(let [key,value] of testMap){ console.log(`******${key}********`) console.log(value) console.log(`******result********`) - console.log(dtSqlParser.parser.parse(value)); - // console.log(dtSqlParser.filter.filterComments(value)) + // console.log(dtSqlParser.parser.parse(value)); + console.log(dtSqlParser.filter.filterComments(value)) console.log(`********************`) }