From: <ibr...@us...> - 2013-04-05 23:06:48
|
Revision: 4608 http://sourceforge.net/p/tora/code/4608 Author: ibre5041 Date: 2013-04-05 23:06:44 +0000 (Fri, 05 Apr 2013) Log Message: ----------- Modified Paths: -------------- branches/tora3/src/core/tomodeleditor.cpp branches/tora3/src/core/utils.cpp branches/tora3/src/editor/tocustomlexer.cpp branches/tora3/src/parsing/tsqllexer.h branches/tora3/src/parsing/tsqllexer.inl branches/tora3/src/parsing/tsqllexermysql.cc branches/tora3/src/parsing/tsqllexeroracle2.cc branches/tora3/src/tests/complex05.sql branches/tora3/src/tests/test3window.h branches/tora3/src/tests/test4window.cpp branches/tora3/src/tests/test4window.h Modified: branches/tora3/src/core/tomodeleditor.cpp =================================================================== --- branches/tora3/src/core/tomodeleditor.cpp 2013-04-04 09:42:06 UTC (rev 4607) +++ branches/tora3/src/core/tomodeleditor.cpp 2013-04-05 23:06:44 UTC (rev 4608) @@ -42,6 +42,7 @@ #include "core/toconf.h" #include "core/toglobalevent.h" #include "core/tomainwindow.h" +#include "core/toqvalue.h" #include <QKeyEvent> #include <QVBoxLayout> Modified: branches/tora3/src/core/utils.cpp =================================================================== --- branches/tora3/src/core/utils.cpp 2013-04-04 09:42:06 UTC (rev 4607) +++ branches/tora3/src/core/utils.cpp 2013-04-05 23:06:44 UTC (rev 4608) @@ -46,6 +46,8 @@ #include "core/toconfiguration.h" #include "core/totimer.h" #include "core/toglobalevent.h" +#include "core/toqvalue.h" +#include "core/toquery.h" #include <QComboBox> #include <QFileDialog> Modified: branches/tora3/src/editor/tocustomlexer.cpp =================================================================== --- branches/tora3/src/editor/tocustomlexer.cpp 2013-04-04 09:42:06 UTC (rev 4607) +++ branches/tora3/src/editor/tocustomlexer.cpp 2013-04-05 23:06:44 UTC (rev 4608) @@ -248,6 +248,9 @@ case SQLLexer::Token::X_COMMENT_ML: setStyling(len2, CommentMultiline); break; + case SQLLexer::Token::L_DML_INTRODUCER: + case SQLLexer::Token::L_PL_INTRODUCER: + case SQLLexer::Token::L_OTHER_INTRODUCER: case SQLLexer::Token::L_RESERVED: setStyling(len2, Reserved); break; @@ -260,6 +263,8 @@ case SQLLexer::Token::X_FAILURE: setStyling(len2, Failure); break; + case SQLLexer::Token::X_EOF: + break; default: setStyling(len2, Default); } @@ -356,6 +361,11 @@ void toCustomLexerPriv::process(const char*text, unsigned len) { + QSet<SQLLexer::Token::TokenType> INTRODUCERS = QSet<SQLLexer::Token::TokenType>() + << SQLLexer::Token::L_DML_INTRODUCER + << SQLLexer::Token::L_PL_INTRODUCER + << SQLLexer::Token::L_OTHER_INTRODUCER; + try { std::auto_ptr <SQLLexer::Lexer> lexer = LexerFactTwoParmSing::Instance().create("OracleGuiLexer", "", "toCustomLexer"); lexer->setStatement(text, len); @@ -363,14 +373,14 @@ statements.clear(); SQLLexer::Lexer::token_const_iterator start = lexer->begin(); - start = start.consumeUntil(SQLLexer::Token::L_DML_INTRODUCER); + start = start.consumeUntil(INTRODUCERS); while(start->getTokenType() != SQLLexer::Token::X_EOF) { SQLLexer::Lexer::token_const_iterator end = lexer->findEndToken(start); statements << StmtLineRange( start->getPosition().getLine(), end->getPosition().getLine()); - start = end.consumeUntil(SQLLexer::Token::L_DML_INTRODUCER); + start = end.consumeUntil(INTRODUCERS); } } catch(std::exception const &e) { std::string s(e.what()); Modified: branches/tora3/src/parsing/tsqllexer.h =================================================================== --- branches/tora3/src/parsing/tsqllexer.h 2013-04-04 09:42:06 UTC (rev 4607) +++ branches/tora3/src/parsing/tsqllexer.h 2013-04-05 23:06:44 UTC (rev 4608) @@ -63,8 +63,9 @@ , L_BUILDIN , L_STRING , L_DML_INTRODUCER - , L_DDL_INTRODUCER + , L_PL_INTRODUCER , L_OTHER_INTRODUCER + , L_FINALIZER }; inline Token(); Modified: branches/tora3/src/parsing/tsqllexer.inl =================================================================== --- branches/tora3/src/parsing/tsqllexer.inl 2013-04-04 09:42:06 UTC (rev 4607) +++ branches/tora3/src/parsing/tsqllexer.inl 2013-04-05 23:06:44 UTC (rev 4608) @@ -101,6 +101,7 @@ _mPosition = other._mPosition; _mLength = other._mLength; _mTokenType = other._mTokenType; + _mOrigType = other._mOrigType; return *this; }; Modified: branches/tora3/src/parsing/tsqllexermysql.cc =================================================================== --- branches/tora3/src/parsing/tsqllexermysql.cc 2013-04-04 09:42:06 UTC (rev 4607) +++ branches/tora3/src/parsing/tsqllexermysql.cc 2013-04-05 23:06:44 UTC (rev 4608) @@ -258,7 +258,7 @@ switch( i->getTokenType()) { case Token::L_DML_INTRODUCER: - case Token::L_DDL_INTRODUCER: + case Token::L_PL_INTRODUCER: case Token::L_OTHER_INTRODUCER: while(true) { Modified: branches/tora3/src/parsing/tsqllexeroracle2.cc =================================================================== --- branches/tora3/src/parsing/tsqllexeroracle2.cc 2013-04-04 09:42:06 UTC (rev 4607) +++ branches/tora3/src/parsing/tsqllexeroracle2.cc 2013-04-05 23:06:44 UTC (rev 4608) @@ -184,7 +184,7 @@ type = Token::L_DML_INTRODUCER; break; case PLSQLGuiLexer::PLSQL_COMMAND_INTRODUCER: - type = Token::L_DDL_INTRODUCER; + type = Token::L_PL_INTRODUCER; break; case PLSQLGuiLexer::OTHER_COMMAND_INTRODUCER: type = Token::L_OTHER_INTRODUCER; @@ -273,9 +273,56 @@ token_const_iterator i( start); switch( i->getTokenType()) { + case Token::L_PL_INTRODUCER: + { + while(true) + { + i++; + if( i->getTokenType() == Token::X_EOF) + break; + } + break; + } case Token::L_DML_INTRODUCER: - case Token::L_DDL_INTRODUCER: + { + bool parenFound = false; + bool exitLoop = false; + while(true) + { + i++; + switch( i->getOrigTokenType()) + { + case PLSQLGuiLexer::LEFT_PAREN: + case PLSQLGuiLexer::RIGHT_PAREN: + // TODO this fails for merge stmt: see merge01.sql + parenFound = true; + break; + case PLSQLGuiLexer::SQL_COMMAND_INTRODUCER: + case PLSQLGuiLexer::SOLIDUS: + case PLSQLGuiLexer::SEMICOLON: + if( !parenFound) + exitLoop = true; + break; + case PLSQLGuiLexer::NEWLINE: + case PLSQLGuiLexer::SPACE: + case PLSQLGuiLexer::COMMENT_ML: + case PLSQLGuiLexer::COMMENT_SL: + break; + case PLSQLGuiLexer::EOF_TOKEN: + case PLSQLGuiLexerTraits::CommonTokenType::TOKEN_INVALID: + exitLoop = true; + break; + default: + parenFound = false; + + } + if( exitLoop) + break; + } + break; + } case Token::L_OTHER_INTRODUCER: + { while(true) { i++; @@ -283,10 +330,14 @@ break; if( i->getTokenType() == Token::X_UNASSIGNED && i->getOrigTokenType() == PLSQLGuiLexer::SOLIDUS) break; - if( i->getTokenType() == Token::L_DML_INTRODUCER) + if( i->getTokenType() == Token::X_UNASSIGNED && i->getOrigTokenType() == PLSQLGuiLexer::SEMICOLON) break; + //GRANT SELECT ON .. + //if( i->getTokenType() == Token::L_DML_INTRODUCER) + // break; } break; + } default: throw Exception(); } Modified: branches/tora3/src/tests/complex05.sql =================================================================== --- branches/tora3/src/tests/complex05.sql 2013-04-04 09:42:06 UTC (rev 4607) +++ branches/tora3/src/tests/complex05.sql 2013-04-05 23:06:44 UTC (rev 4608) @@ -162,4 +162,24 @@ and TO_DATE(T1."REG_CREATED", 'YYYY-MM-DD HH24:MI:SS') >= SYSDATE -1 and TO_DATE(T1."REG_CREATED", 'YYYY-MM-DD HH24:MI:SS') <= SYSDATE and c.firstwgoid=T1.INC_OID - ; \ No newline at end of file + ; + +merge into bonuses d + using (select employee_id.* from employees) s + on (employee_id = a) + when matched then update set d.bonus = bonus + delete where (salary > 8000) + when not matched then insert (d.employee_id, d.bonus) + values (s.employee_id, s.salary) + where (s.salary <= 8000) + +merge into bonuses d + using (select employee_id.* from employees) s + on (employee_id = a) + when not matched then insert (d.employee_id, d.bonus) + values (s.employee_id, s.salary) + where (s.salary <= 8000) + when matched then update set d.bonus = bonus + delete where (salary > 8000) + + \ No newline at end of file Modified: branches/tora3/src/tests/test3window.h =================================================================== --- branches/tora3/src/tests/test3window.h 2013-04-04 09:42:06 UTC (rev 4607) +++ branches/tora3/src/tests/test3window.h 2013-04-05 23:06:44 UTC (rev 4608) @@ -55,6 +55,7 @@ #include <QTextEdit> class toWorkSpace; +class toConnection; // thx to Martin Pejcoch class XMdiSubWindow : public QMdiSubWindow Modified: branches/tora3/src/tests/test4window.cpp =================================================================== --- branches/tora3/src/tests/test4window.cpp 2013-04-04 09:42:06 UTC (rev 4607) +++ branches/tora3/src/tests/test4window.cpp 2013-04-05 23:06:44 UTC (rev 4608) @@ -40,7 +40,6 @@ * END_COMMON_COPYRIGHT_HEADER */ #include "tests/test4window.h" -//#include "core/toworkspace.h" #include "editor/tohighlightedtext.h" #include "editor/tocustomlexer.h" Modified: branches/tora3/src/tests/test4window.h =================================================================== --- branches/tora3/src/tests/test4window.h 2013-04-04 09:42:06 UTC (rev 4607) +++ branches/tora3/src/tests/test4window.h 2013-04-05 23:06:44 UTC (rev 4608) @@ -47,7 +47,6 @@ #include <QObject> #include <QMainWindow> -class toWorkSpace; class Test4Window : public QMainWindow, Ui::Test4Window { @@ -65,7 +64,6 @@ virtual void closeEvent(QCloseEvent *event); private: -// toWorkSpace &Workspace; }; #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |