From: <ibr...@us...> - 2013-04-29 12:07:50
|
Revision: 4633 http://sourceforge.net/p/tora/code/4633 Author: ibre5041 Date: 2013-04-29 12:07:44 +0000 (Mon, 29 Apr 2013) Log Message: ----------- fix " ( SELECT * FROM DUAL ); " Modified Paths: -------------- branches/tora3/src/editor/tocustomlexer.cpp branches/tora3/src/parsing/MySQLGuiLexer.cc branches/tora3/src/parsing/MySQLGuiLexer.hpp branches/tora3/src/parsing/PLSQLGuiLexer.cc branches/tora3/src/parsing/PLSQLGuiLexer.hpp branches/tora3/src/parsing/tsqllexer.h branches/tora3/src/parsing/tsqllexermysql.cc branches/tora3/src/parsing/tsqllexeroracle2.cc Modified: branches/tora3/src/editor/tocustomlexer.cpp =================================================================== --- branches/tora3/src/editor/tocustomlexer.cpp 2013-04-26 12:42:57 UTC (rev 4632) +++ branches/tora3/src/editor/tocustomlexer.cpp 2013-04-29 12:07:44 UTC (rev 4633) @@ -380,7 +380,9 @@ QSet<SQLLexer::Token::TokenType> INTRODUCERS = QSet<SQLLexer::Token::TokenType>() << SQLLexer::Token::L_DML_INTRODUCER << SQLLexer::Token::L_PL_INTRODUCER - << SQLLexer::Token::L_OTHER_INTRODUCER; + << SQLLexer::Token::L_OTHER_INTRODUCER + << SQLLexer::Token::L_LPAREN + ; try { std::auto_ptr <SQLLexer::Lexer> lexer = LexerFactTwoParmSing::Instance().create("OracleGuiLexer", "", "toCustomLexer"); Modified: branches/tora3/src/parsing/MySQLGuiLexer.cc =================================================================== (Binary files differ) Modified: branches/tora3/src/parsing/MySQLGuiLexer.hpp =================================================================== (Binary files differ) Modified: branches/tora3/src/parsing/PLSQLGuiLexer.cc =================================================================== (Binary files differ) Modified: branches/tora3/src/parsing/PLSQLGuiLexer.hpp =================================================================== (Binary files differ) Modified: branches/tora3/src/parsing/tsqllexer.h =================================================================== --- branches/tora3/src/parsing/tsqllexer.h 2013-04-26 12:42:57 UTC (rev 4632) +++ branches/tora3/src/parsing/tsqllexer.h 2013-04-29 12:07:44 UTC (rev 4633) @@ -62,6 +62,8 @@ , L_IDENTIFIER , L_BUILDIN , L_STRING + , L_LPAREN + , L_RPAREN , L_DML_INTRODUCER , L_PL_INTRODUCER , L_OTHER_INTRODUCER Modified: branches/tora3/src/parsing/tsqllexermysql.cc =================================================================== --- branches/tora3/src/parsing/tsqllexermysql.cc 2013-04-26 12:42:57 UTC (rev 4632) +++ branches/tora3/src/parsing/tsqllexermysql.cc 2013-04-29 12:07:44 UTC (rev 4633) @@ -84,7 +84,7 @@ exit(ANTLR_ERR_NOMEM); } - tstream = new MySQLGuiLexerTraits::TokenStreamType(ANTLR_SIZE_HINT, lxr->get_tokSource()); + tstream = new MySQLGuiLexerTraits::TokenStreamType(ANTLR_SIZE_HINT, lxr->getTokSource()); if (tstream == NULL) { @@ -144,10 +144,10 @@ if(token) { // ANTLR3 starts with 1st while QScintilla starts with 0th - int line = token->get_line() - 1; + int line = token->getLine() - 1; int column = token->getCharPositionInLine(); - unsigned length = token->get_stopIndex() - token->get_startIndex() + 1; - int offset = token->get_startIndex(); + unsigned length = token->getStopIndex() - token->getStartIndex() + 1; + int offset = token->getStartIndex(); Token::TokenType type = Token::X_UNASSIGNED; switch(token->getType()) Modified: branches/tora3/src/parsing/tsqllexeroracle2.cc =================================================================== --- branches/tora3/src/parsing/tsqllexeroracle2.cc 2013-04-26 12:42:57 UTC (rev 4632) +++ branches/tora3/src/parsing/tsqllexeroracle2.cc 2013-04-29 12:07:44 UTC (rev 4633) @@ -84,7 +84,7 @@ exit(ANTLR_ERR_NOMEM); } - tstream = new PLSQLGuiLexerTraits::TokenStreamType(ANTLR_SIZE_HINT, lxr->get_tokSource()); + tstream = new PLSQLGuiLexerTraits::TokenStreamType(ANTLR_SIZE_HINT, lxr->getTokSource()); if (tstream == NULL) { @@ -145,10 +145,10 @@ if(token) { // ANTLR3 starts with 1st while QScintilla starts with 0th - int line = token->get_line() - 1; + int line = token->getLine() - 1; int column = token->getCharPositionInLine(); - unsigned length = token->get_stopIndex() - token->get_startIndex() + 1; - int offset = token->get_startIndex(); + unsigned length = token->getStopIndex() - token->getStartIndex() + 1; + int offset = token->getStartIndex(); Token::TokenType type = Token::X_UNASSIGNED; switch(token->getType()) @@ -204,6 +204,12 @@ case PLSQLGuiLexer::SPACE: type = Token::X_WHITE; break; + case PLSQLGuiLexer::LEFT_PAREN: + type = Token::L_LPAREN; + break; + case PLSQLGuiLexer::RIGHT_PAREN: + type = Token::L_RPAREN; + break; default: type = Token::X_UNASSIGNED; break; @@ -351,11 +357,13 @@ * - SELECT can only follow LEFT_PAREN, RIGHT_PAREN or UNION (ALL), MINUS, INTERSECT * - in case of MERGE statement DELETE can follow anything, SELECT/UPDATE follow 'THEN' * - MERGE can not be in the middle of any statement + * - SELECT statement can start with LPAREN ('(') i.e " (SELECT * FROM DUAL ) UNION ALL (SELECT * FROM DUAL) " * - statement can end with: SOLIDUS('/'), SEMICOLON(';') or other introducer(SELECT, UPDATE, ...) */ case Token::L_DML_INTRODUCER: + case Token::L_LPAREN: { - bool parenFound = false; + bool parenFound = start->getTokenType() == Token::L_LPAREN; bool mergeFound = start->getText().compare("MERGE", Qt::CaseInsensitive) == 0; bool explainFound = start->getText().compare("EXPLAIN", Qt::CaseInsensitive) == 0; bool exitLoop = false; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |