From 62f1879a339ff0b947f58d936fbbcaf66d428b9b Mon Sep 17 00:00:00 2001 From: Josh Ferguson Date: Sat, 9 May 2015 15:26:15 -0700 Subject: [PATCH 1/3] add case statements --- browser/sql-parser.js | 107 +++++++++++++++++++++++++++++++---------- lib/compiled_parser.js | 58 +++++++++++++--------- lib/grammar.js | 32 ++++++++++++ lib/lexer.js | 2 +- lib/nodes.js | 47 +++++++++++++++++- src/grammar.coffee | 23 ++++++++- src/lexer.coffee | 6 ++- src/nodes.coffee | 16 ++++++ 8 files changed, 239 insertions(+), 52 deletions(-) diff --git a/browser/sql-parser.js b/browser/sql-parser.js index a3cf815..8326b05 100644 --- a/browser/sql-parser.js +++ b/browser/sql-parser.js @@ -105,7 +105,7 @@ }; Lexer.prototype.keywordToken = function() { - return this.tokenizeFromWord('SELECT') || this.tokenizeFromWord('DISTINCT') || this.tokenizeFromWord('FROM') || this.tokenizeFromWord('WHERE') || this.tokenizeFromWord('GROUP') || this.tokenizeFromWord('ORDER') || this.tokenizeFromWord('BY') || this.tokenizeFromWord('HAVING') || this.tokenizeFromWord('LIMIT') || this.tokenizeFromWord('JOIN') || this.tokenizeFromWord('LEFT') || this.tokenizeFromWord('RIGHT') || this.tokenizeFromWord('INNER') || this.tokenizeFromWord('OUTER') || this.tokenizeFromWord('ON') || this.tokenizeFromWord('AS') || this.tokenizeFromWord('UNION') || this.tokenizeFromWord('ALL') || this.tokenizeFromWord('LIMIT') || this.tokenizeFromWord('OFFSET') || this.tokenizeFromWord('FETCH') || this.tokenizeFromWord('ROW') || this.tokenizeFromWord('ROWS') || this.tokenizeFromWord('ONLY') || this.tokenizeFromWord('NEXT') || this.tokenizeFromWord('FIRST'); + return this.tokenizeFromWord('SELECT') || this.tokenizeFromWord('DISTINCT') || this.tokenizeFromWord('FROM') || this.tokenizeFromWord('WHERE') || this.tokenizeFromWord('GROUP') || this.tokenizeFromWord('ORDER') || this.tokenizeFromWord('BY') || this.tokenizeFromWord('HAVING') || this.tokenizeFromWord('LIMIT') || this.tokenizeFromWord('JOIN') || this.tokenizeFromWord('LEFT') || this.tokenizeFromWord('RIGHT') || this.tokenizeFromWord('INNER') || this.tokenizeFromWord('OUTER') || this.tokenizeFromWord('ON') || this.tokenizeFromWord('AS') || this.tokenizeFromWord('CASE') || this.tokenizeFromWord('WHEN') || this.tokenizeFromWord('THEN') || this.tokenizeFromWord('ELSE') || this.tokenizeFromWord('END') || this.tokenizeFromWord('UNION') || this.tokenizeFromWord('ALL') || this.tokenizeFromWord('LIMIT') || this.tokenizeFromWord('OFFSET') || this.tokenizeFromWord('FETCH') || this.tokenizeFromWord('ROW') || this.tokenizeFromWord('ROWS') || this.tokenizeFromWord('ONLY') || this.tokenizeFromWord('NEXT') || this.tokenizeFromWord('FIRST'); }; Lexer.prototype.dotToken = function() { @@ -321,12 +321,12 @@ } */ var parser = (function(){ -var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,8],$V1=[5,26],$V2=[1,14],$V3=[1,13],$V4=[5,26,31,42],$V5=[1,17],$V6=[5,26,31,42,45,62],$V7=[1,27],$V8=[1,29],$V9=[1,38],$Va=[1,42],$Vb=[1,43],$Vc=[1,39],$Vd=[1,40],$Ve=[1,37],$Vf=[1,41],$Vg=[1,25],$Vh=[5,26,31],$Vi=[5,26,31,42,45],$Vj=[1,55],$Vk=[18,43],$Vl=[1,58],$Vm=[1,59],$Vn=[1,60],$Vo=[1,61],$Vp=[5,18,23,26,31,34,37,38,41,42,43,45,62,64,65,66,67,68],$Vq=[5,18,23,26,31,34,37,38,41,42,43,44,45,51,62,64,65,66,67,68,69],$Vr=[1,66],$Vs=[2,80],$Vt=[1,80],$Vu=[1,81],$Vv=[1,96],$Vw=[5,26,31,42,43,44],$Vx=[1,104],$Vy=[5,26,31,42,43,45,64],$Vz=[5,26,31,41,42,45,62],$VA=[1,107],$VB=[1,108],$VC=[1,109],$VD=[5,26,31,34,35,37,38,41,42,45,62],$VE=[5,26,31,34,37,38,41,42,45,62],$VF=[5,26,31,42,56,58]; +var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,8],$V1=[5,26],$V2=[1,14],$V3=[1,13],$V4=[5,26,31,42],$V5=[1,17],$V6=[5,26,31,42,45,62],$V7=[1,28],$V8=[1,30],$V9=[1,31],$Va=[1,40],$Vb=[1,44],$Vc=[1,45],$Vd=[1,41],$Ve=[1,42],$Vf=[1,39],$Vg=[1,43],$Vh=[1,25],$Vi=[5,26,31],$Vj=[5,26,31,42,45],$Vk=[1,57],$Vl=[18,43],$Vm=[1,60],$Vn=[1,61],$Vo=[1,62],$Vp=[1,63],$Vq=[5,18,23,26,31,34,37,38,41,42,43,45,62,64,65,66,67,68,75,78,80],$Vr=[5,18,23,26,31,34,37,38,41,42,43,44,45,51,62,64,65,66,67,68,69,75,78,80],$Vs=[1,71],$Vt=[2,85],$Vu=[1,85],$Vv=[1,86],$Vw=[1,107],$Vx=[5,26,31,42,43,44],$Vy=[1,116],$Vz=[5,26,31,42,43,45,64],$VA=[5,26,31,41,42,45,62],$VB=[1,119],$VC=[1,120],$VD=[1,121],$VE=[5,26,31,34,35,37,38,41,42,45,62],$VF=[18,23,26,43],$VG=[5,26,31,34,37,38,41,42,45,62],$VH=[5,26,31,42,56,58]; var parser = {trace: function trace() { }, yy: {}, -symbols_: {"error":2,"Root":3,"Query":4,"EOF":5,"SelectQuery":6,"Unions":7,"SelectWithLimitQuery":8,"BasicSelectQuery":9,"Select":10,"OrderClause":11,"GroupClause":12,"LimitClause":13,"SelectClause":14,"WhereClause":15,"SELECT":16,"Fields":17,"FROM":18,"Table":19,"DISTINCT":20,"Joins":21,"Literal":22,"AS":23,"LEFT_PAREN":24,"List":25,"RIGHT_PAREN":26,"WINDOW":27,"WINDOW_FUNCTION":28,"Number":29,"Union":30,"UNION":31,"ALL":32,"Join":33,"JOIN":34,"ON":35,"Expression":36,"LEFT":37,"RIGHT":38,"INNER":39,"OUTER":40,"WHERE":41,"LIMIT":42,"SEPARATOR":43,"OFFSET":44,"ORDER":45,"BY":46,"OrderArgs":47,"OffsetClause":48,"OrderArg":49,"Value":50,"DIRECTION":51,"OffsetRows":52,"FetchClause":53,"ROW":54,"ROWS":55,"FETCH":56,"FIRST":57,"ONLY":58,"NEXT":59,"GroupBasicClause":60,"HavingClause":61,"GROUP":62,"ArgumentList":63,"HAVING":64,"MATH":65,"MATH_MULTI":66,"OPERATOR":67,"CONDITIONAL":68,"SUB_SELECT_OP":69,"SubSelectExpression":70,"SUB_SELECT_UNARY_OP":71,"String":72,"Function":73,"UserFunction":74,"Boolean":75,"Parameter":76,"NUMBER":77,"BOOLEAN":78,"PARAMETER":79,"STRING":80,"DBLSTRING":81,"LITERAL":82,"DOT":83,"FUNCTION":84,"AggregateArgumentList":85,"Field":86,"STAR":87,"$accept":0,"$end":1}, -terminals_: {2:"error",5:"EOF",16:"SELECT",18:"FROM",20:"DISTINCT",23:"AS",24:"LEFT_PAREN",26:"RIGHT_PAREN",27:"WINDOW",28:"WINDOW_FUNCTION",31:"UNION",32:"ALL",34:"JOIN",35:"ON",37:"LEFT",38:"RIGHT",39:"INNER",40:"OUTER",41:"WHERE",42:"LIMIT",43:"SEPARATOR",44:"OFFSET",45:"ORDER",46:"BY",51:"DIRECTION",54:"ROW",55:"ROWS",56:"FETCH",57:"FIRST",58:"ONLY",59:"NEXT",62:"GROUP",64:"HAVING",65:"MATH",66:"MATH_MULTI",67:"OPERATOR",68:"CONDITIONAL",69:"SUB_SELECT_OP",71:"SUB_SELECT_UNARY_OP",77:"NUMBER",78:"BOOLEAN",79:"PARAMETER",80:"STRING",81:"DBLSTRING",82:"LITERAL",83:"DOT",84:"FUNCTION",87:"STAR"}, -productions_: [0,[3,2],[4,1],[4,2],[6,1],[6,1],[9,1],[9,2],[9,2],[9,3],[8,2],[10,1],[10,2],[14,4],[14,5],[14,5],[14,6],[19,1],[19,2],[19,3],[19,3],[19,3],[19,4],[19,6],[7,1],[7,2],[30,2],[30,3],[21,1],[21,2],[33,4],[33,5],[33,5],[33,6],[33,6],[33,6],[33,6],[15,2],[13,2],[13,4],[13,4],[11,3],[11,4],[47,1],[47,3],[49,1],[49,2],[48,2],[48,3],[52,2],[52,2],[53,4],[53,4],[12,1],[12,2],[60,3],[61,2],[36,3],[36,3],[36,3],[36,3],[36,3],[36,5],[36,3],[36,2],[36,1],[70,3],[50,1],[50,1],[50,1],[50,1],[50,1],[50,1],[50,1],[25,1],[29,1],[75,1],[76,1],[72,1],[72,1],[22,1],[22,3],[73,4],[74,4],[85,1],[85,2],[63,1],[63,3],[17,1],[17,3],[86,1],[86,1],[86,3]], +symbols_: {"error":2,"Root":3,"Query":4,"EOF":5,"SelectQuery":6,"Unions":7,"SelectWithLimitQuery":8,"BasicSelectQuery":9,"Select":10,"OrderClause":11,"GroupClause":12,"LimitClause":13,"SelectClause":14,"WhereClause":15,"SELECT":16,"Fields":17,"FROM":18,"Table":19,"DISTINCT":20,"Joins":21,"Literal":22,"AS":23,"LEFT_PAREN":24,"List":25,"RIGHT_PAREN":26,"WINDOW":27,"WINDOW_FUNCTION":28,"Number":29,"Union":30,"UNION":31,"ALL":32,"Join":33,"JOIN":34,"ON":35,"Expression":36,"LEFT":37,"RIGHT":38,"INNER":39,"OUTER":40,"WHERE":41,"LIMIT":42,"SEPARATOR":43,"OFFSET":44,"ORDER":45,"BY":46,"OrderArgs":47,"OffsetClause":48,"OrderArg":49,"Value":50,"DIRECTION":51,"OffsetRows":52,"FetchClause":53,"ROW":54,"ROWS":55,"FETCH":56,"FIRST":57,"ONLY":58,"NEXT":59,"GroupBasicClause":60,"HavingClause":61,"GROUP":62,"ArgumentList":63,"HAVING":64,"MATH":65,"MATH_MULTI":66,"OPERATOR":67,"CONDITIONAL":68,"SUB_SELECT_OP":69,"SubSelectExpression":70,"SUB_SELECT_UNARY_OP":71,"Case":72,"CASE":73,"CaseWhen":74,"END":75,"CaseElse":76,"WHEN":77,"THEN":78,"CaseWhens":79,"ELSE":80,"String":81,"Function":82,"UserFunction":83,"Boolean":84,"Parameter":85,"NUMBER":86,"BOOLEAN":87,"PARAMETER":88,"STRING":89,"DBLSTRING":90,"LITERAL":91,"DOT":92,"FUNCTION":93,"AggregateArgumentList":94,"Field":95,"STAR":96,"$accept":0,"$end":1}, +terminals_: {2:"error",5:"EOF",16:"SELECT",18:"FROM",20:"DISTINCT",23:"AS",24:"LEFT_PAREN",26:"RIGHT_PAREN",27:"WINDOW",28:"WINDOW_FUNCTION",31:"UNION",32:"ALL",34:"JOIN",35:"ON",37:"LEFT",38:"RIGHT",39:"INNER",40:"OUTER",41:"WHERE",42:"LIMIT",43:"SEPARATOR",44:"OFFSET",45:"ORDER",46:"BY",51:"DIRECTION",54:"ROW",55:"ROWS",56:"FETCH",57:"FIRST",58:"ONLY",59:"NEXT",62:"GROUP",64:"HAVING",65:"MATH",66:"MATH_MULTI",67:"OPERATOR",68:"CONDITIONAL",69:"SUB_SELECT_OP",71:"SUB_SELECT_UNARY_OP",73:"CASE",75:"END",77:"WHEN",78:"THEN",80:"ELSE",86:"NUMBER",87:"BOOLEAN",88:"PARAMETER",89:"STRING",90:"DBLSTRING",91:"LITERAL",92:"DOT",93:"FUNCTION",96:"STAR"}, +productions_: [0,[3,2],[4,1],[4,2],[6,1],[6,1],[9,1],[9,2],[9,2],[9,3],[8,2],[10,1],[10,2],[14,4],[14,5],[14,5],[14,6],[19,1],[19,2],[19,3],[19,3],[19,3],[19,4],[19,6],[7,1],[7,2],[30,2],[30,3],[21,1],[21,2],[33,4],[33,5],[33,5],[33,6],[33,6],[33,6],[33,6],[15,2],[13,2],[13,4],[13,4],[11,3],[11,4],[47,1],[47,3],[49,1],[49,2],[48,2],[48,3],[52,2],[52,2],[53,4],[53,4],[12,1],[12,2],[60,3],[61,2],[36,3],[36,3],[36,3],[36,3],[36,3],[36,5],[36,3],[36,2],[36,1],[70,3],[72,3],[72,4],[74,4],[79,1],[76,2],[50,1],[50,1],[50,1],[50,1],[50,1],[50,1],[50,1],[25,1],[29,1],[84,1],[85,1],[81,1],[81,1],[22,1],[22,3],[82,4],[82,4],[83,4],[83,4],[94,1],[94,2],[63,1],[63,3],[17,1],[17,3],[95,1],[95,1],[95,3],[95,1],[95,3]], performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { /* this == yyval */ @@ -335,7 +335,7 @@ switch (yystate) { case 1: return this.$ = $$[$0-1]; break; -case 2: case 4: case 5: case 6: case 11: case 53: case 65: case 67: case 68: case 69: case 70: case 71: case 72: case 73: +case 2: case 4: case 5: case 6: case 11: case 53: case 65: case 72: case 73: case 74: case 75: case 76: case 77: case 78: this.$ = $$[$0]; break; case 3: @@ -408,7 +408,7 @@ break; case 23: this.$ = new yy.Table($$[$0-5], null, $$[$0-4], $$[$0-3], $$[$0-1]); break; -case 24: case 28: case 43: case 86: case 88: +case 24: case 28: case 43: case 70: case 93: case 95: this.$ = [$$[$0]]; break; case 25: @@ -462,7 +462,7 @@ break; case 42: this.$ = new yy.Order($$[$0-1], $$[$0]); break; -case 44: case 87: case 89: +case 44: case 94: case 96: this.$ = $$[$0-2].concat($$[$0]); break; case 45: @@ -498,54 +498,66 @@ break; case 64: this.$ = new yy.UnaryOp($$[$0-1], $$[$0]); break; -case 74: +case 67: +this.$ = new yy.Case($$[$0-1]); +break; +case 68: +this.$ = new yy.Case($$[$0-2], $$[$0-1]); +break; +case 69: +this.$ = new yy.CaseWhen($$[$0-2], $$[$0]); +break; +case 71: +this.$ = new yy.CaseElse($$[$0]); +break; +case 79: this.$ = new yy.ListValue($$[$0]); break; -case 75: +case 80: this.$ = new yy.NumberValue($$[$0]); break; -case 76: +case 81: this.$ = new yy.BooleanValue($$[$0]); break; -case 77: +case 82: this.$ = new yy.ParameterValue($$[$0]); break; -case 78: +case 83: this.$ = new yy.StringValue($$[$0], "'"); break; -case 79: +case 84: this.$ = new yy.StringValue($$[$0], '"'); break; -case 80: +case 85: this.$ = new yy.LiteralValue($$[$0]); break; -case 81: +case 86: this.$ = new yy.LiteralValue($$[$0-2], $$[$0]); break; -case 82: +case 87: case 88: this.$ = new yy.FunctionValue($$[$0-3], $$[$0-1]); break; -case 83: +case 89: case 90: this.$ = new yy.FunctionValue($$[$0-3], $$[$0-1], true); break; -case 84: +case 91: this.$ = new yy.ArgumentListValue($$[$0]); break; -case 85: +case 92: this.$ = new yy.ArgumentListValue($$[$0], true); break; -case 90: +case 97: this.$ = new yy.Star(); break; -case 91: +case 98: case 100: this.$ = new yy.Field($$[$0]); break; -case 92: +case 99: case 101: this.$ = new yy.Field($$[$0-2], $$[$0]); break; } }, -table: [{3:1,4:2,6:3,8:4,9:5,10:6,14:7,16:$V0},{1:[3]},{5:[1,9]},o($V1,[2,2],{7:10,13:11,30:12,31:$V2,42:$V3}),o($V4,[2,4]),o($V4,[2,5]),o($V4,[2,6],{11:15,12:16,60:18,45:$V5,62:[1,19]}),o($V6,[2,11],{15:20,41:[1,21]}),{17:22,20:[1,23],22:30,24:$V7,29:31,36:26,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf,86:24,87:$Vg},{1:[2,1]},o($V1,[2,3],{30:44,31:$V2}),o($V4,[2,10]),o($Vh,[2,24]),{29:45,77:$V9},{6:46,8:4,9:5,10:6,14:7,16:$V0,32:[1,47]},o($V4,[2,7]),o($V4,[2,8],{11:48,45:$V5}),{46:[1,49]},o($Vi,[2,53],{61:50,64:[1,51]}),{46:[1,52]},o($V6,[2,12]),{22:30,24:$V7,29:31,36:53,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},{18:[1,54],43:$Vj},{17:56,22:30,24:$V7,29:31,36:26,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf,86:24,87:$Vg},o($Vk,[2,88]),o($Vk,[2,90]),o($Vk,[2,91],{23:[1,57],65:$Vl,66:$Vm,67:$Vn,68:$Vo}),{22:30,24:$V7,29:31,36:62,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},o($Vp,[2,65],{69:[1,63]}),{24:[1,65],70:64},o($Vq,[2,67],{83:$Vr}),o($Vq,[2,68]),o($Vq,[2,69]),o($Vq,[2,70]),o($Vq,[2,71]),o($Vq,[2,72]),o($Vq,[2,73]),o([5,18,23,26,31,34,37,38,41,42,43,44,45,51,62,64,65,66,67,68,69,83],$Vs,{24:[1,67]}),o([5,18,23,26,31,34,37,38,41,42,43,44,45,51,54,55,62,64,65,66,67,68,69],[2,75]),o($Vq,[2,78]),o($Vq,[2,79]),{24:[1,68]},o($Vq,[2,76]),o($Vq,[2,77]),o($Vh,[2,25]),o($V4,[2,38],{43:[1,69],44:[1,70]}),o($Vh,[2,26],{13:11,42:$V3}),{6:71,8:4,9:5,10:6,14:7,16:$V0},o($V4,[2,9]),{22:30,29:31,47:72,49:73,50:74,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},o($Vi,[2,54]),{22:30,24:$V7,29:31,36:75,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},{22:30,24:$V7,29:31,36:77,50:28,63:76,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},o($V6,[2,37],{65:$Vl,66:$Vm,67:$Vn,68:$Vo}),{19:78,22:79,24:$Vt,82:$Vu},{22:30,24:$V7,29:31,36:26,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf,86:82,87:$Vg},{18:[1,83],43:$Vj},{22:84,82:$Vu},{22:30,24:$V7,29:31,36:85,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},{22:30,24:$V7,29:31,36:86,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},{22:30,24:$V7,29:31,36:87,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},{22:30,24:$V7,29:31,36:88,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},{26:[1,89],65:$Vl,66:$Vm,67:$Vn,68:$Vo},{24:[1,90],70:91},o($Vp,[2,64]),{4:92,6:3,8:4,9:5,10:6,14:7,16:$V0},{82:[1,93]},{20:$Vv,22:30,24:$V7,29:31,36:77,50:28,63:95,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf,85:94},{20:$Vv,22:30,24:$V7,29:31,36:77,50:28,63:95,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf,85:97},{29:98,77:$V9},{29:99,77:$V9},o($Vh,[2,27],{13:11,42:$V3}),o($V4,[2,41],{48:100,43:[1,101],44:[1,102]}),o($Vw,[2,43]),o($Vw,[2,45],{51:[1,103]}),o($Vi,[2,56],{65:$Vl,66:$Vm,67:$Vn,68:$Vo}),o([5,26,31,42,45,64],[2,55],{43:$Vx}),o($Vy,[2,86],{65:$Vl,66:$Vm,67:$Vn,68:$Vo}),o($Vz,[2,13],{21:105,33:106,34:$VA,37:$VB,38:$VC}),o($VD,[2,17],{22:110,23:[1,111],27:[1,112],82:$Vu,83:$Vr}),{4:114,6:3,8:4,9:5,10:6,14:7,16:$V0,22:30,24:$V7,25:113,29:31,36:77,50:28,63:115,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},o([5,18,23,26,27,31,34,35,37,38,41,42,43,45,62,82,83],$Vs),o($Vk,[2,89]),{19:116,22:79,24:$Vt,82:$Vu},o($Vk,[2,92],{83:$Vr}),o([5,18,23,26,31,34,37,38,41,42,43,45,62,64,65,67,68],[2,58],{66:$Vm}),o($Vp,[2,59]),o([5,18,23,26,31,34,37,38,41,42,43,45,62,64,67,68],[2,60],{65:$Vl,66:$Vm}),o([5,18,23,26,31,34,37,38,41,42,43,45,62,64,68],[2,61],{65:$Vl,66:$Vm,67:$Vn}),o($Vp,[2,57]),{4:92,6:3,8:4,9:5,10:6,14:7,16:$V0,22:30,24:$V7,25:117,29:31,36:77,50:28,63:115,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},o($Vp,[2,63]),{26:[1,118]},o([5,18,23,26,27,31,34,35,37,38,41,42,43,44,45,51,62,64,65,66,67,68,69,82,83],[2,81]),{26:[1,119]},{26:[2,84],43:$Vx},{22:30,24:$V7,29:31,36:77,50:28,63:120,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},{26:[1,121]},o($V4,[2,39]),o($V4,[2,40]),o($V4,[2,42]),{22:30,29:31,49:122,50:74,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},{29:124,52:123,77:$V9},o($Vw,[2,46]),{22:30,29:31,50:125,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},o($Vz,[2,15],{33:126,34:$VA,37:$VB,38:$VC}),o($VE,[2,28]),{19:127,22:79,24:$Vt,82:$Vu},{34:[1,128],39:[1,129],40:[1,130]},{34:[1,131],39:[1,132],40:[1,133]},o($VD,[2,18],{83:$Vr}),{22:134,82:$Vu},{28:[1,135]},{26:[1,136]},{26:[1,137]},{26:[2,74],43:$Vx},o($Vz,[2,14],{33:106,21:138,34:$VA,37:$VB,38:$VC}),{26:[1,139]},o($Vp,[2,66]),o($Vq,[2,83]),{26:[2,85],43:$Vx},o($Vq,[2,82]),o($Vw,[2,44]),o($V4,[2,47],{53:140,56:[1,141]}),{54:[1,142],55:[1,143]},o($Vy,[2,87]),o($VE,[2,29]),{35:[1,144]},{19:145,22:79,24:$Vt,82:$Vu},{34:[1,146]},{34:[1,147]},{19:148,22:79,24:$Vt,82:$Vu},{34:[1,149]},{34:[1,150]},o($VD,[2,19],{83:$Vr}),{24:[1,151]},o($VD,[2,20]),o($VD,[2,21],{22:152,82:$Vu}),o($Vz,[2,16],{33:126,34:$VA,37:$VB,38:$VC}),o($Vp,[2,62]),o($V4,[2,48]),{57:[1,153],59:[1,154]},o($VF,[2,49]),o($VF,[2,50]),{22:30,24:$V7,29:31,36:155,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},{35:[1,156]},{19:157,22:79,24:$Vt,82:$Vu},{19:158,22:79,24:$Vt,82:$Vu},{35:[1,159]},{19:160,22:79,24:$Vt,82:$Vu},{19:161,22:79,24:$Vt,82:$Vu},{29:162,77:$V9},o($VD,[2,22],{83:$Vr}),{29:124,52:163,77:$V9},{29:124,52:164,77:$V9},o($VE,[2,30],{65:$Vl,66:$Vm,67:$Vn,68:$Vo}),{22:30,24:$V7,29:31,36:165,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},{35:[1,166]},{35:[1,167]},{22:30,24:$V7,29:31,36:168,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},{35:[1,169]},{35:[1,170]},{26:[1,171]},{58:[1,172]},{58:[1,173]},o($VE,[2,31],{65:$Vl,66:$Vm,67:$Vn,68:$Vo}),{22:30,24:$V7,29:31,36:174,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},{22:30,24:$V7,29:31,36:175,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},o($VE,[2,32],{65:$Vl,66:$Vm,67:$Vn,68:$Vo}),{22:30,24:$V7,29:31,36:176,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},{22:30,24:$V7,29:31,36:177,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},o($VD,[2,23]),o($V4,[2,51]),o($V4,[2,52]),o($VE,[2,33],{65:$Vl,66:$Vm,67:$Vn,68:$Vo}),o($VE,[2,35],{65:$Vl,66:$Vm,67:$Vn,68:$Vo}),o($VE,[2,34],{65:$Vl,66:$Vm,67:$Vn,68:$Vo}),o($VE,[2,36],{65:$Vl,66:$Vm,67:$Vn,68:$Vo})], +table: [{3:1,4:2,6:3,8:4,9:5,10:6,14:7,16:$V0},{1:[3]},{5:[1,9]},o($V1,[2,2],{7:10,13:11,30:12,31:$V2,42:$V3}),o($V4,[2,4]),o($V4,[2,5]),o($V4,[2,6],{11:15,12:16,60:18,45:$V5,62:[1,19]}),o($V6,[2,11],{15:20,41:[1,21]}),{17:22,20:[1,23],22:32,24:$V7,29:33,36:26,50:29,71:$V8,72:27,73:$V9,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg,95:24,96:$Vh},{1:[2,1]},o($V1,[2,3],{30:46,31:$V2}),o($V4,[2,10]),o($Vi,[2,24]),{29:47,86:$Va},{6:48,8:4,9:5,10:6,14:7,16:$V0,32:[1,49]},o($V4,[2,7]),o($V4,[2,8],{11:50,45:$V5}),{46:[1,51]},o($Vj,[2,53],{61:52,64:[1,53]}),{46:[1,54]},o($V6,[2,12]),{22:32,24:$V7,29:33,36:55,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{18:[1,56],43:$Vk},{17:58,22:32,24:$V7,29:33,36:26,50:29,71:$V8,72:27,73:$V9,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg,95:24,96:$Vh},o($Vl,[2,95]),o($Vl,[2,97]),o($Vl,[2,98],{23:[1,59],65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($Vl,[2,100],{23:[1,64]}),{22:32,24:$V7,29:33,36:65,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($Vq,[2,65],{69:[1,66]}),{24:[1,68],70:67},{74:69,77:[1,70]},o($Vr,[2,72],{92:$Vs}),o($Vr,[2,73]),o($Vr,[2,74]),o($Vr,[2,75]),o($Vr,[2,76]),o($Vr,[2,77]),o($Vr,[2,78]),o([5,18,23,26,31,34,37,38,41,42,43,44,45,51,62,64,65,66,67,68,69,75,78,80,92],$Vt,{24:[1,72]}),o([5,18,23,26,31,34,37,38,41,42,43,44,45,51,54,55,62,64,65,66,67,68,69,75,78,80],[2,80]),o($Vr,[2,83]),o($Vr,[2,84]),{24:[1,73]},o($Vr,[2,81]),o($Vr,[2,82]),o($Vi,[2,25]),o($V4,[2,38],{43:[1,74],44:[1,75]}),o($Vi,[2,26],{13:11,42:$V3}),{6:76,8:4,9:5,10:6,14:7,16:$V0},o($V4,[2,9]),{22:32,29:33,47:77,49:78,50:79,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($Vj,[2,54]),{22:32,24:$V7,29:33,36:80,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:32,24:$V7,29:33,36:82,50:29,63:81,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($V6,[2,37],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),{19:83,22:84,24:$Vu,91:$Vv},{22:32,24:$V7,29:33,36:26,50:29,71:$V8,72:27,73:$V9,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg,95:87,96:$Vh},{18:[1,88],43:$Vk},{22:89,91:$Vv},{22:32,24:$V7,29:33,36:90,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:32,24:$V7,29:33,36:91,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:32,24:$V7,29:33,36:92,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:32,24:$V7,29:33,36:93,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:94,91:$Vv},{26:[1,95],65:$Vm,66:$Vn,67:$Vo,68:$Vp},{24:[1,96],70:97},o($Vq,[2,64]),{4:98,6:3,8:4,9:5,10:6,14:7,16:$V0},{75:[1,99],76:100,80:[1,101]},{22:32,24:$V7,29:33,36:102,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{91:[1,103]},{20:$Vw,22:32,24:$V7,29:33,36:82,50:29,63:106,71:$V8,72:105,73:$V9,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg,94:104},{20:$Vw,22:32,24:$V7,29:33,36:82,50:29,63:106,71:$V8,72:109,73:$V9,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg,94:108},{29:110,86:$Va},{29:111,86:$Va},o($Vi,[2,27],{13:11,42:$V3}),o($V4,[2,41],{48:112,43:[1,113],44:[1,114]}),o($Vx,[2,43]),o($Vx,[2,45],{51:[1,115]}),o($Vj,[2,56],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o([5,26,31,42,45,64],[2,55],{43:$Vy}),o($Vz,[2,93],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($VA,[2,13],{21:117,33:118,34:$VB,37:$VC,38:$VD}),o($VE,[2,17],{22:122,23:[1,123],27:[1,124],91:$Vv,92:$Vs}),{4:126,6:3,8:4,9:5,10:6,14:7,16:$V0,22:32,24:$V7,25:125,29:33,36:82,50:29,63:127,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o([5,18,23,26,27,31,34,35,37,38,41,42,43,45,62,91,92],$Vt),o($Vl,[2,96]),{19:128,22:84,24:$Vu,91:$Vv},o($Vl,[2,99],{92:$Vs}),o([5,18,23,26,31,34,37,38,41,42,43,45,62,64,65,67,68,75,78,80],[2,58],{66:$Vn}),o($Vq,[2,59]),o([5,18,23,26,31,34,37,38,41,42,43,45,62,64,67,68,75,78,80],[2,60],{65:$Vm,66:$Vn}),o([5,18,23,26,31,34,37,38,41,42,43,45,62,64,68,75,78,80],[2,61],{65:$Vm,66:$Vn,67:$Vo}),o($Vl,[2,101],{92:$Vs}),o($Vq,[2,57]),{4:98,6:3,8:4,9:5,10:6,14:7,16:$V0,22:32,24:$V7,25:129,29:33,36:82,50:29,63:127,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($Vq,[2,63]),{26:[1,130]},o($VF,[2,67]),{75:[1,131]},{22:32,24:$V7,29:33,36:132,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{65:$Vm,66:$Vn,67:$Vo,68:$Vp,78:[1,133]},o([5,18,23,26,27,31,34,35,37,38,41,42,43,44,45,51,62,64,65,66,67,68,69,75,78,80,91,92],[2,86]),{26:[1,134]},{26:[1,135]},{26:[2,91],43:$Vy},{22:32,24:$V7,29:33,36:82,50:29,63:136,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{26:[1,137]},{26:[1,138]},o($V4,[2,39]),o($V4,[2,40]),o($V4,[2,42]),{22:32,29:33,49:139,50:79,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{29:141,52:140,86:$Va},o($Vx,[2,46]),{22:32,29:33,50:142,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($VA,[2,15],{33:143,34:$VB,37:$VC,38:$VD}),o($VG,[2,28]),{19:144,22:84,24:$Vu,91:$Vv},{34:[1,145],39:[1,146],40:[1,147]},{34:[1,148],39:[1,149],40:[1,150]},o($VE,[2,18],{92:$Vs}),{22:151,91:$Vv},{28:[1,152]},{26:[1,153]},{26:[1,154]},{26:[2,79],43:$Vy},o($VA,[2,14],{33:118,21:155,34:$VB,37:$VC,38:$VD}),{26:[1,156]},o($Vq,[2,66]),o($VF,[2,68]),{65:$Vm,66:$Vn,67:$Vo,68:$Vp,75:[2,71]},{22:32,24:$V7,29:33,36:157,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($Vr,[2,89]),o($Vr,[2,90]),{26:[2,92],43:$Vy},o($Vr,[2,87]),o($Vr,[2,88]),o($Vx,[2,44]),o($V4,[2,47],{53:158,56:[1,159]}),{54:[1,160],55:[1,161]},o($Vz,[2,94]),o($VG,[2,29]),{35:[1,162]},{19:163,22:84,24:$Vu,91:$Vv},{34:[1,164]},{34:[1,165]},{19:166,22:84,24:$Vu,91:$Vv},{34:[1,167]},{34:[1,168]},o($VE,[2,19],{92:$Vs}),{24:[1,169]},o($VE,[2,20]),o($VE,[2,21],{22:170,91:$Vv}),o($VA,[2,16],{33:143,34:$VB,37:$VC,38:$VD}),o($Vq,[2,62]),o([75,80],[2,69],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($V4,[2,48]),{57:[1,171],59:[1,172]},o($VH,[2,49]),o($VH,[2,50]),{22:32,24:$V7,29:33,36:173,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{35:[1,174]},{19:175,22:84,24:$Vu,91:$Vv},{19:176,22:84,24:$Vu,91:$Vv},{35:[1,177]},{19:178,22:84,24:$Vu,91:$Vv},{19:179,22:84,24:$Vu,91:$Vv},{29:180,86:$Va},o($VE,[2,22],{92:$Vs}),{29:141,52:181,86:$Va},{29:141,52:182,86:$Va},o($VG,[2,30],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),{22:32,24:$V7,29:33,36:183,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{35:[1,184]},{35:[1,185]},{22:32,24:$V7,29:33,36:186,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{35:[1,187]},{35:[1,188]},{26:[1,189]},{58:[1,190]},{58:[1,191]},o($VG,[2,31],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),{22:32,24:$V7,29:33,36:192,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:32,24:$V7,29:33,36:193,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($VG,[2,32],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),{22:32,24:$V7,29:33,36:194,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:32,24:$V7,29:33,36:195,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($VE,[2,23]),o($V4,[2,51]),o($V4,[2,52]),o($VG,[2,33],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($VG,[2,35],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($VG,[2,34],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($VG,[2,36],{65:$Vm,66:$Vn,67:$Vo,68:$Vp})], defaultActions: {9:[2,1]}, parseError: function parseError(str, hash) { if (hash.recoverable) { @@ -720,7 +732,7 @@ if (typeof module !== 'undefined' && require.main === module) { var exports = this; // Generated by CoffeeScript 1.8.0 (function() { - var ArgumentListValue, Field, FunctionValue, Group, Having, Join, Limit, ListValue, LiteralValue, Offset, Op, Order, OrderArgument, ParameterValue, Select, Star, StringValue, SubSelect, Table, UnaryOp, Union, Where, indent; + var ArgumentListValue, Case, CaseElse, CaseWhen, Field, FunctionValue, Group, Having, Join, Limit, ListValue, LiteralValue, Offset, Op, Order, OrderArgument, ParameterValue, Select, Star, StringValue, SubSelect, Table, UnaryOp, Union, Where, indent; indent = function(str) { var line; @@ -986,6 +998,51 @@ if (typeof module !== 'undefined' && require.main === module) { })(); + exports.Case = Case = (function() { + function Case(whens, _else) { + this.whens = whens; + this["else"] = _else; + } + + Case.prototype.toString = function() { + if (this["else"]) { + return "CASE " + (this.whens.toString()) + " " + this["else"].toString + " END"; + } else { + return "CASE " + (this.whens.toString()) + " END"; + } + }; + + return Case; + + })(); + + exports.CaseWhen = CaseWhen = (function() { + function CaseWhen(whenCondition, resCondition) { + this.whenCondition = whenCondition; + this.resCondition = resCondition; + } + + CaseWhen.prototype.toString = function() { + return "WHEN " + this.whenCondition + " THEN @resCondition"; + }; + + return CaseWhen; + + })(); + + exports.CaseElse = CaseElse = (function() { + function CaseElse(elseCondition) { + this.elseCondition = elseCondition; + } + + CaseElse.prototype.toString = function() { + return "ELSE " + this.elseCondition; + }; + + return CaseElse; + + })(); + exports.Order = Order = (function() { function Order(orderings, offset) { this.orderings = orderings; diff --git a/lib/compiled_parser.js b/lib/compiled_parser.js index 0ba879f..27b0dd9 100644 --- a/lib/compiled_parser.js +++ b/lib/compiled_parser.js @@ -72,12 +72,12 @@ } */ var parser = (function(){ -var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,8],$V1=[5,26],$V2=[1,14],$V3=[1,13],$V4=[5,26,31,42],$V5=[1,17],$V6=[5,26,31,42,45,62],$V7=[1,27],$V8=[1,29],$V9=[1,38],$Va=[1,42],$Vb=[1,43],$Vc=[1,39],$Vd=[1,40],$Ve=[1,37],$Vf=[1,41],$Vg=[1,25],$Vh=[5,26,31],$Vi=[5,26,31,42,45],$Vj=[1,55],$Vk=[18,43],$Vl=[1,58],$Vm=[1,59],$Vn=[1,60],$Vo=[1,61],$Vp=[5,18,23,26,31,34,37,38,41,42,43,45,62,64,65,66,67,68],$Vq=[5,18,23,26,31,34,37,38,41,42,43,44,45,51,62,64,65,66,67,68,69],$Vr=[1,66],$Vs=[2,80],$Vt=[1,80],$Vu=[1,81],$Vv=[1,96],$Vw=[5,26,31,42,43,44],$Vx=[1,104],$Vy=[5,26,31,42,43,45,64],$Vz=[5,26,31,41,42,45,62],$VA=[1,107],$VB=[1,108],$VC=[1,109],$VD=[5,26,31,34,35,37,38,41,42,45,62],$VE=[5,26,31,34,37,38,41,42,45,62],$VF=[5,26,31,42,56,58]; +var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,8],$V1=[5,26],$V2=[1,14],$V3=[1,13],$V4=[5,26,31,42],$V5=[1,17],$V6=[5,26,31,42,45,62],$V7=[1,28],$V8=[1,30],$V9=[1,31],$Va=[1,40],$Vb=[1,44],$Vc=[1,45],$Vd=[1,41],$Ve=[1,42],$Vf=[1,39],$Vg=[1,43],$Vh=[1,25],$Vi=[5,26,31],$Vj=[5,26,31,42,45],$Vk=[1,57],$Vl=[18,43],$Vm=[1,60],$Vn=[1,61],$Vo=[1,62],$Vp=[1,63],$Vq=[5,18,23,26,31,34,37,38,41,42,43,45,62,64,65,66,67,68,75,78,80],$Vr=[5,18,23,26,31,34,37,38,41,42,43,44,45,51,62,64,65,66,67,68,69,75,78,80],$Vs=[1,71],$Vt=[2,85],$Vu=[1,85],$Vv=[1,86],$Vw=[1,107],$Vx=[5,26,31,42,43,44],$Vy=[1,116],$Vz=[5,26,31,42,43,45,64],$VA=[5,26,31,41,42,45,62],$VB=[1,119],$VC=[1,120],$VD=[1,121],$VE=[5,26,31,34,35,37,38,41,42,45,62],$VF=[18,23,26,43],$VG=[5,26,31,34,37,38,41,42,45,62],$VH=[5,26,31,42,56,58]; var parser = {trace: function trace() { }, yy: {}, -symbols_: {"error":2,"Root":3,"Query":4,"EOF":5,"SelectQuery":6,"Unions":7,"SelectWithLimitQuery":8,"BasicSelectQuery":9,"Select":10,"OrderClause":11,"GroupClause":12,"LimitClause":13,"SelectClause":14,"WhereClause":15,"SELECT":16,"Fields":17,"FROM":18,"Table":19,"DISTINCT":20,"Joins":21,"Literal":22,"AS":23,"LEFT_PAREN":24,"List":25,"RIGHT_PAREN":26,"WINDOW":27,"WINDOW_FUNCTION":28,"Number":29,"Union":30,"UNION":31,"ALL":32,"Join":33,"JOIN":34,"ON":35,"Expression":36,"LEFT":37,"RIGHT":38,"INNER":39,"OUTER":40,"WHERE":41,"LIMIT":42,"SEPARATOR":43,"OFFSET":44,"ORDER":45,"BY":46,"OrderArgs":47,"OffsetClause":48,"OrderArg":49,"Value":50,"DIRECTION":51,"OffsetRows":52,"FetchClause":53,"ROW":54,"ROWS":55,"FETCH":56,"FIRST":57,"ONLY":58,"NEXT":59,"GroupBasicClause":60,"HavingClause":61,"GROUP":62,"ArgumentList":63,"HAVING":64,"MATH":65,"MATH_MULTI":66,"OPERATOR":67,"CONDITIONAL":68,"SUB_SELECT_OP":69,"SubSelectExpression":70,"SUB_SELECT_UNARY_OP":71,"String":72,"Function":73,"UserFunction":74,"Boolean":75,"Parameter":76,"NUMBER":77,"BOOLEAN":78,"PARAMETER":79,"STRING":80,"DBLSTRING":81,"LITERAL":82,"DOT":83,"FUNCTION":84,"AggregateArgumentList":85,"Field":86,"STAR":87,"$accept":0,"$end":1}, -terminals_: {2:"error",5:"EOF",16:"SELECT",18:"FROM",20:"DISTINCT",23:"AS",24:"LEFT_PAREN",26:"RIGHT_PAREN",27:"WINDOW",28:"WINDOW_FUNCTION",31:"UNION",32:"ALL",34:"JOIN",35:"ON",37:"LEFT",38:"RIGHT",39:"INNER",40:"OUTER",41:"WHERE",42:"LIMIT",43:"SEPARATOR",44:"OFFSET",45:"ORDER",46:"BY",51:"DIRECTION",54:"ROW",55:"ROWS",56:"FETCH",57:"FIRST",58:"ONLY",59:"NEXT",62:"GROUP",64:"HAVING",65:"MATH",66:"MATH_MULTI",67:"OPERATOR",68:"CONDITIONAL",69:"SUB_SELECT_OP",71:"SUB_SELECT_UNARY_OP",77:"NUMBER",78:"BOOLEAN",79:"PARAMETER",80:"STRING",81:"DBLSTRING",82:"LITERAL",83:"DOT",84:"FUNCTION",87:"STAR"}, -productions_: [0,[3,2],[4,1],[4,2],[6,1],[6,1],[9,1],[9,2],[9,2],[9,3],[8,2],[10,1],[10,2],[14,4],[14,5],[14,5],[14,6],[19,1],[19,2],[19,3],[19,3],[19,3],[19,4],[19,6],[7,1],[7,2],[30,2],[30,3],[21,1],[21,2],[33,4],[33,5],[33,5],[33,6],[33,6],[33,6],[33,6],[15,2],[13,2],[13,4],[13,4],[11,3],[11,4],[47,1],[47,3],[49,1],[49,2],[48,2],[48,3],[52,2],[52,2],[53,4],[53,4],[12,1],[12,2],[60,3],[61,2],[36,3],[36,3],[36,3],[36,3],[36,3],[36,5],[36,3],[36,2],[36,1],[70,3],[50,1],[50,1],[50,1],[50,1],[50,1],[50,1],[50,1],[25,1],[29,1],[75,1],[76,1],[72,1],[72,1],[22,1],[22,3],[73,4],[74,4],[85,1],[85,2],[63,1],[63,3],[17,1],[17,3],[86,1],[86,1],[86,3]], +symbols_: {"error":2,"Root":3,"Query":4,"EOF":5,"SelectQuery":6,"Unions":7,"SelectWithLimitQuery":8,"BasicSelectQuery":9,"Select":10,"OrderClause":11,"GroupClause":12,"LimitClause":13,"SelectClause":14,"WhereClause":15,"SELECT":16,"Fields":17,"FROM":18,"Table":19,"DISTINCT":20,"Joins":21,"Literal":22,"AS":23,"LEFT_PAREN":24,"List":25,"RIGHT_PAREN":26,"WINDOW":27,"WINDOW_FUNCTION":28,"Number":29,"Union":30,"UNION":31,"ALL":32,"Join":33,"JOIN":34,"ON":35,"Expression":36,"LEFT":37,"RIGHT":38,"INNER":39,"OUTER":40,"WHERE":41,"LIMIT":42,"SEPARATOR":43,"OFFSET":44,"ORDER":45,"BY":46,"OrderArgs":47,"OffsetClause":48,"OrderArg":49,"Value":50,"DIRECTION":51,"OffsetRows":52,"FetchClause":53,"ROW":54,"ROWS":55,"FETCH":56,"FIRST":57,"ONLY":58,"NEXT":59,"GroupBasicClause":60,"HavingClause":61,"GROUP":62,"ArgumentList":63,"HAVING":64,"MATH":65,"MATH_MULTI":66,"OPERATOR":67,"CONDITIONAL":68,"SUB_SELECT_OP":69,"SubSelectExpression":70,"SUB_SELECT_UNARY_OP":71,"Case":72,"CASE":73,"CaseWhen":74,"END":75,"CaseElse":76,"WHEN":77,"THEN":78,"CaseWhens":79,"ELSE":80,"String":81,"Function":82,"UserFunction":83,"Boolean":84,"Parameter":85,"NUMBER":86,"BOOLEAN":87,"PARAMETER":88,"STRING":89,"DBLSTRING":90,"LITERAL":91,"DOT":92,"FUNCTION":93,"AggregateArgumentList":94,"Field":95,"STAR":96,"$accept":0,"$end":1}, +terminals_: {2:"error",5:"EOF",16:"SELECT",18:"FROM",20:"DISTINCT",23:"AS",24:"LEFT_PAREN",26:"RIGHT_PAREN",27:"WINDOW",28:"WINDOW_FUNCTION",31:"UNION",32:"ALL",34:"JOIN",35:"ON",37:"LEFT",38:"RIGHT",39:"INNER",40:"OUTER",41:"WHERE",42:"LIMIT",43:"SEPARATOR",44:"OFFSET",45:"ORDER",46:"BY",51:"DIRECTION",54:"ROW",55:"ROWS",56:"FETCH",57:"FIRST",58:"ONLY",59:"NEXT",62:"GROUP",64:"HAVING",65:"MATH",66:"MATH_MULTI",67:"OPERATOR",68:"CONDITIONAL",69:"SUB_SELECT_OP",71:"SUB_SELECT_UNARY_OP",73:"CASE",75:"END",77:"WHEN",78:"THEN",80:"ELSE",86:"NUMBER",87:"BOOLEAN",88:"PARAMETER",89:"STRING",90:"DBLSTRING",91:"LITERAL",92:"DOT",93:"FUNCTION",96:"STAR"}, +productions_: [0,[3,2],[4,1],[4,2],[6,1],[6,1],[9,1],[9,2],[9,2],[9,3],[8,2],[10,1],[10,2],[14,4],[14,5],[14,5],[14,6],[19,1],[19,2],[19,3],[19,3],[19,3],[19,4],[19,6],[7,1],[7,2],[30,2],[30,3],[21,1],[21,2],[33,4],[33,5],[33,5],[33,6],[33,6],[33,6],[33,6],[15,2],[13,2],[13,4],[13,4],[11,3],[11,4],[47,1],[47,3],[49,1],[49,2],[48,2],[48,3],[52,2],[52,2],[53,4],[53,4],[12,1],[12,2],[60,3],[61,2],[36,3],[36,3],[36,3],[36,3],[36,3],[36,5],[36,3],[36,2],[36,1],[70,3],[72,3],[72,4],[74,4],[79,1],[76,2],[50,1],[50,1],[50,1],[50,1],[50,1],[50,1],[50,1],[25,1],[29,1],[84,1],[85,1],[81,1],[81,1],[22,1],[22,3],[82,4],[82,4],[83,4],[83,4],[94,1],[94,2],[63,1],[63,3],[17,1],[17,3],[95,1],[95,1],[95,3],[95,1],[95,3]], performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { /* this == yyval */ @@ -86,7 +86,7 @@ switch (yystate) { case 1: return this.$ = $$[$0-1]; break; -case 2: case 4: case 5: case 6: case 11: case 53: case 65: case 67: case 68: case 69: case 70: case 71: case 72: case 73: +case 2: case 4: case 5: case 6: case 11: case 53: case 65: case 72: case 73: case 74: case 75: case 76: case 77: case 78: this.$ = $$[$0]; break; case 3: @@ -159,7 +159,7 @@ break; case 23: this.$ = new yy.Table($$[$0-5], null, $$[$0-4], $$[$0-3], $$[$0-1]); break; -case 24: case 28: case 43: case 86: case 88: +case 24: case 28: case 43: case 70: case 93: case 95: this.$ = [$$[$0]]; break; case 25: @@ -213,7 +213,7 @@ break; case 42: this.$ = new yy.Order($$[$0-1], $$[$0]); break; -case 44: case 87: case 89: +case 44: case 94: case 96: this.$ = $$[$0-2].concat($$[$0]); break; case 45: @@ -249,54 +249,66 @@ break; case 64: this.$ = new yy.UnaryOp($$[$0-1], $$[$0]); break; -case 74: +case 67: +this.$ = new yy.Case($$[$0-1]); +break; +case 68: +this.$ = new yy.Case($$[$0-2], $$[$0-1]); +break; +case 69: +this.$ = new yy.CaseWhen($$[$0-2], $$[$0]); +break; +case 71: +this.$ = new yy.CaseElse($$[$0]); +break; +case 79: this.$ = new yy.ListValue($$[$0]); break; -case 75: +case 80: this.$ = new yy.NumberValue($$[$0]); break; -case 76: +case 81: this.$ = new yy.BooleanValue($$[$0]); break; -case 77: +case 82: this.$ = new yy.ParameterValue($$[$0]); break; -case 78: +case 83: this.$ = new yy.StringValue($$[$0], "'"); break; -case 79: +case 84: this.$ = new yy.StringValue($$[$0], '"'); break; -case 80: +case 85: this.$ = new yy.LiteralValue($$[$0]); break; -case 81: +case 86: this.$ = new yy.LiteralValue($$[$0-2], $$[$0]); break; -case 82: +case 87: case 88: this.$ = new yy.FunctionValue($$[$0-3], $$[$0-1]); break; -case 83: +case 89: case 90: this.$ = new yy.FunctionValue($$[$0-3], $$[$0-1], true); break; -case 84: +case 91: this.$ = new yy.ArgumentListValue($$[$0]); break; -case 85: +case 92: this.$ = new yy.ArgumentListValue($$[$0], true); break; -case 90: +case 97: this.$ = new yy.Star(); break; -case 91: +case 98: case 100: this.$ = new yy.Field($$[$0]); break; -case 92: +case 99: case 101: this.$ = new yy.Field($$[$0-2], $$[$0]); break; } }, -table: [{3:1,4:2,6:3,8:4,9:5,10:6,14:7,16:$V0},{1:[3]},{5:[1,9]},o($V1,[2,2],{7:10,13:11,30:12,31:$V2,42:$V3}),o($V4,[2,4]),o($V4,[2,5]),o($V4,[2,6],{11:15,12:16,60:18,45:$V5,62:[1,19]}),o($V6,[2,11],{15:20,41:[1,21]}),{17:22,20:[1,23],22:30,24:$V7,29:31,36:26,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf,86:24,87:$Vg},{1:[2,1]},o($V1,[2,3],{30:44,31:$V2}),o($V4,[2,10]),o($Vh,[2,24]),{29:45,77:$V9},{6:46,8:4,9:5,10:6,14:7,16:$V0,32:[1,47]},o($V4,[2,7]),o($V4,[2,8],{11:48,45:$V5}),{46:[1,49]},o($Vi,[2,53],{61:50,64:[1,51]}),{46:[1,52]},o($V6,[2,12]),{22:30,24:$V7,29:31,36:53,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},{18:[1,54],43:$Vj},{17:56,22:30,24:$V7,29:31,36:26,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf,86:24,87:$Vg},o($Vk,[2,88]),o($Vk,[2,90]),o($Vk,[2,91],{23:[1,57],65:$Vl,66:$Vm,67:$Vn,68:$Vo}),{22:30,24:$V7,29:31,36:62,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},o($Vp,[2,65],{69:[1,63]}),{24:[1,65],70:64},o($Vq,[2,67],{83:$Vr}),o($Vq,[2,68]),o($Vq,[2,69]),o($Vq,[2,70]),o($Vq,[2,71]),o($Vq,[2,72]),o($Vq,[2,73]),o([5,18,23,26,31,34,37,38,41,42,43,44,45,51,62,64,65,66,67,68,69,83],$Vs,{24:[1,67]}),o([5,18,23,26,31,34,37,38,41,42,43,44,45,51,54,55,62,64,65,66,67,68,69],[2,75]),o($Vq,[2,78]),o($Vq,[2,79]),{24:[1,68]},o($Vq,[2,76]),o($Vq,[2,77]),o($Vh,[2,25]),o($V4,[2,38],{43:[1,69],44:[1,70]}),o($Vh,[2,26],{13:11,42:$V3}),{6:71,8:4,9:5,10:6,14:7,16:$V0},o($V4,[2,9]),{22:30,29:31,47:72,49:73,50:74,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},o($Vi,[2,54]),{22:30,24:$V7,29:31,36:75,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},{22:30,24:$V7,29:31,36:77,50:28,63:76,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},o($V6,[2,37],{65:$Vl,66:$Vm,67:$Vn,68:$Vo}),{19:78,22:79,24:$Vt,82:$Vu},{22:30,24:$V7,29:31,36:26,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf,86:82,87:$Vg},{18:[1,83],43:$Vj},{22:84,82:$Vu},{22:30,24:$V7,29:31,36:85,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},{22:30,24:$V7,29:31,36:86,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},{22:30,24:$V7,29:31,36:87,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},{22:30,24:$V7,29:31,36:88,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},{26:[1,89],65:$Vl,66:$Vm,67:$Vn,68:$Vo},{24:[1,90],70:91},o($Vp,[2,64]),{4:92,6:3,8:4,9:5,10:6,14:7,16:$V0},{82:[1,93]},{20:$Vv,22:30,24:$V7,29:31,36:77,50:28,63:95,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf,85:94},{20:$Vv,22:30,24:$V7,29:31,36:77,50:28,63:95,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf,85:97},{29:98,77:$V9},{29:99,77:$V9},o($Vh,[2,27],{13:11,42:$V3}),o($V4,[2,41],{48:100,43:[1,101],44:[1,102]}),o($Vw,[2,43]),o($Vw,[2,45],{51:[1,103]}),o($Vi,[2,56],{65:$Vl,66:$Vm,67:$Vn,68:$Vo}),o([5,26,31,42,45,64],[2,55],{43:$Vx}),o($Vy,[2,86],{65:$Vl,66:$Vm,67:$Vn,68:$Vo}),o($Vz,[2,13],{21:105,33:106,34:$VA,37:$VB,38:$VC}),o($VD,[2,17],{22:110,23:[1,111],27:[1,112],82:$Vu,83:$Vr}),{4:114,6:3,8:4,9:5,10:6,14:7,16:$V0,22:30,24:$V7,25:113,29:31,36:77,50:28,63:115,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},o([5,18,23,26,27,31,34,35,37,38,41,42,43,45,62,82,83],$Vs),o($Vk,[2,89]),{19:116,22:79,24:$Vt,82:$Vu},o($Vk,[2,92],{83:$Vr}),o([5,18,23,26,31,34,37,38,41,42,43,45,62,64,65,67,68],[2,58],{66:$Vm}),o($Vp,[2,59]),o([5,18,23,26,31,34,37,38,41,42,43,45,62,64,67,68],[2,60],{65:$Vl,66:$Vm}),o([5,18,23,26,31,34,37,38,41,42,43,45,62,64,68],[2,61],{65:$Vl,66:$Vm,67:$Vn}),o($Vp,[2,57]),{4:92,6:3,8:4,9:5,10:6,14:7,16:$V0,22:30,24:$V7,25:117,29:31,36:77,50:28,63:115,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},o($Vp,[2,63]),{26:[1,118]},o([5,18,23,26,27,31,34,35,37,38,41,42,43,44,45,51,62,64,65,66,67,68,69,82,83],[2,81]),{26:[1,119]},{26:[2,84],43:$Vx},{22:30,24:$V7,29:31,36:77,50:28,63:120,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},{26:[1,121]},o($V4,[2,39]),o($V4,[2,40]),o($V4,[2,42]),{22:30,29:31,49:122,50:74,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},{29:124,52:123,77:$V9},o($Vw,[2,46]),{22:30,29:31,50:125,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},o($Vz,[2,15],{33:126,34:$VA,37:$VB,38:$VC}),o($VE,[2,28]),{19:127,22:79,24:$Vt,82:$Vu},{34:[1,128],39:[1,129],40:[1,130]},{34:[1,131],39:[1,132],40:[1,133]},o($VD,[2,18],{83:$Vr}),{22:134,82:$Vu},{28:[1,135]},{26:[1,136]},{26:[1,137]},{26:[2,74],43:$Vx},o($Vz,[2,14],{33:106,21:138,34:$VA,37:$VB,38:$VC}),{26:[1,139]},o($Vp,[2,66]),o($Vq,[2,83]),{26:[2,85],43:$Vx},o($Vq,[2,82]),o($Vw,[2,44]),o($V4,[2,47],{53:140,56:[1,141]}),{54:[1,142],55:[1,143]},o($Vy,[2,87]),o($VE,[2,29]),{35:[1,144]},{19:145,22:79,24:$Vt,82:$Vu},{34:[1,146]},{34:[1,147]},{19:148,22:79,24:$Vt,82:$Vu},{34:[1,149]},{34:[1,150]},o($VD,[2,19],{83:$Vr}),{24:[1,151]},o($VD,[2,20]),o($VD,[2,21],{22:152,82:$Vu}),o($Vz,[2,16],{33:126,34:$VA,37:$VB,38:$VC}),o($Vp,[2,62]),o($V4,[2,48]),{57:[1,153],59:[1,154]},o($VF,[2,49]),o($VF,[2,50]),{22:30,24:$V7,29:31,36:155,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},{35:[1,156]},{19:157,22:79,24:$Vt,82:$Vu},{19:158,22:79,24:$Vt,82:$Vu},{35:[1,159]},{19:160,22:79,24:$Vt,82:$Vu},{19:161,22:79,24:$Vt,82:$Vu},{29:162,77:$V9},o($VD,[2,22],{83:$Vr}),{29:124,52:163,77:$V9},{29:124,52:164,77:$V9},o($VE,[2,30],{65:$Vl,66:$Vm,67:$Vn,68:$Vo}),{22:30,24:$V7,29:31,36:165,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},{35:[1,166]},{35:[1,167]},{22:30,24:$V7,29:31,36:168,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},{35:[1,169]},{35:[1,170]},{26:[1,171]},{58:[1,172]},{58:[1,173]},o($VE,[2,31],{65:$Vl,66:$Vm,67:$Vn,68:$Vo}),{22:30,24:$V7,29:31,36:174,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},{22:30,24:$V7,29:31,36:175,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},o($VE,[2,32],{65:$Vl,66:$Vm,67:$Vn,68:$Vo}),{22:30,24:$V7,29:31,36:176,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},{22:30,24:$V7,29:31,36:177,50:28,71:$V8,72:32,73:33,74:34,75:35,76:36,77:$V9,78:$Va,79:$Vb,80:$Vc,81:$Vd,82:$Ve,84:$Vf},o($VD,[2,23]),o($V4,[2,51]),o($V4,[2,52]),o($VE,[2,33],{65:$Vl,66:$Vm,67:$Vn,68:$Vo}),o($VE,[2,35],{65:$Vl,66:$Vm,67:$Vn,68:$Vo}),o($VE,[2,34],{65:$Vl,66:$Vm,67:$Vn,68:$Vo}),o($VE,[2,36],{65:$Vl,66:$Vm,67:$Vn,68:$Vo})], +table: [{3:1,4:2,6:3,8:4,9:5,10:6,14:7,16:$V0},{1:[3]},{5:[1,9]},o($V1,[2,2],{7:10,13:11,30:12,31:$V2,42:$V3}),o($V4,[2,4]),o($V4,[2,5]),o($V4,[2,6],{11:15,12:16,60:18,45:$V5,62:[1,19]}),o($V6,[2,11],{15:20,41:[1,21]}),{17:22,20:[1,23],22:32,24:$V7,29:33,36:26,50:29,71:$V8,72:27,73:$V9,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg,95:24,96:$Vh},{1:[2,1]},o($V1,[2,3],{30:46,31:$V2}),o($V4,[2,10]),o($Vi,[2,24]),{29:47,86:$Va},{6:48,8:4,9:5,10:6,14:7,16:$V0,32:[1,49]},o($V4,[2,7]),o($V4,[2,8],{11:50,45:$V5}),{46:[1,51]},o($Vj,[2,53],{61:52,64:[1,53]}),{46:[1,54]},o($V6,[2,12]),{22:32,24:$V7,29:33,36:55,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{18:[1,56],43:$Vk},{17:58,22:32,24:$V7,29:33,36:26,50:29,71:$V8,72:27,73:$V9,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg,95:24,96:$Vh},o($Vl,[2,95]),o($Vl,[2,97]),o($Vl,[2,98],{23:[1,59],65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($Vl,[2,100],{23:[1,64]}),{22:32,24:$V7,29:33,36:65,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($Vq,[2,65],{69:[1,66]}),{24:[1,68],70:67},{74:69,77:[1,70]},o($Vr,[2,72],{92:$Vs}),o($Vr,[2,73]),o($Vr,[2,74]),o($Vr,[2,75]),o($Vr,[2,76]),o($Vr,[2,77]),o($Vr,[2,78]),o([5,18,23,26,31,34,37,38,41,42,43,44,45,51,62,64,65,66,67,68,69,75,78,80,92],$Vt,{24:[1,72]}),o([5,18,23,26,31,34,37,38,41,42,43,44,45,51,54,55,62,64,65,66,67,68,69,75,78,80],[2,80]),o($Vr,[2,83]),o($Vr,[2,84]),{24:[1,73]},o($Vr,[2,81]),o($Vr,[2,82]),o($Vi,[2,25]),o($V4,[2,38],{43:[1,74],44:[1,75]}),o($Vi,[2,26],{13:11,42:$V3}),{6:76,8:4,9:5,10:6,14:7,16:$V0},o($V4,[2,9]),{22:32,29:33,47:77,49:78,50:79,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($Vj,[2,54]),{22:32,24:$V7,29:33,36:80,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:32,24:$V7,29:33,36:82,50:29,63:81,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($V6,[2,37],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),{19:83,22:84,24:$Vu,91:$Vv},{22:32,24:$V7,29:33,36:26,50:29,71:$V8,72:27,73:$V9,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg,95:87,96:$Vh},{18:[1,88],43:$Vk},{22:89,91:$Vv},{22:32,24:$V7,29:33,36:90,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:32,24:$V7,29:33,36:91,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:32,24:$V7,29:33,36:92,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:32,24:$V7,29:33,36:93,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:94,91:$Vv},{26:[1,95],65:$Vm,66:$Vn,67:$Vo,68:$Vp},{24:[1,96],70:97},o($Vq,[2,64]),{4:98,6:3,8:4,9:5,10:6,14:7,16:$V0},{75:[1,99],76:100,80:[1,101]},{22:32,24:$V7,29:33,36:102,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{91:[1,103]},{20:$Vw,22:32,24:$V7,29:33,36:82,50:29,63:106,71:$V8,72:105,73:$V9,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg,94:104},{20:$Vw,22:32,24:$V7,29:33,36:82,50:29,63:106,71:$V8,72:109,73:$V9,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg,94:108},{29:110,86:$Va},{29:111,86:$Va},o($Vi,[2,27],{13:11,42:$V3}),o($V4,[2,41],{48:112,43:[1,113],44:[1,114]}),o($Vx,[2,43]),o($Vx,[2,45],{51:[1,115]}),o($Vj,[2,56],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o([5,26,31,42,45,64],[2,55],{43:$Vy}),o($Vz,[2,93],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($VA,[2,13],{21:117,33:118,34:$VB,37:$VC,38:$VD}),o($VE,[2,17],{22:122,23:[1,123],27:[1,124],91:$Vv,92:$Vs}),{4:126,6:3,8:4,9:5,10:6,14:7,16:$V0,22:32,24:$V7,25:125,29:33,36:82,50:29,63:127,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o([5,18,23,26,27,31,34,35,37,38,41,42,43,45,62,91,92],$Vt),o($Vl,[2,96]),{19:128,22:84,24:$Vu,91:$Vv},o($Vl,[2,99],{92:$Vs}),o([5,18,23,26,31,34,37,38,41,42,43,45,62,64,65,67,68,75,78,80],[2,58],{66:$Vn}),o($Vq,[2,59]),o([5,18,23,26,31,34,37,38,41,42,43,45,62,64,67,68,75,78,80],[2,60],{65:$Vm,66:$Vn}),o([5,18,23,26,31,34,37,38,41,42,43,45,62,64,68,75,78,80],[2,61],{65:$Vm,66:$Vn,67:$Vo}),o($Vl,[2,101],{92:$Vs}),o($Vq,[2,57]),{4:98,6:3,8:4,9:5,10:6,14:7,16:$V0,22:32,24:$V7,25:129,29:33,36:82,50:29,63:127,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($Vq,[2,63]),{26:[1,130]},o($VF,[2,67]),{75:[1,131]},{22:32,24:$V7,29:33,36:132,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{65:$Vm,66:$Vn,67:$Vo,68:$Vp,78:[1,133]},o([5,18,23,26,27,31,34,35,37,38,41,42,43,44,45,51,62,64,65,66,67,68,69,75,78,80,91,92],[2,86]),{26:[1,134]},{26:[1,135]},{26:[2,91],43:$Vy},{22:32,24:$V7,29:33,36:82,50:29,63:136,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{26:[1,137]},{26:[1,138]},o($V4,[2,39]),o($V4,[2,40]),o($V4,[2,42]),{22:32,29:33,49:139,50:79,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{29:141,52:140,86:$Va},o($Vx,[2,46]),{22:32,29:33,50:142,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($VA,[2,15],{33:143,34:$VB,37:$VC,38:$VD}),o($VG,[2,28]),{19:144,22:84,24:$Vu,91:$Vv},{34:[1,145],39:[1,146],40:[1,147]},{34:[1,148],39:[1,149],40:[1,150]},o($VE,[2,18],{92:$Vs}),{22:151,91:$Vv},{28:[1,152]},{26:[1,153]},{26:[1,154]},{26:[2,79],43:$Vy},o($VA,[2,14],{33:118,21:155,34:$VB,37:$VC,38:$VD}),{26:[1,156]},o($Vq,[2,66]),o($VF,[2,68]),{65:$Vm,66:$Vn,67:$Vo,68:$Vp,75:[2,71]},{22:32,24:$V7,29:33,36:157,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($Vr,[2,89]),o($Vr,[2,90]),{26:[2,92],43:$Vy},o($Vr,[2,87]),o($Vr,[2,88]),o($Vx,[2,44]),o($V4,[2,47],{53:158,56:[1,159]}),{54:[1,160],55:[1,161]},o($Vz,[2,94]),o($VG,[2,29]),{35:[1,162]},{19:163,22:84,24:$Vu,91:$Vv},{34:[1,164]},{34:[1,165]},{19:166,22:84,24:$Vu,91:$Vv},{34:[1,167]},{34:[1,168]},o($VE,[2,19],{92:$Vs}),{24:[1,169]},o($VE,[2,20]),o($VE,[2,21],{22:170,91:$Vv}),o($VA,[2,16],{33:143,34:$VB,37:$VC,38:$VD}),o($Vq,[2,62]),o([75,80],[2,69],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($V4,[2,48]),{57:[1,171],59:[1,172]},o($VH,[2,49]),o($VH,[2,50]),{22:32,24:$V7,29:33,36:173,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{35:[1,174]},{19:175,22:84,24:$Vu,91:$Vv},{19:176,22:84,24:$Vu,91:$Vv},{35:[1,177]},{19:178,22:84,24:$Vu,91:$Vv},{19:179,22:84,24:$Vu,91:$Vv},{29:180,86:$Va},o($VE,[2,22],{92:$Vs}),{29:141,52:181,86:$Va},{29:141,52:182,86:$Va},o($VG,[2,30],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),{22:32,24:$V7,29:33,36:183,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{35:[1,184]},{35:[1,185]},{22:32,24:$V7,29:33,36:186,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{35:[1,187]},{35:[1,188]},{26:[1,189]},{58:[1,190]},{58:[1,191]},o($VG,[2,31],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),{22:32,24:$V7,29:33,36:192,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:32,24:$V7,29:33,36:193,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($VG,[2,32],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),{22:32,24:$V7,29:33,36:194,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:32,24:$V7,29:33,36:195,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($VE,[2,23]),o($V4,[2,51]),o($V4,[2,52]),o($VG,[2,33],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($VG,[2,35],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($VG,[2,34],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($VG,[2,36],{65:$Vm,66:$Vn,67:$Vo,68:$Vp})], defaultActions: {9:[2,1]}, parseError: function parseError(str, hash) { if (hash.recoverable) { diff --git a/lib/grammar.js b/lib/grammar.js index 7dac4dc..18c1b13 100644 --- a/lib/grammar.js +++ b/lib/grammar.js @@ -213,6 +213,30 @@ return new SubSelect($2); }) ], + Case: [ + o('CASE CaseWhen END', function() { + return new Case($2); + }), o('CASE CaseWhen CaseElse END', function() { + return new Case($2, $3); + }) + ], + CaseWhen: [ + o('WHEN Expression THEN Expression', function() { + return new CaseWhen($2, $4); + }) + ], + CaseWhens: [ + o('CaseWhen', function() { + return [$1]; + }, o('CaseWhens SEPARATOR CaseWhen', function() { + return $1.concat($3); + })) + ], + CaseElse: [ + o('ELSE Expression', function() { + return new CaseElse($2); + }) + ], Value: [o('Literal'), o('Number'), o('String'), o('Function'), o('UserFunction'), o('Boolean'), o('Parameter')], List: [ o('ArgumentList', function() { @@ -251,11 +275,15 @@ Function: [ o("FUNCTION LEFT_PAREN AggregateArgumentList RIGHT_PAREN", function() { return new FunctionValue($1, $3); + }), o("FUNCTION LEFT_PAREN Case RIGHT_PAREN", function() { + return new FunctionValue($1, $3); }) ], UserFunction: [ o("LITERAL LEFT_PAREN AggregateArgumentList RIGHT_PAREN", function() { return new FunctionValue($1, $3, true); + }), o("LITERAL LEFT_PAREN Case RIGHT_PAREN", function() { + return new FunctionValue($1, $3, true); }) ], AggregateArgumentList: [ @@ -286,6 +314,10 @@ return new Field($1); }), o('Expression AS Literal', function() { return new Field($1, $3); + }), o('Case', function() { + return new Field($1); + }), o('Case AS Literal', function() { + return new Field($1, $3); }) ] }; diff --git a/lib/lexer.js b/lib/lexer.js index b9c9276..9fcad97 100644 --- a/lib/lexer.js +++ b/lib/lexer.js @@ -100,7 +100,7 @@ }; Lexer.prototype.keywordToken = function() { - return this.tokenizeFromWord('SELECT') || this.tokenizeFromWord('DISTINCT') || this.tokenizeFromWord('FROM') || this.tokenizeFromWord('WHERE') || this.tokenizeFromWord('GROUP') || this.tokenizeFromWord('ORDER') || this.tokenizeFromWord('BY') || this.tokenizeFromWord('HAVING') || this.tokenizeFromWord('LIMIT') || this.tokenizeFromWord('JOIN') || this.tokenizeFromWord('LEFT') || this.tokenizeFromWord('RIGHT') || this.tokenizeFromWord('INNER') || this.tokenizeFromWord('OUTER') || this.tokenizeFromWord('ON') || this.tokenizeFromWord('AS') || this.tokenizeFromWord('UNION') || this.tokenizeFromWord('ALL') || this.tokenizeFromWord('LIMIT') || this.tokenizeFromWord('OFFSET') || this.tokenizeFromWord('FETCH') || this.tokenizeFromWord('ROW') || this.tokenizeFromWord('ROWS') || this.tokenizeFromWord('ONLY') || this.tokenizeFromWord('NEXT') || this.tokenizeFromWord('FIRST'); + return this.tokenizeFromWord('SELECT') || this.tokenizeFromWord('DISTINCT') || this.tokenizeFromWord('FROM') || this.tokenizeFromWord('WHERE') || this.tokenizeFromWord('GROUP') || this.tokenizeFromWord('ORDER') || this.tokenizeFromWord('BY') || this.tokenizeFromWord('HAVING') || this.tokenizeFromWord('LIMIT') || this.tokenizeFromWord('JOIN') || this.tokenizeFromWord('LEFT') || this.tokenizeFromWord('RIGHT') || this.tokenizeFromWord('INNER') || this.tokenizeFromWord('OUTER') || this.tokenizeFromWord('ON') || this.tokenizeFromWord('AS') || this.tokenizeFromWord('CASE') || this.tokenizeFromWord('WHEN') || this.tokenizeFromWord('THEN') || this.tokenizeFromWord('ELSE') || this.tokenizeFromWord('END') || this.tokenizeFromWord('UNION') || this.tokenizeFromWord('ALL') || this.tokenizeFromWord('LIMIT') || this.tokenizeFromWord('OFFSET') || this.tokenizeFromWord('FETCH') || this.tokenizeFromWord('ROW') || this.tokenizeFromWord('ROWS') || this.tokenizeFromWord('ONLY') || this.tokenizeFromWord('NEXT') || this.tokenizeFromWord('FIRST'); }; Lexer.prototype.dotToken = function() { diff --git a/lib/nodes.js b/lib/nodes.js index 89f0508..17bb7b7 100644 --- a/lib/nodes.js +++ b/lib/nodes.js @@ -1,6 +1,6 @@ // Generated by CoffeeScript 1.8.0 (function() { - var ArgumentListValue, Field, FunctionValue, Group, Having, Join, Limit, ListValue, LiteralValue, Offset, Op, Order, OrderArgument, ParameterValue, Select, Star, StringValue, SubSelect, Table, UnaryOp, Union, Where, indent; + var ArgumentListValue, Case, CaseElse, CaseWhen, Field, FunctionValue, Group, Having, Join, Limit, ListValue, LiteralValue, Offset, Op, Order, OrderArgument, ParameterValue, Select, Star, StringValue, SubSelect, Table, UnaryOp, Union, Where, indent; indent = function(str) { var line; @@ -266,6 +266,51 @@ })(); + exports.Case = Case = (function() { + function Case(whens, _else) { + this.whens = whens; + this["else"] = _else; + } + + Case.prototype.toString = function() { + if (this["else"]) { + return "CASE " + (this.whens.toString()) + " " + this["else"].toString + " END"; + } else { + return "CASE " + (this.whens.toString()) + " END"; + } + }; + + return Case; + + })(); + + exports.CaseWhen = CaseWhen = (function() { + function CaseWhen(whenCondition, resCondition) { + this.whenCondition = whenCondition; + this.resCondition = resCondition; + } + + CaseWhen.prototype.toString = function() { + return "WHEN " + this.whenCondition + " THEN @resCondition"; + }; + + return CaseWhen; + + })(); + + exports.CaseElse = CaseElse = (function() { + function CaseElse(elseCondition) { + this.elseCondition = elseCondition; + } + + CaseElse.prototype.toString = function() { + return "ELSE " + this.elseCondition; + }; + + return CaseElse; + + })(); + exports.Order = Order = (function() { function Order(orderings, offset) { this.orderings = orderings; diff --git a/src/grammar.coffee b/src/grammar.coffee index b4d75bb..029e35b 100644 --- a/src/grammar.coffee +++ b/src/grammar.coffee @@ -138,7 +138,6 @@ grammar = o 'HAVING Expression', -> new Having($2) ] - Expression: [ o 'LEFT_PAREN Expression RIGHT_PAREN', -> $2 o 'Expression MATH Expression', -> new Op($2, $1, $3) @@ -155,6 +154,24 @@ grammar = o 'LEFT_PAREN Query RIGHT_PAREN', -> new SubSelect($2) ] + Case: [ + o 'CASE CaseWhen END', -> new Case($2) + o 'CASE CaseWhen CaseElse END', -> new Case($2, $3) + ] + + CaseWhen: [ + o 'WHEN Expression THEN Expression', -> new CaseWhen($2, $4) + ] + + CaseWhens: [ + o 'CaseWhen', -> [$1], + o 'CaseWhens SEPARATOR CaseWhen', -> $1.concat($3) + ] + + CaseElse: [ + o 'ELSE Expression', -> new CaseElse($2) + ] + Value: [ o 'Literal' o 'Number' @@ -193,10 +210,12 @@ grammar = Function: [ o "FUNCTION LEFT_PAREN AggregateArgumentList RIGHT_PAREN", -> new FunctionValue($1, $3) + o "FUNCTION LEFT_PAREN Case RIGHT_PAREN", -> new FunctionValue($1, $3) ] UserFunction: [ o "LITERAL LEFT_PAREN AggregateArgumentList RIGHT_PAREN", -> new FunctionValue($1, $3, true) + o "LITERAL LEFT_PAREN Case RIGHT_PAREN", -> new FunctionValue($1, $3, true) ] AggregateArgumentList: [ @@ -218,6 +237,8 @@ grammar = o 'STAR', -> new Star() o 'Expression', -> new Field($1) o 'Expression AS Literal', -> new Field($1, $3) + o 'Case', -> new Field($1) + o 'Case AS Literal', -> new Field($1, $3) ] tokens = [] diff --git a/src/lexer.coffee b/src/lexer.coffee index 09bc04a..226bb39 100644 --- a/src/lexer.coffee +++ b/src/lexer.coffee @@ -81,6 +81,11 @@ class Lexer @tokenizeFromWord('OUTER') or @tokenizeFromWord('ON') or @tokenizeFromWord('AS') or + @tokenizeFromWord('CASE') or + @tokenizeFromWord('WHEN') or + @tokenizeFromWord('THEN') or + @tokenizeFromWord('ELSE') or + @tokenizeFromWord('END') or @tokenizeFromWord('UNION') or @tokenizeFromWord('ALL') or @tokenizeFromWord('LIMIT') or @@ -157,4 +162,3 @@ class Lexer exports.tokenize = (sql, opts) -> (new Lexer(sql, opts)).tokens - diff --git a/src/nodes.coffee b/src/nodes.coffee index 72aeafe..9c9868b 100644 --- a/src/nodes.coffee +++ b/src/nodes.coffee @@ -98,6 +98,22 @@ exports.FunctionValue = class FunctionValue else "#{@name.toUpperCase()}()" +exports.Case = class Case + constructor: (@whens, @else) -> + toString: -> + if @else + "CASE #{@whens.toString()} #{@else.toString} END" + else + "CASE #{@whens.toString()} END" + +exports.CaseWhen = class CaseWhen + constructor: (@whenCondition, @resCondition) -> + toString: -> "WHEN #{@whenCondition} THEN @resCondition" + +exports.CaseElse = class CaseElse + constructor: (@elseCondition) -> + toString: -> "ELSE #{@elseCondition}" + exports.Order = class Order constructor: (@orderings, @offset) -> toString: -> "ORDER BY #{@orderings.join(', ')}" + From 18ebc8a6564d30afbd23ee3ef08e283518d5a0eb Mon Sep 17 00:00:00 2001 From: Josh Ferguson Date: Sat, 9 May 2015 15:34:55 -0700 Subject: [PATCH 2/3] cleaning up case statements to make them generic expressions --- browser/sql-parser.js | 36 ++++++++++++++++++------------------ lib/compiled_parser.js | 36 ++++++++++++++++++------------------ lib/grammar.js | 20 +++++++------------- src/grammar.coffee | 14 ++++++-------- 4 files changed, 49 insertions(+), 57 deletions(-) diff --git a/browser/sql-parser.js b/browser/sql-parser.js index 8326b05..ad6af81 100644 --- a/browser/sql-parser.js +++ b/browser/sql-parser.js @@ -321,12 +321,12 @@ } */ var parser = (function(){ -var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,8],$V1=[5,26],$V2=[1,14],$V3=[1,13],$V4=[5,26,31,42],$V5=[1,17],$V6=[5,26,31,42,45,62],$V7=[1,28],$V8=[1,30],$V9=[1,31],$Va=[1,40],$Vb=[1,44],$Vc=[1,45],$Vd=[1,41],$Ve=[1,42],$Vf=[1,39],$Vg=[1,43],$Vh=[1,25],$Vi=[5,26,31],$Vj=[5,26,31,42,45],$Vk=[1,57],$Vl=[18,43],$Vm=[1,60],$Vn=[1,61],$Vo=[1,62],$Vp=[1,63],$Vq=[5,18,23,26,31,34,37,38,41,42,43,45,62,64,65,66,67,68,75,78,80],$Vr=[5,18,23,26,31,34,37,38,41,42,43,44,45,51,62,64,65,66,67,68,69,75,78,80],$Vs=[1,71],$Vt=[2,85],$Vu=[1,85],$Vv=[1,86],$Vw=[1,107],$Vx=[5,26,31,42,43,44],$Vy=[1,116],$Vz=[5,26,31,42,43,45,64],$VA=[5,26,31,41,42,45,62],$VB=[1,119],$VC=[1,120],$VD=[1,121],$VE=[5,26,31,34,35,37,38,41,42,45,62],$VF=[18,23,26,43],$VG=[5,26,31,34,37,38,41,42,45,62],$VH=[5,26,31,42,56,58]; +var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,8],$V1=[5,26],$V2=[1,14],$V3=[1,13],$V4=[5,26,31,42],$V5=[1,17],$V6=[5,26,31,42,45,62],$V7=[1,27],$V8=[1,29],$V9=[1,38],$Va=[1,40],$Vb=[1,44],$Vc=[1,45],$Vd=[1,41],$Ve=[1,42],$Vf=[1,39],$Vg=[1,43],$Vh=[1,25],$Vi=[5,26,31],$Vj=[5,26,31,42,45],$Vk=[1,57],$Vl=[18,43],$Vm=[1,60],$Vn=[1,61],$Vo=[1,62],$Vp=[1,63],$Vq=[5,18,23,26,31,34,37,38,41,42,43,45,62,64,65,66,67,68,75,78,80],$Vr=[5,18,23,26,31,34,37,38,41,42,43,44,45,51,62,64,65,66,67,68,69,75,78,80],$Vs=[1,68],$Vt=[2,86],$Vu=[1,84],$Vv=[1,85],$Vw=[1,105],$Vx=[5,26,31,42,43,44],$Vy=[1,113],$Vz=[5,26,31,42,43,45,64],$VA=[5,26,31,41,42,45,62],$VB=[1,116],$VC=[1,117],$VD=[1,118],$VE=[5,26,31,34,35,37,38,41,42,45,62],$VF=[5,26,31,34,37,38,41,42,45,62],$VG=[5,26,31,42,56,58]; var parser = {trace: function trace() { }, yy: {}, -symbols_: {"error":2,"Root":3,"Query":4,"EOF":5,"SelectQuery":6,"Unions":7,"SelectWithLimitQuery":8,"BasicSelectQuery":9,"Select":10,"OrderClause":11,"GroupClause":12,"LimitClause":13,"SelectClause":14,"WhereClause":15,"SELECT":16,"Fields":17,"FROM":18,"Table":19,"DISTINCT":20,"Joins":21,"Literal":22,"AS":23,"LEFT_PAREN":24,"List":25,"RIGHT_PAREN":26,"WINDOW":27,"WINDOW_FUNCTION":28,"Number":29,"Union":30,"UNION":31,"ALL":32,"Join":33,"JOIN":34,"ON":35,"Expression":36,"LEFT":37,"RIGHT":38,"INNER":39,"OUTER":40,"WHERE":41,"LIMIT":42,"SEPARATOR":43,"OFFSET":44,"ORDER":45,"BY":46,"OrderArgs":47,"OffsetClause":48,"OrderArg":49,"Value":50,"DIRECTION":51,"OffsetRows":52,"FetchClause":53,"ROW":54,"ROWS":55,"FETCH":56,"FIRST":57,"ONLY":58,"NEXT":59,"GroupBasicClause":60,"HavingClause":61,"GROUP":62,"ArgumentList":63,"HAVING":64,"MATH":65,"MATH_MULTI":66,"OPERATOR":67,"CONDITIONAL":68,"SUB_SELECT_OP":69,"SubSelectExpression":70,"SUB_SELECT_UNARY_OP":71,"Case":72,"CASE":73,"CaseWhen":74,"END":75,"CaseElse":76,"WHEN":77,"THEN":78,"CaseWhens":79,"ELSE":80,"String":81,"Function":82,"UserFunction":83,"Boolean":84,"Parameter":85,"NUMBER":86,"BOOLEAN":87,"PARAMETER":88,"STRING":89,"DBLSTRING":90,"LITERAL":91,"DOT":92,"FUNCTION":93,"AggregateArgumentList":94,"Field":95,"STAR":96,"$accept":0,"$end":1}, -terminals_: {2:"error",5:"EOF",16:"SELECT",18:"FROM",20:"DISTINCT",23:"AS",24:"LEFT_PAREN",26:"RIGHT_PAREN",27:"WINDOW",28:"WINDOW_FUNCTION",31:"UNION",32:"ALL",34:"JOIN",35:"ON",37:"LEFT",38:"RIGHT",39:"INNER",40:"OUTER",41:"WHERE",42:"LIMIT",43:"SEPARATOR",44:"OFFSET",45:"ORDER",46:"BY",51:"DIRECTION",54:"ROW",55:"ROWS",56:"FETCH",57:"FIRST",58:"ONLY",59:"NEXT",62:"GROUP",64:"HAVING",65:"MATH",66:"MATH_MULTI",67:"OPERATOR",68:"CONDITIONAL",69:"SUB_SELECT_OP",71:"SUB_SELECT_UNARY_OP",73:"CASE",75:"END",77:"WHEN",78:"THEN",80:"ELSE",86:"NUMBER",87:"BOOLEAN",88:"PARAMETER",89:"STRING",90:"DBLSTRING",91:"LITERAL",92:"DOT",93:"FUNCTION",96:"STAR"}, -productions_: [0,[3,2],[4,1],[4,2],[6,1],[6,1],[9,1],[9,2],[9,2],[9,3],[8,2],[10,1],[10,2],[14,4],[14,5],[14,5],[14,6],[19,1],[19,2],[19,3],[19,3],[19,3],[19,4],[19,6],[7,1],[7,2],[30,2],[30,3],[21,1],[21,2],[33,4],[33,5],[33,5],[33,6],[33,6],[33,6],[33,6],[15,2],[13,2],[13,4],[13,4],[11,3],[11,4],[47,1],[47,3],[49,1],[49,2],[48,2],[48,3],[52,2],[52,2],[53,4],[53,4],[12,1],[12,2],[60,3],[61,2],[36,3],[36,3],[36,3],[36,3],[36,3],[36,5],[36,3],[36,2],[36,1],[70,3],[72,3],[72,4],[74,4],[79,1],[76,2],[50,1],[50,1],[50,1],[50,1],[50,1],[50,1],[50,1],[25,1],[29,1],[84,1],[85,1],[81,1],[81,1],[22,1],[22,3],[82,4],[82,4],[83,4],[83,4],[94,1],[94,2],[63,1],[63,3],[17,1],[17,3],[95,1],[95,1],[95,3],[95,1],[95,3]], +symbols_: {"error":2,"Root":3,"Query":4,"EOF":5,"SelectQuery":6,"Unions":7,"SelectWithLimitQuery":8,"BasicSelectQuery":9,"Select":10,"OrderClause":11,"GroupClause":12,"LimitClause":13,"SelectClause":14,"WhereClause":15,"SELECT":16,"Fields":17,"FROM":18,"Table":19,"DISTINCT":20,"Joins":21,"Literal":22,"AS":23,"LEFT_PAREN":24,"List":25,"RIGHT_PAREN":26,"WINDOW":27,"WINDOW_FUNCTION":28,"Number":29,"Union":30,"UNION":31,"ALL":32,"Join":33,"JOIN":34,"ON":35,"Expression":36,"LEFT":37,"RIGHT":38,"INNER":39,"OUTER":40,"WHERE":41,"LIMIT":42,"SEPARATOR":43,"OFFSET":44,"ORDER":45,"BY":46,"OrderArgs":47,"OffsetClause":48,"OrderArg":49,"Value":50,"DIRECTION":51,"OffsetRows":52,"FetchClause":53,"ROW":54,"ROWS":55,"FETCH":56,"FIRST":57,"ONLY":58,"NEXT":59,"GroupBasicClause":60,"HavingClause":61,"GROUP":62,"ArgumentList":63,"HAVING":64,"MATH":65,"MATH_MULTI":66,"OPERATOR":67,"CONDITIONAL":68,"SUB_SELECT_OP":69,"SubSelectExpression":70,"SUB_SELECT_UNARY_OP":71,"CaseStatement":72,"CASE":73,"CaseWhen":74,"END":75,"CaseElse":76,"WHEN":77,"THEN":78,"CaseWhens":79,"ELSE":80,"String":81,"Function":82,"UserFunction":83,"Boolean":84,"Parameter":85,"NUMBER":86,"BOOLEAN":87,"PARAMETER":88,"STRING":89,"DBLSTRING":90,"LITERAL":91,"DOT":92,"FUNCTION":93,"AggregateArgumentList":94,"Case":95,"Field":96,"STAR":97,"$accept":0,"$end":1}, +terminals_: {2:"error",5:"EOF",16:"SELECT",18:"FROM",20:"DISTINCT",23:"AS",24:"LEFT_PAREN",26:"RIGHT_PAREN",27:"WINDOW",28:"WINDOW_FUNCTION",31:"UNION",32:"ALL",34:"JOIN",35:"ON",37:"LEFT",38:"RIGHT",39:"INNER",40:"OUTER",41:"WHERE",42:"LIMIT",43:"SEPARATOR",44:"OFFSET",45:"ORDER",46:"BY",51:"DIRECTION",54:"ROW",55:"ROWS",56:"FETCH",57:"FIRST",58:"ONLY",59:"NEXT",62:"GROUP",64:"HAVING",65:"MATH",66:"MATH_MULTI",67:"OPERATOR",68:"CONDITIONAL",69:"SUB_SELECT_OP",71:"SUB_SELECT_UNARY_OP",73:"CASE",75:"END",77:"WHEN",78:"THEN",80:"ELSE",86:"NUMBER",87:"BOOLEAN",88:"PARAMETER",89:"STRING",90:"DBLSTRING",91:"LITERAL",92:"DOT",93:"FUNCTION",95:"Case",97:"STAR"}, +productions_: [0,[3,2],[4,1],[4,2],[6,1],[6,1],[9,1],[9,2],[9,2],[9,3],[8,2],[10,1],[10,2],[14,4],[14,5],[14,5],[14,6],[19,1],[19,2],[19,3],[19,3],[19,3],[19,4],[19,6],[7,1],[7,2],[30,2],[30,3],[21,1],[21,2],[33,4],[33,5],[33,5],[33,6],[33,6],[33,6],[33,6],[15,2],[13,2],[13,4],[13,4],[11,3],[11,4],[47,1],[47,3],[49,1],[49,2],[48,2],[48,3],[52,2],[52,2],[53,4],[53,4],[12,1],[12,2],[60,3],[61,2],[36,3],[36,3],[36,3],[36,3],[36,3],[36,5],[36,3],[36,2],[36,1],[36,1],[72,3],[72,4],[74,4],[79,1],[76,2],[70,3],[50,1],[50,1],[50,1],[50,1],[50,1],[50,1],[50,1],[25,1],[29,1],[84,1],[85,1],[81,1],[81,1],[22,1],[22,3],[82,4],[83,4],[83,4],[94,1],[94,2],[63,1],[63,3],[17,1],[17,3],[96,1],[96,1],[96,3]], performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { /* this == yyval */ @@ -335,7 +335,7 @@ switch (yystate) { case 1: return this.$ = $$[$0-1]; break; -case 2: case 4: case 5: case 6: case 11: case 53: case 65: case 72: case 73: case 74: case 75: case 76: case 77: case 78: +case 2: case 4: case 5: case 6: case 11: case 53: case 65: case 66: case 73: case 74: case 75: case 76: case 77: case 78: case 79: this.$ = $$[$0]; break; case 3: @@ -399,7 +399,7 @@ break; case 20: case 49: case 50: case 51: case 52: case 57: this.$ = $$[$0-1]; break; -case 21: case 66: +case 21: case 72: this.$ = new yy.SubSelect($$[$0-1]); break; case 22: @@ -510,31 +510,31 @@ break; case 71: this.$ = new yy.CaseElse($$[$0]); break; -case 79: +case 80: this.$ = new yy.ListValue($$[$0]); break; -case 80: +case 81: this.$ = new yy.NumberValue($$[$0]); break; -case 81: +case 82: this.$ = new yy.BooleanValue($$[$0]); break; -case 82: +case 83: this.$ = new yy.ParameterValue($$[$0]); break; -case 83: +case 84: this.$ = new yy.StringValue($$[$0], "'"); break; -case 84: +case 85: this.$ = new yy.StringValue($$[$0], '"'); break; -case 85: +case 86: this.$ = new yy.LiteralValue($$[$0]); break; -case 86: +case 87: this.$ = new yy.LiteralValue($$[$0-2], $$[$0]); break; -case 87: case 88: +case 88: this.$ = new yy.FunctionValue($$[$0-3], $$[$0-1]); break; case 89: case 90: @@ -549,15 +549,15 @@ break; case 97: this.$ = new yy.Star(); break; -case 98: case 100: +case 98: this.$ = new yy.Field($$[$0]); break; -case 99: case 101: +case 99: this.$ = new yy.Field($$[$0-2], $$[$0]); break; } }, -table: [{3:1,4:2,6:3,8:4,9:5,10:6,14:7,16:$V0},{1:[3]},{5:[1,9]},o($V1,[2,2],{7:10,13:11,30:12,31:$V2,42:$V3}),o($V4,[2,4]),o($V4,[2,5]),o($V4,[2,6],{11:15,12:16,60:18,45:$V5,62:[1,19]}),o($V6,[2,11],{15:20,41:[1,21]}),{17:22,20:[1,23],22:32,24:$V7,29:33,36:26,50:29,71:$V8,72:27,73:$V9,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg,95:24,96:$Vh},{1:[2,1]},o($V1,[2,3],{30:46,31:$V2}),o($V4,[2,10]),o($Vi,[2,24]),{29:47,86:$Va},{6:48,8:4,9:5,10:6,14:7,16:$V0,32:[1,49]},o($V4,[2,7]),o($V4,[2,8],{11:50,45:$V5}),{46:[1,51]},o($Vj,[2,53],{61:52,64:[1,53]}),{46:[1,54]},o($V6,[2,12]),{22:32,24:$V7,29:33,36:55,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{18:[1,56],43:$Vk},{17:58,22:32,24:$V7,29:33,36:26,50:29,71:$V8,72:27,73:$V9,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg,95:24,96:$Vh},o($Vl,[2,95]),o($Vl,[2,97]),o($Vl,[2,98],{23:[1,59],65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($Vl,[2,100],{23:[1,64]}),{22:32,24:$V7,29:33,36:65,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($Vq,[2,65],{69:[1,66]}),{24:[1,68],70:67},{74:69,77:[1,70]},o($Vr,[2,72],{92:$Vs}),o($Vr,[2,73]),o($Vr,[2,74]),o($Vr,[2,75]),o($Vr,[2,76]),o($Vr,[2,77]),o($Vr,[2,78]),o([5,18,23,26,31,34,37,38,41,42,43,44,45,51,62,64,65,66,67,68,69,75,78,80,92],$Vt,{24:[1,72]}),o([5,18,23,26,31,34,37,38,41,42,43,44,45,51,54,55,62,64,65,66,67,68,69,75,78,80],[2,80]),o($Vr,[2,83]),o($Vr,[2,84]),{24:[1,73]},o($Vr,[2,81]),o($Vr,[2,82]),o($Vi,[2,25]),o($V4,[2,38],{43:[1,74],44:[1,75]}),o($Vi,[2,26],{13:11,42:$V3}),{6:76,8:4,9:5,10:6,14:7,16:$V0},o($V4,[2,9]),{22:32,29:33,47:77,49:78,50:79,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($Vj,[2,54]),{22:32,24:$V7,29:33,36:80,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:32,24:$V7,29:33,36:82,50:29,63:81,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($V6,[2,37],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),{19:83,22:84,24:$Vu,91:$Vv},{22:32,24:$V7,29:33,36:26,50:29,71:$V8,72:27,73:$V9,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg,95:87,96:$Vh},{18:[1,88],43:$Vk},{22:89,91:$Vv},{22:32,24:$V7,29:33,36:90,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:32,24:$V7,29:33,36:91,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:32,24:$V7,29:33,36:92,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:32,24:$V7,29:33,36:93,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:94,91:$Vv},{26:[1,95],65:$Vm,66:$Vn,67:$Vo,68:$Vp},{24:[1,96],70:97},o($Vq,[2,64]),{4:98,6:3,8:4,9:5,10:6,14:7,16:$V0},{75:[1,99],76:100,80:[1,101]},{22:32,24:$V7,29:33,36:102,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{91:[1,103]},{20:$Vw,22:32,24:$V7,29:33,36:82,50:29,63:106,71:$V8,72:105,73:$V9,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg,94:104},{20:$Vw,22:32,24:$V7,29:33,36:82,50:29,63:106,71:$V8,72:109,73:$V9,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg,94:108},{29:110,86:$Va},{29:111,86:$Va},o($Vi,[2,27],{13:11,42:$V3}),o($V4,[2,41],{48:112,43:[1,113],44:[1,114]}),o($Vx,[2,43]),o($Vx,[2,45],{51:[1,115]}),o($Vj,[2,56],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o([5,26,31,42,45,64],[2,55],{43:$Vy}),o($Vz,[2,93],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($VA,[2,13],{21:117,33:118,34:$VB,37:$VC,38:$VD}),o($VE,[2,17],{22:122,23:[1,123],27:[1,124],91:$Vv,92:$Vs}),{4:126,6:3,8:4,9:5,10:6,14:7,16:$V0,22:32,24:$V7,25:125,29:33,36:82,50:29,63:127,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o([5,18,23,26,27,31,34,35,37,38,41,42,43,45,62,91,92],$Vt),o($Vl,[2,96]),{19:128,22:84,24:$Vu,91:$Vv},o($Vl,[2,99],{92:$Vs}),o([5,18,23,26,31,34,37,38,41,42,43,45,62,64,65,67,68,75,78,80],[2,58],{66:$Vn}),o($Vq,[2,59]),o([5,18,23,26,31,34,37,38,41,42,43,45,62,64,67,68,75,78,80],[2,60],{65:$Vm,66:$Vn}),o([5,18,23,26,31,34,37,38,41,42,43,45,62,64,68,75,78,80],[2,61],{65:$Vm,66:$Vn,67:$Vo}),o($Vl,[2,101],{92:$Vs}),o($Vq,[2,57]),{4:98,6:3,8:4,9:5,10:6,14:7,16:$V0,22:32,24:$V7,25:129,29:33,36:82,50:29,63:127,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($Vq,[2,63]),{26:[1,130]},o($VF,[2,67]),{75:[1,131]},{22:32,24:$V7,29:33,36:132,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{65:$Vm,66:$Vn,67:$Vo,68:$Vp,78:[1,133]},o([5,18,23,26,27,31,34,35,37,38,41,42,43,44,45,51,62,64,65,66,67,68,69,75,78,80,91,92],[2,86]),{26:[1,134]},{26:[1,135]},{26:[2,91],43:$Vy},{22:32,24:$V7,29:33,36:82,50:29,63:136,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{26:[1,137]},{26:[1,138]},o($V4,[2,39]),o($V4,[2,40]),o($V4,[2,42]),{22:32,29:33,49:139,50:79,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{29:141,52:140,86:$Va},o($Vx,[2,46]),{22:32,29:33,50:142,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($VA,[2,15],{33:143,34:$VB,37:$VC,38:$VD}),o($VG,[2,28]),{19:144,22:84,24:$Vu,91:$Vv},{34:[1,145],39:[1,146],40:[1,147]},{34:[1,148],39:[1,149],40:[1,150]},o($VE,[2,18],{92:$Vs}),{22:151,91:$Vv},{28:[1,152]},{26:[1,153]},{26:[1,154]},{26:[2,79],43:$Vy},o($VA,[2,14],{33:118,21:155,34:$VB,37:$VC,38:$VD}),{26:[1,156]},o($Vq,[2,66]),o($VF,[2,68]),{65:$Vm,66:$Vn,67:$Vo,68:$Vp,75:[2,71]},{22:32,24:$V7,29:33,36:157,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($Vr,[2,89]),o($Vr,[2,90]),{26:[2,92],43:$Vy},o($Vr,[2,87]),o($Vr,[2,88]),o($Vx,[2,44]),o($V4,[2,47],{53:158,56:[1,159]}),{54:[1,160],55:[1,161]},o($Vz,[2,94]),o($VG,[2,29]),{35:[1,162]},{19:163,22:84,24:$Vu,91:$Vv},{34:[1,164]},{34:[1,165]},{19:166,22:84,24:$Vu,91:$Vv},{34:[1,167]},{34:[1,168]},o($VE,[2,19],{92:$Vs}),{24:[1,169]},o($VE,[2,20]),o($VE,[2,21],{22:170,91:$Vv}),o($VA,[2,16],{33:143,34:$VB,37:$VC,38:$VD}),o($Vq,[2,62]),o([75,80],[2,69],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($V4,[2,48]),{57:[1,171],59:[1,172]},o($VH,[2,49]),o($VH,[2,50]),{22:32,24:$V7,29:33,36:173,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{35:[1,174]},{19:175,22:84,24:$Vu,91:$Vv},{19:176,22:84,24:$Vu,91:$Vv},{35:[1,177]},{19:178,22:84,24:$Vu,91:$Vv},{19:179,22:84,24:$Vu,91:$Vv},{29:180,86:$Va},o($VE,[2,22],{92:$Vs}),{29:141,52:181,86:$Va},{29:141,52:182,86:$Va},o($VG,[2,30],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),{22:32,24:$V7,29:33,36:183,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{35:[1,184]},{35:[1,185]},{22:32,24:$V7,29:33,36:186,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{35:[1,187]},{35:[1,188]},{26:[1,189]},{58:[1,190]},{58:[1,191]},o($VG,[2,31],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),{22:32,24:$V7,29:33,36:192,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:32,24:$V7,29:33,36:193,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($VG,[2,32],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),{22:32,24:$V7,29:33,36:194,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:32,24:$V7,29:33,36:195,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($VE,[2,23]),o($V4,[2,51]),o($V4,[2,52]),o($VG,[2,33],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($VG,[2,35],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($VG,[2,34],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($VG,[2,36],{65:$Vm,66:$Vn,67:$Vo,68:$Vp})], +table: [{3:1,4:2,6:3,8:4,9:5,10:6,14:7,16:$V0},{1:[3]},{5:[1,9]},o($V1,[2,2],{7:10,13:11,30:12,31:$V2,42:$V3}),o($V4,[2,4]),o($V4,[2,5]),o($V4,[2,6],{11:15,12:16,60:18,45:$V5,62:[1,19]}),o($V6,[2,11],{15:20,41:[1,21]}),{17:22,20:[1,23],22:31,24:$V7,29:32,36:26,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg,96:24,97:$Vh},{1:[2,1]},o($V1,[2,3],{30:46,31:$V2}),o($V4,[2,10]),o($Vi,[2,24]),{29:47,86:$Va},{6:48,8:4,9:5,10:6,14:7,16:$V0,32:[1,49]},o($V4,[2,7]),o($V4,[2,8],{11:50,45:$V5}),{46:[1,51]},o($Vj,[2,53],{61:52,64:[1,53]}),{46:[1,54]},o($V6,[2,12]),{22:31,24:$V7,29:32,36:55,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{18:[1,56],43:$Vk},{17:58,22:31,24:$V7,29:32,36:26,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg,96:24,97:$Vh},o($Vl,[2,95]),o($Vl,[2,97]),o($Vl,[2,98],{23:[1,59],65:$Vm,66:$Vn,67:$Vo,68:$Vp}),{22:31,24:$V7,29:32,36:64,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($Vq,[2,66],{69:[1,65]}),{24:[1,67],70:66},o($Vq,[2,65]),o($Vr,[2,73],{92:$Vs}),o($Vr,[2,74]),o($Vr,[2,75]),o($Vr,[2,76]),o($Vr,[2,77]),o($Vr,[2,78]),o($Vr,[2,79]),{74:69,77:[1,70]},o([5,18,23,26,31,34,37,38,41,42,43,44,45,51,62,64,65,66,67,68,69,75,78,80,92],$Vt,{24:[1,71]}),o([5,18,23,26,31,34,37,38,41,42,43,44,45,51,54,55,62,64,65,66,67,68,69,75,78,80],[2,81]),o($Vr,[2,84]),o($Vr,[2,85]),{24:[1,72]},o($Vr,[2,82]),o($Vr,[2,83]),o($Vi,[2,25]),o($V4,[2,38],{43:[1,73],44:[1,74]}),o($Vi,[2,26],{13:11,42:$V3}),{6:75,8:4,9:5,10:6,14:7,16:$V0},o($V4,[2,9]),{22:31,29:32,47:76,49:77,50:78,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($Vj,[2,54]),{22:31,24:$V7,29:32,36:79,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:31,24:$V7,29:32,36:81,50:28,63:80,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($V6,[2,37],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),{19:82,22:83,24:$Vu,91:$Vv},{22:31,24:$V7,29:32,36:26,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg,96:86,97:$Vh},{18:[1,87],43:$Vk},{22:88,91:$Vv},{22:31,24:$V7,29:32,36:89,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:31,24:$V7,29:32,36:90,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:31,24:$V7,29:32,36:91,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:31,24:$V7,29:32,36:92,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{26:[1,93],65:$Vm,66:$Vn,67:$Vo,68:$Vp},{24:[1,94],70:95},o($Vq,[2,64]),{4:96,6:3,8:4,9:5,10:6,14:7,16:$V0},{91:[1,97]},{75:[1,98],76:99,80:[1,100]},{22:31,24:$V7,29:32,36:101,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{20:$Vw,22:31,24:$V7,29:32,36:81,50:28,63:104,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg,94:102,95:[1,103]},{20:$Vw,22:31,24:$V7,29:32,36:81,50:28,63:104,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg,94:106},{29:107,86:$Va},{29:108,86:$Va},o($Vi,[2,27],{13:11,42:$V3}),o($V4,[2,41],{48:109,43:[1,110],44:[1,111]}),o($Vx,[2,43]),o($Vx,[2,45],{51:[1,112]}),o($Vj,[2,56],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o([5,26,31,42,45,64],[2,55],{43:$Vy}),o($Vz,[2,93],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($VA,[2,13],{21:114,33:115,34:$VB,37:$VC,38:$VD}),o($VE,[2,17],{22:119,23:[1,120],27:[1,121],91:$Vv,92:$Vs}),{4:123,6:3,8:4,9:5,10:6,14:7,16:$V0,22:31,24:$V7,25:122,29:32,36:81,50:28,63:124,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o([5,18,23,26,27,31,34,35,37,38,41,42,43,45,62,91,92],$Vt),o($Vl,[2,96]),{19:125,22:83,24:$Vu,91:$Vv},o($Vl,[2,99],{92:$Vs}),o([5,18,23,26,31,34,37,38,41,42,43,45,62,64,65,67,68,75,78,80],[2,58],{66:$Vn}),o($Vq,[2,59]),o([5,18,23,26,31,34,37,38,41,42,43,45,62,64,67,68,75,78,80],[2,60],{65:$Vm,66:$Vn}),o([5,18,23,26,31,34,37,38,41,42,43,45,62,64,68,75,78,80],[2,61],{65:$Vm,66:$Vn,67:$Vo}),o($Vq,[2,57]),{4:96,6:3,8:4,9:5,10:6,14:7,16:$V0,22:31,24:$V7,25:126,29:32,36:81,50:28,63:124,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($Vq,[2,63]),{26:[1,127]},o([5,18,23,26,27,31,34,35,37,38,41,42,43,44,45,51,62,64,65,66,67,68,69,75,78,80,91,92],[2,87]),o($Vq,[2,67]),{75:[1,128]},{22:31,24:$V7,29:32,36:129,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{65:$Vm,66:$Vn,67:$Vo,68:$Vp,78:[1,130]},{26:[1,131]},{26:[1,132]},{26:[2,91],43:$Vy},{22:31,24:$V7,29:32,36:81,50:28,63:133,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{26:[1,134]},o($V4,[2,39]),o($V4,[2,40]),o($V4,[2,42]),{22:31,29:32,49:135,50:78,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{29:137,52:136,86:$Va},o($Vx,[2,46]),{22:31,29:32,50:138,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($VA,[2,15],{33:139,34:$VB,37:$VC,38:$VD}),o($VF,[2,28]),{19:140,22:83,24:$Vu,91:$Vv},{34:[1,141],39:[1,142],40:[1,143]},{34:[1,144],39:[1,145],40:[1,146]},o($VE,[2,18],{92:$Vs}),{22:147,91:$Vv},{28:[1,148]},{26:[1,149]},{26:[1,150]},{26:[2,80],43:$Vy},o($VA,[2,14],{33:115,21:151,34:$VB,37:$VC,38:$VD}),{26:[1,152]},o($Vq,[2,72]),o($Vq,[2,68]),{65:$Vm,66:$Vn,67:$Vo,68:$Vp,75:[2,71]},{22:31,24:$V7,29:32,36:153,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($Vr,[2,89]),o($Vr,[2,90]),{26:[2,92],43:$Vy},o($Vr,[2,88]),o($Vx,[2,44]),o($V4,[2,47],{53:154,56:[1,155]}),{54:[1,156],55:[1,157]},o($Vz,[2,94]),o($VF,[2,29]),{35:[1,158]},{19:159,22:83,24:$Vu,91:$Vv},{34:[1,160]},{34:[1,161]},{19:162,22:83,24:$Vu,91:$Vv},{34:[1,163]},{34:[1,164]},o($VE,[2,19],{92:$Vs}),{24:[1,165]},o($VE,[2,20]),o($VE,[2,21],{22:166,91:$Vv}),o($VA,[2,16],{33:139,34:$VB,37:$VC,38:$VD}),o($Vq,[2,62]),o([75,80],[2,69],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($V4,[2,48]),{57:[1,167],59:[1,168]},o($VG,[2,49]),o($VG,[2,50]),{22:31,24:$V7,29:32,36:169,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{35:[1,170]},{19:171,22:83,24:$Vu,91:$Vv},{19:172,22:83,24:$Vu,91:$Vv},{35:[1,173]},{19:174,22:83,24:$Vu,91:$Vv},{19:175,22:83,24:$Vu,91:$Vv},{29:176,86:$Va},o($VE,[2,22],{92:$Vs}),{29:137,52:177,86:$Va},{29:137,52:178,86:$Va},o($VF,[2,30],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),{22:31,24:$V7,29:32,36:179,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{35:[1,180]},{35:[1,181]},{22:31,24:$V7,29:32,36:182,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{35:[1,183]},{35:[1,184]},{26:[1,185]},{58:[1,186]},{58:[1,187]},o($VF,[2,31],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),{22:31,24:$V7,29:32,36:188,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:31,24:$V7,29:32,36:189,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($VF,[2,32],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),{22:31,24:$V7,29:32,36:190,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:31,24:$V7,29:32,36:191,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($VE,[2,23]),o($V4,[2,51]),o($V4,[2,52]),o($VF,[2,33],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($VF,[2,35],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($VF,[2,34],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($VF,[2,36],{65:$Vm,66:$Vn,67:$Vo,68:$Vp})], defaultActions: {9:[2,1]}, parseError: function parseError(str, hash) { if (hash.recoverable) { diff --git a/lib/compiled_parser.js b/lib/compiled_parser.js index 27b0dd9..7284ae5 100644 --- a/lib/compiled_parser.js +++ b/lib/compiled_parser.js @@ -72,12 +72,12 @@ } */ var parser = (function(){ -var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,8],$V1=[5,26],$V2=[1,14],$V3=[1,13],$V4=[5,26,31,42],$V5=[1,17],$V6=[5,26,31,42,45,62],$V7=[1,28],$V8=[1,30],$V9=[1,31],$Va=[1,40],$Vb=[1,44],$Vc=[1,45],$Vd=[1,41],$Ve=[1,42],$Vf=[1,39],$Vg=[1,43],$Vh=[1,25],$Vi=[5,26,31],$Vj=[5,26,31,42,45],$Vk=[1,57],$Vl=[18,43],$Vm=[1,60],$Vn=[1,61],$Vo=[1,62],$Vp=[1,63],$Vq=[5,18,23,26,31,34,37,38,41,42,43,45,62,64,65,66,67,68,75,78,80],$Vr=[5,18,23,26,31,34,37,38,41,42,43,44,45,51,62,64,65,66,67,68,69,75,78,80],$Vs=[1,71],$Vt=[2,85],$Vu=[1,85],$Vv=[1,86],$Vw=[1,107],$Vx=[5,26,31,42,43,44],$Vy=[1,116],$Vz=[5,26,31,42,43,45,64],$VA=[5,26,31,41,42,45,62],$VB=[1,119],$VC=[1,120],$VD=[1,121],$VE=[5,26,31,34,35,37,38,41,42,45,62],$VF=[18,23,26,43],$VG=[5,26,31,34,37,38,41,42,45,62],$VH=[5,26,31,42,56,58]; +var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,8],$V1=[5,26],$V2=[1,14],$V3=[1,13],$V4=[5,26,31,42],$V5=[1,17],$V6=[5,26,31,42,45,62],$V7=[1,27],$V8=[1,29],$V9=[1,38],$Va=[1,40],$Vb=[1,44],$Vc=[1,45],$Vd=[1,41],$Ve=[1,42],$Vf=[1,39],$Vg=[1,43],$Vh=[1,25],$Vi=[5,26,31],$Vj=[5,26,31,42,45],$Vk=[1,57],$Vl=[18,43],$Vm=[1,60],$Vn=[1,61],$Vo=[1,62],$Vp=[1,63],$Vq=[5,18,23,26,31,34,37,38,41,42,43,45,62,64,65,66,67,68,75,78,80],$Vr=[5,18,23,26,31,34,37,38,41,42,43,44,45,51,62,64,65,66,67,68,69,75,78,80],$Vs=[1,68],$Vt=[2,86],$Vu=[1,84],$Vv=[1,85],$Vw=[1,105],$Vx=[5,26,31,42,43,44],$Vy=[1,113],$Vz=[5,26,31,42,43,45,64],$VA=[5,26,31,41,42,45,62],$VB=[1,116],$VC=[1,117],$VD=[1,118],$VE=[5,26,31,34,35,37,38,41,42,45,62],$VF=[5,26,31,34,37,38,41,42,45,62],$VG=[5,26,31,42,56,58]; var parser = {trace: function trace() { }, yy: {}, -symbols_: {"error":2,"Root":3,"Query":4,"EOF":5,"SelectQuery":6,"Unions":7,"SelectWithLimitQuery":8,"BasicSelectQuery":9,"Select":10,"OrderClause":11,"GroupClause":12,"LimitClause":13,"SelectClause":14,"WhereClause":15,"SELECT":16,"Fields":17,"FROM":18,"Table":19,"DISTINCT":20,"Joins":21,"Literal":22,"AS":23,"LEFT_PAREN":24,"List":25,"RIGHT_PAREN":26,"WINDOW":27,"WINDOW_FUNCTION":28,"Number":29,"Union":30,"UNION":31,"ALL":32,"Join":33,"JOIN":34,"ON":35,"Expression":36,"LEFT":37,"RIGHT":38,"INNER":39,"OUTER":40,"WHERE":41,"LIMIT":42,"SEPARATOR":43,"OFFSET":44,"ORDER":45,"BY":46,"OrderArgs":47,"OffsetClause":48,"OrderArg":49,"Value":50,"DIRECTION":51,"OffsetRows":52,"FetchClause":53,"ROW":54,"ROWS":55,"FETCH":56,"FIRST":57,"ONLY":58,"NEXT":59,"GroupBasicClause":60,"HavingClause":61,"GROUP":62,"ArgumentList":63,"HAVING":64,"MATH":65,"MATH_MULTI":66,"OPERATOR":67,"CONDITIONAL":68,"SUB_SELECT_OP":69,"SubSelectExpression":70,"SUB_SELECT_UNARY_OP":71,"Case":72,"CASE":73,"CaseWhen":74,"END":75,"CaseElse":76,"WHEN":77,"THEN":78,"CaseWhens":79,"ELSE":80,"String":81,"Function":82,"UserFunction":83,"Boolean":84,"Parameter":85,"NUMBER":86,"BOOLEAN":87,"PARAMETER":88,"STRING":89,"DBLSTRING":90,"LITERAL":91,"DOT":92,"FUNCTION":93,"AggregateArgumentList":94,"Field":95,"STAR":96,"$accept":0,"$end":1}, -terminals_: {2:"error",5:"EOF",16:"SELECT",18:"FROM",20:"DISTINCT",23:"AS",24:"LEFT_PAREN",26:"RIGHT_PAREN",27:"WINDOW",28:"WINDOW_FUNCTION",31:"UNION",32:"ALL",34:"JOIN",35:"ON",37:"LEFT",38:"RIGHT",39:"INNER",40:"OUTER",41:"WHERE",42:"LIMIT",43:"SEPARATOR",44:"OFFSET",45:"ORDER",46:"BY",51:"DIRECTION",54:"ROW",55:"ROWS",56:"FETCH",57:"FIRST",58:"ONLY",59:"NEXT",62:"GROUP",64:"HAVING",65:"MATH",66:"MATH_MULTI",67:"OPERATOR",68:"CONDITIONAL",69:"SUB_SELECT_OP",71:"SUB_SELECT_UNARY_OP",73:"CASE",75:"END",77:"WHEN",78:"THEN",80:"ELSE",86:"NUMBER",87:"BOOLEAN",88:"PARAMETER",89:"STRING",90:"DBLSTRING",91:"LITERAL",92:"DOT",93:"FUNCTION",96:"STAR"}, -productions_: [0,[3,2],[4,1],[4,2],[6,1],[6,1],[9,1],[9,2],[9,2],[9,3],[8,2],[10,1],[10,2],[14,4],[14,5],[14,5],[14,6],[19,1],[19,2],[19,3],[19,3],[19,3],[19,4],[19,6],[7,1],[7,2],[30,2],[30,3],[21,1],[21,2],[33,4],[33,5],[33,5],[33,6],[33,6],[33,6],[33,6],[15,2],[13,2],[13,4],[13,4],[11,3],[11,4],[47,1],[47,3],[49,1],[49,2],[48,2],[48,3],[52,2],[52,2],[53,4],[53,4],[12,1],[12,2],[60,3],[61,2],[36,3],[36,3],[36,3],[36,3],[36,3],[36,5],[36,3],[36,2],[36,1],[70,3],[72,3],[72,4],[74,4],[79,1],[76,2],[50,1],[50,1],[50,1],[50,1],[50,1],[50,1],[50,1],[25,1],[29,1],[84,1],[85,1],[81,1],[81,1],[22,1],[22,3],[82,4],[82,4],[83,4],[83,4],[94,1],[94,2],[63,1],[63,3],[17,1],[17,3],[95,1],[95,1],[95,3],[95,1],[95,3]], +symbols_: {"error":2,"Root":3,"Query":4,"EOF":5,"SelectQuery":6,"Unions":7,"SelectWithLimitQuery":8,"BasicSelectQuery":9,"Select":10,"OrderClause":11,"GroupClause":12,"LimitClause":13,"SelectClause":14,"WhereClause":15,"SELECT":16,"Fields":17,"FROM":18,"Table":19,"DISTINCT":20,"Joins":21,"Literal":22,"AS":23,"LEFT_PAREN":24,"List":25,"RIGHT_PAREN":26,"WINDOW":27,"WINDOW_FUNCTION":28,"Number":29,"Union":30,"UNION":31,"ALL":32,"Join":33,"JOIN":34,"ON":35,"Expression":36,"LEFT":37,"RIGHT":38,"INNER":39,"OUTER":40,"WHERE":41,"LIMIT":42,"SEPARATOR":43,"OFFSET":44,"ORDER":45,"BY":46,"OrderArgs":47,"OffsetClause":48,"OrderArg":49,"Value":50,"DIRECTION":51,"OffsetRows":52,"FetchClause":53,"ROW":54,"ROWS":55,"FETCH":56,"FIRST":57,"ONLY":58,"NEXT":59,"GroupBasicClause":60,"HavingClause":61,"GROUP":62,"ArgumentList":63,"HAVING":64,"MATH":65,"MATH_MULTI":66,"OPERATOR":67,"CONDITIONAL":68,"SUB_SELECT_OP":69,"SubSelectExpression":70,"SUB_SELECT_UNARY_OP":71,"CaseStatement":72,"CASE":73,"CaseWhen":74,"END":75,"CaseElse":76,"WHEN":77,"THEN":78,"CaseWhens":79,"ELSE":80,"String":81,"Function":82,"UserFunction":83,"Boolean":84,"Parameter":85,"NUMBER":86,"BOOLEAN":87,"PARAMETER":88,"STRING":89,"DBLSTRING":90,"LITERAL":91,"DOT":92,"FUNCTION":93,"AggregateArgumentList":94,"Case":95,"Field":96,"STAR":97,"$accept":0,"$end":1}, +terminals_: {2:"error",5:"EOF",16:"SELECT",18:"FROM",20:"DISTINCT",23:"AS",24:"LEFT_PAREN",26:"RIGHT_PAREN",27:"WINDOW",28:"WINDOW_FUNCTION",31:"UNION",32:"ALL",34:"JOIN",35:"ON",37:"LEFT",38:"RIGHT",39:"INNER",40:"OUTER",41:"WHERE",42:"LIMIT",43:"SEPARATOR",44:"OFFSET",45:"ORDER",46:"BY",51:"DIRECTION",54:"ROW",55:"ROWS",56:"FETCH",57:"FIRST",58:"ONLY",59:"NEXT",62:"GROUP",64:"HAVING",65:"MATH",66:"MATH_MULTI",67:"OPERATOR",68:"CONDITIONAL",69:"SUB_SELECT_OP",71:"SUB_SELECT_UNARY_OP",73:"CASE",75:"END",77:"WHEN",78:"THEN",80:"ELSE",86:"NUMBER",87:"BOOLEAN",88:"PARAMETER",89:"STRING",90:"DBLSTRING",91:"LITERAL",92:"DOT",93:"FUNCTION",95:"Case",97:"STAR"}, +productions_: [0,[3,2],[4,1],[4,2],[6,1],[6,1],[9,1],[9,2],[9,2],[9,3],[8,2],[10,1],[10,2],[14,4],[14,5],[14,5],[14,6],[19,1],[19,2],[19,3],[19,3],[19,3],[19,4],[19,6],[7,1],[7,2],[30,2],[30,3],[21,1],[21,2],[33,4],[33,5],[33,5],[33,6],[33,6],[33,6],[33,6],[15,2],[13,2],[13,4],[13,4],[11,3],[11,4],[47,1],[47,3],[49,1],[49,2],[48,2],[48,3],[52,2],[52,2],[53,4],[53,4],[12,1],[12,2],[60,3],[61,2],[36,3],[36,3],[36,3],[36,3],[36,3],[36,5],[36,3],[36,2],[36,1],[36,1],[72,3],[72,4],[74,4],[79,1],[76,2],[70,3],[50,1],[50,1],[50,1],[50,1],[50,1],[50,1],[50,1],[25,1],[29,1],[84,1],[85,1],[81,1],[81,1],[22,1],[22,3],[82,4],[83,4],[83,4],[94,1],[94,2],[63,1],[63,3],[17,1],[17,3],[96,1],[96,1],[96,3]], performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { /* this == yyval */ @@ -86,7 +86,7 @@ switch (yystate) { case 1: return this.$ = $$[$0-1]; break; -case 2: case 4: case 5: case 6: case 11: case 53: case 65: case 72: case 73: case 74: case 75: case 76: case 77: case 78: +case 2: case 4: case 5: case 6: case 11: case 53: case 65: case 66: case 73: case 74: case 75: case 76: case 77: case 78: case 79: this.$ = $$[$0]; break; case 3: @@ -150,7 +150,7 @@ break; case 20: case 49: case 50: case 51: case 52: case 57: this.$ = $$[$0-1]; break; -case 21: case 66: +case 21: case 72: this.$ = new yy.SubSelect($$[$0-1]); break; case 22: @@ -261,31 +261,31 @@ break; case 71: this.$ = new yy.CaseElse($$[$0]); break; -case 79: +case 80: this.$ = new yy.ListValue($$[$0]); break; -case 80: +case 81: this.$ = new yy.NumberValue($$[$0]); break; -case 81: +case 82: this.$ = new yy.BooleanValue($$[$0]); break; -case 82: +case 83: this.$ = new yy.ParameterValue($$[$0]); break; -case 83: +case 84: this.$ = new yy.StringValue($$[$0], "'"); break; -case 84: +case 85: this.$ = new yy.StringValue($$[$0], '"'); break; -case 85: +case 86: this.$ = new yy.LiteralValue($$[$0]); break; -case 86: +case 87: this.$ = new yy.LiteralValue($$[$0-2], $$[$0]); break; -case 87: case 88: +case 88: this.$ = new yy.FunctionValue($$[$0-3], $$[$0-1]); break; case 89: case 90: @@ -300,15 +300,15 @@ break; case 97: this.$ = new yy.Star(); break; -case 98: case 100: +case 98: this.$ = new yy.Field($$[$0]); break; -case 99: case 101: +case 99: this.$ = new yy.Field($$[$0-2], $$[$0]); break; } }, -table: [{3:1,4:2,6:3,8:4,9:5,10:6,14:7,16:$V0},{1:[3]},{5:[1,9]},o($V1,[2,2],{7:10,13:11,30:12,31:$V2,42:$V3}),o($V4,[2,4]),o($V4,[2,5]),o($V4,[2,6],{11:15,12:16,60:18,45:$V5,62:[1,19]}),o($V6,[2,11],{15:20,41:[1,21]}),{17:22,20:[1,23],22:32,24:$V7,29:33,36:26,50:29,71:$V8,72:27,73:$V9,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg,95:24,96:$Vh},{1:[2,1]},o($V1,[2,3],{30:46,31:$V2}),o($V4,[2,10]),o($Vi,[2,24]),{29:47,86:$Va},{6:48,8:4,9:5,10:6,14:7,16:$V0,32:[1,49]},o($V4,[2,7]),o($V4,[2,8],{11:50,45:$V5}),{46:[1,51]},o($Vj,[2,53],{61:52,64:[1,53]}),{46:[1,54]},o($V6,[2,12]),{22:32,24:$V7,29:33,36:55,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{18:[1,56],43:$Vk},{17:58,22:32,24:$V7,29:33,36:26,50:29,71:$V8,72:27,73:$V9,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg,95:24,96:$Vh},o($Vl,[2,95]),o($Vl,[2,97]),o($Vl,[2,98],{23:[1,59],65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($Vl,[2,100],{23:[1,64]}),{22:32,24:$V7,29:33,36:65,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($Vq,[2,65],{69:[1,66]}),{24:[1,68],70:67},{74:69,77:[1,70]},o($Vr,[2,72],{92:$Vs}),o($Vr,[2,73]),o($Vr,[2,74]),o($Vr,[2,75]),o($Vr,[2,76]),o($Vr,[2,77]),o($Vr,[2,78]),o([5,18,23,26,31,34,37,38,41,42,43,44,45,51,62,64,65,66,67,68,69,75,78,80,92],$Vt,{24:[1,72]}),o([5,18,23,26,31,34,37,38,41,42,43,44,45,51,54,55,62,64,65,66,67,68,69,75,78,80],[2,80]),o($Vr,[2,83]),o($Vr,[2,84]),{24:[1,73]},o($Vr,[2,81]),o($Vr,[2,82]),o($Vi,[2,25]),o($V4,[2,38],{43:[1,74],44:[1,75]}),o($Vi,[2,26],{13:11,42:$V3}),{6:76,8:4,9:5,10:6,14:7,16:$V0},o($V4,[2,9]),{22:32,29:33,47:77,49:78,50:79,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($Vj,[2,54]),{22:32,24:$V7,29:33,36:80,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:32,24:$V7,29:33,36:82,50:29,63:81,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($V6,[2,37],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),{19:83,22:84,24:$Vu,91:$Vv},{22:32,24:$V7,29:33,36:26,50:29,71:$V8,72:27,73:$V9,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg,95:87,96:$Vh},{18:[1,88],43:$Vk},{22:89,91:$Vv},{22:32,24:$V7,29:33,36:90,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:32,24:$V7,29:33,36:91,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:32,24:$V7,29:33,36:92,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:32,24:$V7,29:33,36:93,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:94,91:$Vv},{26:[1,95],65:$Vm,66:$Vn,67:$Vo,68:$Vp},{24:[1,96],70:97},o($Vq,[2,64]),{4:98,6:3,8:4,9:5,10:6,14:7,16:$V0},{75:[1,99],76:100,80:[1,101]},{22:32,24:$V7,29:33,36:102,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{91:[1,103]},{20:$Vw,22:32,24:$V7,29:33,36:82,50:29,63:106,71:$V8,72:105,73:$V9,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg,94:104},{20:$Vw,22:32,24:$V7,29:33,36:82,50:29,63:106,71:$V8,72:109,73:$V9,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg,94:108},{29:110,86:$Va},{29:111,86:$Va},o($Vi,[2,27],{13:11,42:$V3}),o($V4,[2,41],{48:112,43:[1,113],44:[1,114]}),o($Vx,[2,43]),o($Vx,[2,45],{51:[1,115]}),o($Vj,[2,56],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o([5,26,31,42,45,64],[2,55],{43:$Vy}),o($Vz,[2,93],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($VA,[2,13],{21:117,33:118,34:$VB,37:$VC,38:$VD}),o($VE,[2,17],{22:122,23:[1,123],27:[1,124],91:$Vv,92:$Vs}),{4:126,6:3,8:4,9:5,10:6,14:7,16:$V0,22:32,24:$V7,25:125,29:33,36:82,50:29,63:127,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o([5,18,23,26,27,31,34,35,37,38,41,42,43,45,62,91,92],$Vt),o($Vl,[2,96]),{19:128,22:84,24:$Vu,91:$Vv},o($Vl,[2,99],{92:$Vs}),o([5,18,23,26,31,34,37,38,41,42,43,45,62,64,65,67,68,75,78,80],[2,58],{66:$Vn}),o($Vq,[2,59]),o([5,18,23,26,31,34,37,38,41,42,43,45,62,64,67,68,75,78,80],[2,60],{65:$Vm,66:$Vn}),o([5,18,23,26,31,34,37,38,41,42,43,45,62,64,68,75,78,80],[2,61],{65:$Vm,66:$Vn,67:$Vo}),o($Vl,[2,101],{92:$Vs}),o($Vq,[2,57]),{4:98,6:3,8:4,9:5,10:6,14:7,16:$V0,22:32,24:$V7,25:129,29:33,36:82,50:29,63:127,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($Vq,[2,63]),{26:[1,130]},o($VF,[2,67]),{75:[1,131]},{22:32,24:$V7,29:33,36:132,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{65:$Vm,66:$Vn,67:$Vo,68:$Vp,78:[1,133]},o([5,18,23,26,27,31,34,35,37,38,41,42,43,44,45,51,62,64,65,66,67,68,69,75,78,80,91,92],[2,86]),{26:[1,134]},{26:[1,135]},{26:[2,91],43:$Vy},{22:32,24:$V7,29:33,36:82,50:29,63:136,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{26:[1,137]},{26:[1,138]},o($V4,[2,39]),o($V4,[2,40]),o($V4,[2,42]),{22:32,29:33,49:139,50:79,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{29:141,52:140,86:$Va},o($Vx,[2,46]),{22:32,29:33,50:142,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($VA,[2,15],{33:143,34:$VB,37:$VC,38:$VD}),o($VG,[2,28]),{19:144,22:84,24:$Vu,91:$Vv},{34:[1,145],39:[1,146],40:[1,147]},{34:[1,148],39:[1,149],40:[1,150]},o($VE,[2,18],{92:$Vs}),{22:151,91:$Vv},{28:[1,152]},{26:[1,153]},{26:[1,154]},{26:[2,79],43:$Vy},o($VA,[2,14],{33:118,21:155,34:$VB,37:$VC,38:$VD}),{26:[1,156]},o($Vq,[2,66]),o($VF,[2,68]),{65:$Vm,66:$Vn,67:$Vo,68:$Vp,75:[2,71]},{22:32,24:$V7,29:33,36:157,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($Vr,[2,89]),o($Vr,[2,90]),{26:[2,92],43:$Vy},o($Vr,[2,87]),o($Vr,[2,88]),o($Vx,[2,44]),o($V4,[2,47],{53:158,56:[1,159]}),{54:[1,160],55:[1,161]},o($Vz,[2,94]),o($VG,[2,29]),{35:[1,162]},{19:163,22:84,24:$Vu,91:$Vv},{34:[1,164]},{34:[1,165]},{19:166,22:84,24:$Vu,91:$Vv},{34:[1,167]},{34:[1,168]},o($VE,[2,19],{92:$Vs}),{24:[1,169]},o($VE,[2,20]),o($VE,[2,21],{22:170,91:$Vv}),o($VA,[2,16],{33:143,34:$VB,37:$VC,38:$VD}),o($Vq,[2,62]),o([75,80],[2,69],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($V4,[2,48]),{57:[1,171],59:[1,172]},o($VH,[2,49]),o($VH,[2,50]),{22:32,24:$V7,29:33,36:173,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{35:[1,174]},{19:175,22:84,24:$Vu,91:$Vv},{19:176,22:84,24:$Vu,91:$Vv},{35:[1,177]},{19:178,22:84,24:$Vu,91:$Vv},{19:179,22:84,24:$Vu,91:$Vv},{29:180,86:$Va},o($VE,[2,22],{92:$Vs}),{29:141,52:181,86:$Va},{29:141,52:182,86:$Va},o($VG,[2,30],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),{22:32,24:$V7,29:33,36:183,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{35:[1,184]},{35:[1,185]},{22:32,24:$V7,29:33,36:186,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{35:[1,187]},{35:[1,188]},{26:[1,189]},{58:[1,190]},{58:[1,191]},o($VG,[2,31],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),{22:32,24:$V7,29:33,36:192,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:32,24:$V7,29:33,36:193,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($VG,[2,32],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),{22:32,24:$V7,29:33,36:194,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:32,24:$V7,29:33,36:195,50:29,71:$V8,81:34,82:35,83:36,84:37,85:38,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($VE,[2,23]),o($V4,[2,51]),o($V4,[2,52]),o($VG,[2,33],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($VG,[2,35],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($VG,[2,34],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($VG,[2,36],{65:$Vm,66:$Vn,67:$Vo,68:$Vp})], +table: [{3:1,4:2,6:3,8:4,9:5,10:6,14:7,16:$V0},{1:[3]},{5:[1,9]},o($V1,[2,2],{7:10,13:11,30:12,31:$V2,42:$V3}),o($V4,[2,4]),o($V4,[2,5]),o($V4,[2,6],{11:15,12:16,60:18,45:$V5,62:[1,19]}),o($V6,[2,11],{15:20,41:[1,21]}),{17:22,20:[1,23],22:31,24:$V7,29:32,36:26,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg,96:24,97:$Vh},{1:[2,1]},o($V1,[2,3],{30:46,31:$V2}),o($V4,[2,10]),o($Vi,[2,24]),{29:47,86:$Va},{6:48,8:4,9:5,10:6,14:7,16:$V0,32:[1,49]},o($V4,[2,7]),o($V4,[2,8],{11:50,45:$V5}),{46:[1,51]},o($Vj,[2,53],{61:52,64:[1,53]}),{46:[1,54]},o($V6,[2,12]),{22:31,24:$V7,29:32,36:55,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{18:[1,56],43:$Vk},{17:58,22:31,24:$V7,29:32,36:26,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg,96:24,97:$Vh},o($Vl,[2,95]),o($Vl,[2,97]),o($Vl,[2,98],{23:[1,59],65:$Vm,66:$Vn,67:$Vo,68:$Vp}),{22:31,24:$V7,29:32,36:64,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($Vq,[2,66],{69:[1,65]}),{24:[1,67],70:66},o($Vq,[2,65]),o($Vr,[2,73],{92:$Vs}),o($Vr,[2,74]),o($Vr,[2,75]),o($Vr,[2,76]),o($Vr,[2,77]),o($Vr,[2,78]),o($Vr,[2,79]),{74:69,77:[1,70]},o([5,18,23,26,31,34,37,38,41,42,43,44,45,51,62,64,65,66,67,68,69,75,78,80,92],$Vt,{24:[1,71]}),o([5,18,23,26,31,34,37,38,41,42,43,44,45,51,54,55,62,64,65,66,67,68,69,75,78,80],[2,81]),o($Vr,[2,84]),o($Vr,[2,85]),{24:[1,72]},o($Vr,[2,82]),o($Vr,[2,83]),o($Vi,[2,25]),o($V4,[2,38],{43:[1,73],44:[1,74]}),o($Vi,[2,26],{13:11,42:$V3}),{6:75,8:4,9:5,10:6,14:7,16:$V0},o($V4,[2,9]),{22:31,29:32,47:76,49:77,50:78,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($Vj,[2,54]),{22:31,24:$V7,29:32,36:79,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:31,24:$V7,29:32,36:81,50:28,63:80,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($V6,[2,37],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),{19:82,22:83,24:$Vu,91:$Vv},{22:31,24:$V7,29:32,36:26,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg,96:86,97:$Vh},{18:[1,87],43:$Vk},{22:88,91:$Vv},{22:31,24:$V7,29:32,36:89,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:31,24:$V7,29:32,36:90,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:31,24:$V7,29:32,36:91,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:31,24:$V7,29:32,36:92,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{26:[1,93],65:$Vm,66:$Vn,67:$Vo,68:$Vp},{24:[1,94],70:95},o($Vq,[2,64]),{4:96,6:3,8:4,9:5,10:6,14:7,16:$V0},{91:[1,97]},{75:[1,98],76:99,80:[1,100]},{22:31,24:$V7,29:32,36:101,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{20:$Vw,22:31,24:$V7,29:32,36:81,50:28,63:104,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg,94:102,95:[1,103]},{20:$Vw,22:31,24:$V7,29:32,36:81,50:28,63:104,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg,94:106},{29:107,86:$Va},{29:108,86:$Va},o($Vi,[2,27],{13:11,42:$V3}),o($V4,[2,41],{48:109,43:[1,110],44:[1,111]}),o($Vx,[2,43]),o($Vx,[2,45],{51:[1,112]}),o($Vj,[2,56],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o([5,26,31,42,45,64],[2,55],{43:$Vy}),o($Vz,[2,93],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($VA,[2,13],{21:114,33:115,34:$VB,37:$VC,38:$VD}),o($VE,[2,17],{22:119,23:[1,120],27:[1,121],91:$Vv,92:$Vs}),{4:123,6:3,8:4,9:5,10:6,14:7,16:$V0,22:31,24:$V7,25:122,29:32,36:81,50:28,63:124,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o([5,18,23,26,27,31,34,35,37,38,41,42,43,45,62,91,92],$Vt),o($Vl,[2,96]),{19:125,22:83,24:$Vu,91:$Vv},o($Vl,[2,99],{92:$Vs}),o([5,18,23,26,31,34,37,38,41,42,43,45,62,64,65,67,68,75,78,80],[2,58],{66:$Vn}),o($Vq,[2,59]),o([5,18,23,26,31,34,37,38,41,42,43,45,62,64,67,68,75,78,80],[2,60],{65:$Vm,66:$Vn}),o([5,18,23,26,31,34,37,38,41,42,43,45,62,64,68,75,78,80],[2,61],{65:$Vm,66:$Vn,67:$Vo}),o($Vq,[2,57]),{4:96,6:3,8:4,9:5,10:6,14:7,16:$V0,22:31,24:$V7,25:126,29:32,36:81,50:28,63:124,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($Vq,[2,63]),{26:[1,127]},o([5,18,23,26,27,31,34,35,37,38,41,42,43,44,45,51,62,64,65,66,67,68,69,75,78,80,91,92],[2,87]),o($Vq,[2,67]),{75:[1,128]},{22:31,24:$V7,29:32,36:129,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{65:$Vm,66:$Vn,67:$Vo,68:$Vp,78:[1,130]},{26:[1,131]},{26:[1,132]},{26:[2,91],43:$Vy},{22:31,24:$V7,29:32,36:81,50:28,63:133,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{26:[1,134]},o($V4,[2,39]),o($V4,[2,40]),o($V4,[2,42]),{22:31,29:32,49:135,50:78,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{29:137,52:136,86:$Va},o($Vx,[2,46]),{22:31,29:32,50:138,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($VA,[2,15],{33:139,34:$VB,37:$VC,38:$VD}),o($VF,[2,28]),{19:140,22:83,24:$Vu,91:$Vv},{34:[1,141],39:[1,142],40:[1,143]},{34:[1,144],39:[1,145],40:[1,146]},o($VE,[2,18],{92:$Vs}),{22:147,91:$Vv},{28:[1,148]},{26:[1,149]},{26:[1,150]},{26:[2,80],43:$Vy},o($VA,[2,14],{33:115,21:151,34:$VB,37:$VC,38:$VD}),{26:[1,152]},o($Vq,[2,72]),o($Vq,[2,68]),{65:$Vm,66:$Vn,67:$Vo,68:$Vp,75:[2,71]},{22:31,24:$V7,29:32,36:153,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($Vr,[2,89]),o($Vr,[2,90]),{26:[2,92],43:$Vy},o($Vr,[2,88]),o($Vx,[2,44]),o($V4,[2,47],{53:154,56:[1,155]}),{54:[1,156],55:[1,157]},o($Vz,[2,94]),o($VF,[2,29]),{35:[1,158]},{19:159,22:83,24:$Vu,91:$Vv},{34:[1,160]},{34:[1,161]},{19:162,22:83,24:$Vu,91:$Vv},{34:[1,163]},{34:[1,164]},o($VE,[2,19],{92:$Vs}),{24:[1,165]},o($VE,[2,20]),o($VE,[2,21],{22:166,91:$Vv}),o($VA,[2,16],{33:139,34:$VB,37:$VC,38:$VD}),o($Vq,[2,62]),o([75,80],[2,69],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($V4,[2,48]),{57:[1,167],59:[1,168]},o($VG,[2,49]),o($VG,[2,50]),{22:31,24:$V7,29:32,36:169,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{35:[1,170]},{19:171,22:83,24:$Vu,91:$Vv},{19:172,22:83,24:$Vu,91:$Vv},{35:[1,173]},{19:174,22:83,24:$Vu,91:$Vv},{19:175,22:83,24:$Vu,91:$Vv},{29:176,86:$Va},o($VE,[2,22],{92:$Vs}),{29:137,52:177,86:$Va},{29:137,52:178,86:$Va},o($VF,[2,30],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),{22:31,24:$V7,29:32,36:179,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{35:[1,180]},{35:[1,181]},{22:31,24:$V7,29:32,36:182,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{35:[1,183]},{35:[1,184]},{26:[1,185]},{58:[1,186]},{58:[1,187]},o($VF,[2,31],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),{22:31,24:$V7,29:32,36:188,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:31,24:$V7,29:32,36:189,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($VF,[2,32],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),{22:31,24:$V7,29:32,36:190,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},{22:31,24:$V7,29:32,36:191,50:28,71:$V8,72:30,73:$V9,81:33,82:34,83:35,84:36,85:37,86:$Va,87:$Vb,88:$Vc,89:$Vd,90:$Ve,91:$Vf,93:$Vg},o($VE,[2,23]),o($V4,[2,51]),o($V4,[2,52]),o($VF,[2,33],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($VF,[2,35],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($VF,[2,34],{65:$Vm,66:$Vn,67:$Vo,68:$Vp}),o($VF,[2,36],{65:$Vm,66:$Vn,67:$Vo,68:$Vp})], defaultActions: {9:[2,1]}, parseError: function parseError(str, hash) { if (hash.recoverable) { diff --git a/lib/grammar.js b/lib/grammar.js index 18c1b13..71870bf 100644 --- a/lib/grammar.js +++ b/lib/grammar.js @@ -206,14 +206,9 @@ return new Op($2, $1, $3); }), o('SUB_SELECT_UNARY_OP SubSelectExpression', function() { return new UnaryOp($1, $2); - }), o('Value') + }), o('CaseStatement'), o('Value') ], - SubSelectExpression: [ - o('LEFT_PAREN Query RIGHT_PAREN', function() { - return new SubSelect($2); - }) - ], - Case: [ + CaseStatement: [ o('CASE CaseWhen END', function() { return new Case($2); }), o('CASE CaseWhen CaseElse END', function() { @@ -237,6 +232,11 @@ return new CaseElse($2); }) ], + SubSelectExpression: [ + o('LEFT_PAREN Query RIGHT_PAREN', function() { + return new SubSelect($2); + }) + ], Value: [o('Literal'), o('Number'), o('String'), o('Function'), o('UserFunction'), o('Boolean'), o('Parameter')], List: [ o('ArgumentList', function() { @@ -275,8 +275,6 @@ Function: [ o("FUNCTION LEFT_PAREN AggregateArgumentList RIGHT_PAREN", function() { return new FunctionValue($1, $3); - }), o("FUNCTION LEFT_PAREN Case RIGHT_PAREN", function() { - return new FunctionValue($1, $3); }) ], UserFunction: [ @@ -314,10 +312,6 @@ return new Field($1); }), o('Expression AS Literal', function() { return new Field($1, $3); - }), o('Case', function() { - return new Field($1); - }), o('Case AS Literal', function() { - return new Field($1, $3); }) ] }; diff --git a/src/grammar.coffee b/src/grammar.coffee index 029e35b..81bbd80 100644 --- a/src/grammar.coffee +++ b/src/grammar.coffee @@ -147,14 +147,11 @@ grammar = o 'Value SUB_SELECT_OP LEFT_PAREN List RIGHT_PAREN', -> new Op($2, $1, $4) o 'Value SUB_SELECT_OP SubSelectExpression', -> new Op($2, $1, $3) o 'SUB_SELECT_UNARY_OP SubSelectExpression', -> new UnaryOp($1, $2) + o 'CaseStatement' o 'Value' ] - SubSelectExpression: [ - o 'LEFT_PAREN Query RIGHT_PAREN', -> new SubSelect($2) - ] - - Case: [ + CaseStatement: [ o 'CASE CaseWhen END', -> new Case($2) o 'CASE CaseWhen CaseElse END', -> new Case($2, $3) ] @@ -172,6 +169,10 @@ grammar = o 'ELSE Expression', -> new CaseElse($2) ] + SubSelectExpression: [ + o 'LEFT_PAREN Query RIGHT_PAREN', -> new SubSelect($2) + ] + Value: [ o 'Literal' o 'Number' @@ -210,7 +211,6 @@ grammar = Function: [ o "FUNCTION LEFT_PAREN AggregateArgumentList RIGHT_PAREN", -> new FunctionValue($1, $3) - o "FUNCTION LEFT_PAREN Case RIGHT_PAREN", -> new FunctionValue($1, $3) ] UserFunction: [ @@ -237,8 +237,6 @@ grammar = o 'STAR', -> new Star() o 'Expression', -> new Field($1) o 'Expression AS Literal', -> new Field($1, $3) - o 'Case', -> new Field($1) - o 'Case AS Literal', -> new Field($1, $3) ] tokens = [] From 4039c90919d06984517b744976989a90d6347778 Mon Sep 17 00:00:00 2001 From: Josh Ferguson Date: Sat, 9 May 2015 15:39:30 -0700 Subject: [PATCH 3/3] add current offset to the lexer --- browser/sql-parser.js | 4 +++- lib/lexer.js | 4 +++- src/lexer.coffee | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/browser/sql-parser.js b/browser/sql-parser.js index ad6af81..12d84f6 100644 --- a/browser/sql-parser.js +++ b/browser/sql-parser.js @@ -19,6 +19,7 @@ this.preserveWhitespace = opts.preserveWhitespace || false; this.tokens = []; this.currentLine = 1; + this.currentOffset = 0; i = 0; while (this.chunk = sql.slice(i)) { bytesConsumed = this.keywordToken() || this.starToken() || this.booleanToken() || this.functionToken() || this.windowExtension() || this.sortOrderToken() || this.seperatorToken() || this.operatorToken() || this.mathToken() || this.dotToken() || this.conditionalToken() || this.subSelectOpToken() || this.subSelectUnaryOpToken() || this.numberToken() || this.stringToken() || this.parameterToken() || this.parensToken() || this.whitespaceToken() || this.literalToken(); @@ -26,6 +27,7 @@ throw new Error("NOTHING CONSUMED: Stopped at - '" + (this.chunk.slice(0, 30)) + "'"); } i += bytesConsumed; + this.currentOffset += bytesConsumed; } this.token('EOF', ''); this.postProcess(); @@ -52,7 +54,7 @@ }; Lexer.prototype.token = function(name, value) { - return this.tokens.push([name, value, this.currentLine]); + return this.tokens.push([name, value, this.currentLine, this.currentOffset]); }; Lexer.prototype.tokenizeFromRegex = function(name, regex, part, lengthPart, output) { diff --git a/lib/lexer.js b/lib/lexer.js index 9fcad97..e81c3f6 100644 --- a/lib/lexer.js +++ b/lib/lexer.js @@ -14,6 +14,7 @@ this.preserveWhitespace = opts.preserveWhitespace || false; this.tokens = []; this.currentLine = 1; + this.currentOffset = 0; i = 0; while (this.chunk = sql.slice(i)) { bytesConsumed = this.keywordToken() || this.starToken() || this.booleanToken() || this.functionToken() || this.windowExtension() || this.sortOrderToken() || this.seperatorToken() || this.operatorToken() || this.mathToken() || this.dotToken() || this.conditionalToken() || this.subSelectOpToken() || this.subSelectUnaryOpToken() || this.numberToken() || this.stringToken() || this.parameterToken() || this.parensToken() || this.whitespaceToken() || this.literalToken(); @@ -21,6 +22,7 @@ throw new Error("NOTHING CONSUMED: Stopped at - '" + (this.chunk.slice(0, 30)) + "'"); } i += bytesConsumed; + this.currentOffset += bytesConsumed; } this.token('EOF', ''); this.postProcess(); @@ -47,7 +49,7 @@ }; Lexer.prototype.token = function(name, value) { - return this.tokens.push([name, value, this.currentLine]); + return this.tokens.push([name, value, this.currentLine, this.currentOffset]); }; Lexer.prototype.tokenizeFromRegex = function(name, regex, part, lengthPart, output) { diff --git a/src/lexer.coffee b/src/lexer.coffee index 226bb39..7795dd0 100644 --- a/src/lexer.coffee +++ b/src/lexer.coffee @@ -4,6 +4,7 @@ class Lexer @preserveWhitespace = opts.preserveWhitespace || false @tokens = [] @currentLine = 1 + @currentOffset = 0 i = 0 while @chunk = sql.slice(i) bytesConsumed = @keywordToken() or @@ -27,6 +28,7 @@ class Lexer @literalToken() throw new Error("NOTHING CONSUMED: Stopped at - '#{@chunk.slice(0,30)}'") if bytesConsumed < 1 i += bytesConsumed + @currentOffset += bytesConsumed @token('EOF', '') @postProcess() @@ -38,7 +40,7 @@ class Lexer token[0] = 'MATH_MULTI' token: (name, value) -> - @tokens.push([name, value, @currentLine]) + @tokens.push([name, value, @currentLine, @currentOffset]) tokenizeFromRegex: (name, regex, part=0, lengthPart=part, output=true) -> return 0 unless match = regex.exec(@chunk)