From e177b8cef74e6f17ceba1f495263a46659e79b50 Mon Sep 17 00:00:00 2001 From: Pedro Date: Mon, 27 Oct 2014 12:09:53 +0100 Subject: [PATCH] added frame for join statements --- src/bison/bison_parser.y | 2 +- src/lib/Statement.h | 19 +++++++++++++++++++ src/lib/Table.h | 9 ++++++--- src/lib/sqlhelper.cpp | 2 +- 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/bison/bison_parser.y b/src/bison/bison_parser.y index 0780d32..c8907b6 100644 --- a/src/bison/bison_parser.y +++ b/src/bison/bison_parser.y @@ -275,7 +275,7 @@ table_ref_atomic: } | '(' select_statement ')' { auto tbl = new TableRef(kTableSelect); - tbl->stmt = $2; + tbl->select = $2; $$ = tbl; } ; diff --git a/src/lib/Statement.h b/src/lib/Statement.h index b7a3098..06ec46d 100644 --- a/src/lib/Statement.h +++ b/src/lib/Statement.h @@ -12,6 +12,7 @@ typedef enum { kStmtSelect, + kStmtJoin, kStmtDelete, kStmtInsert, kStmtCreate @@ -34,6 +35,14 @@ struct OrderDescription { }; +typedef enum { + kJoinInner, + kJoinOuter, + kJoinLeft, + kJoinRight +} JoinType; + + struct Statement { Statement(StatementType type) : type(type) {}; StatementType type; @@ -56,6 +65,16 @@ struct SelectStatement : Statement { }; +struct JoinStatement : Statement { + JoinStatement() : Statement(kStmtJoin) {}; + + TableRef* table1; + TableRef* table2; + JoinType join_type; + Expr* join_condition; +}; + + struct DeleteStatement : Statement { // TODO }; diff --git a/src/lib/Table.h b/src/lib/Table.h index 41c8dd7..fe61058 100644 --- a/src/lib/Table.h +++ b/src/lib/Table.h @@ -1,7 +1,8 @@ -#ifndef __TABLEREF_H_ -#define __TABLEREF_H_ +#ifndef __TABLEREF_H__ +#define __TABLEREF_H__ class SelectStatement; +class JoinStatement; /** * TableRef @@ -10,6 +11,7 @@ class SelectStatement; typedef enum { kTableName, kTableSelect, + kTableJoin, kTableCrossProduct } TableRefType; @@ -21,7 +23,8 @@ struct TableRef { TableRefType type; char* name; - SelectStatement* stmt; + SelectStatement* select; + JoinStatement* join; List* list; }; diff --git a/src/lib/sqlhelper.cpp b/src/lib/sqlhelper.cpp index fb9fce0..5c40e74 100644 --- a/src/lib/sqlhelper.cpp +++ b/src/lib/sqlhelper.cpp @@ -18,7 +18,7 @@ void printTableRefInfo(TableRef* table, uint num_indent) { inprint(table->name, num_indent); break; case kTableSelect: - printSelectStatementInfo(table->stmt, num_indent); + printSelectStatementInfo(table->select, num_indent); break; case kTableCrossProduct: for (TableRef* tbl : table->list->_vector) printTableRefInfo(tbl, num_indent);