From b02b36b2a26216469192cc2391690c9a8c173cc8 Mon Sep 17 00:00:00 2001 From: Peinthor Rene Date: Tue, 10 Jun 2014 23:09:11 +0200 Subject: [PATCH] fix create table statements with IN operator fixes issue #34 IN wasn't added to the token list and not enabled in the suffix expression as this gives a parser generator warning, because of an ambiguity with IN as an operator we stick with the warning right now --- src/grammar/Sqlite3Lexer.cpp | 51 ++--- src/grammar/Sqlite3Parser.cpp | 334 +++++++++++++++++++----------- src/grammar/Sqlite3Parser.hpp | 6 +- src/grammar/sqlite3.g | 3 +- src/grammar/sqlite3TokenTypes.hpp | 136 ++++++------ 5 files changed, 317 insertions(+), 213 deletions(-) diff --git a/src/grammar/Sqlite3Lexer.cpp b/src/grammar/Sqlite3Lexer.cpp index 6cab00a0..98b05e88 100644 --- a/src/grammar/Sqlite3Lexer.cpp +++ b/src/grammar/Sqlite3Lexer.cpp @@ -1,4 +1,4 @@ -/* $ANTLR 2.7.7 (20130425): "sqlite3.g" -> "Sqlite3Lexer.cpp"$ */ +/* $ANTLR 2.7.7 (20140222): "sqlite3.g" -> "Sqlite3Lexer.cpp"$ */ #include "Sqlite3Lexer.hpp" #include #include @@ -33,33 +33,33 @@ void Sqlite3Lexer::initLiterals() literals["CASE"] = 12; literals["END"] = 28; literals["CASCADE"] = 11; - literals["TEMPORARY"] = 55; + literals["TEMPORARY"] = 56; literals["DEFERRABLE"] = 23; - literals["IMMEDIATE"] = 39; + literals["IMMEDIATE"] = 40; literals["AUTOINCREMENT"] = 6; - literals["ROWID"] = 53; - literals["EXISTS"] = 44; - literals["THEN"] = 57; + literals["ROWID"] = 54; + literals["EXISTS"] = 45; + literals["THEN"] = 58; literals["AND"] = 9; literals["CURRENT_DATE"] = 20; - literals["NOT"] = 41; + literals["NOT"] = 42; literals["KEY"] = 33; literals["COLLATE"] = 16; - literals["NULL"] = 42; - literals["TEMP"] = 56; - literals["INITIALLY"] = 38; - literals["RESTRICT"] = 51; + literals["NULL"] = 43; + literals["TEMP"] = 57; + literals["INITIALLY"] = 39; + literals["RESTRICT"] = 52; literals["LIKE"] = 34; - literals["WHEN"] = 60; + literals["WHEN"] = 61; literals["FOREIGN"] = 31; - literals["SET"] = 54; - literals["IS"] = 40; + literals["SET"] = 55; + literals["IS"] = 41; literals["OR"] = 10; - literals["PRIMARY"] = 46; + literals["PRIMARY"] = 47; literals["DEFERRED"] = 24; - literals["UPDATE"] = 59; + literals["UPDATE"] = 60; literals["IF"] = 36; - literals["UNIQUE"] = 58; + literals["UNIQUE"] = 59; literals["AS"] = 7; literals["TABLE"] = 35; literals["DEFAULT"] = 22; @@ -69,22 +69,23 @@ void Sqlite3Lexer::initLiterals() literals["IGNORE"] = 37; literals["CURRENT_TIMESTAMP"] = 21; literals["CONFLICT"] = 17; - literals["REPLACE"] = 50; + literals["REPLACE"] = 51; literals["ASC"] = 8; literals["FAIL"] = 30; - literals["REGEXP"] = 49; - literals["REFERENCES"] = 48; - literals["ON"] = 45; + literals["REGEXP"] = 50; + literals["REFERENCES"] = 49; + literals["ON"] = 46; literals["DESC"] = 26; + literals["IN"] = 38; literals["CAST"] = 13; literals["ESCAPE"] = 29; literals["ELSE"] = 27; - literals["WITHOUT"] = 61; - literals["MATCH"] = 43; - literals["RAISE"] = 47; + literals["WITHOUT"] = 62; + literals["MATCH"] = 44; + literals["RAISE"] = 48; literals["ABORT"] = 4; literals["CHECK"] = 14; - literals["ROLLBACK"] = 52; + literals["ROLLBACK"] = 53; literals["CURRENT_TIME"] = 19; } diff --git a/src/grammar/Sqlite3Parser.cpp b/src/grammar/Sqlite3Parser.cpp index f6944547..f955cc7d 100644 --- a/src/grammar/Sqlite3Parser.cpp +++ b/src/grammar/Sqlite3Parser.cpp @@ -1,4 +1,4 @@ -/* $ANTLR 2.7.7 (20130425): "sqlite3.g" -> "Sqlite3Parser.cpp"$ */ +/* $ANTLR 2.7.7 (20140222): "sqlite3.g" -> "Sqlite3Parser.cpp"$ */ #include "Sqlite3Parser.hpp" #include #include @@ -2719,6 +2719,7 @@ void Sqlite3Parser::expr() { switch ( LA(1)) { case GLOB: case LIKE: + case IN: case IS: case MATCH: case REGEXP: @@ -2740,7 +2741,6 @@ void Sqlite3Parser::expr() { case BITWISERIGHT: case SLASH: case PERCENT: - case IN: { binaryoperator(); break; @@ -2781,6 +2781,7 @@ void Sqlite3Parser::expr() { switch ( LA(1)) { case GLOB: case LIKE: + case IN: case IS: case MATCH: case REGEXP: @@ -2802,7 +2803,6 @@ void Sqlite3Parser::expr() { case BITWISERIGHT: case SLASH: case PERCENT: - case IN: { binaryoperator(); if (inputState->guessing==0) { @@ -3614,63 +3614,25 @@ void Sqlite3Parser::subexpr() { } } { - switch ( LA(1)) { - case COLLATE: - { + if ((LA(1) == COLLATE || LA(1) == IN) && (_tokenSet_26.member(LA(2)))) { suffixexpr(); if (inputState->guessing==0) { astFactory->addASTChild( currentAST, returnAST ); } - break; } - case AS: - case AND: - case OR: - case ELSE_T: - case END: - case GLOB: - case LIKE: - case IS: - case MATCH: - case REGEXP: - case THEN: - case WHEN: - case RPAREN: - case COMMA: - case PLUS: - case MINUS: - case STAR: - case AMPERSAND: - case BITOR: - case OROP: - case EQUAL: - case EQUAL2: - case GREATER: - case GREATEREQUAL: - case LOWER: - case LOWEREQUAL: - case UNEQUAL: - case UNEQUAL2: - case BITWISELEFT: - case BITWISERIGHT: - case SLASH: - case PERCENT: - case IN: - { - break; + else if ((_tokenSet_27.member(LA(1))) && (_tokenSet_28.member(LA(2)))) { } - default: - { + else { throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename()); } - } + } subexpr_AST = currentAST.root; } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { if( inputState->guessing == 0 ) { reportError(ex); - recover(ex,_tokenSet_26); + recover(ex,_tokenSet_27); } else { throw; } @@ -4340,22 +4302,144 @@ void Sqlite3Parser::suffixexpr() { ANTLR_USE_NAMESPACE(antlr)RefAST suffixexpr_AST = ANTLR_USE_NAMESPACE(antlr)nullAST; try { // for error handling - ANTLR_USE_NAMESPACE(antlr)RefAST tmp238_AST = ANTLR_USE_NAMESPACE(antlr)nullAST; - if ( inputState->guessing == 0 ) { - tmp238_AST = astFactory->create(LT(1)); - astFactory->addASTChild(currentAST, tmp238_AST); + switch ( LA(1)) { + case COLLATE: + { + ANTLR_USE_NAMESPACE(antlr)RefAST tmp238_AST = ANTLR_USE_NAMESPACE(antlr)nullAST; + if ( inputState->guessing == 0 ) { + tmp238_AST = astFactory->create(LT(1)); + astFactory->addASTChild(currentAST, tmp238_AST); + } + match(COLLATE); + collationname(); + if (inputState->guessing==0) { + astFactory->addASTChild( currentAST, returnAST ); + } + suffixexpr_AST = currentAST.root; + break; + } + case IN: + { + ANTLR_USE_NAMESPACE(antlr)RefAST tmp239_AST = ANTLR_USE_NAMESPACE(antlr)nullAST; + if ( inputState->guessing == 0 ) { + tmp239_AST = astFactory->create(LT(1)); + astFactory->addASTChild(currentAST, tmp239_AST); + } + match(IN); + { + switch ( LA(1)) { + case LPAREN: + { + ANTLR_USE_NAMESPACE(antlr)RefAST tmp240_AST = ANTLR_USE_NAMESPACE(antlr)nullAST; + if ( inputState->guessing == 0 ) { + tmp240_AST = astFactory->create(LT(1)); + astFactory->addASTChild(currentAST, tmp240_AST); + } + match(LPAREN); + { + switch ( LA(1)) { + case SELECT: + { + selectstmt(); + if (inputState->guessing==0) { + astFactory->addASTChild( currentAST, returnAST ); + } + break; + } + case CASE_T: + case CAST: + case CURRENT_TIME: + case CURRENT_DATE: + case CURRENT_TIMESTAMP: + case NOT: + case NULL_T: + case EXISTS: + case RAISE: + case ID: + case QUOTEDID: + case QUOTEDLITERAL: + case NUMERIC: + case STRINGLITERAL: + case LPAREN: + case PLUS: + case MINUS: + case TILDE: + { + expr(); + if (inputState->guessing==0) { + astFactory->addASTChild( currentAST, returnAST ); + } + { // ( ... )* + for (;;) { + if ((LA(1) == COMMA)) { + ANTLR_USE_NAMESPACE(antlr)RefAST tmp241_AST = ANTLR_USE_NAMESPACE(antlr)nullAST; + if ( inputState->guessing == 0 ) { + tmp241_AST = astFactory->create(LT(1)); + astFactory->addASTChild(currentAST, tmp241_AST); + } + match(COMMA); + expr(); + if (inputState->guessing==0) { + astFactory->addASTChild( currentAST, returnAST ); + } + } + else { + goto _loop178; + } + + } + _loop178:; + } // ( ... )* + break; + } + case RPAREN: + { + break; + } + default: + { + throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename()); + } + } + } + ANTLR_USE_NAMESPACE(antlr)RefAST tmp242_AST = ANTLR_USE_NAMESPACE(antlr)nullAST; + if ( inputState->guessing == 0 ) { + tmp242_AST = astFactory->create(LT(1)); + astFactory->addASTChild(currentAST, tmp242_AST); + } + match(RPAREN); + break; + } + case ID: + case QUOTEDID: + case QUOTEDLITERAL: + case STRINGLITERAL: + { + tablename(); + if (inputState->guessing==0) { + astFactory->addASTChild( currentAST, returnAST ); + } + break; + } + default: + { + throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename()); + } + } + } + suffixexpr_AST = currentAST.root; + break; + } + default: + { + throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename()); } - match(COLLATE); - collationname(); - if (inputState->guessing==0) { - astFactory->addASTChild( currentAST, returnAST ); } - suffixexpr_AST = currentAST.root; } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { if( inputState->guessing == 0 ) { reportError(ex); - recover(ex,_tokenSet_26); + recover(ex,_tokenSet_27); } else { throw; } @@ -4406,6 +4490,7 @@ const char* Sqlite3Parser::tokenNames[] = { "\"TABLE\"", "\"IF\"", "\"IGNORE\"", + "\"IN\"", "\"INITIALLY\"", "\"IMMEDIATE\"", "\"IS\"", @@ -4472,58 +4557,60 @@ const char* Sqlite3Parser::tokenNames[] = { "SELECT", "SLASH", "PERCENT", - "IN", 0 }; -const unsigned long Sqlite3Parser::_tokenSet_0_data_[] = { 415581826UL, 369323781UL, 4290495424UL, 463UL, 0UL, 0UL, 0UL, 0UL }; +const unsigned long Sqlite3Parser::_tokenSet_0_data_[] = { 415581826UL, 738647621UL, 4286023552UL, 415UL, 0UL, 0UL, 0UL, 0UL }; // EOF "AS" "AND" "OR" "CHECK" "COLLATE" "CONSTRAINT" "DEFAULT" "DEFERRABLE" -// "ELSE" "END" "GLOB" "LIKE" "IS" "NOT" "NULL" "MATCH" "ON" "PRIMARY" +// "ELSE" "END" "GLOB" "LIKE" "IN" "IS" "NOT" "NULL" "MATCH" "ON" "PRIMARY" // "REFERENCES" "REGEXP" "THEN" "UNIQUE" "WHEN" DOT ID QUOTEDID QUOTEDLITERAL // STRINGLITERAL LPAREN RPAREN COMMA PLUS MINUS STAR AMPERSAND BITOR OROP // EQUAL EQUAL2 GREATER GREATEREQUAL LOWER LOWEREQUAL UNEQUAL UNEQUAL2 -// BITWISELEFT BITWISERIGHT SLASH PERCENT IN +// BITWISELEFT BITWISERIGHT SLASH PERCENT const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Parser::_tokenSet_0(_tokenSet_0_data_,8); -const unsigned long Sqlite3Parser::_tokenSet_1_data_[] = { 0UL, 0UL, 64UL, 0UL, 0UL, 0UL, 0UL, 0UL }; +const unsigned long Sqlite3Parser::_tokenSet_1_data_[] = { 0UL, 0UL, 128UL, 0UL, 0UL, 0UL, 0UL, 0UL }; // DOT const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Parser::_tokenSet_1(_tokenSet_1_data_,8); -const unsigned long Sqlite3Parser::_tokenSet_2_data_[] = { 12927106UL, 67202560UL, 246656UL, 0UL, 0UL, 0UL, 0UL, 0UL }; -// EOF "AS" "CHECK" "COLLATE" "CONSTRAINT" "DEFAULT" "DEFERRABLE" "NOT" -// "NULL" "MATCH" "ON" "PRIMARY" "REFERENCES" "UNIQUE" ID QUOTEDID QUOTEDLITERAL -// STRINGLITERAL LPAREN RPAREN COMMA +const unsigned long Sqlite3Parser::_tokenSet_2_data_[] = { 415581826UL, 738647621UL, 4286023424UL, 415UL, 0UL, 0UL, 0UL, 0UL }; +// EOF "AS" "AND" "OR" "CHECK" "COLLATE" "CONSTRAINT" "DEFAULT" "DEFERRABLE" +// "ELSE" "END" "GLOB" "LIKE" "IN" "IS" "NOT" "NULL" "MATCH" "ON" "PRIMARY" +// "REFERENCES" "REGEXP" "THEN" "UNIQUE" "WHEN" ID QUOTEDID QUOTEDLITERAL +// STRINGLITERAL LPAREN RPAREN COMMA PLUS MINUS STAR AMPERSAND BITOR OROP +// EQUAL EQUAL2 GREATER GREATEREQUAL LOWER LOWEREQUAL UNEQUAL UNEQUAL2 +// BITWISELEFT BITWISERIGHT SLASH PERCENT const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Parser::_tokenSet_2(_tokenSet_2_data_,8); -const unsigned long Sqlite3Parser::_tokenSet_3_data_[] = { 407193216UL, 369315589UL, 4290462592UL, 463UL, 0UL, 0UL, 0UL, 0UL }; +const unsigned long Sqlite3Parser::_tokenSet_3_data_[] = { 407193216UL, 738631237UL, 4285957888UL, 415UL, 0UL, 0UL, 0UL, 0UL }; // "AS" "AND" "OR" "CHECK" "COLLATE" "CONSTRAINT" "DEFAULT" "ELSE" "END" -// "GLOB" "LIKE" "IS" "NOT" "NULL" "MATCH" "PRIMARY" "REFERENCES" "REGEXP" -// "THEN" "UNIQUE" "WHEN" ID QUOTEDID QUOTEDLITERAL STRINGLITERAL RPAREN -// COMMA PLUS MINUS STAR AMPERSAND BITOR OROP EQUAL EQUAL2 GREATER GREATEREQUAL -// LOWER LOWEREQUAL UNEQUAL UNEQUAL2 BITWISELEFT BITWISERIGHT SLASH PERCENT -// IN +// "GLOB" "LIKE" "IN" "IS" "NOT" "NULL" "MATCH" "PRIMARY" "REFERENCES" +// "REGEXP" "THEN" "UNIQUE" "WHEN" ID QUOTEDID QUOTEDLITERAL STRINGLITERAL +// RPAREN COMMA PLUS MINUS STAR AMPERSAND BITOR OROP EQUAL EQUAL2 GREATER +// GREATEREQUAL LOWER LOWEREQUAL UNEQUAL UNEQUAL2 BITWISELEFT BITWISERIGHT +// SLASH PERCENT const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Parser::_tokenSet_3(_tokenSet_3_data_,8); -const unsigned long Sqlite3Parser::_tokenSet_4_data_[] = { 0UL, 0UL, 17344UL, 0UL, 0UL, 0UL, 0UL, 0UL }; +const unsigned long Sqlite3Parser::_tokenSet_4_data_[] = { 0UL, 0UL, 34688UL, 0UL, 0UL, 0UL, 0UL, 0UL }; // DOT ID QUOTEDID QUOTEDLITERAL STRINGLITERAL const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Parser::_tokenSet_4(_tokenSet_4_data_,8); -const unsigned long Sqlite3Parser::_tokenSet_5_data_[] = { 0UL, 0UL, 17280UL, 0UL, 0UL, 0UL, 0UL, 0UL }; +const unsigned long Sqlite3Parser::_tokenSet_5_data_[] = { 0UL, 0UL, 34560UL, 0UL, 0UL, 0UL, 0UL, 0UL }; // ID QUOTEDID QUOTEDLITERAL STRINGLITERAL const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Parser::_tokenSet_5(_tokenSet_5_data_,8); const unsigned long Sqlite3Parser::_tokenSet_6_data_[] = { 2UL, 0UL, 0UL, 0UL }; // EOF const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Parser::_tokenSet_6(_tokenSet_6_data_,4); -const unsigned long Sqlite3Parser::_tokenSet_7_data_[] = { 407193216UL, 369315589UL, 4290445312UL, 463UL, 0UL, 0UL, 0UL, 0UL }; +const unsigned long Sqlite3Parser::_tokenSet_7_data_[] = { 407193216UL, 738631237UL, 4285923328UL, 415UL, 0UL, 0UL, 0UL, 0UL }; // "AS" "AND" "OR" "CHECK" "COLLATE" "CONSTRAINT" "DEFAULT" "ELSE" "END" -// "GLOB" "LIKE" "IS" "NOT" "NULL" "MATCH" "PRIMARY" "REFERENCES" "REGEXP" -// "THEN" "UNIQUE" "WHEN" RPAREN COMMA PLUS MINUS STAR AMPERSAND BITOR -// OROP EQUAL EQUAL2 GREATER GREATEREQUAL LOWER LOWEREQUAL UNEQUAL UNEQUAL2 -// BITWISELEFT BITWISERIGHT SLASH PERCENT IN +// "GLOB" "LIKE" "IN" "IS" "NOT" "NULL" "MATCH" "PRIMARY" "REFERENCES" +// "REGEXP" "THEN" "UNIQUE" "WHEN" RPAREN COMMA PLUS MINUS STAR AMPERSAND +// BITOR OROP EQUAL EQUAL2 GREATER GREATEREQUAL LOWER LOWEREQUAL UNEQUAL +// UNEQUAL2 BITWISELEFT BITWISERIGHT SLASH PERCENT const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Parser::_tokenSet_7(_tokenSet_7_data_,8); -const unsigned long Sqlite3Parser::_tokenSet_8_data_[] = { 4538368UL, 67192320UL, 196608UL, 0UL, 0UL, 0UL, 0UL, 0UL }; +const unsigned long Sqlite3Parser::_tokenSet_8_data_[] = { 4538368UL, 134384640UL, 393216UL, 0UL, 0UL, 0UL, 0UL, 0UL }; // "CHECK" "COLLATE" "CONSTRAINT" "DEFAULT" "NOT" "NULL" "PRIMARY" "REFERENCES" // "UNIQUE" RPAREN COMMA const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Parser::_tokenSet_8(_tokenSet_8_data_,8); -const unsigned long Sqlite3Parser::_tokenSet_9_data_[] = { 2UL, 0UL, 262144UL, 0UL, 0UL, 0UL, 0UL, 0UL }; +const unsigned long Sqlite3Parser::_tokenSet_9_data_[] = { 2UL, 0UL, 524288UL, 0UL, 0UL, 0UL, 0UL, 0UL }; // EOF SEMI const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Parser::_tokenSet_9(_tokenSet_9_data_,8); -const unsigned long Sqlite3Parser::_tokenSet_10_data_[] = { 2147205104UL, 467648511UL, 17280UL, 0UL, 0UL, 0UL, 0UL, 0UL }; +const unsigned long Sqlite3Parser::_tokenSet_10_data_[] = { 2147205104UL, 935296959UL, 34560UL, 0UL, 0UL, 0UL, 0UL, 0UL }; // "ABORT" "ACTION" "AUTOINCREMENT" "AS" "ASC" "AND" "OR" "CASCADE" "CASE" // "CAST" "CREATE" "COLLATE" "CONFLICT" "CURRENT_TIME" "CURRENT_DATE" "CURRENT_TIMESTAMP" // "DEFAULT" "DEFERRABLE" "DEFERRED" "DELETE" "DESC" "ELSE" "END" "ESCAPE" @@ -4532,56 +4619,56 @@ const unsigned long Sqlite3Parser::_tokenSet_10_data_[] = { 2147205104UL, 467648 // "REPLACE" "RESTRICT" "ROLLBACK" "SET" "TEMPORARY" "TEMP" "THEN" "UPDATE" // "WHEN" ID QUOTEDID QUOTEDLITERAL STRINGLITERAL const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Parser::_tokenSet_10(_tokenSet_10_data_,8); -const unsigned long Sqlite3Parser::_tokenSet_11_data_[] = { 128UL, 0UL, 32768UL, 0UL, 0UL, 0UL, 0UL, 0UL }; +const unsigned long Sqlite3Parser::_tokenSet_11_data_[] = { 128UL, 0UL, 65536UL, 0UL, 0UL, 0UL, 0UL, 0UL }; // "AS" LPAREN const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Parser::_tokenSet_11(_tokenSet_11_data_,8); -const unsigned long Sqlite3Parser::_tokenSet_12_data_[] = { 4538368UL, 67192320UL, 0UL, 0UL }; +const unsigned long Sqlite3Parser::_tokenSet_12_data_[] = { 4538368UL, 134384640UL, 0UL, 0UL }; // "CHECK" "COLLATE" "CONSTRAINT" "DEFAULT" "NOT" "NULL" "PRIMARY" "REFERENCES" // "UNIQUE" const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Parser::_tokenSet_12(_tokenSet_12_data_,4); -const unsigned long Sqlite3Parser::_tokenSet_13_data_[] = { 0UL, 0UL, 196608UL, 0UL, 0UL, 0UL, 0UL, 0UL }; +const unsigned long Sqlite3Parser::_tokenSet_13_data_[] = { 0UL, 0UL, 393216UL, 0UL, 0UL, 0UL, 0UL, 0UL }; // RPAREN COMMA const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Parser::_tokenSet_13(_tokenSet_13_data_,8); -const unsigned long Sqlite3Parser::_tokenSet_14_data_[] = { 2UL, 0UL, 327680UL, 0UL, 0UL, 0UL, 0UL, 0UL }; +const unsigned long Sqlite3Parser::_tokenSet_14_data_[] = { 2UL, 0UL, 655360UL, 0UL, 0UL, 0UL, 0UL, 0UL }; // EOF RPAREN SEMI const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Parser::_tokenSet_14(_tokenSet_14_data_,8); -const unsigned long Sqlite3Parser::_tokenSet_15_data_[] = { 4538368UL, 67192320UL, 213888UL, 0UL, 0UL, 0UL, 0UL, 0UL }; +const unsigned long Sqlite3Parser::_tokenSet_15_data_[] = { 4538368UL, 134384640UL, 427776UL, 0UL, 0UL, 0UL, 0UL, 0UL }; // "CHECK" "COLLATE" "CONSTRAINT" "DEFAULT" "NOT" "NULL" "PRIMARY" "REFERENCES" // "UNIQUE" ID QUOTEDID QUOTEDLITERAL STRINGLITERAL RPAREN COMMA const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Parser::_tokenSet_15(_tokenSet_15_data_,8); -const unsigned long Sqlite3Parser::_tokenSet_16_data_[] = { 2160410624UL, 67202560UL, 246656UL, 0UL, 0UL, 0UL, 0UL, 0UL }; +const unsigned long Sqlite3Parser::_tokenSet_16_data_[] = { 2160410624UL, 134405120UL, 493312UL, 0UL, 0UL, 0UL, 0UL, 0UL }; // "CHECK" "COLLATE" "CONSTRAINT" "DEFAULT" "DEFERRABLE" "FOREIGN" "NOT" // "NULL" "MATCH" "ON" "PRIMARY" "REFERENCES" "UNIQUE" ID QUOTEDID QUOTEDLITERAL // STRINGLITERAL LPAREN RPAREN COMMA const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Parser::_tokenSet_16(_tokenSet_16_data_,8); -const unsigned long Sqlite3Parser::_tokenSet_17_data_[] = { 3682304UL, 38400UL, 5818240UL, 0UL, 0UL, 0UL, 0UL, 0UL }; +const unsigned long Sqlite3Parser::_tokenSet_17_data_[] = { 3682304UL, 76800UL, 11636480UL, 0UL, 0UL, 0UL, 0UL, 0UL }; // "CASE" "CAST" "CURRENT_TIME" "CURRENT_DATE" "CURRENT_TIMESTAMP" "NOT" // "NULL" "EXISTS" "RAISE" ID QUOTEDID QUOTEDLITERAL NUMERIC STRINGLITERAL // LPAREN PLUS MINUS TILDE const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Parser::_tokenSet_17(_tokenSet_17_data_,8); -const unsigned long Sqlite3Parser::_tokenSet_18_data_[] = { 406402688UL, 302161669UL, 4294690752UL, 495UL, 0UL, 0UL, 0UL, 0UL }; +const unsigned long Sqlite3Parser::_tokenSet_18_data_[] = { 406402688UL, 604323397UL, 4294414208UL, 479UL, 0UL, 0UL, 0UL, 0UL }; // "AS" "AND" "OR" "CASE" "CAST" "COLLATE" "CURRENT_TIME" "CURRENT_DATE" -// "CURRENT_TIMESTAMP" "ELSE" "END" "GLOB" "LIKE" "IS" "NOT" "NULL" "MATCH" -// "EXISTS" "RAISE" "REGEXP" "THEN" "WHEN" DOT ID QUOTEDID QUOTEDLITERAL +// "CURRENT_TIMESTAMP" "ELSE" "END" "GLOB" "LIKE" "IN" "IS" "NOT" "NULL" +// "MATCH" "EXISTS" "RAISE" "REGEXP" "THEN" "WHEN" DOT ID QUOTEDID QUOTEDLITERAL // NUMERIC STRINGLITERAL LPAREN RPAREN COMMA PLUS MINUS STAR TILDE AMPERSAND // BITOR OROP EQUAL EQUAL2 GREATER GREATEREQUAL LOWER LOWEREQUAL UNEQUAL -// UNEQUAL2 BITWISELEFT BITWISERIGHT SELECT SLASH PERCENT IN +// UNEQUAL2 BITWISELEFT BITWISERIGHT SELECT SLASH PERCENT const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Parser::_tokenSet_18(_tokenSet_18_data_,8); -const unsigned long Sqlite3Parser::_tokenSet_19_data_[] = { 1536UL, 133381UL, 4290248704UL, 463UL, 0UL, 0UL, 0UL, 0UL }; -// "AND" "OR" "GLOB" "LIKE" "IS" "MATCH" "REGEXP" PLUS MINUS STAR AMPERSAND -// BITOR OROP EQUAL EQUAL2 GREATER GREATEREQUAL LOWER LOWEREQUAL UNEQUAL -// UNEQUAL2 BITWISELEFT BITWISERIGHT SLASH PERCENT IN +const unsigned long Sqlite3Parser::_tokenSet_19_data_[] = { 1536UL, 266821UL, 4285530112UL, 415UL, 0UL, 0UL, 0UL, 0UL }; +// "AND" "OR" "GLOB" "LIKE" "IN" "IS" "MATCH" "REGEXP" PLUS MINUS STAR +// AMPERSAND BITOR OROP EQUAL EQUAL2 GREATER GREATEREQUAL LOWER LOWEREQUAL +// UNEQUAL UNEQUAL2 BITWISELEFT BITWISERIGHT SLASH PERCENT const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Parser::_tokenSet_19(_tokenSet_19_data_,8); -const unsigned long Sqlite3Parser::_tokenSet_20_data_[] = { 406401152UL, 302028288UL, 6014912UL, 32UL, 0UL, 0UL, 0UL, 0UL }; +const unsigned long Sqlite3Parser::_tokenSet_20_data_[] = { 406401152UL, 604056640UL, 12029824UL, 64UL, 0UL, 0UL, 0UL, 0UL }; // "AS" "CASE" "CAST" "COLLATE" "CURRENT_TIME" "CURRENT_DATE" "CURRENT_TIMESTAMP" -// "ELSE" "END" "NOT" "NULL" "EXISTS" "RAISE" "THEN" "WHEN" DOT ID QUOTEDID -// QUOTEDLITERAL NUMERIC STRINGLITERAL LPAREN RPAREN COMMA PLUS MINUS TILDE -// SELECT +// "ELSE" "END" "IN" "NOT" "NULL" "EXISTS" "RAISE" "THEN" "WHEN" DOT ID +// QUOTEDID QUOTEDLITERAL NUMERIC STRINGLITERAL LPAREN RPAREN COMMA PLUS +// MINUS TILDE SELECT const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Parser::_tokenSet_20(_tokenSet_20_data_,8); -const unsigned long Sqlite3Parser::_tokenSet_21_data_[] = { 402653312UL, 301989888UL, 196608UL, 0UL, 0UL, 0UL, 0UL, 0UL }; +const unsigned long Sqlite3Parser::_tokenSet_21_data_[] = { 402653312UL, 603979776UL, 393216UL, 0UL, 0UL, 0UL, 0UL, 0UL }; // "AS" "ELSE" "END" "THEN" "WHEN" RPAREN COMMA const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Parser::_tokenSet_21(_tokenSet_21_data_,8); -const unsigned long Sqlite3Parser::_tokenSet_22_data_[] = { 4294967282UL, 1071644671UL, 2082688UL, 0UL, 0UL, 0UL, 0UL, 0UL }; +const unsigned long Sqlite3Parser::_tokenSet_22_data_[] = { 4294967282UL, 2143289279UL, 4165376UL, 0UL, 0UL, 0UL, 0UL, 0UL }; // EOF "ABORT" "ACTION" "AUTOINCREMENT" "AS" "ASC" "AND" "OR" "CASCADE" // "CASE" "CAST" "CHECK" "CREATE" "COLLATE" "CONFLICT" "CONSTRAINT" "CURRENT_TIME" // "CURRENT_DATE" "CURRENT_TIMESTAMP" "DEFAULT" "DEFERRABLE" "DEFERRED" @@ -4592,27 +4679,38 @@ const unsigned long Sqlite3Parser::_tokenSet_22_data_[] = { 4294967282UL, 107164 // "WHEN" "WITHOUT" ID QUOTEDID QUOTEDLITERAL NUMERIC STRINGLITERAL LPAREN // RPAREN COMMA SEMI PLUS MINUS const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Parser::_tokenSet_22(_tokenSet_22_data_,8); -const unsigned long Sqlite3Parser::_tokenSet_23_data_[] = { 0UL, 0UL, 32768UL, 0UL, 0UL, 0UL, 0UL, 0UL }; +const unsigned long Sqlite3Parser::_tokenSet_23_data_[] = { 0UL, 0UL, 65536UL, 0UL, 0UL, 0UL, 0UL, 0UL }; // LPAREN const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Parser::_tokenSet_23(_tokenSet_23_data_,8); -const unsigned long Sqlite3Parser::_tokenSet_24_data_[] = { 402720384UL, 302123269UL, 4290462656UL, 463UL, 0UL, 0UL, 0UL, 0UL }; -// "AS" "AND" "OR" "COLLATE" "ELSE" "END" "GLOB" "LIKE" "IS" "MATCH" "REGEXP" -// "THEN" "WHEN" DOT ID QUOTEDID QUOTEDLITERAL STRINGLITERAL RPAREN COMMA -// PLUS MINUS STAR AMPERSAND BITOR OROP EQUAL EQUAL2 GREATER GREATEREQUAL +const unsigned long Sqlite3Parser::_tokenSet_24_data_[] = { 402720384UL, 604246597UL, 4285958016UL, 415UL, 0UL, 0UL, 0UL, 0UL }; +// "AS" "AND" "OR" "COLLATE" "ELSE" "END" "GLOB" "LIKE" "IN" "IS" "MATCH" +// "REGEXP" "THEN" "WHEN" DOT ID QUOTEDID QUOTEDLITERAL STRINGLITERAL RPAREN +// COMMA PLUS MINUS STAR AMPERSAND BITOR OROP EQUAL EQUAL2 GREATER GREATEREQUAL // LOWER LOWEREQUAL UNEQUAL UNEQUAL2 BITWISELEFT BITWISERIGHT SLASH PERCENT -// IN const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Parser::_tokenSet_24(_tokenSet_24_data_,8); -const unsigned long Sqlite3Parser::_tokenSet_25_data_[] = { 402720384UL, 302123269UL, 4290445312UL, 463UL, 0UL, 0UL, 0UL, 0UL }; -// "AS" "AND" "OR" "COLLATE" "ELSE" "END" "GLOB" "LIKE" "IS" "MATCH" "REGEXP" +const unsigned long Sqlite3Parser::_tokenSet_25_data_[] = { 402720384UL, 604246597UL, 4285923328UL, 415UL, 0UL, 0UL, 0UL, 0UL }; +// "AS" "AND" "OR" "COLLATE" "ELSE" "END" "GLOB" "LIKE" "IN" "IS" "MATCH" +// "REGEXP" "THEN" "WHEN" RPAREN COMMA PLUS MINUS STAR AMPERSAND BITOR +// OROP EQUAL EQUAL2 GREATER GREATEREQUAL LOWER LOWEREQUAL UNEQUAL UNEQUAL2 +// BITWISELEFT BITWISERIGHT SLASH PERCENT +const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Parser::_tokenSet_25(_tokenSet_25_data_,8); +const unsigned long Sqlite3Parser::_tokenSet_26_data_[] = { 0UL, 0UL, 100096UL, 0UL, 0UL, 0UL, 0UL, 0UL }; +// ID QUOTEDID QUOTEDLITERAL STRINGLITERAL LPAREN +const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Parser::_tokenSet_26(_tokenSet_26_data_,8); +const unsigned long Sqlite3Parser::_tokenSet_27_data_[] = { 402654848UL, 604246597UL, 4285923328UL, 415UL, 0UL, 0UL, 0UL, 0UL }; +// "AS" "AND" "OR" "ELSE" "END" "GLOB" "LIKE" "IN" "IS" "MATCH" "REGEXP" // "THEN" "WHEN" RPAREN COMMA PLUS MINUS STAR AMPERSAND BITOR OROP EQUAL // EQUAL2 GREATER GREATEREQUAL LOWER LOWEREQUAL UNEQUAL UNEQUAL2 BITWISELEFT -// BITWISERIGHT SLASH PERCENT IN -const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Parser::_tokenSet_25(_tokenSet_25_data_,8); -const unsigned long Sqlite3Parser::_tokenSet_26_data_[] = { 402654848UL, 302123269UL, 4290445312UL, 463UL, 0UL, 0UL, 0UL, 0UL }; -// "AS" "AND" "OR" "ELSE" "END" "GLOB" "LIKE" "IS" "MATCH" "REGEXP" "THEN" -// "WHEN" RPAREN COMMA PLUS MINUS STAR AMPERSAND BITOR OROP EQUAL EQUAL2 -// GREATER GREATEREQUAL LOWER LOWEREQUAL UNEQUAL UNEQUAL2 BITWISELEFT BITWISERIGHT -// SLASH PERCENT IN -const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Parser::_tokenSet_26(_tokenSet_26_data_,8); +// BITWISERIGHT SLASH PERCENT +const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Parser::_tokenSet_27(_tokenSet_27_data_,8); +const unsigned long Sqlite3Parser::_tokenSet_28_data_[] = { 410875520UL, 738704965UL, 4294414080UL, 415UL, 0UL, 0UL, 0UL, 0UL }; +// "AS" "AND" "OR" "CASE" "CAST" "CHECK" "COLLATE" "CONSTRAINT" "CURRENT_TIME" +// "CURRENT_DATE" "CURRENT_TIMESTAMP" "DEFAULT" "ELSE" "END" "GLOB" "LIKE" +// "IN" "IS" "NOT" "NULL" "MATCH" "EXISTS" "PRIMARY" "RAISE" "REFERENCES" +// "REGEXP" "THEN" "UNIQUE" "WHEN" ID QUOTEDID QUOTEDLITERAL NUMERIC STRINGLITERAL +// LPAREN RPAREN COMMA PLUS MINUS STAR TILDE AMPERSAND BITOR OROP EQUAL +// EQUAL2 GREATER GREATEREQUAL LOWER LOWEREQUAL UNEQUAL UNEQUAL2 BITWISELEFT +// BITWISERIGHT SLASH PERCENT +const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Parser::_tokenSet_28(_tokenSet_28_data_,8); diff --git a/src/grammar/Sqlite3Parser.hpp b/src/grammar/Sqlite3Parser.hpp index f8e1296a..33ff693f 100644 --- a/src/grammar/Sqlite3Parser.hpp +++ b/src/grammar/Sqlite3Parser.hpp @@ -2,7 +2,7 @@ #define INC_Sqlite3Parser_hpp_ #include -/* $ANTLR 2.7.7 (20130425): "sqlite3.g" -> "Sqlite3Parser.hpp"$ */ +/* $ANTLR 2.7.7 (20140222): "sqlite3.g" -> "Sqlite3Parser.hpp"$ */ #include #include #include "sqlite3TokenTypes.hpp" @@ -137,6 +137,10 @@ private: static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_25; static const unsigned long _tokenSet_26_data_[]; static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_26; + static const unsigned long _tokenSet_27_data_[]; + static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_27; + static const unsigned long _tokenSet_28_data_[]; + static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_28; }; #endif /*INC_Sqlite3Parser_hpp_*/ diff --git a/src/grammar/sqlite3.g b/src/grammar/sqlite3.g index e67d3bd1..56f73d04 100644 --- a/src/grammar/sqlite3.g +++ b/src/grammar/sqlite3.g @@ -47,6 +47,7 @@ tokens { TABLE="TABLE"; IF_T="IF"; IGNORE="IGNORE"; + IN="IN"; INITIALLY="INITIALLY"; IMMEDIATE="IMMEDIATE"; IS="IS"; @@ -430,7 +431,7 @@ suffixexpr // | (NOT)? // ( (LIKE | GLOB | REGEXP | MATCH) // ( (expr ESCAPE) => ESCAPE expr | expr) - // | IN ( LPAREN (selectstmt | expr (COMMA expr)* )? RPAREN | tablename) + | IN ( LPAREN (selectstmt | expr (COMMA expr)* )? RPAREN | tablename) // ) ; diff --git a/src/grammar/sqlite3TokenTypes.hpp b/src/grammar/sqlite3TokenTypes.hpp index d37c0111..d14b13f0 100644 --- a/src/grammar/sqlite3TokenTypes.hpp +++ b/src/grammar/sqlite3TokenTypes.hpp @@ -1,7 +1,7 @@ #ifndef INC_sqlite3TokenTypes_hpp_ #define INC_sqlite3TokenTypes_hpp_ -/* $ANTLR 2.7.7 (20130425): "sqlite3.g" -> "sqlite3TokenTypes.hpp"$ */ +/* $ANTLR 2.7.7 (20140222): "sqlite3.g" -> "sqlite3TokenTypes.hpp"$ */ #ifndef CUSTOM_API # define CUSTOM_API @@ -46,73 +46,73 @@ struct CUSTOM_API sqlite3TokenTypes { TABLE = 35, IF_T = 36, IGNORE = 37, - INITIALLY = 38, - IMMEDIATE = 39, - IS = 40, - NOT = 41, - NULL_T = 42, - MATCH = 43, - EXISTS = 44, - ON = 45, - PRIMARY = 46, - RAISE = 47, - REFERENCES = 48, - REGEXP = 49, - REPLACE = 50, - RESTRICT = 51, - ROLLBACK = 52, - ROWID = 53, - SET = 54, - TEMPORARY = 55, - TEMP = 56, - THEN = 57, - UNIQUE = 58, - UPDATE = 59, - WHEN = 60, - WITHOUT = 61, - TYPE_NAME = 62, - COLUMNDEF = 63, - COLUMNCONSTRAINT = 64, - TABLECONSTRAINT = 65, - CREATETABLE = 66, - KEYWORDASTABLENAME = 67, - KEYWORDASCOLUMNNAME = 68, - DIGIT = 69, - DOT = 70, - ID = 71, - QUOTEDID = 72, - QUOTEDLITERAL = 73, - NUMERIC = 74, - NL = 75, - COMMENT = 76, - WS = 77, - STRINGLITERAL = 78, - LPAREN = 79, - RPAREN = 80, - COMMA = 81, - SEMI = 82, - PLUS = 83, - MINUS = 84, - STAR = 85, - TILDE = 86, - AMPERSAND = 87, - BITOR = 88, - OROP = 89, - EQUAL = 90, - EQUAL2 = 91, - GREATER = 92, - GREATEREQUAL = 93, - LOWER = 94, - LOWEREQUAL = 95, - UNEQUAL = 96, - UNEQUAL2 = 97, - BITWISELEFT = 98, - BITWISERIGHT = 99, - NO = 100, - SELECT = 101, - SLASH = 102, - PERCENT = 103, - IN = 104, + IN = 38, + INITIALLY = 39, + IMMEDIATE = 40, + IS = 41, + NOT = 42, + NULL_T = 43, + MATCH = 44, + EXISTS = 45, + ON = 46, + PRIMARY = 47, + RAISE = 48, + REFERENCES = 49, + REGEXP = 50, + REPLACE = 51, + RESTRICT = 52, + ROLLBACK = 53, + ROWID = 54, + SET = 55, + TEMPORARY = 56, + TEMP = 57, + THEN = 58, + UNIQUE = 59, + UPDATE = 60, + WHEN = 61, + WITHOUT = 62, + TYPE_NAME = 63, + COLUMNDEF = 64, + COLUMNCONSTRAINT = 65, + TABLECONSTRAINT = 66, + CREATETABLE = 67, + KEYWORDASTABLENAME = 68, + KEYWORDASCOLUMNNAME = 69, + DIGIT = 70, + DOT = 71, + ID = 72, + QUOTEDID = 73, + QUOTEDLITERAL = 74, + NUMERIC = 75, + NL = 76, + COMMENT = 77, + WS = 78, + STRINGLITERAL = 79, + LPAREN = 80, + RPAREN = 81, + COMMA = 82, + SEMI = 83, + PLUS = 84, + MINUS = 85, + STAR = 86, + TILDE = 87, + AMPERSAND = 88, + BITOR = 89, + OROP = 90, + EQUAL = 91, + EQUAL2 = 92, + GREATER = 93, + GREATEREQUAL = 94, + LOWER = 95, + LOWEREQUAL = 96, + UNEQUAL = 97, + UNEQUAL2 = 98, + BITWISELEFT = 99, + BITWISERIGHT = 100, + NO = 101, + SELECT = 102, + SLASH = 103, + PERCENT = 104, NULL_TREE_LOOKAHEAD = 3 }; #ifdef __cplusplus