ns-formula-parse
Version:
This project is a NetSuite Formula parser based on PEG
1,476 lines (1,363 loc) • 55.9 kB
JavaScript
'use strict';
module.exports = (function () {
/*
* Generated by PEG.js 0.9.0.
*
* http://pegjs.org/
*/
function peg$subclass(child, parent) {
function ctor() {
this.constructor = child;
}
ctor.prototype = parent.prototype;
child.prototype = new ctor();
}
function peg$SyntaxError(message, expected, found, location) {
this.message = message;
this.expected = expected;
this.found = found;
this.location = location;
this.name = 'SyntaxError';
if (typeof Error.captureStackTrace === 'function') {
Error.captureStackTrace(this, peg$SyntaxError);
}
}
peg$subclass(peg$SyntaxError, Error);
function peg$parse(input, data) {
var options = arguments.length > 1 ? arguments[1] : {},
parser = this,
peg$FAILED = {},
peg$startRuleFunctions = {start: peg$parsestart},
peg$startRuleFunction = peg$parsestart,
peg$c0 = /^[ \t\n\r]/,
peg$c1 = {type: 'class', value: '[ \\t\\n\\r]', description: '[ \\t\\n\\r]'},
peg$c2 = function (v) {
var test = v[1],
block1 = v[2],
block2 = v[3];
if (Array.isArray(block1[0]))
block1 = block1[0];
var when = block1[1];
if (!test && when) {
return block1[3];
}
else if (test == when) {
return block1[3];
}
else {
return block2[1];
}
},
peg$c3 = function (e) {
return e[1];
},
peg$c4 = function (s) {
return s[1].join('');
},
peg$c5 = '||',
peg$c6 = {type: 'literal', value: '||', description: '\'||\''},
peg$c7 = function (x) {
return x[3];
},
peg$c8 = function () {
return text();
},
peg$c9 = '\'',
peg$c10 = {type: 'literal', value: '\'', description: '\''},
peg$c11 = '\'',
peg$c12 = {type: 'literal', value: '\'', description: '\'\\\'\''},
peg$c13 = {type: 'any', description: 'any character'},
peg$c14 = /^[A-Za-z0-9_\-]/,
peg$c15 = {type: 'class', value: '[A-Za-z0-9_\\-]', description: '[A-Za-z0-9_\\-]'},
peg$c16 = function (str) {
return str.join('');
},
peg$c17 = function (v, bo) {
return v + bo.join('');
},
peg$c18 = '(',
peg$c19 = {type: 'literal', value: '(', description: '\'(\''},
peg$c20 = ')',
peg$c21 = {type: 'literal', value: ')', description: '\')\''},
peg$c22 = function (bs) {
bs.pop();
bs = bs.splice(1);
return bs.map(function (w) {
if (Array.isArray(w)) return w.join('');
else return w;
}).join('');
},
peg$c23 = '{',
peg$c24 = {type: 'literal', value: '{', description: '\'{\''},
peg$c25 = '.',
peg$c26 = {type: 'literal', value: '.', description: '\'.\''},
peg$c27 = '}',
peg$c28 = {type: 'literal', value: '}', description: '\'}\''},
peg$c29 = function (s) {
var val = s[1] + (s[2] ? s[2].join('') : '');
return data[val];
},
peg$c30 = 'AND',
peg$c31 = {type: 'literal', value: 'AND', description: '\'AND\''},
peg$c32 = 'and',
peg$c33 = {type: 'literal', value: 'and', description: '\'and\''},
peg$c34 = function (w) {
return w[1];
},
peg$c35 = 'BETWEEN',
peg$c36 = {type: 'literal', value: 'BETWEEN', description: '\'BETWEEN\''},
peg$c37 = 'between',
peg$c38 = {type: 'literal', value: 'between', description: '\'between\''},
peg$c39 = 'CASE',
peg$c40 = {type: 'literal', value: 'CASE', description: '\'CASE\''},
peg$c41 = 'case',
peg$c42 = {type: 'literal', value: 'case', description: '\'case\''},
peg$c43 = 'ELSE',
peg$c44 = {type: 'literal', value: 'ELSE', description: '\'ELSE\''},
peg$c45 = 'else',
peg$c46 = {type: 'literal', value: 'else', description: '\'else\''},
peg$c47 = 'END',
peg$c48 = {type: 'literal', value: 'END', description: '\'END\''},
peg$c49 = 'end',
peg$c50 = {type: 'literal', value: 'end', description: '\'end\''},
peg$c51 = 'IS',
peg$c52 = {type: 'literal', value: 'IS', description: '\'IS\''},
peg$c53 = 'is',
peg$c54 = {type: 'literal', value: 'is', description: '\'is\''},
peg$c55 = 'ISNULL',
peg$c56 = {type: 'literal', value: 'ISNULL', description: '\'ISNULL\''},
peg$c57 = 'isnull',
peg$c58 = {type: 'literal', value: 'isnull', description: '\'isnull\''},
peg$c59 = 'NOT',
peg$c60 = {type: 'literal', value: 'NOT', description: '\'NOT\''},
peg$c61 = 'not',
peg$c62 = {type: 'literal', value: 'not', description: '\'not\''},
peg$c63 = 'NULL',
peg$c64 = {type: 'literal', value: 'NULL', description: '\'NULL\''},
peg$c65 = 'null',
peg$c66 = {type: 'literal', value: 'null', description: '\'null\''},
peg$c67 = 'NOTNULL',
peg$c68 = {type: 'literal', value: 'NOTNULL', description: '\'NOTNULL\''},
peg$c69 = 'notnull',
peg$c70 = {type: 'literal', value: 'notnull', description: '\'notnull\''},
peg$c71 = 'THEN',
peg$c72 = {type: 'literal', value: 'THEN', description: '\'THEN\''},
peg$c73 = 'then',
peg$c74 = {type: 'literal', value: 'then', description: '\'then\''},
peg$c75 = 'WHEN',
peg$c76 = {type: 'literal', value: 'WHEN', description: '\'WHEN\''},
peg$c77 = 'when',
peg$c78 = {type: 'literal', value: 'when', description: '\'when\''},
peg$currPos = 0,
peg$savedPos = 0,
peg$posDetailsCache = [{line: 1, column: 1, seenCR: false}],
peg$maxFailPos = 0,
peg$maxFailExpected = [],
peg$silentFails = 0,
peg$result;
if ('startRule' in options) {
if (!(options.startRule in peg$startRuleFunctions)) {
throw new Error('Can\'t start parsing from rule \'' + options.startRule + '\'.');
}
peg$startRuleFunction = peg$startRuleFunctions[options.startRule];
}
function text() {
return input.substring(peg$savedPos, peg$currPos);
}
function location() {
return peg$computeLocation(peg$savedPos, peg$currPos);
}
function expected(description) {
throw peg$buildException(
null,
[{type: 'other', description: description}],
input.substring(peg$savedPos, peg$currPos),
peg$computeLocation(peg$savedPos, peg$currPos)
);
}
function error(message) {
throw peg$buildException(
message,
null,
input.substring(peg$savedPos, peg$currPos),
peg$computeLocation(peg$savedPos, peg$currPos)
);
}
function peg$computePosDetails(pos) {
var details = peg$posDetailsCache[pos],
p, ch;
if (details) {
return details;
} else {
p = pos - 1;
while (!peg$posDetailsCache[p]) {
p--;
}
details = peg$posDetailsCache[p];
details = {
line: details.line,
column: details.column,
seenCR: details.seenCR
};
while (p < pos) {
ch = input.charAt(p);
if (ch === '\n') {
if (!details.seenCR) {
details.line++;
}
details.column = 1;
details.seenCR = false;
} else if (ch === '\r' || ch === '\u2028' || ch === '\u2029') {
details.line++;
details.column = 1;
details.seenCR = true;
} else {
details.column++;
details.seenCR = false;
}
p++;
}
peg$posDetailsCache[pos] = details;
return details;
}
}
function peg$computeLocation(startPos, endPos) {
var startPosDetails = peg$computePosDetails(startPos),
endPosDetails = peg$computePosDetails(endPos);
return {
start: {
offset: startPos,
line: startPosDetails.line,
column: startPosDetails.column
},
end: {
offset: endPos,
line: endPosDetails.line,
column: endPosDetails.column
}
};
}
function peg$fail(expected) {
if (peg$currPos < peg$maxFailPos) {
return;
}
if (peg$currPos > peg$maxFailPos) {
peg$maxFailPos = peg$currPos;
peg$maxFailExpected = [];
}
peg$maxFailExpected.push(expected);
}
function peg$buildException(message, expected, found, location) {
function cleanupExpected(expected) {
var i = 1;
expected.sort(function (a, b) {
if (a.description < b.description) {
return -1;
} else if (a.description > b.description) {
return 1;
} else {
return 0;
}
});
while (i < expected.length) {
if (expected[i - 1] === expected[i]) {
expected.splice(i, 1);
} else {
i++;
}
}
}
function buildMessage(expected, found) {
function stringEscape(s) {
function hex(ch) {
return ch.charCodeAt(0).toString(16).toUpperCase();
}
return s
.replace(/\\/g, '\\\\')
.replace(/'/g, '\\"')
.replace(/\x08/g, '\\b')
.replace(/\t/g, '\\t')
.replace(/\n/g, '\\n')
.replace(/\f/g, '\\f')
.replace(/\r/g, '\\r')
.replace(/[\x00-\x07\x0B\x0E\x0F]/g, function (ch) {
return '\\x0' + hex(ch);
})
.replace(/[\x10-\x1F\x80-\xFF]/g, function (ch) {
return '\\x' + hex(ch);
})
.replace(/[\u0100-\u0FFF]/g, function (ch) {
return '\\u0' + hex(ch);
})
.replace(/[\u1000-\uFFFF]/g, function (ch) {
return '\\u' + hex(ch);
});
}
var expectedDescs = new Array(expected.length),
expectedDesc, foundDesc, i;
for (i = 0; i < expected.length; i++) {
expectedDescs[i] = expected[i].description;
}
expectedDesc = expected.length > 1
? expectedDescs.slice(0, -1).join(', ')
+ ' or '
+ expectedDescs[expected.length - 1]
: expectedDescs[0];
foundDesc = found ? '\'' + stringEscape(found) + '\'' : 'end of input';
return 'Expected ' + expectedDesc + ' but ' + foundDesc + ' found.';
}
if (expected !== null) {
cleanupExpected(expected);
}
return new peg$SyntaxError(
message !== null ? message : buildMessage(expected, found),
expected,
found,
location
);
}
function peg$parsestart() {
var s0;
s0 = peg$parseblock_select();
if (s0 === peg$FAILED) {
s0 = peg$parseblock_select1();
}
return s0;
}
function peg$parsewhitespace() {
var s0, s1;
s0 = [];
if (peg$c0.test(input.charAt(peg$currPos))) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c1);
}
}
while (s1 !== peg$FAILED) {
s0.push(s1);
if (peg$c0.test(input.charAt(peg$currPos))) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c1);
}
}
}
return s0;
}
function peg$parsewhitespace1() {
var s0, s1;
s0 = [];
if (peg$c0.test(input.charAt(peg$currPos))) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c1);
}
}
if (s1 !== peg$FAILED) {
while (s1 !== peg$FAILED) {
s0.push(s1);
if (peg$c0.test(input.charAt(peg$currPos))) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c1);
}
}
}
} else {
s0 = peg$FAILED;
}
return s0;
}
function peg$parsevalue() {
var s0;
s0 = peg$parsecondition();
if (s0 === peg$FAILED) {
s0 = peg$parseselect();
if (s0 === peg$FAILED) {
s0 = peg$parsestring();
}
}
return s0;
}
function peg$parsecondition() {
var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;
s0 = peg$currPos;
s1 = peg$currPos;
s2 = peg$parseCASE();
if (s2 !== peg$FAILED) {
s3 = peg$parseexpr();
if (s3 === peg$FAILED) {
s3 = null;
}
if (s3 !== peg$FAILED) {
s4 = [];
s5 = peg$currPos;
s6 = peg$parseWHEN();
if (s6 !== peg$FAILED) {
s7 = peg$parseexpr();
if (s7 !== peg$FAILED) {
s8 = peg$parseTHEN();
if (s8 !== peg$FAILED) {
s9 = peg$parseexpr();
if (s9 !== peg$FAILED) {
s6 = [s6, s7, s8, s9];
s5 = s6;
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
if (s5 !== peg$FAILED) {
while (s5 !== peg$FAILED) {
s4.push(s5);
s5 = peg$currPos;
s6 = peg$parseWHEN();
if (s6 !== peg$FAILED) {
s7 = peg$parseexpr();
if (s7 !== peg$FAILED) {
s8 = peg$parseTHEN();
if (s8 !== peg$FAILED) {
s9 = peg$parseexpr();
if (s9 !== peg$FAILED) {
s6 = [s6, s7, s8, s9];
s5 = s6;
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
}
} else {
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
s5 = peg$currPos;
s6 = peg$parseELSE();
if (s6 !== peg$FAILED) {
s7 = peg$parseexpr();
if (s7 !== peg$FAILED) {
s6 = [s6, s7];
s5 = s6;
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
if (s5 === peg$FAILED) {
s5 = null;
}
if (s5 !== peg$FAILED) {
s6 = peg$parseEND();
if (s6 !== peg$FAILED) {
s2 = [s2, s3, s4, s5, s6];
s1 = s2;
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c2(s1);
}
s0 = s1;
return s0;
}
function peg$parseexpr() {
var s0, s1, s2, s3, s4, s5, s6, s7, s8;
s0 = peg$currPos;
s1 = peg$currPos;
s2 = peg$parsewhitespace();
if (s2 !== peg$FAILED) {
s3 = peg$parseISNULL();
if (s3 === peg$FAILED) {
s3 = peg$parseNOTNULL();
if (s3 === peg$FAILED) {
s3 = peg$currPos;
s4 = peg$parseNOT();
if (s4 !== peg$FAILED) {
s5 = peg$parseNULL();
if (s5 !== peg$FAILED) {
s4 = [s4, s5];
s3 = s4;
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
}
}
if (s3 === peg$FAILED) {
s3 = peg$currPos;
s4 = peg$parseIS();
if (s4 !== peg$FAILED) {
s5 = peg$parseNOT();
if (s5 === peg$FAILED) {
s5 = null;
}
if (s5 !== peg$FAILED) {
s6 = peg$parseexpr();
if (s6 !== peg$FAILED) {
s4 = [s4, s5, s6];
s3 = s4;
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
if (s3 === peg$FAILED) {
s3 = peg$currPos;
s4 = peg$parseNOT();
if (s4 === peg$FAILED) {
s4 = null;
}
if (s4 !== peg$FAILED) {
s5 = peg$parseBETWEEN();
if (s5 !== peg$FAILED) {
s6 = peg$parseexpr();
if (s6 !== peg$FAILED) {
s7 = peg$parseAND();
if (s7 !== peg$FAILED) {
s8 = peg$parseexpr();
if (s8 !== peg$FAILED) {
s4 = [s4, s5, s6, s7, s8];
s3 = s4;
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
if (s3 === peg$FAILED) {
s3 = peg$parseblock_select();
if (s3 === peg$FAILED) {
s3 = peg$parseblock_select1();
}
}
}
}
if (s3 !== peg$FAILED) {
s2 = [s2, s3];
s1 = s2;
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c3(s1);
}
s0 = s1;
return s0;
}
function peg$parsestring() {
var s0, s1, s2, s3, s4;
s0 = peg$currPos;
s1 = peg$currPos;
s2 = peg$parsequot();
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parsesingle_character();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parsesingle_character();
}
if (s3 !== peg$FAILED) {
s4 = peg$parsequot();
if (s4 !== peg$FAILED) {
s2 = [s2, s3, s4];
s1 = s2;
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c4(s1);
}
s0 = s1;
return s0;
}
function peg$parsebinary_operator() {
var s0, s1, s2, s3, s4, s5;
s0 = peg$currPos;
s1 = peg$currPos;
s2 = peg$parsewhitespace();
if (s2 !== peg$FAILED) {
if (input.substr(peg$currPos, 2) === peg$c5) {
s3 = peg$c5;
peg$currPos += 2;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c6);
}
}
if (s3 !== peg$FAILED) {
s4 = peg$parsewhitespace();
if (s4 !== peg$FAILED) {
s5 = peg$parsevalue();
if (s5 !== peg$FAILED) {
s2 = [s2, s3, s4, s5];
s1 = s2;
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c7(s1);
}
s0 = s1;
return s0;
}
function peg$parsesingle_character() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = peg$currPos;
peg$silentFails++;
s2 = peg$parsequot();
peg$silentFails--;
if (s2 === peg$FAILED) {
s1 = void 0;
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s2 = peg$parsecharacter();
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c8();
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsequot() {
var s0;
if (input.charCodeAt(peg$currPos) === 39) {
s0 = peg$c9;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c10);
}
}
if (s0 === peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 34) {
s0 = peg$c11;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c12);
}
}
}
return s0;
}
function peg$parsecharacter() {
var s0;
if (input.length > peg$currPos) {
s0 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c13);
}
}
return s0;
}
function peg$parsename() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = [];
if (peg$c14.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c15);
}
}
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
if (peg$c14.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c15);
}
}
}
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c16(s1);
}
s0 = s1;
return s0;
}
function peg$parseblock_select() {
var s0, s1, s2, s3;
s0 = peg$currPos;
s1 = peg$parsevalue();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parsebinary_operator();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parsebinary_operator();
}
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c17(s1, s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseblock_select1() {
var s0, s1, s2, s3, s4, s5, s6;
s0 = peg$currPos;
s1 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 40) {
s2 = peg$c18;
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c19);
}
}
if (s2 !== peg$FAILED) {
s3 = peg$parsevalue();
if (s3 !== peg$FAILED) {
s4 = [];
s5 = peg$parsebinary_operator();
while (s5 !== peg$FAILED) {
s4.push(s5);
s5 = peg$parsebinary_operator();
}
if (s4 !== peg$FAILED) {
s5 = [];
if (input.charCodeAt(peg$currPos) === 41) {
s6 = peg$c20;
peg$currPos++;
} else {
s6 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c21);
}
}
while (s6 !== peg$FAILED) {
s5.push(s6);
if (input.charCodeAt(peg$currPos) === 41) {
s6 = peg$c20;
peg$currPos++;
} else {
s6 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c21);
}
}
}
if (s5 !== peg$FAILED) {
s2 = [s2, s3, s4, s5];
s1 = s2;
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c22(s1);
}
s0 = s1;
return s0;
}
function peg$parseselect() {
var s0, s1, s2, s3, s4, s5, s6;
s0 = peg$currPos;
s1 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 123) {
s2 = peg$c23;
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c24);
}
}
if (s2 !== peg$FAILED) {
s3 = peg$parsename();
if (s3 !== peg$FAILED) {
s4 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 46) {
s5 = peg$c25;
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c26);
}
}
if (s5 !== peg$FAILED) {
s6 = peg$parsename();
if (s6 !== peg$FAILED) {
s5 = [s5, s6];
s4 = s5;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
if (s4 === peg$FAILED) {
s4 = null;
}
if (s4 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 125) {
s5 = peg$c27;
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c28);
}
}
if (s5 !== peg$FAILED) {
s2 = [s2, s3, s4, s5];
s1 = s2;
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c29(s1);
}
s0 = s1;
return s0;
}
function peg$parseAND() {
var s0, s1, s2, s3;
s0 = peg$currPos;
s1 = peg$currPos;
s2 = peg$parsewhitespace1();
if (s2 !== peg$FAILED) {
if (input.substr(peg$currPos, 3) === peg$c30) {
s3 = peg$c30;
peg$currPos += 3;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c31);
}
}
if (s3 === peg$FAILED) {
if (input.substr(peg$currPos, 3) === peg$c32) {
s3 = peg$c32;
peg$currPos += 3;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c33);
}
}
}
if (s3 !== peg$FAILED) {
s2 = [s2, s3];
s1 = s2;
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c34(s1);
}
s0 = s1;
return s0;
}
function peg$parseBETWEEN() {
var s0, s1, s2, s3;
s0 = peg$currPos;
s1 = peg$currPos;
s2 = peg$parsewhitespace1();
if (s2 !== peg$FAILED) {
if (input.substr(peg$currPos, 7) === peg$c35) {
s3 = peg$c35;
peg$currPos += 7;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c36);
}
}
if (s3 === peg$FAILED) {
if (input.substr(peg$currPos, 7) === peg$c37) {
s3 = peg$c37;
peg$currPos += 7;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c38);
}
}
}
if (s3 !== peg$FAILED) {
s2 = [s2, s3];
s1 = s2;
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c34(s1);
}
s0 = s1;
return s0;
}
function peg$parseCASE() {
var s0, s1, s2, s3;
s0 = peg$currPos;
s1 = peg$currPos;
s2 = peg$parsewhitespace();
if (s2 !== peg$FAILED) {
if (input.substr(peg$currPos, 4) === peg$c39) {
s3 = peg$c39;
peg$currPos += 4;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c40);
}
}
if (s3 === peg$FAILED) {
if (input.substr(peg$currPos, 4) === peg$c41) {
s3 = peg$c41;
peg$currPos += 4;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c42);
}
}
}
if (s3 !== peg$FAILED) {
s2 = [s2, s3];
s1 = s2;
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c34(s1);
}
s0 = s1;
return s0;
}
function peg$parseELSE() {
var s0, s1, s2, s3;
s0 = peg$currPos;
s1 = peg$currPos;
s2 = peg$parsewhitespace();
if (s2 !== peg$FAILED) {
if (input.substr(peg$currPos, 4) === peg$c43) {
s3 = peg$c43;
peg$currPos += 4;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c44);
}
}
if (s3 === peg$FAILED) {
if (input.substr(peg$currPos, 4) === peg$c45) {
s3 = peg$c45;
peg$currPos += 4;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c46);
}
}
}
if (s3 !== peg$FAILED) {
s2 = [s2, s3];
s1 = s2;
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c34(s1);
}
s0 = s1;
return s0;
}
function peg$parseEND() {
var s0, s1, s2, s3;
s0 = peg$currPos;
s1 = peg$currPos;
s2 = peg$parsewhitespace();
if (s2 !== peg$FAILED) {
if (input.substr(peg$currPos, 3) === peg$c47) {
s3 = peg$c47;
peg$currPos += 3;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c48);
}
}
if (s3 === peg$FAILED) {
if (input.substr(peg$currPos, 3) === peg$c49) {
s3 = peg$c49;
peg$currPos += 3;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c50);
}
}
}
if (s3 !== peg$FAILED) {
s2 = [s2, s3];
s1 = s2;
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c34(s1);
}
s0 = s1;
return s0;
}
function peg$parseIS() {
var s0, s1, s2, s3;
s0 = peg$currPos;
s1 = peg$currPos;
s2 = peg$parsewhitespace1();
if (s2 !== peg$FAILED) {
if (input.substr(peg$currPos, 2) === peg$c51) {
s3 = peg$c51;
peg$currPos += 2;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c52);
}
}
if (s3 === peg$FAILED) {
if (input.substr(peg$currPos, 2) === peg$c53) {
s3 = peg$c53;
peg$currPos += 2;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c54);
}
}
}
if (s3 !== peg$FAILED) {
s2 = [s2, s3];
s1 = s2;
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c34(s1);
}
s0 = s1;
return s0;
}
function peg$parseISNULL() {
var s0, s1, s2, s3;
s0 = peg$currPos;
s1 = peg$currPos;
s2 = peg$parsewhitespace1();
if (s2 !== peg$FAILED) {
if (input.substr(peg$currPos, 6) === peg$c55) {
s3 = peg$c55;
peg$currPos += 6;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c56);
}
}
if (s3 === peg$FAILED) {
if (input.substr(peg$currPos, 6) === peg$c57) {
s3 = peg$c57;
peg$currPos += 6;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c58);
}
}
}
if (s3 !== peg$FAILED) {
s2 = [s2, s3];
s1 = s2;
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c34(s1);
}
s0 = s1;
return s0;
}
function peg$parseNOT() {
var s0, s1, s2, s3;
s0 = peg$currPos;
s1 = peg$currPos;
s2 = peg$parsewhitespace1();
if (s2 !== peg$FAILED) {
if (input.substr(peg$currPos, 3) === peg$c59) {
s3 = peg$c59;
peg$currPos += 3;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c60);
}
}
if (s3 === peg$FAILED) {
if (input.substr(peg$currPos, 3) === peg$c61) {
s3 = peg$c61;
peg$currPos += 3;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c62);
}
}
}
if (s3 !== peg$FAILED) {
s2 = [s2, s3];
s1 = s2;
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c34(s1);
}
s0 = s1;
return s0;
}
function peg$parseNULL() {
var s0, s1, s2, s3;
s0 = peg$currPos;
s1 = peg$currPos;
s2 = peg$parsewhitespace1();
if (s2 !== peg$FAILED) {
if (input.substr(peg$currPos, 4) === peg$c63) {
s3 = peg$c63;
peg$currPos += 4;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$c64);
}
}
if (s3 === peg$FAILED) {
if (input.substr(peg$currPos, 4) === peg$c65) {
s3 = peg$c65;
peg$currPos += 4;
} else {
s3 = peg$FAILED;
if (peg$