Skip to content

Commit 67c90bb

Browse files
committed
Add tokens and node types for EXPLAIN, CALL, DO, LOAD DATA
New tokens: TK_EXPLAIN, TK_DESCRIBE, TK_CALL, TK_PROCEDURE, TK_FORMAT, TK_ANALYZE, TK_VERBOSE, TK_COSTS, TK_SETTINGS, TK_BUFFERS, TK_WAL, TK_TIMING, TK_SUMMARY, TK_INFILE, TK_LINES, TK_TERMINATED, TK_ENCLOSED, TK_ESCAPED, TK_OPTIONALLY, TK_CONCURRENT, TK_STARTING, TK_COLUMNS, TK_FIELDS, TK_ROWS. New node types: NODE_EXPLAIN_STMT, NODE_EXPLAIN_OPTIONS, NODE_EXPLAIN_FORMAT, NODE_CALL_STMT, NODE_DO_STMT, NODE_LOAD_DATA_STMT, NODE_LOAD_DATA_OPTIONS. New stmt types: EXPLAIN, DESCRIBE, CALL, DO_STMT.
1 parent 288c4ed commit 67c90bb

5 files changed

Lines changed: 107 additions & 0 deletions

File tree

include/sql_parser/common.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@ enum class StmtType : uint8_t {
8989
UNLOCK,
9090
LOAD_DATA,
9191
RESET,
92+
EXPLAIN,
93+
DESCRIBE,
94+
CALL,
95+
DO_STMT,
9296
};
9397

9498
// -- AST node types --
@@ -171,6 +175,21 @@ enum class NodeType : uint16_t {
171175
NODE_COMPOUND_QUERY, // root for UNION/INTERSECT/EXCEPT
172176
NODE_SET_OPERATION, // operator (UNION, INTERSECT, EXCEPT) with ALL flag
173177

178+
// EXPLAIN/DESCRIBE
179+
NODE_EXPLAIN_STMT,
180+
NODE_EXPLAIN_OPTIONS,
181+
NODE_EXPLAIN_FORMAT,
182+
183+
// CALL
184+
NODE_CALL_STMT,
185+
186+
// DO
187+
NODE_DO_STMT,
188+
189+
// LOAD DATA
190+
NODE_LOAD_DATA_STMT,
191+
NODE_LOAD_DATA_OPTIONS,
192+
174193
// Shared
175194
NODE_STMT_OPTIONS, // LOW_PRIORITY, IGNORE, QUICK, DELAYED, etc.
176195
NODE_UPDATE_SET_ITEM, // single col=expr pair (shared by INSERT SET and UPDATE SET)

include/sql_parser/expression_parser.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,30 @@ class ExpressionParser {
449449
case TokenType::TK_DUPLICATE:
450450
case TokenType::TK_DELAYED:
451451
case TokenType::TK_HIGH_PRIORITY:
452+
case TokenType::TK_EXPLAIN:
453+
case TokenType::TK_DESCRIBE:
454+
case TokenType::TK_CALL:
455+
case TokenType::TK_PROCEDURE:
456+
case TokenType::TK_FORMAT:
457+
case TokenType::TK_ANALYZE:
458+
case TokenType::TK_VERBOSE:
459+
case TokenType::TK_COSTS:
460+
case TokenType::TK_SETTINGS:
461+
case TokenType::TK_BUFFERS:
462+
case TokenType::TK_WAL:
463+
case TokenType::TK_TIMING:
464+
case TokenType::TK_SUMMARY:
465+
case TokenType::TK_INFILE:
466+
case TokenType::TK_LINES:
467+
case TokenType::TK_TERMINATED:
468+
case TokenType::TK_ENCLOSED:
469+
case TokenType::TK_ESCAPED:
470+
case TokenType::TK_OPTIONALLY:
471+
case TokenType::TK_CONCURRENT:
472+
case TokenType::TK_STARTING:
473+
case TokenType::TK_COLUMNS:
474+
case TokenType::TK_FIELDS:
475+
case TokenType::TK_ROWS:
452476
return true;
453477
default:
454478
return false;

include/sql_parser/keywords_mysql.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,27 @@ struct KeywordEntry {
1717
inline constexpr KeywordEntry KEYWORDS[] = {
1818
{"ALL", 3, TokenType::TK_ALL},
1919
{"ALTER", 5, TokenType::TK_ALTER},
20+
{"ANALYZE", 7, TokenType::TK_ANALYZE},
2021
{"AND", 3, TokenType::TK_AND},
2122
{"AS", 2, TokenType::TK_AS},
2223
{"ASC", 3, TokenType::TK_ASC},
2324
{"AVG", 3, TokenType::TK_AVG},
2425
{"BEGIN", 5, TokenType::TK_BEGIN},
2526
{"BETWEEN", 7, TokenType::TK_BETWEEN},
27+
{"BUFFERS", 7, TokenType::TK_BUFFERS},
2628
{"BY", 2, TokenType::TK_BY},
29+
{"CALL", 4, TokenType::TK_CALL},
2730
{"CASE", 4, TokenType::TK_CASE},
2831
{"CHARACTER", 9, TokenType::TK_CHARACTER},
2932
{"CHARSET", 7, TokenType::TK_CHARSET},
3033
{"COLLATE", 7, TokenType::TK_COLLATE},
34+
{"COLUMNS", 7, TokenType::TK_COLUMNS},
3135
{"COMMIT", 6, TokenType::TK_COMMIT},
3236
{"COMMITTED", 9, TokenType::TK_COMMITTED},
37+
{"CONCURRENT", 10, TokenType::TK_CONCURRENT},
3338
{"CONFLICT", 8, TokenType::TK_CONFLICT},
3439
{"CONSTRAINT", 10, TokenType::TK_CONSTRAINT},
40+
{"COSTS", 5, TokenType::TK_COSTS},
3541
{"COUNT", 5, TokenType::TK_COUNT},
3642
{"CREATE", 6, TokenType::TK_CREATE},
3743
{"CROSS", 5, TokenType::TK_CROSS},
@@ -42,19 +48,25 @@ inline constexpr KeywordEntry KEYWORDS[] = {
4248
{"DELAYED", 7, TokenType::TK_DELAYED},
4349
{"DELETE", 6, TokenType::TK_DELETE},
4450
{"DESC", 4, TokenType::TK_DESC},
51+
{"DESCRIBE", 8, TokenType::TK_DESCRIBE},
4552
{"DISTINCT", 8, TokenType::TK_DISTINCT},
4653
{"DO", 2, TokenType::TK_DO},
4754
{"DROP", 4, TokenType::TK_DROP},
4855
{"DUMPFILE", 8, TokenType::TK_DUMPFILE},
4956
{"DUPLICATE", 9, TokenType::TK_DUPLICATE},
5057
{"ELSE", 4, TokenType::TK_ELSE},
58+
{"ENCLOSED", 8, TokenType::TK_ENCLOSED},
5159
{"END", 3, TokenType::TK_END},
60+
{"ESCAPED", 7, TokenType::TK_ESCAPED},
5261
{"EXCEPT", 6, TokenType::TK_EXCEPT},
5362
{"EXECUTE", 7, TokenType::TK_EXECUTE},
5463
{"EXISTS", 6, TokenType::TK_EXISTS},
64+
{"EXPLAIN", 7, TokenType::TK_EXPLAIN},
5565
{"FALSE", 5, TokenType::TK_FALSE},
5666
{"FETCH", 5, TokenType::TK_FETCH},
67+
{"FIELDS", 6, TokenType::TK_FIELDS},
5768
{"FOR", 3, TokenType::TK_FOR},
69+
{"FORMAT", 6, TokenType::TK_FORMAT},
5870
{"FROM", 4, TokenType::TK_FROM},
5971
{"FULL", 4, TokenType::TK_FULL},
6072
{"GLOBAL", 6, TokenType::TK_GLOBAL},
@@ -66,6 +78,7 @@ inline constexpr KeywordEntry KEYWORDS[] = {
6678
{"IGNORE", 6, TokenType::TK_IGNORE},
6779
{"IN", 2, TokenType::TK_IN},
6880
{"INDEX", 5, TokenType::TK_INDEX},
81+
{"INFILE", 6, TokenType::TK_INFILE},
6982
{"INNER", 5, TokenType::TK_INNER},
7083
{"INSERT", 6, TokenType::TK_INSERT},
7184
{"INTERSECT", 9, TokenType::TK_INTERSECT},
@@ -78,6 +91,7 @@ inline constexpr KeywordEntry KEYWORDS[] = {
7891
{"LEVEL", 5, TokenType::TK_LEVEL},
7992
{"LIKE", 4, TokenType::TK_LIKE},
8093
{"LIMIT", 5, TokenType::TK_LIMIT},
94+
{"LINES", 5, TokenType::TK_LINES},
8195
{"LOAD", 4, TokenType::TK_LOAD},
8296
{"LOCAL", 5, TokenType::TK_LOCAL},
8397
{"LOCK", 4, TokenType::TK_LOCK},
@@ -95,12 +109,14 @@ inline constexpr KeywordEntry KEYWORDS[] = {
95109
{"OFFSET", 6, TokenType::TK_OFFSET},
96110
{"ON", 2, TokenType::TK_ON},
97111
{"ONLY", 4, TokenType::TK_ONLY},
112+
{"OPTIONALLY", 10, TokenType::TK_OPTIONALLY},
98113
{"OR", 2, TokenType::TK_OR},
99114
{"ORDER", 5, TokenType::TK_ORDER},
100115
{"OUTER", 5, TokenType::TK_OUTER},
101116
{"OUTFILE", 7, TokenType::TK_OUTFILE},
102117
{"PERSIST", 7, TokenType::TK_PERSIST},
103118
{"PREPARE", 7, TokenType::TK_PREPARE},
119+
{"PROCEDURE", 9, TokenType::TK_PROCEDURE},
104120
{"QUICK", 5, TokenType::TK_QUICK},
105121
{"READ", 4, TokenType::TK_READ},
106122
{"REPEATABLE", 10, TokenType::TK_REPEATABLE},
@@ -110,20 +126,26 @@ inline constexpr KeywordEntry KEYWORDS[] = {
110126
{"REVOKE", 6, TokenType::TK_REVOKE},
111127
{"RIGHT", 5, TokenType::TK_RIGHT},
112128
{"ROLLBACK", 8, TokenType::TK_ROLLBACK},
129+
{"ROWS", 4, TokenType::TK_ROWS},
113130
{"SAVEPOINT", 9, TokenType::TK_SAVEPOINT},
114131
{"SCHEMA", 6, TokenType::TK_SCHEMA},
115132
{"SELECT", 6, TokenType::TK_SELECT},
116133
{"SERIALIZABLE", 12, TokenType::TK_SERIALIZABLE},
117134
{"SESSION", 7, TokenType::TK_SESSION},
118135
{"SET", 3, TokenType::TK_SET},
136+
{"SETTINGS", 8, TokenType::TK_SETTINGS},
119137
{"SHARE", 5, TokenType::TK_SHARE},
120138
{"SHOW", 4, TokenType::TK_SHOW},
121139
{"SKIP", 4, TokenType::TK_SKIP},
122140
{"SQL_CALC_FOUND_ROWS", 19, TokenType::TK_SQL_CALC_FOUND_ROWS},
123141
{"START", 5, TokenType::TK_START},
142+
{"STARTING", 8, TokenType::TK_STARTING},
124143
{"SUM", 3, TokenType::TK_SUM},
144+
{"SUMMARY", 7, TokenType::TK_SUMMARY},
125145
{"TABLE", 5, TokenType::TK_TABLE},
146+
{"TERMINATED", 10, TokenType::TK_TERMINATED},
126147
{"THEN", 4, TokenType::TK_THEN},
148+
{"TIMING", 6, TokenType::TK_TIMING},
127149
{"TO", 2, TokenType::TK_TO},
128150
{"TRANSACTION", 11, TokenType::TK_TRANSACTION},
129151
{"TRUE", 4, TokenType::TK_TRUE},
@@ -135,7 +157,9 @@ inline constexpr KeywordEntry KEYWORDS[] = {
135157
{"USE", 3, TokenType::TK_USE},
136158
{"USING", 5, TokenType::TK_USING},
137159
{"VALUES", 6, TokenType::TK_VALUES},
160+
{"VERBOSE", 7, TokenType::TK_VERBOSE},
138161
{"VIEW", 4, TokenType::TK_VIEW},
162+
{"WAL", 3, TokenType::TK_WAL},
139163
{"WHEN", 4, TokenType::TK_WHEN},
140164
{"WHERE", 5, TokenType::TK_WHERE},
141165
{"WRITE", 5, TokenType::TK_WRITE},

include/sql_parser/keywords_pgsql.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,25 @@ struct KeywordEntry {
1515
inline constexpr KeywordEntry KEYWORDS[] = {
1616
{"ALL", 3, TokenType::TK_ALL},
1717
{"ALTER", 5, TokenType::TK_ALTER},
18+
{"ANALYZE", 7, TokenType::TK_ANALYZE},
1819
{"AND", 3, TokenType::TK_AND},
1920
{"AS", 2, TokenType::TK_AS},
2021
{"ASC", 3, TokenType::TK_ASC},
2122
{"AVG", 3, TokenType::TK_AVG},
2223
{"BEGIN", 5, TokenType::TK_BEGIN},
2324
{"BETWEEN", 7, TokenType::TK_BETWEEN},
25+
{"BUFFERS", 7, TokenType::TK_BUFFERS},
2426
{"BY", 2, TokenType::TK_BY},
27+
{"CALL", 4, TokenType::TK_CALL},
2528
{"CASE", 4, TokenType::TK_CASE},
2629
{"CHARACTER", 9, TokenType::TK_CHARACTER},
2730
{"COLLATE", 7, TokenType::TK_COLLATE},
31+
{"COLUMNS", 7, TokenType::TK_COLUMNS},
2832
{"COMMIT", 6, TokenType::TK_COMMIT},
2933
{"COMMITTED", 9, TokenType::TK_COMMITTED},
3034
{"CONFLICT", 8, TokenType::TK_CONFLICT},
3135
{"CONSTRAINT", 10, TokenType::TK_CONSTRAINT},
36+
{"COSTS", 5, TokenType::TK_COSTS},
3237
{"COUNT", 5, TokenType::TK_COUNT},
3338
{"CREATE", 6, TokenType::TK_CREATE},
3439
{"CROSS", 5, TokenType::TK_CROSS},
@@ -38,6 +43,7 @@ inline constexpr KeywordEntry KEYWORDS[] = {
3843
{"DEFAULT", 7, TokenType::TK_DEFAULT},
3944
{"DELETE", 6, TokenType::TK_DELETE},
4045
{"DESC", 4, TokenType::TK_DESC},
46+
{"DESCRIBE", 8, TokenType::TK_DESCRIBE},
4147
{"DISTINCT", 8, TokenType::TK_DISTINCT},
4248
{"DO", 2, TokenType::TK_DO},
4349
{"DROP", 4, TokenType::TK_DROP},
@@ -46,9 +52,11 @@ inline constexpr KeywordEntry KEYWORDS[] = {
4652
{"EXCEPT", 6, TokenType::TK_EXCEPT},
4753
{"EXECUTE", 7, TokenType::TK_EXECUTE},
4854
{"EXISTS", 6, TokenType::TK_EXISTS},
55+
{"EXPLAIN", 7, TokenType::TK_EXPLAIN},
4956
{"FALSE", 5, TokenType::TK_FALSE},
5057
{"FETCH", 5, TokenType::TK_FETCH},
5158
{"FOR", 3, TokenType::TK_FOR},
59+
{"FORMAT", 6, TokenType::TK_FORMAT},
5260
{"FROM", 4, TokenType::TK_FROM},
5361
{"FULL", 4, TokenType::TK_FULL},
5462
{"GRANT", 5, TokenType::TK_GRANT},
@@ -86,6 +94,7 @@ inline constexpr KeywordEntry KEYWORDS[] = {
8694
{"ORDER", 5, TokenType::TK_ORDER},
8795
{"OUTER", 5, TokenType::TK_OUTER},
8896
{"PREPARE", 7, TokenType::TK_PREPARE},
97+
{"PROCEDURE", 9, TokenType::TK_PROCEDURE},
8998
{"READ", 4, TokenType::TK_READ},
9099
{"REPEATABLE", 10, TokenType::TK_REPEATABLE},
91100
{"RESET", 5, TokenType::TK_RESET},
@@ -99,12 +108,15 @@ inline constexpr KeywordEntry KEYWORDS[] = {
99108
{"SERIALIZABLE", 12, TokenType::TK_SERIALIZABLE},
100109
{"SESSION", 7, TokenType::TK_SESSION},
101110
{"SET", 3, TokenType::TK_SET},
111+
{"SETTINGS", 8, TokenType::TK_SETTINGS},
102112
{"SHARE", 5, TokenType::TK_SHARE},
103113
{"SHOW", 4, TokenType::TK_SHOW},
104114
{"START", 5, TokenType::TK_START},
105115
{"SUM", 3, TokenType::TK_SUM},
116+
{"SUMMARY", 7, TokenType::TK_SUMMARY},
106117
{"TABLE", 5, TokenType::TK_TABLE},
107118
{"THEN", 4, TokenType::TK_THEN},
119+
{"TIMING", 6, TokenType::TK_TIMING},
108120
{"TO", 2, TokenType::TK_TO},
109121
{"TRANSACTION", 11, TokenType::TK_TRANSACTION},
110122
{"TRUE", 4, TokenType::TK_TRUE},
@@ -116,7 +128,9 @@ inline constexpr KeywordEntry KEYWORDS[] = {
116128
{"USE", 3, TokenType::TK_USE},
117129
{"USING", 5, TokenType::TK_USING},
118130
{"VALUES", 6, TokenType::TK_VALUES},
131+
{"VERBOSE", 7, TokenType::TK_VERBOSE},
119132
{"VIEW", 4, TokenType::TK_VIEW},
133+
{"WAL", 3, TokenType::TK_WAL},
120134
{"WHEN", 4, TokenType::TK_WHEN},
121135
{"WHERE", 5, TokenType::TK_WHERE},
122136
{"WRITE", 5, TokenType::TK_WRITE},

include/sql_parser/token.h

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,32 @@ enum class TokenType : uint16_t {
7979
// Compound query operators
8080
TK_INTERSECT,
8181
TK_EXCEPT,
82+
83+
// EXPLAIN/DESCRIBE/CALL/LOAD DATA related tokens
84+
TK_EXPLAIN,
85+
TK_DESCRIBE,
86+
TK_CALL,
87+
TK_PROCEDURE,
88+
TK_FORMAT,
89+
TK_ANALYZE,
90+
TK_VERBOSE,
91+
TK_COSTS,
92+
TK_SETTINGS,
93+
TK_BUFFERS,
94+
TK_WAL,
95+
TK_TIMING,
96+
TK_SUMMARY,
97+
TK_INFILE,
98+
TK_LINES,
99+
TK_TERMINATED,
100+
TK_ENCLOSED,
101+
TK_ESCAPED,
102+
TK_OPTIONALLY,
103+
TK_CONCURRENT,
104+
TK_STARTING,
105+
TK_COLUMNS,
106+
TK_FIELDS,
107+
TK_ROWS,
82108
};
83109

84110
struct Token {

0 commit comments

Comments
 (0)