From: <ibr...@us...> - 2011-08-06 19:06:53
|
Revision: 4011 http://tora.svn.sourceforge.net/tora/?rev=4011&view=rev Author: ibre5041 Date: 2011-08-06 19:06:46 +0000 (Sat, 06 Aug 2011) Log Message: ----------- Added Paths: ----------- branches/tora-trotl/sandbox/t4.cpp Added: branches/tora-trotl/sandbox/t4.cpp =================================================================== --- branches/tora-trotl/sandbox/t4.cpp (rev 0) +++ branches/tora-trotl/sandbox/t4.cpp 2011-08-06 19:06:46 UTC (rev 4011) @@ -0,0 +1,101 @@ +#include "tsqlparse.h" + +#include <iostream> +#include <QFile> + +static const char* spaces = " "; + +int main (int argc, char *argv[]) +{ + QString fileName; + + if (argc < 2 || argv[1] == NULL) + { + std::cout << "Usage: " << argv[0] << " <input>.sql" << std::endl; + return 1; + } + else + { + fileName = argv[1]; + } + + try + { + + QFile file(fileName); + if (!file.open(QFile::ReadOnly | QFile::Text)) + return 1; + + QString statement(file.readAll()); + if(statement.lastIndexOf(';') == -1) + { + statement += ';'; + } + + QRegExp reg("\\s+"); + QStringList sl = statement.split(reg, QString::SkipEmptyParts); + QString const& firstWord = sl.first(); + + std::auto_ptr <SQLParser::Statement> stat; + + if( QString::compare("CALL", firstWord, Qt::CaseInsensitive) == 0 || + QString::compare("ANALYZE", firstWord, Qt::CaseInsensitive) == 0 || + QString::compare("DECLARE", firstWord, Qt::CaseInsensitive) == 0 || + QString::compare("BEGIN", firstWord, Qt::CaseInsensitive) == 0 || + QString::compare("CREATE", firstWord, Qt::CaseInsensitive) == 0 || + QString::compare("ALTER", firstWord, Qt::CaseInsensitive) == 0 || + QString::compare("LOCK", firstWord, Qt::CaseInsensitive) == 0 || + QString::compare("EXPLAIN", firstWord, Qt::CaseInsensitive) == 0 || + QString::compare("DROP", firstWord, Qt::CaseInsensitive) == 0 || + QString::compare("COMMIT", firstWord, Qt::CaseInsensitive) == 0 || + QString::compare("ROLLBACK", firstWord, Qt::CaseInsensitive) == 0 || + QString::compare("GRANT", firstWord, Qt::CaseInsensitive) == 0 || + QString::compare("TRUNCATE", firstWord, Qt::CaseInsensitive) == 0 || + QString::compare("SAVEPOINT", firstWord, Qt::CaseInsensitive) == 0 || + QString::compare("SET", firstWord, Qt::CaseInsensitive) == 0 + ) + { + std::cout << "PLSQL:" << std::endl; + stat = StatementFactTwoParmSing::Instance().create("OraclePLSQL", statement, fileName); + std::cout << stat->root()->toStringRecursive().toStdString() << std::endl; + } else if( QString::compare("WITH", firstWord, Qt::CaseInsensitive) == 0 || + QString::compare("SELECT", firstWord, Qt::CaseInsensitive) == 0 || + QString::compare("INSERT", firstWord, Qt::CaseInsensitive) == 0 || + QString::compare("UPDATE", firstWord, Qt::CaseInsensitive) == 0 || + QString::compare("DELETE", firstWord, Qt::CaseInsensitive) == 0 || + QString::compare("MERGE", firstWord, Qt::CaseInsensitive) == 0 + ) { + std::cout << "SQL:" << std::endl; + stat = StatementFactTwoParmSing::Instance().create("OracleSQL", statement, fileName); + std::cout << stat->root()->toStringRecursive().toStdString() << std::endl; + } else { + std::cout << "Unknown:" << firstWord.QString::toStdString() << std::endl; + return 1; + } + + for(SQLParser::Statement::token_const_iterator i=stat->begin(); i!=stat->end(); ++i) + { + SQLParser::Token const &node = *i; + //switch(node.getTokenType()) + //{ + //case SQLParser::Token::L_TABLENAME: + //break; + //x} + // if( node.getTokenUsageType() == Token::Declaration ) + // _mAliasesSet.insert( node.toString().toUpper()); + // break; + + std::cout << '[' << node.getTokenTypeString() << ", " << i.depth() << ']' << '\t' + << (spaces + 80 - i.depth()) << node.toString().toStdString() + << std::endl; + } + + } catch(SQLParser::ParseException const &e) + { + std::cout << "An exception caught" << std::endl; + return 1; + } + + return 0; +}; + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |