From f98843a316be41e009bec5e0f59088e105b22ec6 Mon Sep 17 00:00:00 2001 From: Pedro Flemming Date: Sat, 16 Jan 2016 12:36:58 +0100 Subject: [PATCH] extended example code --- example/example.cpp | 18 ++++++++++++++---- src/sqlhelper.cpp | 33 +++++++++++++++++++++++++-------- src/sqlhelper.h | 1 + 3 files changed, 40 insertions(+), 12 deletions(-) diff --git a/example/example.cpp b/example/example.cpp index a77c645..f5c1ab2 100644 --- a/example/example.cpp +++ b/example/example.cpp @@ -1,7 +1,13 @@ +#include +#include + // include the sql parser #include "SQLParser.h" +// contains printing utilities +#include "sqlhelper.h" + int main(int argc, char *argv[]) { if (argc <= 1) { fprintf(stderr, "Usage: ./example \"SELECT * FROM test;\"\n"); @@ -10,13 +16,17 @@ int main(int argc, char *argv[]) { std::string query = argv[1]; // parse a given query - hsql::SQLStatementList* stmt_list = hsql::SQLParser::parseSQLString(query); + hsql::SQLStatementList* result = hsql::SQLParser::parseSQLString(query); // check whether the parsing was successful - if (stmt_list->isValid) { + if (result->isValid) { printf("Parsed successfully!\n"); - printf("Number of statements: %lu\n", stmt_list->numStatements()); - // process the statements... + printf("Number of statements: %lu\n", result->numStatements()); + + for (hsql::SQLStatement* stmt : result->statements) { + // process the statements... + hsql::printStatementInfo(stmt); + } } else { printf("Invalid SQL!\n"); } diff --git a/src/sqlhelper.cpp b/src/sqlhelper.cpp index 3b1ecae..5ae1bd3 100644 --- a/src/sqlhelper.cpp +++ b/src/sqlhelper.cpp @@ -7,13 +7,13 @@ namespace hsql { void printOperatorExpression(Expr* expr, uint num_indent); -const char* indent(uint num_indent) { return std::string(num_indent, '\t').c_str(); } -void inprint(int64_t val, uint num_indent) { printf("%s%ld \n", indent(num_indent), val); } -void inprint(float val, uint num_indent) { printf("%s%f\n", indent(num_indent), val); } -void inprint(const char* val, uint num_indent) { printf("%s%s\n", indent(num_indent), val); } -void inprint(const char* val, const char* val2, uint num_indent) { printf("%s%s->%s\n", indent(num_indent), val, val2); } -void inprintC(char val, uint num_indent) { printf("%s%c\n", indent(num_indent), val); } -void inprintU(uint64_t val, uint num_indent) { printf("%s%lu\n", indent(num_indent), val); } +std::string indent(uint num_indent) { return std::string(num_indent, '\t'); } +void inprint(int64_t val, uint num_indent) { printf("%s%lld \n", indent(num_indent).c_str(), val); } +void inprint(float val, uint num_indent) { printf("%s%f\n", indent(num_indent).c_str(), val); } +void inprint(const char* val, uint num_indent) { printf("%s%s\n", indent(num_indent).c_str(), val); } +void inprint(const char* val, const char* val2, uint num_indent) { printf("%s%s->%s\n", indent(num_indent).c_str(), val, val2); } +void inprintC(char val, uint num_indent) { printf("%s%c\n", indent(num_indent).c_str(), val); } +void inprintU(uint64_t val, uint num_indent) { printf("%s%llu\n", indent(num_indent).c_str(), val); } void printTableRefInfo(TableRef* table, uint num_indent) { switch (table->type) { @@ -139,8 +139,25 @@ void printInsertStatementInfo(InsertStatement* stmt, uint num_indent) { printSelectStatementInfo(stmt->select, num_indent+1); break; } - } +void printStatementInfo(SQLStatement* stmt) { + switch (stmt->type()) { + case kStmtSelect: + printSelectStatementInfo((SelectStatement*) stmt, 0); + break; + case kStmtInsert: + printInsertStatementInfo((InsertStatement*) stmt, 0); + break; + case kStmtCreate: + printCreateStatementInfo((CreateStatement*) stmt, 0); + break; + case kStmtImport: + printImportStatementInfo((ImportStatement*) stmt, 0); + break; + default: + break; + } +} } // namespace hsql \ No newline at end of file diff --git a/src/sqlhelper.h b/src/sqlhelper.h index dfc3f98..17690d0 100644 --- a/src/sqlhelper.h +++ b/src/sqlhelper.h @@ -7,6 +7,7 @@ namespace hsql { +void printStatementInfo(SQLStatement* stmt); void printSelectStatementInfo(SelectStatement* stmt, uint num_indent); void printImportStatementInfo(ImportStatement* stmt, uint num_indent); void printInsertStatementInfo(InsertStatement* stmt, uint num_indent);