creating join statement object
This commit is contained in:
parent
aab1684f5f
commit
33e04efcab
|
@ -77,8 +77,8 @@ struct SelectStatement : Statement {
|
||||||
struct JoinStatement : Statement {
|
struct JoinStatement : Statement {
|
||||||
JoinStatement() : Statement(kStmtJoin) {};
|
JoinStatement() : Statement(kStmtJoin) {};
|
||||||
|
|
||||||
TableRef* table1;
|
TableRef* left;
|
||||||
TableRef* table2;
|
TableRef* right;
|
||||||
JoinType join_type;
|
JoinType join_type;
|
||||||
Expr* join_condition;
|
Expr* join_condition;
|
||||||
};
|
};
|
||||||
|
|
|
@ -80,8 +80,16 @@ void printSelectStatementInfo(SelectStatement* stmt, uint num_indent) {
|
||||||
inprint("Limit:", num_indent+1);
|
inprint("Limit:", num_indent+1);
|
||||||
inprint(stmt->limit->limit, num_indent+2);
|
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
|
} // namespace hsql
|
|
@ -8,6 +8,7 @@
|
||||||
namespace hsql {
|
namespace hsql {
|
||||||
|
|
||||||
void printSelectStatementInfo(SelectStatement* stmt, uint num_indent);
|
void printSelectStatementInfo(SelectStatement* stmt, uint num_indent);
|
||||||
|
void printJoinStatementInfo(JoinStatement* stmt, uint num_indent);
|
||||||
|
|
||||||
} // namespace hsql
|
} // namespace hsql
|
||||||
|
|
||||||
|
|
|
@ -111,7 +111,7 @@ typedef void* yyscan_t;
|
||||||
%type <table> from_clause table_ref table_ref_atomic table_ref_atomic_opt_paren
|
%type <table> from_clause table_ref table_ref_atomic table_ref_atomic_opt_paren
|
||||||
%type <expr> expr scalar_expr unary_expr binary_expr function_expr star_expr
|
%type <expr> expr scalar_expr unary_expr binary_expr function_expr star_expr
|
||||||
%type <expr> column_name literal int_literal num_literal
|
%type <expr> column_name literal int_literal num_literal
|
||||||
%type <expr> comp_expr where_clause
|
%type <expr> comp_expr where_clause join_condition
|
||||||
%type <explist> expr_list group_clause select_list
|
%type <explist> expr_list group_clause select_list
|
||||||
%type <tbllist> table_ref_commalist
|
%type <tbllist> table_ref_commalist
|
||||||
%type <order> order_by_clause
|
%type <order> order_by_clause
|
||||||
|
@ -171,6 +171,10 @@ join_statement:
|
||||||
table_ref_atomic_opt_paren JOIN table_ref_atomic_opt_paren ON join_condition
|
table_ref_atomic_opt_paren JOIN table_ref_atomic_opt_paren ON join_condition
|
||||||
{
|
{
|
||||||
$$ = new JoinStatement();
|
$$ = new JoinStatement();
|
||||||
|
$$->left = $1;
|
||||||
|
$$->right = $3;
|
||||||
|
$$->join_condition = $5;
|
||||||
|
$$->join_type = kJoinInner;
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
|
@ -25,8 +25,10 @@ int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
if (stmt->type == kStmtSelect) {
|
if (stmt->type == kStmtSelect) {
|
||||||
printSelectStatementInfo((SelectStatement*) stmt, 0);
|
printSelectStatementInfo((SelectStatement*) stmt, 0);
|
||||||
|
} else if (stmt->type == kStmtJoin) {
|
||||||
|
printJoinStatementInfo((JoinStatement*) stmt, 0);
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "Only Supporting Select Statements!\n");
|
fprintf(stderr, "Unsupported Statement Type %u!\n", stmt->type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue