6
6
7
7
%%
8
8
9
- \s + /* skip whitespace */
10
- [/][*] (. | \n )*? [*][/] /* skip comments */
11
- [-][-] \s . * \n /* skip sql comments */
9
+ [/][*] (. | \n )*? [*][/] /* skip comments */
10
+ [-][-] \s . * \n /* skip sql comments */
11
+ [#] \s . * \n /* skip sql comments */
12
+ \s + /* skip whitespace */
13
+
14
+ SELECT return ' SELECT'
15
+ ALL return ' ALL'
16
+ DISTINCT return ' DISTINCT'
17
+ DISTINCTROW return ' DISTINCTROW'
18
+ HIGH_PRIORITY return ' HIGH_PRIORITY'
19
+ MAX_STATEMENT_TIME return ' MAX_STATEMENT_TIME'
20
+ STRAIGHT_JOIN return ' STRAIGHT_JOIN'
21
+ SQL_SMALL_RESULT return ' SQL_SMALL_RESULT'
22
+ SQL_BIG_RESULT return ' SQL_BIG_RESULT'
23
+ SQL_BUFFER_RESULT return ' SQL_BUFFER_RESULT'
24
+ SQL_CACHE return ' SQL_CACHE'
25
+ SQL_NO_CACHE return ' SQL_NO_CACHE'
26
+ SQL_CALC_FOUND_ROWS return ' SQL_CALC_FOUND_ROWS'
27
+ '*' return ' *' ;
28
+ ([a-zA-Z_\u4e00 -\u9fa5 ][a-zA-Z0-9_\u4e00 -\u9fa5 ] + \. ){1,2} \* return ' SELECT_EXPR_STAR'
29
+ AS return ' AS'
30
+ TRUE return ' TRUE'
31
+ FALSE return ' FALSE'
32
+ NULL return ' NULL'
12
33
13
- SELECT return ' SELECT'
14
- ALL return ' ALL'
15
- DISTINCT return ' DISTINCT'
16
- DISTINCTROW return ' DISTINCTROW'
34
+ ',' return ' ,'
35
+ '=' return ' ='
36
+ '(' return ' ('
37
+ ')' return ' )'
38
+
39
+ ['] (\\ . | [^ '] )* ['] return ' STRING'
40
+ ["] (\\ . | [^ "] )* ["] return ' STRING'
41
+ [0][x][0-9a-fA-F] + return ' HEX_NUMERIC'
42
+ [-] ? [0-9] + (\. [0-9] + )? return ' NUMERIC'
43
+ [-] ? [0-9] + (\. [0-9] + )? [eE][-][0-9] + (\. [0-9] + )? return ' EXPONENT_NUMERIC'
17
44
18
- ['] (\\ . | [^ '] )* ['] return ' STRING'
19
- ["] (\\ . | [^ "] )* ["] return ' STRING'
20
- [0-9] + (\. [0-9] + )? return ' NUMERIC'
21
-
22
- <<EOF>> return ' EOF'
23
- . return ' INVALID'
45
+ [a-zA-Z_\u4e00 -\u9fa5 ][a-zA-Z0-9_\u4e00 -\u9fa5 ] * return ' IDENTIFIER'
46
+ ['"][a-zA-Z_\u4e00 -\u9fa5 ][a-zA-Z0-9_\u4e00 -\u9fa5 ] * ["'] return ' QUOTED_IDENTIFIER'
47
+
48
+ <<EOF>> return ' EOF'
49
+ . return ' INVALID'
24
50
25
51
/lex
26
52
35
61
selectClause
36
62
: SELECT
37
63
distinctOpt
64
+ highPriorityOpt
65
+ maxStateMentTimeOpt
66
+ straightJoinOpt
67
+ sqlSmallResultOpt
68
+ sqlBigResultOpt
69
+ sqlBufferResultOpt
70
+ sqlCacheOpt
71
+ sqlNoCacheOpt
72
+ sqlCalcFoundRowsOpt
73
+ selectExprList
38
74
{
39
75
return {
40
- distinctOpt: $2
76
+ type: ' Select' ,
77
+ distinctOpt: $2 ,
78
+ highPriorityOpt: $3 ,
79
+ maxStateMentTimeOpt: $4 ,
80
+ straightJoinOpt: $5 ,
81
+ sqlSmallResultOpt: $6 ,
82
+ sqlBigResultOpt: $7 ,
83
+ sqlBufferResultOpt: $8 ,
84
+ sqlCacheOpt: $9 ,
85
+ sqlNoCacheOpt: $10 ,
86
+ sqlCalcFoundRowsOpt: $11 ,
87
+ selectExprList: $12
41
88
}
42
89
}
43
90
;
@@ -48,4 +95,104 @@ distinctOpt
48
95
| DISTINCTROW { $$ = $1 }
49
96
| { $$ = null }
50
97
;
98
+ highPriorityOpt
99
+ : HIGH_PRIORITY { $$ = true }
100
+ | { $$ = null }
101
+ ;
102
+ maxStateMentTimeOpt
103
+ : MAX_STATEMENT_TIME '=' NUMERIC { $$ = $3 }
104
+ | { $$ = null }
105
+ ;
106
+ straightJoinOpt
107
+ : STRAIGHT_JOIN { $$ = true }
108
+ | { $$ = null }
109
+ ;
110
+ sqlSmallResultOpt
111
+ : SQL_SMALL_RESULT { $$ = true }
112
+ | { $$ = null }
113
+ ;
114
+ sqlBigResultOpt
115
+ : SQL_BIG_RESULT { $$ = true }
116
+ | { $$ = null }
117
+ ;
118
+ sqlBufferResultOpt
119
+ : SQL_BUFFER_RESULT { $$ = true }
120
+ | { $$ = null }
121
+ ;
122
+ sqlCacheOpt
123
+ : SQL_CACHE { $$ = true }
124
+ | { $$ = null }
125
+ ;
126
+ sqlNoCacheOpt
127
+ : SQL_NO_CACHE { $$ = true }
128
+ | { $$ = null }
129
+ ;
130
+ sqlCalcFoundRowsOpt
131
+ : SQL_CALC_FOUND_ROWS { $$ = true }
132
+ | { $$ = null }
133
+ ;
134
+ selectExprList
135
+ : selectExprList ',' selectExpr { $3 .type = ' SelectExpr' ; $$ .push ($3 ); }
136
+ | selectExpr { $1 .type = ' SelectExpr' ; $$ = [ $1 ]; }
137
+ ;
138
+ selectExpr
139
+ : '*' { $$ = { value: $1 } }
140
+ | SELECT_EXPR_STAR { $$ = { value: $1 } }
141
+ | expr selectExprAliasOpt { $$ = $1 ; $$ .alias = $2 .alias ; $$ .hasAs = $2 .hasAs ; }
142
+ ;
143
+ selectExprAliasOpt
144
+ : { $$ = {alias: null , hasAs: null } }
145
+ | AS IDENTIFIER { $$ = {alias: $2 , hasAs: true } }
146
+ | IDENTIFIER { $$ = {alias: $1 , hasAs: false } }
147
+ ;
51
148
149
+ string
150
+ : QUOTED_IDENTIFIER { $$ = $1 }
151
+ | STRING { $$ = $1 }
152
+ ;
153
+ number
154
+ : NUMERIC { $$ = $1 }
155
+ | EXPONENT_NUMERIC = { $$ = $1 }
156
+ | HEX_NUMERIC = { $$ = $1 }
157
+ ;
158
+ boolean
159
+ : TRUE { $$ = ' TRUE' }
160
+ | FALSE { $$ = ' FALSE' }
161
+ ;
162
+ literal
163
+ : string { $$ = $1 }
164
+ | number { $$ = $1 }
165
+ | boolean { $$ = $1 }
166
+ | NULL { $$ = $1 }
167
+ ;
168
+ function_call
169
+ : IDENTIFIER '(' function_call_param_list ')' { $$ = {type: ' FunctionCall' , name: $1 , params: $3 } }
170
+ ;
171
+ function_call_param_list
172
+ : function_call_param_list ',' function_call_param { $1 .push ($3 ); $$ = $1 ; }
173
+ | function_call_param { $$ = [$1 ]; }
174
+ ;
175
+ function_call_param
176
+ : { $$ = null }
177
+ | NULL { $$ = $1 }
178
+ | '*' { $$ = $1 }
179
+ | SELECT_EXPR_STAR { $$ = $1 }
180
+ | expr { $$ = $1 }
181
+ ;
182
+ simple_expr
183
+ : literal { $$ = $1 }
184
+ | IDENTIFIER { $$ = $1 }
185
+ | function_call { $$ = $1 }
186
+ ;
187
+ bit_expr
188
+ : simple_expr { $$ = $1 }
189
+ ;
190
+ predicate
191
+ : bit_expr { $$ = $1 }
192
+ ;
193
+ boolean_primary
194
+ : predicate { $$ = $1 }
195
+ ;
196
+ expr
197
+ : boolean_primary { $$ = $1 }
198
+ ;
0 commit comments