extended create and added delete/truncate statement
This commit is contained in:
parent
789a4a5b9b
commit
5997d9b4a1
|
@ -6,16 +6,31 @@
|
|||
namespace hsql {
|
||||
|
||||
|
||||
typedef enum {
|
||||
kTable,
|
||||
kTableFromTbl, // Hyrise file format
|
||||
} CreateType;
|
||||
/**
|
||||
* @struct ColumnDefinition
|
||||
*/
|
||||
struct ColumnDefinition {
|
||||
enum DataType {
|
||||
TEXT,
|
||||
INT,
|
||||
DOUBLE
|
||||
};
|
||||
|
||||
char* name;
|
||||
DataType type;
|
||||
};
|
||||
|
||||
/**
|
||||
* @struct CreateStatement
|
||||
* CREATE TABLE students (name TEXT, student_number INTEGER, city TEXT, grade DOUBLE)
|
||||
* CREATE TABLE students FROM TBL FILE 'test/students.tbl'
|
||||
*/
|
||||
struct CreateStatement : Statement {
|
||||
enum CreateType {
|
||||
kTable,
|
||||
kTableFromTbl, // Hyrise file format
|
||||
};
|
||||
|
||||
CreateStatement() :
|
||||
Statement(kStmtCreate),
|
||||
if_not_exists(false),
|
||||
|
@ -33,6 +48,4 @@ struct CreateStatement : Statement {
|
|||
|
||||
|
||||
} // namespace hsql
|
||||
|
||||
|
||||
#endif
|
|
@ -0,0 +1,30 @@
|
|||
#ifndef __DELETE_STATEMENT_H__
|
||||
#define __DELETE_STATEMENT_H__
|
||||
|
||||
#include "Statement.h"
|
||||
|
||||
namespace hsql {
|
||||
|
||||
|
||||
/**
|
||||
* @struct DeleteStatement
|
||||
* DELETE FROM students WHERE grade > 3.0
|
||||
* DELETE FROM students <=> TRUNCATE students
|
||||
*
|
||||
* If expr == NULL => delete all rows (truncate)
|
||||
*/
|
||||
struct DeleteStatement : Statement {
|
||||
DeleteStatement() :
|
||||
Statement(kStmtDelete),
|
||||
expr(NULL) {};
|
||||
|
||||
virtual ~DeleteStatement(); // defined in destructors.cpp
|
||||
|
||||
char* table_name;
|
||||
Expr* expr;
|
||||
};
|
||||
|
||||
|
||||
|
||||
} // namespace hsql
|
||||
#endif
|
|
@ -7,6 +7,11 @@
|
|||
namespace hsql {
|
||||
|
||||
|
||||
/**
|
||||
* @struct InsertStatement
|
||||
* INSERT INTO students VALUES ('Max', 1112233, 'Musterhausen', 2.3)
|
||||
* INSERT INTO employees SELECT * FROM stundents
|
||||
*/
|
||||
struct InsertStatement : Statement {
|
||||
typedef enum {
|
||||
kInsertValues,
|
||||
|
|
|
@ -36,6 +36,10 @@ InsertStatement::~InsertStatement() {
|
|||
delete select;
|
||||
}
|
||||
|
||||
DeleteStatement::~DeleteStatement() {
|
||||
delete expr;
|
||||
}
|
||||
|
||||
|
||||
|
||||
OrderDescription::~OrderDescription() {
|
||||
|
|
|
@ -7,6 +7,6 @@
|
|||
#include "CreateStatement.h"
|
||||
#include "InsertStatement.h"
|
||||
#include "UpdateStatement.h"
|
||||
|
||||
#include "DeleteStatement.h"
|
||||
|
||||
#endif
|
|
@ -83,6 +83,7 @@ typedef void* yyscan_t;
|
|||
hsql::ImportStatement* import_stmt;
|
||||
hsql::CreateStatement* create_stmt;
|
||||
hsql::InsertStatement* insert_stmt;
|
||||
hsql::DeleteStatement* delete_stmt;
|
||||
|
||||
hsql::TableRef* table;
|
||||
hsql::Expr* expr;
|
||||
|
@ -131,6 +132,7 @@ typedef void* yyscan_t;
|
|||
%type <import_stmt> import_statement
|
||||
%type <create_stmt> create_statement
|
||||
%type <insert_stmt> insert_statement
|
||||
%type <delete_stmt> delete_statement truncate_statement
|
||||
%type <sval> table_name opt_alias alias file_path
|
||||
%type <bval> opt_not_exists
|
||||
%type <table> from_clause table_ref table_ref_atomic table_ref_name
|
||||
|
@ -190,12 +192,14 @@ statement:
|
|||
| import_statement { $$ = $1; }
|
||||
| create_statement { $$ = $1; }
|
||||
| insert_statement { $$ = $1; }
|
||||
| delete_statement { $$ = $1; }
|
||||
| truncate_statement { $$ = $1; }
|
||||
;
|
||||
|
||||
|
||||
|
||||
/******************************
|
||||
** Import Statement
|
||||
* Import Statement
|
||||
******************************/
|
||||
import_statement:
|
||||
IMPORT FROM import_file_type FILE file_path INTO table_name {
|
||||
|
@ -216,16 +220,25 @@ file_path:
|
|||
|
||||
|
||||
/******************************
|
||||
** Create Statement
|
||||
* Create Statement
|
||||
* CREATE TABLE students (name TEXT, student_number INTEGER, city TEXT, grade DOUBLE)
|
||||
* CREATE TABLE students FROM TBL FILE 'test/students.tbl'
|
||||
******************************/
|
||||
create_statement:
|
||||
CREATE TABLE opt_not_exists table_name FROM TBL FILE file_path {
|
||||
$$ = new CreateStatement();
|
||||
$$->create_type = kTableFromTbl;
|
||||
$$->create_type = CreateStatement::kTableFromTbl;
|
||||
$$->if_not_exists = $3;
|
||||
$$->table_name = $4;
|
||||
$$->file_path = $8;
|
||||
}
|
||||
| CREATE TABLE opt_not_exists table_name '(' column_def_commalist ')' {
|
||||
$$ = new CreateStatement();
|
||||
$$->create_type = CreateStatement::kTable;
|
||||
$$->if_not_exists = $3;
|
||||
$$->table_name = $4;
|
||||
// TODO: build into object
|
||||
}
|
||||
;
|
||||
|
||||
opt_not_exists:
|
||||
|
@ -233,9 +246,46 @@ opt_not_exists:
|
|||
| /* empty */ { $$ = false; }
|
||||
;
|
||||
|
||||
column_def_commalist:
|
||||
column_def
|
||||
| column_def_commalist ',' column_def
|
||||
;
|
||||
|
||||
column_def:
|
||||
IDENTIFIER column_type
|
||||
;
|
||||
|
||||
column_type:
|
||||
INTEGER
|
||||
| DOUBLE
|
||||
| TEXT
|
||||
;
|
||||
|
||||
|
||||
/******************************
|
||||
** Insert Statement
|
||||
* Delete Statement / Truncate statement
|
||||
* DELETE FROM students WHERE grade > 3.0
|
||||
* DELETE FROM students <=> TRUNCATE students
|
||||
******************************/
|
||||
delete_statement:
|
||||
DELETE FROM table_name opt_where {
|
||||
$$ = new DeleteStatement();
|
||||
$$->table_name = $3;
|
||||
$$->expr = $4;
|
||||
}
|
||||
;
|
||||
|
||||
truncate_statement:
|
||||
TRUNCATE table_name {
|
||||
$$ = new DeleteStatement();
|
||||
$$->table_name = $2;
|
||||
}
|
||||
;
|
||||
|
||||
/******************************
|
||||
* Insert Statement
|
||||
* INSERT INTO students VALUES ('Max', 1112233, 'Musterhausen', 2.3)
|
||||
* INSERT INTO employees SELECT * FROM stundents
|
||||
******************************/
|
||||
insert_statement:
|
||||
INSERT INTO table_name opt_column_list VALUES '(' literal_list ')' {
|
||||
|
@ -261,7 +311,7 @@ opt_column_list:
|
|||
;
|
||||
|
||||
/******************************
|
||||
** Select Statement
|
||||
* Select Statement
|
||||
******************************/
|
||||
|
||||
select_statement:
|
||||
|
@ -349,7 +399,7 @@ opt_limit:
|
|||
;
|
||||
|
||||
/******************************
|
||||
** Expressions
|
||||
* Expressions
|
||||
******************************/
|
||||
expr_list:
|
||||
expr_alias { $$ = new List<Expr*>($1); }
|
||||
|
@ -445,7 +495,7 @@ star_expr:
|
|||
|
||||
|
||||
/******************************
|
||||
** Table
|
||||
* Table
|
||||
******************************/
|
||||
table_ref:
|
||||
table_ref_atomic
|
||||
|
@ -502,7 +552,7 @@ opt_alias:
|
|||
|
||||
|
||||
/******************************
|
||||
** Join Statements
|
||||
* Join Statements
|
||||
******************************/
|
||||
|
||||
join_clause:
|
||||
|
@ -543,7 +593,7 @@ join_condition:
|
|||
|
||||
|
||||
/******************************
|
||||
** Misc
|
||||
* Misc
|
||||
******************************/
|
||||
|
||||
opt_semicolon:
|
||||
|
|
|
@ -13,9 +13,14 @@ SELECT * FROM t1 JOIN t2 ON c1 = c2;
|
|||
# CREATE statement
|
||||
CREATE TABLE "table" FROM TBL FILE 'students.tbl'
|
||||
CREATE TABLE IF NOT EXISTS "table" FROM TBL FILE 'students.tbl'
|
||||
CREATE TABLE students (name TEXT, student_number INTEGER, city TEXT, grade DOUBLE)
|
||||
# Multiple statements
|
||||
CREATE TABLE "table" FROM TBL FILE 'students.tbl'; SELECT * FROM "table";
|
||||
# INSERT
|
||||
INSERT INTO test_table VALUES (1, 2, 'test');
|
||||
INSERT INTO test_table (id, value, name) VALUES (1, 2, 'test');
|
||||
INSERT INTO test_table SELECT * FROM students;
|
||||
# DELETE
|
||||
DELETE FROM students WHERE grade > 3.0
|
||||
DELETE FROM students
|
||||
TRUNCATE students
|
Loading…
Reference in New Issue