Skip to content

Commit 13a1e50

Browse files
committed
Add TK_INTERSECT, TK_EXCEPT tokens and NODE_COMPOUND_QUERY, NODE_SET_OPERATION node types
Register INTERSECT and EXCEPT keywords in both MySQL and PostgreSQL keyword tables. Update is_alias_start() blocklist to prevent these keywords from being misinterpreted as implicit aliases.
1 parent 0de97c8 commit 13a1e50

5 files changed

Lines changed: 14 additions & 0 deletions

File tree

include/sql_parser/common.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,10 @@ enum class NodeType : uint16_t {
164164
NODE_DELETE_STMT,
165165
NODE_DELETE_USING_CLAUSE, // PostgreSQL USING or MySQL USING form
166166

167+
// Compound query nodes
168+
NODE_COMPOUND_QUERY, // root for UNION/INTERSECT/EXCEPT
169+
NODE_SET_OPERATION, // operator (UNION, INTERSECT, EXCEPT) with ALL flag
170+
167171
// Shared
168172
NODE_STMT_OPTIONS, // LOW_PRIORITY, IGNORE, QUICK, DELAYED, etc.
169173
NODE_UPDATE_SET_ITEM, // single col=expr pair (shared by INSERT SET and UPDATE SET)

include/sql_parser/keywords_mysql.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ inline constexpr KeywordEntry KEYWORDS[] = {
4949
{"DUPLICATE", 9, TokenType::TK_DUPLICATE},
5050
{"ELSE", 4, TokenType::TK_ELSE},
5151
{"END", 3, TokenType::TK_END},
52+
{"EXCEPT", 6, TokenType::TK_EXCEPT},
5253
{"EXECUTE", 7, TokenType::TK_EXECUTE},
5354
{"EXISTS", 6, TokenType::TK_EXISTS},
5455
{"FALSE", 5, TokenType::TK_FALSE},
@@ -67,6 +68,7 @@ inline constexpr KeywordEntry KEYWORDS[] = {
6768
{"INDEX", 5, TokenType::TK_INDEX},
6869
{"INNER", 5, TokenType::TK_INNER},
6970
{"INSERT", 6, TokenType::TK_INSERT},
71+
{"INTERSECT", 9, TokenType::TK_INTERSECT},
7072
{"INTO", 4, TokenType::TK_INTO},
7173
{"IS", 2, TokenType::TK_IS},
7274
{"ISOLATION", 9, TokenType::TK_ISOLATION},

include/sql_parser/keywords_pgsql.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ inline constexpr KeywordEntry KEYWORDS[] = {
4343
{"DROP", 4, TokenType::TK_DROP},
4444
{"ELSE", 4, TokenType::TK_ELSE},
4545
{"END", 3, TokenType::TK_END},
46+
{"EXCEPT", 6, TokenType::TK_EXCEPT},
4647
{"EXECUTE", 7, TokenType::TK_EXECUTE},
4748
{"EXISTS", 6, TokenType::TK_EXISTS},
4849
{"FALSE", 5, TokenType::TK_FALSE},
@@ -58,6 +59,7 @@ inline constexpr KeywordEntry KEYWORDS[] = {
5859
{"INDEX", 5, TokenType::TK_INDEX},
5960
{"INNER", 5, TokenType::TK_INNER},
6061
{"INSERT", 6, TokenType::TK_INSERT},
62+
{"INTERSECT", 9, TokenType::TK_INTERSECT},
6163
{"INTO", 4, TokenType::TK_INTO},
6264
{"IS", 2, TokenType::TK_IS},
6365
{"ISOLATION", 9, TokenType::TK_ISOLATION},

include/sql_parser/table_ref_parser.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,8 @@ class TableRefParser {
206206
case TokenType::TK_ON:
207207
case TokenType::TK_USING:
208208
case TokenType::TK_UNION:
209+
case TokenType::TK_INTERSECT:
210+
case TokenType::TK_EXCEPT:
209211
case TokenType::TK_SEMICOLON:
210212
case TokenType::TK_RPAREN:
211213
case TokenType::TK_LPAREN:

include/sql_parser/token.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,10 @@ enum class TokenType : uint16_t {
7575
TK_NOTHING,
7676
TK_RETURNING,
7777
TK_CONSTRAINT,
78+
79+
// Compound query operators
80+
TK_INTERSECT,
81+
TK_EXCEPT,
7882
};
7983

8084
struct Token {

0 commit comments

Comments
 (0)