diff --git a/src/lib/Statement.h b/src/lib/Statement.h index ac97b84..5879311 100644 --- a/src/lib/Statement.h +++ b/src/lib/Statement.h @@ -77,8 +77,8 @@ struct SelectStatement : Statement { struct JoinStatement : Statement { JoinStatement() : Statement(kStmtJoin) {}; - TableRef* table1; - TableRef* table2; + TableRef* left; + TableRef* right; JoinType join_type; Expr* join_condition; }; diff --git a/src/lib/sqlhelper.cpp b/src/lib/sqlhelper.cpp index aa1cabd..e22466c 100644 --- a/src/lib/sqlhelper.cpp +++ b/src/lib/sqlhelper.cpp @@ -80,8 +80,16 @@ void printSelectStatementInfo(SelectStatement* stmt, uint num_indent) { inprint("Limit:", num_indent+1); inprint(stmt->limit->limit, num_indent+2); } - } +void printJoinStatementInfo(JoinStatement* stmt, uint num_indent) { + inprint("JoinStatement", num_indent); + inprint("Left Table", num_indent+1); + printTableRefInfo(stmt->left, num_indent+2); + inprint("Right Table", num_indent+1); + printTableRefInfo(stmt->right, num_indent+2); + inprint("Join Condition", num_indent+1); + printExpression(stmt->join_condition, num_indent+2); +} } // namespace hsql \ No newline at end of file diff --git a/src/lib/sqlhelper.h b/src/lib/sqlhelper.h index 5613754..49c4e3a 100644 --- a/src/lib/sqlhelper.h +++ b/src/lib/sqlhelper.h @@ -8,6 +8,7 @@ namespace hsql { void printSelectStatementInfo(SelectStatement* stmt, uint num_indent); +void printJoinStatementInfo(JoinStatement* stmt, uint num_indent); } // namespace hsql diff --git a/src/parser/bison_parser.y b/src/parser/bison_parser.y index 317f2e4..a720ac4 100644 --- a/src/parser/bison_parser.y +++ b/src/parser/bison_parser.y @@ -111,7 +111,7 @@ typedef void* yyscan_t; %type from_clause table_ref table_ref_atomic table_ref_atomic_opt_paren %type expr scalar_expr unary_expr binary_expr function_expr star_expr %type column_name literal int_literal num_literal -%type comp_expr where_clause +%type comp_expr where_clause join_condition %type expr_list group_clause select_list %type table_ref_commalist %type order_by_clause @@ -171,6 +171,10 @@ join_statement: table_ref_atomic_opt_paren JOIN table_ref_atomic_opt_paren ON join_condition { $$ = new JoinStatement(); + $$->left = $1; + $$->right = $3; + $$->join_condition = $5; + $$->join_type = kJoinInner; } ; diff --git a/src/sql_analysis.cpp b/src/sql_analysis.cpp index 295ce7e..5b7720a 100644 --- a/src/sql_analysis.cpp +++ b/src/sql_analysis.cpp @@ -25,8 +25,10 @@ int main(int argc, char *argv[]) { if (stmt->type == kStmtSelect) { printSelectStatementInfo((SelectStatement*) stmt, 0); + } else if (stmt->type == kStmtJoin) { + printJoinStatementInfo((JoinStatement*) stmt, 0); } else { - fprintf(stderr, "Only Supporting Select Statements!\n"); + fprintf(stderr, "Unsupported Statement Type %u!\n", stmt->type); } }