From 3c520b7aa486d44c7618928e00912c532a5d4516 Mon Sep 17 00:00:00 2001 From: Pedro Date: Thu, 23 Oct 2014 11:41:44 +0200 Subject: [PATCH] minor changes. and extended token list --- src/bison/SQLParser.cpp | 2 +- src/bison/SQLParser.h | 2 +- src/bison/bison_parser.y | 5 ++++- src/lemon/SQLParser.cpp | 2 +- src/lemon/SQLParser.h | 2 +- src/lib/List.h | 2 ++ src/sql_execution.cpp | 2 +- src/sql_tests.cpp | 8 ++++---- 8 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/bison/SQLParser.cpp b/src/bison/SQLParser.cpp index 7860582..002c2c4 100644 --- a/src/bison/SQLParser.cpp +++ b/src/bison/SQLParser.cpp @@ -11,7 +11,7 @@ SQLParser::SQLParser() { } -Statement* SQLParser::parseSQL(const char *text) { +Statement* SQLParser::parseSQLString(const char *text) { Statement* stmt; yyscan_t scanner; YY_BUFFER_STATE state; diff --git a/src/bison/SQLParser.h b/src/bison/SQLParser.h index c82c54d..9465ea9 100644 --- a/src/bison/SQLParser.h +++ b/src/bison/SQLParser.h @@ -6,7 +6,7 @@ class SQLParser { public: - static Statement* parseSQL(const char* sql); + static Statement* parseSQLString(const char* sql); private: SQLParser(); diff --git a/src/bison/bison_parser.y b/src/bison/bison_parser.y index acc6335..6ceb9ca 100644 --- a/src/bison/bison_parser.y +++ b/src/bison/bison_parser.y @@ -78,7 +78,10 @@ typedef void* yyscan_t; /********************************* ** Token Definition *********************************/ -%token SELECT FROM GROUP BY WHERE NOT AND OR +%token SELECT FROM WHERE GROUP BY HAVING +%token JOIN ON INNER OUTER LEFT RIGHT CROSS USING NATURAL +%token CREATE TABLE DATABASE INDEX +%token AS NOT AND OR NULL %token NAME STRING COMPARISON %token FLOAT %token EQUALS NOTEQUALS LESS GREATER LESSEQ GREATEREQ diff --git a/src/lemon/SQLParser.cpp b/src/lemon/SQLParser.cpp index 9aafd01..34f86bd 100644 --- a/src/lemon/SQLParser.cpp +++ b/src/lemon/SQLParser.cpp @@ -15,7 +15,7 @@ SQLParser::SQLParser() { } -Statement* SQLParser::parseSQL(const char *text) { +Statement* SQLParser::parseSQLString(const char *text) { yyscan_t scanner; yylex_init(&scanner); diff --git a/src/lemon/SQLParser.h b/src/lemon/SQLParser.h index 779a644..79b0156 100644 --- a/src/lemon/SQLParser.h +++ b/src/lemon/SQLParser.h @@ -5,7 +5,7 @@ class SQLParser { public: - static Statement* parseSQL(const char* sql); + static Statement* parseSQLString(const char* sql); private: SQLParser(); diff --git a/src/lib/List.h b/src/lib/List.h index 9138a5c..9935dcd 100644 --- a/src/lib/List.h +++ b/src/lib/List.h @@ -4,6 +4,8 @@ #include #include +// TODO: try to replace the List wrapper by directly using std::vector + template class List { public: diff --git a/src/sql_execution.cpp b/src/sql_execution.cpp index 68b69e0..b390a63 100644 --- a/src/sql_execution.cpp +++ b/src/sql_execution.cpp @@ -19,7 +19,7 @@ int main(int argc, char *argv[]) { char* sql = argv[n]; printf("\nEvaluating Statement \"%s\"\n", sql); - Statement* stmt = SQLParser::parseSQL(sql); + Statement* stmt = SQLParser::parseSQLString(sql); if (stmt == NULL) { fprintf(stderr, "Parsing of \"%s\" failed!\n", sql); diff --git a/src/sql_tests.cpp b/src/sql_tests.cpp index 18cd798..e4d7c68 100644 --- a/src/sql_tests.cpp +++ b/src/sql_tests.cpp @@ -19,7 +19,7 @@ void SelectTest1() { printf("Test: SelectTest1... "); fflush(stdout); const char* sql = "SELECT age, name, address from table WHERE age < 12.5;"; - Statement* sqlStatement = SQLParser::parseSQL(sql); + Statement* sqlStatement = SQLParser::parseSQLString(sql); ASSERT(sqlStatement != NULL); ASSERT(sqlStatement->type == eSelect); @@ -49,7 +49,7 @@ void SelectTest2() { printf("Test: SelectTest2... "); fflush(stdout); const char* sql = "SELECT * FROM (SELECT age FROM table, table2);"; - Statement* stmt = SQLParser::parseSQL(sql); + Statement* stmt = SQLParser::parseSQLString(sql); ASSERT(stmt != NULL); ASSERT(stmt->type == eSelect); @@ -76,7 +76,7 @@ void SelectTest3(bool print) { const char* sql = "SELECT name, AVG(age) FROM table GROUP BY name"; parse_count++; - Statement* stmt = SQLParser::parseSQL(sql); + Statement* stmt = SQLParser::parseSQLString(sql); if (parse_count != 1) conflicts++; parse_count--; @@ -131,7 +131,7 @@ void Benchmark1(uint numRuns) { start = clock(); for (uint n = 0; n < numRuns; ++n) { - Statement* stmt = SQLParser::parseSQL(sql); + Statement* stmt = SQLParser::parseSQLString(sql); } end = clock();