Skip to content

Commit eefbe43

Browse files
committed
add: grammar doc.
1 parent 31c0df1 commit eefbe43

File tree

5 files changed

+291
-40
lines changed

5 files changed

+291
-40
lines changed

README.md

+2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
[![NPM Version][npm-image]][npm-url]
77
[![NPM Downloads][downloads-image]][downloads-url]
88

9+
sql grammar follows https://dev.mysql.com/doc/refman/5.7/en/select.html
10+
911
## commonjs usage
1012

1113
`npm install --save js-sql-parser`

dist/parser/sqlParser.js

+120-22
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/grammar.jison

Whitespace-only changes.

src/sqlParser.jison

+161-14
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,47 @@
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

@@ -35,9 +61,30 @@ main
3561
selectClause
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

Comments
 (0)