Skip to content

Commit 0de1890

Browse files
simonstadlingerm0e33Jostafarrmweisgut
authored
[DYOD] Data Definition Language Project (#177)
This pull request sums up all the work for project 1 of this term "Develop your Own Database" seminar. The project's high-level goal is to make the schema SQL of hyrise executable. Specifically, this pull request - once finished - will include the extension of the parser to support CREATE INDEX and DROP INDEX statements, column and table key constraints, a subset of ALTER TABLE statements, and extended type parsing within column definitions. Co-authored-by: Moritz Spranger <[email protected]> Co-authored-by: Jostafarr <[email protected]> Co-authored-by: mweisgut <[email protected]> Co-authored-by: Marcel Weisgut <[email protected]>
1 parent f1afb9a commit 0de1890

File tree

15 files changed

+4297
-3536
lines changed

15 files changed

+4297
-3536
lines changed

src/parser/bison_parser.cpp

Lines changed: 2015 additions & 1718 deletions
Large diffs are not rendered by default.

src/parser/bison_parser.h

Lines changed: 187 additions & 172 deletions
Large diffs are not rendered by default.

src/parser/bison_parser.y

Lines changed: 212 additions & 113 deletions
Large diffs are not rendered by default.

src/parser/flex_lexer.cpp

Lines changed: 1427 additions & 1363 deletions
Large diffs are not rendered by default.

src/parser/flex_lexer.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
#define hsql_HEADER_H 1
33
#define hsql_IN_HEADER 1
44

5-
#line 6 "flex_lexer.h"
5+
#line 5 "flex_lexer.h"
66

7-
#line 8 "flex_lexer.h"
7+
#line 7 "flex_lexer.h"
88

99
#define YY_INT_ALIGNED short int
1010

@@ -730,9 +730,9 @@ extern int yylex \
730730
#undef yyTABLES_NAME
731731
#endif
732732

733-
#line 265 "flex_lexer.l"
733+
#line 270 "flex_lexer.l"
734734

735735

736-
#line 737 "flex_lexer.h"
736+
#line 736 "flex_lexer.h"
737737
#undef hsql_IN_HEADER
738738
#endif /* hsql_HEADER_H */

src/parser/flex_lexer.l

Lines changed: 159 additions & 154 deletions
Original file line numberDiff line numberDiff line change
@@ -56,165 +56,170 @@ static thread_local std::stringstream strbuf;
5656
***************************/
5757
%%
5858

59-
-- BEGIN(COMMENT);
60-
<COMMENT>[^\n]* /* skipping comment content until a end of line is read */;
61-
<COMMENT>\n BEGIN(INITIAL);
59+
-- BEGIN(COMMENT);
60+
<COMMENT>[^\n]* /* skipping comment content until a end of line is read */;
61+
<COMMENT>\n BEGIN(INITIAL);
6262

63-
[ \t\n]+ /* skip whitespace */;
63+
[ \t\n]+ /* skip whitespace */;
6464

65-
DEALLOCATE TOKEN(DEALLOCATE)
66-
PARAMETERS TOKEN(PARAMETERS)
67-
INTERSECT TOKEN(INTERSECT)
68-
TEMPORARY TOKEN(TEMPORARY)
69-
TIMESTAMP TOKEN(TIMESTAMP)
70-
DESCRIBE TOKEN(DESCRIBE)
71-
DISTINCT TOKEN(DISTINCT)
72-
NVARCHAR TOKEN(NVARCHAR)
73-
RESTRICT TOKEN(RESTRICT)
74-
TRUNCATE TOKEN(TRUNCATE)
75-
ANALYZE TOKEN(ANALYZE)
76-
BETWEEN TOKEN(BETWEEN)
77-
CASCADE TOKEN(CASCADE)
78-
COLUMNS TOKEN(COLUMNS)
79-
CONTROL TOKEN(CONTROL)
80-
DEFAULT TOKEN(DEFAULT)
81-
EXECUTE TOKEN(EXECUTE)
82-
EXPLAIN TOKEN(EXPLAIN)
83-
INTEGER TOKEN(INTEGER)
84-
NATURAL TOKEN(NATURAL)
85-
PREPARE TOKEN(PREPARE)
86-
PRIMARY TOKEN(PRIMARY)
87-
SCHEMAS TOKEN(SCHEMAS)
88-
SPATIAL TOKEN(SPATIAL)
89-
VARCHAR TOKEN(VARCHAR)
90-
VIRTUAL TOKEN(VIRTUAL)
91-
BEFORE TOKEN(BEFORE)
92-
COLUMN TOKEN(COLUMN)
93-
CREATE TOKEN(CREATE)
94-
DELETE TOKEN(DELETE)
95-
DIRECT TOKEN(DIRECT)
96-
DOUBLE TOKEN(DOUBLE)
97-
ESCAPE TOKEN(ESCAPE)
98-
EXCEPT TOKEN(EXCEPT)
99-
EXISTS TOKEN(EXISTS)
100-
EXTRACT TOKEN(EXTRACT)
101-
CAST TOKEN(CAST)
102-
FORMAT TOKEN(FORMAT)
103-
GLOBAL TOKEN(GLOBAL)
104-
HAVING TOKEN(HAVING)
105-
IMPORT TOKEN(IMPORT)
106-
INSERT TOKEN(INSERT)
107-
ISNULL TOKEN(ISNULL)
108-
OFFSET TOKEN(OFFSET)
109-
RENAME TOKEN(RENAME)
110-
SCHEMA TOKEN(SCHEMA)
111-
SELECT TOKEN(SELECT)
112-
SORTED TOKEN(SORTED)
113-
TABLES TOKEN(TABLES)
114-
UNIQUE TOKEN(UNIQUE)
115-
UNLOAD TOKEN(UNLOAD)
116-
UPDATE TOKEN(UPDATE)
117-
VALUES TOKEN(VALUES)
118-
AFTER TOKEN(AFTER)
119-
ALTER TOKEN(ALTER)
120-
ARRAY TOKEN(ARRAY)
121-
CROSS TOKEN(CROSS)
122-
DELTA TOKEN(DELTA)
123-
FLOAT TOKEN(FLOAT)
124-
GROUP TOKEN(GROUP)
125-
INDEX TOKEN(INDEX)
126-
INNER TOKEN(INNER)
127-
LIMIT TOKEN(LIMIT)
128-
LOCAL TOKEN(LOCAL)
129-
MERGE TOKEN(MERGE)
130-
MINUS TOKEN(MINUS)
131-
ORDER TOKEN(ORDER)
132-
OUTER TOKEN(OUTER)
133-
RIGHT TOKEN(RIGHT)
134-
TABLE TOKEN(TABLE)
135-
UNION TOKEN(UNION)
136-
USING TOKEN(USING)
137-
WHERE TOKEN(WHERE)
138-
CALL TOKEN(CALL)
139-
CASE TOKEN(CASE)
140-
CHAR TOKEN(CHAR)
141-
COPY TOKEN(COPY)
142-
DATE TOKEN(DATE)
143-
DATETIME TOKEN(DATETIME)
144-
DESC TOKEN(DESC)
145-
DROP TOKEN(DROP)
146-
ELSE TOKEN(ELSE)
147-
FILE TOKEN(FILE)
148-
FROM TOKEN(FROM)
149-
FULL TOKEN(FULL)
150-
HASH TOKEN(HASH)
151-
HINT TOKEN(HINT)
152-
INTO TOKEN(INTO)
153-
JOIN TOKEN(JOIN)
154-
LEFT TOKEN(LEFT)
155-
LIKE TOKEN(LIKE)
156-
ILIKE TOKEN(ILIKE)
157-
LOAD TOKEN(LOAD)
158-
LONG TOKEN(LONG)
159-
NULL TOKEN(NULL)
160-
PLAN TOKEN(PLAN)
161-
SHOW TOKEN(SHOW)
162-
TEXT TOKEN(TEXT)
163-
THEN TOKEN(THEN)
164-
TIME TOKEN(TIME)
165-
VIEW TOKEN(VIEW)
166-
WHEN TOKEN(WHEN)
167-
WITH TOKEN(WITH)
168-
ADD TOKEN(ADD)
169-
ALL TOKEN(ALL)
170-
AND TOKEN(AND)
171-
ASC TOKEN(ASC)
172-
END TOKEN(END)
173-
FOR TOKEN(FOR)
174-
INT TOKEN(INT)
175-
KEY TOKEN(KEY)
176-
NOT TOKEN(NOT)
177-
OFF TOKEN(OFF)
178-
SET TOKEN(SET)
179-
TOP TOKEN(TOP)
180-
AS TOKEN(AS)
181-
BY TOKEN(BY)
182-
IF TOKEN(IF)
183-
IN TOKEN(IN)
184-
IS TOKEN(IS)
185-
OF TOKEN(OF)
186-
ON TOKEN(ON)
187-
OR TOKEN(OR)
188-
TO TOKEN(TO)
189-
SECOND TOKEN(SECOND)
190-
MINUTE TOKEN(MINUTE)
191-
HOUR TOKEN(HOUR)
192-
DAY TOKEN(DAY)
193-
MONTH TOKEN(MONTH)
194-
YEAR TOKEN(YEAR)
195-
SECONDS TOKEN(SECONDS)
196-
MINUTES TOKEN(MINUTES)
197-
HOURS TOKEN(HOURS)
198-
DAYS TOKEN(DAYS)
199-
MONTHS TOKEN(MONTHS)
200-
YEARS TOKEN(YEARS)
201-
TRUE TOKEN(TRUE)
202-
FALSE TOKEN(FALSE)
65+
DEALLOCATE TOKEN(DEALLOCATE)
66+
PARAMETERS TOKEN(PARAMETERS)
67+
INTERSECT TOKEN(INTERSECT)
68+
TEMPORARY TOKEN(TEMPORARY)
69+
TIMESTAMP TOKEN(TIMESTAMP)
70+
DESCRIBE TOKEN(DESCRIBE)
71+
DISTINCT TOKEN(DISTINCT)
72+
NVARCHAR TOKEN(NVARCHAR)
73+
RESTRICT TOKEN(RESTRICT)
74+
TRUNCATE TOKEN(TRUNCATE)
75+
ANALYZE TOKEN(ANALYZE)
76+
BETWEEN TOKEN(BETWEEN)
77+
CASCADE TOKEN(CASCADE)
78+
COLUMNS TOKEN(COLUMNS)
79+
CONTROL TOKEN(CONTROL)
80+
DEFAULT TOKEN(DEFAULT)
81+
EXECUTE TOKEN(EXECUTE)
82+
EXPLAIN TOKEN(EXPLAIN)
83+
INTEGER TOKEN(INTEGER)
84+
NATURAL TOKEN(NATURAL)
85+
PREPARE TOKEN(PREPARE)
86+
PRIMARY TOKEN(PRIMARY)
87+
SCHEMAS TOKEN(SCHEMAS)
88+
SPATIAL TOKEN(SPATIAL)
89+
VARCHAR TOKEN(VARCHAR)
90+
CHARACTER TOKEN(CHARACTER)
91+
VARYING TOKEN(VARYING)
92+
TIME TOKEN(TIME)
93+
DECIMAL TOKEN(DECIMAL)
94+
REAL TOKEN(REAL)
95+
VIRTUAL TOKEN(VIRTUAL)
96+
BEFORE TOKEN(BEFORE)
97+
COLUMN TOKEN(COLUMN)
98+
CREATE TOKEN(CREATE)
99+
DELETE TOKEN(DELETE)
100+
DIRECT TOKEN(DIRECT)
101+
DOUBLE TOKEN(DOUBLE)
102+
ESCAPE TOKEN(ESCAPE)
103+
EXCEPT TOKEN(EXCEPT)
104+
EXISTS TOKEN(EXISTS)
105+
EXTRACT TOKEN(EXTRACT)
106+
CAST TOKEN(CAST)
107+
FORMAT TOKEN(FORMAT)
108+
GLOBAL TOKEN(GLOBAL)
109+
HAVING TOKEN(HAVING)
110+
IMPORT TOKEN(IMPORT)
111+
INSERT TOKEN(INSERT)
112+
ISNULL TOKEN(ISNULL)
113+
OFFSET TOKEN(OFFSET)
114+
RENAME TOKEN(RENAME)
115+
SCHEMA TOKEN(SCHEMA)
116+
SELECT TOKEN(SELECT)
117+
SORTED TOKEN(SORTED)
118+
TABLES TOKEN(TABLES)
119+
UNIQUE TOKEN(UNIQUE)
120+
UNLOAD TOKEN(UNLOAD)
121+
UPDATE TOKEN(UPDATE)
122+
VALUES TOKEN(VALUES)
123+
AFTER TOKEN(AFTER)
124+
ALTER TOKEN(ALTER)
125+
ARRAY TOKEN(ARRAY)
126+
CROSS TOKEN(CROSS)
127+
DELTA TOKEN(DELTA)
128+
FLOAT TOKEN(FLOAT)
129+
GROUP TOKEN(GROUP)
130+
INDEX TOKEN(INDEX)
131+
INNER TOKEN(INNER)
132+
LIMIT TOKEN(LIMIT)
133+
LOCAL TOKEN(LOCAL)
134+
MERGE TOKEN(MERGE)
135+
MINUS TOKEN(MINUS)
136+
ORDER TOKEN(ORDER)
137+
OUTER TOKEN(OUTER)
138+
RIGHT TOKEN(RIGHT)
139+
TABLE TOKEN(TABLE)
140+
UNION TOKEN(UNION)
141+
USING TOKEN(USING)
142+
WHERE TOKEN(WHERE)
143+
CALL TOKEN(CALL)
144+
CASE TOKEN(CASE)
145+
CHAR TOKEN(CHAR)
146+
COPY TOKEN(COPY)
147+
DATE TOKEN(DATE)
148+
DATETIME TOKEN(DATETIME)
149+
DESC TOKEN(DESC)
150+
DROP TOKEN(DROP)
151+
ELSE TOKEN(ELSE)
152+
FILE TOKEN(FILE)
153+
FROM TOKEN(FROM)
154+
FULL TOKEN(FULL)
155+
HASH TOKEN(HASH)
156+
HINT TOKEN(HINT)
157+
INTO TOKEN(INTO)
158+
JOIN TOKEN(JOIN)
159+
LEFT TOKEN(LEFT)
160+
LIKE TOKEN(LIKE)
161+
ILIKE TOKEN(ILIKE)
162+
LOAD TOKEN(LOAD)
163+
LONG TOKEN(LONG)
164+
NULL TOKEN(NULL)
165+
PLAN TOKEN(PLAN)
166+
SHOW TOKEN(SHOW)
167+
TEXT TOKEN(TEXT)
168+
THEN TOKEN(THEN)
169+
TIME TOKEN(TIME)
170+
VIEW TOKEN(VIEW)
171+
WHEN TOKEN(WHEN)
172+
WITH TOKEN(WITH)
173+
ADD TOKEN(ADD)
174+
ALL TOKEN(ALL)
175+
AND TOKEN(AND)
176+
ASC TOKEN(ASC)
177+
END TOKEN(END)
178+
FOR TOKEN(FOR)
179+
INT TOKEN(INT)
180+
KEY TOKEN(KEY)
181+
NOT TOKEN(NOT)
182+
OFF TOKEN(OFF)
183+
SET TOKEN(SET)
184+
TOP TOKEN(TOP)
185+
AS TOKEN(AS)
186+
BY TOKEN(BY)
187+
IF TOKEN(IF)
188+
IN TOKEN(IN)
189+
IS TOKEN(IS)
190+
OF TOKEN(OF)
191+
ON TOKEN(ON)
192+
OR TOKEN(OR)
193+
TO TOKEN(TO)
194+
SECOND TOKEN(SECOND)
195+
MINUTE TOKEN(MINUTE)
196+
HOUR TOKEN(HOUR)
197+
DAY TOKEN(DAY)
198+
MONTH TOKEN(MONTH)
199+
YEAR TOKEN(YEAR)
200+
SECONDS TOKEN(SECONDS)
201+
MINUTES TOKEN(MINUTES)
202+
HOURS TOKEN(HOURS)
203+
DAYS TOKEN(DAYS)
204+
MONTHS TOKEN(MONTHS)
205+
YEARS TOKEN(YEARS)
206+
TRUE TOKEN(TRUE)
207+
FALSE TOKEN(FALSE)
203208
TRANSACTION TOKEN(TRANSACTION)
204-
BEGIN TOKEN(BEGIN)
205-
ROLLBACK TOKEN(ROLLBACK)
206-
COMMIT TOKEN(COMMIT)
207-
INTERVAL TOKEN(INTERVAL)
209+
BEGIN TOKEN(BEGIN)
210+
ROLLBACK TOKEN(ROLLBACK)
211+
COMMIT TOKEN(COMMIT)
212+
INTERVAL TOKEN(INTERVAL)
208213

209-
/* Allow =/== see https://sqlite.org/lang_expr.html#collateop */
210-
"==" TOKEN(EQUALS)
211-
"!=" TOKEN(NOTEQUALS)
212-
"<>" TOKEN(NOTEQUALS)
213-
"<=" TOKEN(LESSEQ)
214-
">=" TOKEN(GREATEREQ)
215-
"||" TOKEN(CONCAT)
214+
/* Allow =/== see https://sqlite.org/lang_expr.html#collateop */
215+
"==" TOKEN(EQUALS)
216+
"!=" TOKEN(NOTEQUALS)
217+
"<>" TOKEN(NOTEQUALS)
218+
"<=" TOKEN(LESSEQ)
219+
">=" TOKEN(GREATEREQ)
220+
"||" TOKEN(CONCAT)
216221

217-
[-+*/(){},.;<>=^%:?[\]|] { return yytext[0]; }
222+
[-+*/(){},.;<>=^%:?[\]|] { return yytext[0]; }
218223

219224
[0-9]+"."[0-9]* |
220225
"."[0-9]* {

src/sql/AlterStatement.h

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#ifndef SQLPARSER_ALTER_STATEMENT_H
2+
#define SQLPARSER_ALTER_STATEMENT_H
3+
4+
#include "SQLStatement.h"
5+
6+
// Note: Implementations of constructors and destructors can be found in statements.cpp.
7+
namespace hsql {
8+
9+
enum ActionType {
10+
DropColumn,
11+
};
12+
13+
struct AlterAction {
14+
AlterAction(ActionType type);
15+
ActionType type;
16+
virtual ~AlterAction();
17+
};
18+
19+
struct DropColumnAction : AlterAction {
20+
DropColumnAction(char* column_name);
21+
char* columnName;
22+
bool ifExists;
23+
24+
~DropColumnAction() override;
25+
};
26+
27+
// Represents SQL Alter Table statements.
28+
// Example "ALTER TABLE students DROP COLUMN name;"
29+
struct AlterStatement : SQLStatement {
30+
31+
AlterStatement(char* name, AlterAction* action);
32+
~AlterStatement() override;
33+
34+
char* schema;
35+
bool ifTableExists;
36+
char* name;
37+
AlterAction* action;
38+
};
39+
} // namespace hsql
40+
41+
#endif

0 commit comments

Comments
 (0)