extended example code
This commit is contained in:
parent
b2bfe2bb1c
commit
f98843a316
|
@ -1,7 +1,13 @@
|
|||
|
||||
#include <stdlib.h>
|
||||
#include <string>
|
||||
|
||||
// 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());
|
||||
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");
|
||||
}
|
||||
|
|
|
@ -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
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue