Skip to content

Commit db2a3e9

Browse files
committed
feat: add SELECT deep parser with FROM, JOIN, WHERE, GROUP BY, ORDER BY, LIMIT, locking
1 parent fc2efc3 commit db2a3e9

8 files changed

Lines changed: 1036 additions & 2 deletions

File tree

Makefile.new

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ TEST_SRCS = $(TEST_DIR)/test_main.cpp \
2424
$(TEST_DIR)/test_tokenizer.cpp \
2525
$(TEST_DIR)/test_classifier.cpp \
2626
$(TEST_DIR)/test_expression.cpp \
27-
$(TEST_DIR)/test_set.cpp
27+
$(TEST_DIR)/test_set.cpp \
28+
$(TEST_DIR)/test_select.cpp
2829
TEST_OBJS = $(TEST_SRCS:.cpp=.o)
2930
TEST_TARGET = $(PROJECT_ROOT)/run_tests
3031

include/sql_parser/expression_parser.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,16 @@ class ExpressionParser {
142142
node->add_child(operand);
143143
return node;
144144
}
145+
case TokenType::TK_EXISTS: {
146+
tok_.skip();
147+
// EXISTS (subquery)
148+
AstNode* node = make_node(arena_, NodeType::NODE_SUBQUERY);
149+
if (tok_.peek().type == TokenType::TK_LPAREN) {
150+
tok_.skip();
151+
skip_to_matching_paren();
152+
}
153+
return node;
154+
}
145155
case TokenType::TK_CASE: {
146156
tok_.skip();
147157
return parse_case();

include/sql_parser/keywords_mysql.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ inline constexpr KeywordEntry KEYWORDS[] = {
8181
{"NOT", 3, TokenType::TK_NOT},
8282
{"NOWAIT", 6, TokenType::TK_NOWAIT},
8383
{"NULL", 4, TokenType::TK_NULL},
84+
{"OF", 2, TokenType::TK_OF},
8485
{"OFFSET", 6, TokenType::TK_OFFSET},
8586
{"ON", 2, TokenType::TK_ON},
8687
{"ONLY", 4, TokenType::TK_ONLY},
@@ -116,6 +117,7 @@ inline constexpr KeywordEntry KEYWORDS[] = {
116117
{"TRANSACTION", 11, TokenType::TK_TRANSACTION},
117118
{"TRUE", 4, TokenType::TK_TRUE},
118119
{"TRUNCATE", 8, TokenType::TK_TRUNCATE},
120+
{"UNION", 5, TokenType::TK_UNION},
119121
{"UNCOMMITTED", 11, TokenType::TK_UNCOMMITTED},
120122
{"UNLOCK", 6, TokenType::TK_UNLOCK},
121123
{"UPDATE", 6, TokenType::TK_UPDATE},

include/sql_parser/keywords_pgsql.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ inline constexpr KeywordEntry KEYWORDS[] = {
7272
{"NATURAL", 7, TokenType::TK_NATURAL},
7373
{"NOT", 3, TokenType::TK_NOT},
7474
{"NULL", 4, TokenType::TK_NULL},
75+
{"OF", 2, TokenType::TK_OF},
7576
{"OFFSET", 6, TokenType::TK_OFFSET},
7677
{"ON", 2, TokenType::TK_ON},
7778
{"ONLY", 4, TokenType::TK_ONLY},
@@ -101,6 +102,7 @@ inline constexpr KeywordEntry KEYWORDS[] = {
101102
{"TRANSACTION", 11, TokenType::TK_TRANSACTION},
102103
{"TRUE", 4, TokenType::TK_TRUE},
103104
{"TRUNCATE", 8, TokenType::TK_TRUNCATE},
105+
{"UNION", 5, TokenType::TK_UNION},
104106
{"UNCOMMITTED", 11, TokenType::TK_UNCOMMITTED},
105107
{"UNLOCK", 6, TokenType::TK_UNLOCK},
106108
{"UPDATE", 6, TokenType::TK_UPDATE},

0 commit comments

Comments
 (0)