66
77%%
88
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'
1233
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'
1744
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'
2450
2551/lex
2652
3561selectClause
3662 : SELECT
3763 distinctOpt
64+ highPriorityOpt
65+ maxStateMentTimeOpt
66+ straightJoinOpt
67+ sqlSmallResultOpt
68+ sqlBigResultOpt
69+ sqlBufferResultOpt
70+ sqlCacheOpt
71+ sqlNoCacheOpt
72+ sqlCalcFoundRowsOpt
73+ selectExprList
3874 {
3975 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
4188 }
4289 }
4390 ;
@@ -48,4 +95,104 @@ distinctOpt
4895 | DISTINCTROW { $$ = $1 }
4996 | { $$ = null }
5097 ;
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+ ;
51148
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