diff --git a/src/bison/bison_parser.y b/src/bison/bison_parser.y index 4107c52..0780d32 100644 --- a/src/bison/bison_parser.y +++ b/src/bison/bison_parser.y @@ -157,6 +157,10 @@ select_statement: s->from_table = $3; s->where_clause = $4; s->group_by = $5; + s->having = NULL; // TODO + s->order = NULL; // TODO + s->limit = kNoLimit; // TODO + s->offset = kNoOffset; // TODO $$ = s; } ; diff --git a/src/lib/Statement.h b/src/lib/Statement.h index fc63182..b7a3098 100644 --- a/src/lib/Statement.h +++ b/src/lib/Statement.h @@ -9,6 +9,7 @@ #include "List.h" #include "Table.h" + typedef enum { kStmtSelect, kStmtDelete, @@ -17,9 +18,24 @@ typedef enum { } StatementType; +const int64_t kNoLimit = -1; +const int64_t kNoOffset = -1; + +typedef enum { + kOrderNone, + kOrderAsc, + kOrderDesc +} OrderType; + + +struct OrderDescription { + OrderType type; + Expr* expr; +}; + + struct Statement { Statement(StatementType type) : type(type) {}; - StatementType type; }; @@ -29,8 +45,14 @@ struct SelectStatement : Statement { TableRef* from_table; List* select_list; - List* group_by; Expr* where_clause; + + List* group_by; + Expr* having; + + OrderDescription *order; + int64_t limit; + int64_t offset; };