1
by brian
clean slate |
1 |
/******************************************************
|
2 |
SQL parser: input file for the GNU Bison parser generator
|
|
3 |
||
4 |
(c) 1997 Innobase Oy
|
|
5 |
||
6 |
Created 12/14/1997 Heikki Tuuri
|
|
7 |
Published under the GPL version 2
|
|
8 |
||
9 |
Look from pars0lex.l for instructions how to generate the C files for
|
|
10 |
the InnoDB parser.
|
|
11 |
*******************************************************/
|
|
12 |
||
13 |
%{ |
|
14 |
/* The value of the semantic attribute is a pointer to a query tree node
|
|
15 |
que_node_t */
|
|
16 |
||
17 |
#include "univ.i" |
|
18 |
#include <math.h> /* Can't be before univ.i */ |
|
19 |
#include "pars0pars.h" |
|
20 |
#include "mem0mem.h" |
|
21 |
#include "que0types.h" |
|
22 |
#include "que0que.h" |
|
23 |
#include "row0sel.h" |
|
24 |
||
25 |
#define YYSTYPE que_node_t*
|
|
26 |
||
27 |
/* #define __STDC__ */
|
|
28 |
||
29 |
int
|
|
30 |
yylex(void); |
|
31 |
%} |
|
32 |
||
33 |
%token PARS_INT_LIT |
|
34 |
%token PARS_FLOAT_LIT |
|
35 |
%token PARS_STR_LIT |
|
36 |
%token PARS_FIXBINARY_LIT |
|
37 |
%token PARS_BLOB_LIT |
|
38 |
%token PARS_NULL_LIT |
|
39 |
%token PARS_ID_TOKEN |
|
40 |
%token PARS_AND_TOKEN |
|
41 |
%token PARS_OR_TOKEN |
|
42 |
%token PARS_NOT_TOKEN |
|
43 |
%token PARS_GE_TOKEN |
|
44 |
%token PARS_LE_TOKEN |
|
45 |
%token PARS_NE_TOKEN |
|
46 |
%token PARS_PROCEDURE_TOKEN |
|
47 |
%token PARS_IN_TOKEN |
|
48 |
%token PARS_OUT_TOKEN |
|
49 |
%token PARS_BINARY_TOKEN |
|
50 |
%token PARS_BLOB_TOKEN |
|
51 |
%token PARS_INT_TOKEN |
|
52 |
%token PARS_INTEGER_TOKEN |
|
53 |
%token PARS_FLOAT_TOKEN |
|
54 |
%token PARS_CHAR_TOKEN |
|
55 |
%token PARS_IS_TOKEN |
|
56 |
%token PARS_BEGIN_TOKEN |
|
57 |
%token PARS_END_TOKEN |
|
58 |
%token PARS_IF_TOKEN |
|
59 |
%token PARS_THEN_TOKEN |
|
60 |
%token PARS_ELSE_TOKEN |
|
61 |
%token PARS_ELSIF_TOKEN |
|
62 |
%token PARS_LOOP_TOKEN |
|
63 |
%token PARS_WHILE_TOKEN |
|
64 |
%token PARS_RETURN_TOKEN |
|
65 |
%token PARS_SELECT_TOKEN |
|
66 |
%token PARS_SUM_TOKEN |
|
67 |
%token PARS_COUNT_TOKEN |
|
68 |
%token PARS_DISTINCT_TOKEN |
|
69 |
%token PARS_FROM_TOKEN |
|
70 |
%token PARS_WHERE_TOKEN |
|
71 |
%token PARS_FOR_TOKEN |
|
72 |
%token PARS_DDOT_TOKEN |
|
73 |
%token PARS_READ_TOKEN |
|
74 |
%token PARS_ORDER_TOKEN |
|
75 |
%token PARS_BY_TOKEN |
|
76 |
%token PARS_ASC_TOKEN |
|
77 |
%token PARS_DESC_TOKEN |
|
78 |
%token PARS_INSERT_TOKEN |
|
79 |
%token PARS_INTO_TOKEN |
|
80 |
%token PARS_VALUES_TOKEN |
|
81 |
%token PARS_UPDATE_TOKEN |
|
82 |
%token PARS_SET_TOKEN |
|
83 |
%token PARS_DELETE_TOKEN |
|
84 |
%token PARS_CURRENT_TOKEN |
|
85 |
%token PARS_OF_TOKEN |
|
86 |
%token PARS_CREATE_TOKEN |
|
87 |
%token PARS_TABLE_TOKEN |
|
88 |
%token PARS_INDEX_TOKEN |
|
89 |
%token PARS_UNIQUE_TOKEN |
|
90 |
%token PARS_CLUSTERED_TOKEN |
|
91 |
%token PARS_DOES_NOT_FIT_IN_MEM_TOKEN |
|
92 |
%token PARS_ON_TOKEN |
|
93 |
%token PARS_ASSIGN_TOKEN |
|
94 |
%token PARS_DECLARE_TOKEN |
|
95 |
%token PARS_CURSOR_TOKEN |
|
96 |
%token PARS_SQL_TOKEN |
|
97 |
%token PARS_OPEN_TOKEN |
|
98 |
%token PARS_FETCH_TOKEN |
|
99 |
%token PARS_CLOSE_TOKEN |
|
100 |
%token PARS_NOTFOUND_TOKEN |
|
101 |
%token PARS_TO_CHAR_TOKEN |
|
102 |
%token PARS_TO_NUMBER_TOKEN |
|
103 |
%token PARS_TO_BINARY_TOKEN |
|
104 |
%token PARS_BINARY_TO_NUMBER_TOKEN |
|
105 |
%token PARS_SUBSTR_TOKEN |
|
106 |
%token PARS_REPLSTR_TOKEN |
|
107 |
%token PARS_CONCAT_TOKEN |
|
108 |
%token PARS_INSTR_TOKEN |
|
109 |
%token PARS_LENGTH_TOKEN |
|
110 |
%token PARS_SYSDATE_TOKEN |
|
111 |
%token PARS_PRINTF_TOKEN |
|
112 |
%token PARS_ASSERT_TOKEN |
|
113 |
%token PARS_RND_TOKEN |
|
114 |
%token PARS_RND_STR_TOKEN |
|
115 |
%token PARS_ROW_PRINTF_TOKEN |
|
116 |
%token PARS_COMMIT_TOKEN |
|
117 |
%token PARS_ROLLBACK_TOKEN |
|
118 |
%token PARS_WORK_TOKEN |
|
119 |
%token PARS_UNSIGNED_TOKEN |
|
120 |
%token PARS_EXIT_TOKEN |
|
121 |
%token PARS_FUNCTION_TOKEN |
|
122 |
%token PARS_LOCK_TOKEN |
|
123 |
%token PARS_SHARE_TOKEN |
|
124 |
%token PARS_MODE_TOKEN |
|
125 |
||
126 |
%left PARS_AND_TOKEN PARS_OR_TOKEN |
|
127 |
%left PARS_NOT_TOKEN |
|
128 |
%left '=' '<' '>' PARS_GE_TOKEN PARS_LE_TOKEN |
|
129 |
%left '-' '+' |
|
130 |
%left '*' '/' |
|
131 |
%left NEG /* negation--unary minus */ |
|
132 |
%left '%' |
|
133 |
||
134 |
/* Grammar follows */
|
|
135 |
%%
|
|
136 |
||
137 |
top_statement: |
|
138 |
procedure_definition ';' |
|
139 |
||
140 |
statement: |
|
141 |
stored_procedure_call
|
|
142 |
| predefined_procedure_call ';' |
|
143 |
| while_statement ';' |
|
144 |
| for_statement ';' |
|
145 |
| exit_statement ';' |
|
146 |
| if_statement ';' |
|
147 |
| return_statement ';' |
|
148 |
| assignment_statement ';' |
|
149 |
| select_statement ';' |
|
150 |
| insert_statement ';' |
|
151 |
| row_printf_statement ';' |
|
152 |
| delete_statement_searched ';' |
|
153 |
| delete_statement_positioned ';' |
|
154 |
| update_statement_searched ';' |
|
155 |
| update_statement_positioned ';' |
|
156 |
| open_cursor_statement ';' |
|
157 |
| fetch_statement ';' |
|
158 |
| close_cursor_statement ';' |
|
159 |
| commit_statement ';' |
|
160 |
| rollback_statement ';' |
|
161 |
| create_table ';' |
|
162 |
| create_index ';' |
|
163 |
;
|
|
164 |
||
165 |
statement_list: |
|
166 |
statement { $$ = que_node_list_add_last(NULL, $1); } |
|
167 |
| statement_list statement |
|
168 |
{ $$ = que_node_list_add_last($1, $2); } |
|
169 |
;
|
|
170 |
||
171 |
exp: |
|
172 |
PARS_ID_TOKEN { $$ = $1;} |
|
173 |
| function_name '(' exp_list ')' |
|
174 |
{ $$ = pars_func($1, $3); } |
|
175 |
| PARS_INT_LIT { $$ = $1;} |
|
176 |
| PARS_FLOAT_LIT { $$ = $1;} |
|
177 |
| PARS_STR_LIT { $$ = $1;} |
|
178 |
| PARS_FIXBINARY_LIT { $$ = $1;} |
|
179 |
| PARS_BLOB_LIT { $$ = $1;} |
|
180 |
| PARS_NULL_LIT { $$ = $1;} |
|
181 |
| PARS_SQL_TOKEN { $$ = $1;} |
|
182 |
| exp '+' exp { $$ = pars_op('+', $1, $3); } |
|
183 |
| exp '-' exp { $$ = pars_op('-', $1, $3); } |
|
184 |
| exp '*' exp { $$ = pars_op('*', $1, $3); } |
|
185 |
| exp '/' exp { $$ = pars_op('/', $1, $3); } |
|
186 |
| '-' exp %prec NEG { $$ = pars_op('-', $2, NULL); } |
|
187 |
| '(' exp ')' { $$ = $2; } |
|
188 |
| exp '=' exp { $$ = pars_op('=', $1, $3); } |
|
189 |
| exp '<' exp { $$ = pars_op('<', $1, $3); } |
|
190 |
| exp '>' exp { $$ = pars_op('>', $1, $3); } |
|
191 |
| exp PARS_GE_TOKEN exp { $$ = pars_op(PARS_GE_TOKEN, $1, $3); } |
|
192 |
| exp PARS_LE_TOKEN exp { $$ = pars_op(PARS_LE_TOKEN, $1, $3); } |
|
193 |
| exp PARS_NE_TOKEN exp { $$ = pars_op(PARS_NE_TOKEN, $1, $3); } |
|
194 |
| exp PARS_AND_TOKEN exp{ $$ = pars_op(PARS_AND_TOKEN, $1, $3); } |
|
195 |
| exp PARS_OR_TOKEN exp { $$ = pars_op(PARS_OR_TOKEN, $1, $3); } |
|
196 |
| PARS_NOT_TOKEN exp { $$ = pars_op(PARS_NOT_TOKEN, $2, NULL); } |
|
197 |
| PARS_ID_TOKEN '%' PARS_NOTFOUND_TOKEN |
|
198 |
{ $$ = pars_op(PARS_NOTFOUND_TOKEN, $1, NULL); } |
|
199 |
| PARS_SQL_TOKEN '%' PARS_NOTFOUND_TOKEN |
|
200 |
{ $$ = pars_op(PARS_NOTFOUND_TOKEN, $1, NULL); } |
|
201 |
;
|
|
202 |
||
203 |
function_name: |
|
204 |
PARS_TO_CHAR_TOKEN { $$ = &pars_to_char_token; } |
|
205 |
| PARS_TO_NUMBER_TOKEN { $$ = &pars_to_number_token; } |
|
206 |
| PARS_TO_BINARY_TOKEN { $$ = &pars_to_binary_token; } |
|
207 |
| PARS_BINARY_TO_NUMBER_TOKEN |
|
208 |
{ $$ = &pars_binary_to_number_token; } |
|
209 |
| PARS_SUBSTR_TOKEN { $$ = &pars_substr_token; } |
|
210 |
| PARS_CONCAT_TOKEN { $$ = &pars_concat_token; } |
|
211 |
| PARS_INSTR_TOKEN { $$ = &pars_instr_token; } |
|
212 |
| PARS_LENGTH_TOKEN { $$ = &pars_length_token; } |
|
213 |
| PARS_SYSDATE_TOKEN { $$ = &pars_sysdate_token; } |
|
214 |
| PARS_RND_TOKEN { $$ = &pars_rnd_token; } |
|
215 |
| PARS_RND_STR_TOKEN { $$ = &pars_rnd_str_token; } |
|
216 |
;
|
|
217 |
||
218 |
question_mark_list: |
|
219 |
/* Nothing */
|
|
220 |
| '?' |
|
221 |
| question_mark_list ',' '?' |
|
222 |
;
|
|
223 |
||
224 |
stored_procedure_call: |
|
225 |
'{' PARS_ID_TOKEN '(' question_mark_list ')' '}' |
|
226 |
{ $$ = pars_stored_procedure_call($2); } |
|
227 |
;
|
|
228 |
||
229 |
predefined_procedure_call: |
|
230 |
predefined_procedure_name '(' exp_list ')' |
|
231 |
{ $$ = pars_procedure_call($1, $3); } |
|
232 |
;
|
|
233 |
||
234 |
predefined_procedure_name: |
|
235 |
PARS_REPLSTR_TOKEN { $$ = &pars_replstr_token; } |
|
236 |
| PARS_PRINTF_TOKEN { $$ = &pars_printf_token; } |
|
237 |
| PARS_ASSERT_TOKEN { $$ = &pars_assert_token; } |
|
238 |
;
|
|
239 |
||
240 |
user_function_call: |
|
241 |
PARS_ID_TOKEN '(' ')' { $$ = $1; } |
|
242 |
;
|
|
243 |
||
244 |
table_list: |
|
245 |
PARS_ID_TOKEN { $$ = que_node_list_add_last(NULL, $1); } |
|
246 |
| table_list ',' PARS_ID_TOKEN |
|
247 |
{ $$ = que_node_list_add_last($1, $3); } |
|
248 |
;
|
|
249 |
||
250 |
variable_list: |
|
251 |
/* Nothing */ { $$ = NULL; } |
|
252 |
| PARS_ID_TOKEN { $$ = que_node_list_add_last(NULL, $1); } |
|
253 |
| variable_list ',' PARS_ID_TOKEN |
|
254 |
{ $$ = que_node_list_add_last($1, $3); } |
|
255 |
;
|
|
256 |
||
257 |
exp_list: |
|
258 |
/* Nothing */ { $$ = NULL; } |
|
259 |
| exp { $$ = que_node_list_add_last(NULL, $1);} |
|
260 |
| exp_list ',' exp { $$ = que_node_list_add_last($1, $3); } |
|
261 |
;
|
|
262 |
||
263 |
select_item: |
|
264 |
exp { $$ = $1; } |
|
265 |
| PARS_COUNT_TOKEN '(' '*' ')' |
|
266 |
{ $$ = pars_func(&pars_count_token, |
|
267 |
que_node_list_add_last(NULL, |
|
268 |
sym_tab_add_int_lit( |
|
269 |
pars_sym_tab_global, 1))); } |
|
270 |
| PARS_COUNT_TOKEN '(' PARS_DISTINCT_TOKEN PARS_ID_TOKEN ')' |
|
271 |
{ $$ = pars_func(&pars_count_token, |
|
272 |
que_node_list_add_last(NULL, |
|
273 |
pars_func(&pars_distinct_token, |
|
274 |
que_node_list_add_last( |
|
275 |
NULL, $4)))); } |
|
276 |
| PARS_SUM_TOKEN '(' exp ')' |
|
277 |
{ $$ = pars_func(&pars_sum_token, |
|
278 |
que_node_list_add_last(NULL, |
|
279 |
$3)); } |
|
280 |
;
|
|
281 |
||
282 |
select_item_list: |
|
283 |
/* Nothing */ { $$ = NULL; } |
|
284 |
| select_item { $$ = que_node_list_add_last(NULL, $1); } |
|
285 |
| select_item_list ',' select_item |
|
286 |
{ $$ = que_node_list_add_last($1, $3); } |
|
287 |
;
|
|
288 |
||
289 |
select_list: |
|
290 |
'*' { $$ = pars_select_list(&pars_star_denoter, |
|
291 |
NULL); } |
|
292 |
| select_item_list PARS_INTO_TOKEN variable_list |
|
293 |
{ $$ = pars_select_list($1, $3); } |
|
294 |
| select_item_list { $$ = pars_select_list($1, NULL); } |
|
295 |
;
|
|
296 |
||
297 |
search_condition: |
|
298 |
/* Nothing */ { $$ = NULL; } |
|
299 |
| PARS_WHERE_TOKEN exp { $$ = $2; } |
|
300 |
;
|
|
301 |
||
302 |
for_update_clause: |
|
303 |
/* Nothing */ { $$ = NULL; } |
|
304 |
| PARS_FOR_TOKEN PARS_UPDATE_TOKEN |
|
305 |
{ $$ = &pars_update_token; } |
|
306 |
;
|
|
307 |
||
308 |
lock_shared_clause: |
|
309 |
/* Nothing */ { $$ = NULL; } |
|
310 |
| PARS_LOCK_TOKEN PARS_IN_TOKEN PARS_SHARE_TOKEN PARS_MODE_TOKEN |
|
311 |
{ $$ = &pars_share_token; } |
|
312 |
;
|
|
313 |
||
314 |
order_direction: |
|
315 |
/* Nothing */ { $$ = &pars_asc_token; } |
|
316 |
| PARS_ASC_TOKEN { $$ = &pars_asc_token; } |
|
317 |
| PARS_DESC_TOKEN { $$ = &pars_desc_token; } |
|
318 |
;
|
|
319 |
||
320 |
order_by_clause: |
|
321 |
/* Nothing */ { $$ = NULL; } |
|
322 |
| PARS_ORDER_TOKEN PARS_BY_TOKEN PARS_ID_TOKEN order_direction |
|
323 |
{ $$ = pars_order_by($3, $4); } |
|
324 |
;
|
|
325 |
||
326 |
select_statement: |
|
327 |
PARS_SELECT_TOKEN select_list |
|
328 |
PARS_FROM_TOKEN table_list |
|
329 |
search_condition
|
|
330 |
for_update_clause
|
|
331 |
lock_shared_clause
|
|
332 |
order_by_clause { $$ = pars_select_statement($2, $4, $5, |
|
333 |
$6, $7, $8); } |
|
334 |
;
|
|
335 |
||
336 |
insert_statement_start: |
|
337 |
PARS_INSERT_TOKEN PARS_INTO_TOKEN |
|
338 |
PARS_ID_TOKEN { $$ = $3; } |
|
339 |
;
|
|
340 |
||
341 |
insert_statement: |
|
342 |
insert_statement_start PARS_VALUES_TOKEN '(' exp_list ')' |
|
343 |
{ $$ = pars_insert_statement($1, $4, NULL); } |
|
344 |
| insert_statement_start select_statement |
|
345 |
{ $$ = pars_insert_statement($1, NULL, $2); } |
|
346 |
;
|
|
347 |
||
348 |
column_assignment: |
|
349 |
PARS_ID_TOKEN '=' exp { $$ = pars_column_assignment($1, $3); } |
|
350 |
;
|
|
351 |
||
352 |
column_assignment_list: |
|
353 |
column_assignment { $$ = que_node_list_add_last(NULL, $1); } |
|
354 |
| column_assignment_list ',' column_assignment |
|
355 |
{ $$ = que_node_list_add_last($1, $3); } |
|
356 |
;
|
|
357 |
||
358 |
cursor_positioned: |
|
359 |
PARS_WHERE_TOKEN
|
|
360 |
PARS_CURRENT_TOKEN PARS_OF_TOKEN |
|
361 |
PARS_ID_TOKEN { $$ = $4; } |
|
362 |
;
|
|
363 |
||
364 |
update_statement_start: |
|
365 |
PARS_UPDATE_TOKEN PARS_ID_TOKEN |
|
366 |
PARS_SET_TOKEN
|
|
367 |
column_assignment_list { $$ = pars_update_statement_start(FALSE, |
|
368 |
$2, $4); } |
|
369 |
;
|
|
370 |
||
371 |
update_statement_searched: |
|
372 |
update_statement_start
|
|
373 |
search_condition { $$ = pars_update_statement($1, NULL, $2); } |
|
374 |
;
|
|
375 |
||
376 |
update_statement_positioned: |
|
377 |
update_statement_start
|
|
378 |
cursor_positioned { $$ = pars_update_statement($1, $2, NULL); } |
|
379 |
;
|
|
380 |
||
381 |
delete_statement_start: |
|
382 |
PARS_DELETE_TOKEN PARS_FROM_TOKEN |
|
383 |
PARS_ID_TOKEN { $$ = pars_update_statement_start(TRUE, |
|
384 |
$3, NULL); } |
|
385 |
;
|
|
386 |
||
387 |
delete_statement_searched: |
|
388 |
delete_statement_start
|
|
389 |
search_condition { $$ = pars_update_statement($1, NULL, $2); } |
|
390 |
;
|
|
391 |
||
392 |
delete_statement_positioned: |
|
393 |
delete_statement_start
|
|
394 |
cursor_positioned { $$ = pars_update_statement($1, $2, NULL); } |
|
395 |
;
|
|
396 |
||
397 |
row_printf_statement: |
|
398 |
PARS_ROW_PRINTF_TOKEN select_statement |
|
399 |
{ $$ = pars_row_printf_statement($2); } |
|
400 |
;
|
|
401 |
||
402 |
assignment_statement: |
|
403 |
PARS_ID_TOKEN PARS_ASSIGN_TOKEN exp |
|
404 |
{ $$ = pars_assignment_statement($1, $3); } |
|
405 |
;
|
|
406 |
||
407 |
elsif_element: |
|
408 |
PARS_ELSIF_TOKEN
|
|
409 |
exp PARS_THEN_TOKEN statement_list |
|
410 |
{ $$ = pars_elsif_element($2, $4); } |
|
411 |
;
|
|
412 |
||
413 |
elsif_list: |
|
414 |
elsif_element { $$ = que_node_list_add_last(NULL, $1); } |
|
415 |
| elsif_list elsif_element |
|
416 |
{ $$ = que_node_list_add_last($1, $2); } |
|
417 |
;
|
|
418 |
||
419 |
else_part: |
|
420 |
/* Nothing */ { $$ = NULL; } |
|
421 |
| PARS_ELSE_TOKEN statement_list |
|
422 |
{ $$ = $2; } |
|
423 |
| elsif_list { $$ = $1; } |
|
424 |
;
|
|
425 |
||
426 |
if_statement: |
|
427 |
PARS_IF_TOKEN exp PARS_THEN_TOKEN statement_list |
|
428 |
else_part
|
|
429 |
PARS_END_TOKEN PARS_IF_TOKEN |
|
430 |
{ $$ = pars_if_statement($2, $4, $5); } |
|
431 |
;
|
|
432 |
||
433 |
while_statement: |
|
434 |
PARS_WHILE_TOKEN exp PARS_LOOP_TOKEN statement_list |
|
435 |
PARS_END_TOKEN PARS_LOOP_TOKEN |
|
436 |
{ $$ = pars_while_statement($2, $4); } |
|
437 |
;
|
|
438 |
||
439 |
for_statement: |
|
440 |
PARS_FOR_TOKEN PARS_ID_TOKEN PARS_IN_TOKEN |
|
441 |
exp PARS_DDOT_TOKEN exp |
|
442 |
PARS_LOOP_TOKEN statement_list |
|
443 |
PARS_END_TOKEN PARS_LOOP_TOKEN |
|
444 |
{ $$ = pars_for_statement($2, $4, $6, $8); } |
|
445 |
;
|
|
446 |
||
447 |
exit_statement: |
|
448 |
PARS_EXIT_TOKEN { $$ = pars_exit_statement(); } |
|
449 |
;
|
|
450 |
||
451 |
return_statement: |
|
452 |
PARS_RETURN_TOKEN { $$ = pars_return_statement(); } |
|
453 |
;
|
|
454 |
||
455 |
open_cursor_statement: |
|
456 |
PARS_OPEN_TOKEN PARS_ID_TOKEN |
|
457 |
{ $$ = pars_open_statement( |
|
458 |
ROW_SEL_OPEN_CURSOR, $2); } |
|
459 |
;
|
|
460 |
||
461 |
close_cursor_statement: |
|
462 |
PARS_CLOSE_TOKEN PARS_ID_TOKEN |
|
463 |
{ $$ = pars_open_statement( |
|
464 |
ROW_SEL_CLOSE_CURSOR, $2); } |
|
465 |
;
|
|
466 |
||
467 |
fetch_statement: |
|
468 |
PARS_FETCH_TOKEN PARS_ID_TOKEN PARS_INTO_TOKEN variable_list |
|
469 |
{ $$ = pars_fetch_statement($2, $4, NULL); } |
|
470 |
| PARS_FETCH_TOKEN PARS_ID_TOKEN PARS_INTO_TOKEN user_function_call |
|
471 |
{ $$ = pars_fetch_statement($2, NULL, $4); } |
|
472 |
;
|
|
473 |
||
474 |
column_def: |
|
475 |
PARS_ID_TOKEN type_name opt_column_len opt_unsigned opt_not_null |
|
476 |
{ $$ = pars_column_def($1, $2, $3, $4, $5); } |
|
477 |
;
|
|
478 |
||
479 |
column_def_list: |
|
480 |
column_def { $$ = que_node_list_add_last(NULL, $1); } |
|
481 |
| column_def_list ',' column_def |
|
482 |
{ $$ = que_node_list_add_last($1, $3); } |
|
483 |
;
|
|
484 |
||
485 |
opt_column_len: |
|
486 |
/* Nothing */ { $$ = NULL; } |
|
487 |
| '(' PARS_INT_LIT ')' |
|
488 |
{ $$ = $2; } |
|
489 |
;
|
|
490 |
||
491 |
opt_unsigned: |
|
492 |
/* Nothing */ { $$ = NULL; } |
|
493 |
| PARS_UNSIGNED_TOKEN |
|
494 |
{ $$ = &pars_int_token; |
|
495 |
/* pass any non-NULL pointer */ } |
|
496 |
;
|
|
497 |
||
498 |
opt_not_null: |
|
499 |
/* Nothing */ { $$ = NULL; } |
|
500 |
| PARS_NOT_TOKEN PARS_NULL_LIT |
|
501 |
{ $$ = &pars_int_token; |
|
502 |
/* pass any non-NULL pointer */ } |
|
503 |
;
|
|
504 |
||
505 |
not_fit_in_memory: |
|
506 |
/* Nothing */ { $$ = NULL; } |
|
507 |
| PARS_DOES_NOT_FIT_IN_MEM_TOKEN |
|
508 |
{ $$ = &pars_int_token; |
|
509 |
/* pass any non-NULL pointer */ } |
|
510 |
;
|
|
511 |
||
512 |
create_table: |
|
513 |
PARS_CREATE_TOKEN PARS_TABLE_TOKEN |
|
514 |
PARS_ID_TOKEN '(' column_def_list ')' |
|
515 |
not_fit_in_memory { $$ = pars_create_table($3, $5, $7); } |
|
516 |
;
|
|
517 |
||
518 |
column_list: |
|
519 |
PARS_ID_TOKEN { $$ = que_node_list_add_last(NULL, $1); } |
|
520 |
| column_list ',' PARS_ID_TOKEN |
|
521 |
{ $$ = que_node_list_add_last($1, $3); } |
|
522 |
;
|
|
523 |
||
524 |
unique_def: |
|
525 |
/* Nothing */ { $$ = NULL; } |
|
526 |
| PARS_UNIQUE_TOKEN { $$ = &pars_unique_token; } |
|
527 |
;
|
|
528 |
||
529 |
clustered_def: |
|
530 |
/* Nothing */ { $$ = NULL; } |
|
531 |
| PARS_CLUSTERED_TOKEN { $$ = &pars_clustered_token; } |
|
532 |
;
|
|
533 |
||
534 |
create_index: |
|
535 |
PARS_CREATE_TOKEN unique_def |
|
536 |
clustered_def
|
|
537 |
PARS_INDEX_TOKEN
|
|
538 |
PARS_ID_TOKEN PARS_ON_TOKEN PARS_ID_TOKEN |
|
539 |
'(' column_list ')' { $$ = pars_create_index($2, $3, $5, $7, $9); } |
|
540 |
;
|
|
541 |
||
542 |
commit_statement: |
|
543 |
PARS_COMMIT_TOKEN PARS_WORK_TOKEN |
|
544 |
{ $$ = pars_commit_statement(); } |
|
545 |
;
|
|
546 |
||
547 |
rollback_statement: |
|
548 |
PARS_ROLLBACK_TOKEN PARS_WORK_TOKEN |
|
549 |
{ $$ = pars_rollback_statement(); } |
|
550 |
;
|
|
551 |
||
552 |
type_name: |
|
553 |
PARS_INT_TOKEN { $$ = &pars_int_token; } |
|
554 |
| PARS_INTEGER_TOKEN { $$ = &pars_int_token; } |
|
555 |
| PARS_CHAR_TOKEN { $$ = &pars_char_token; } |
|
556 |
| PARS_BINARY_TOKEN { $$ = &pars_binary_token; } |
|
557 |
| PARS_BLOB_TOKEN { $$ = &pars_blob_token; } |
|
558 |
;
|
|
559 |
||
560 |
parameter_declaration: |
|
561 |
PARS_ID_TOKEN PARS_IN_TOKEN type_name |
|
562 |
{ $$ = pars_parameter_declaration($1, |
|
563 |
PARS_INPUT, $3); } |
|
564 |
| PARS_ID_TOKEN PARS_OUT_TOKEN type_name |
|
565 |
{ $$ = pars_parameter_declaration($1, |
|
566 |
PARS_OUTPUT, $3); } |
|
567 |
;
|
|
568 |
||
569 |
parameter_declaration_list: |
|
570 |
/* Nothing */ { $$ = NULL; } |
|
571 |
| parameter_declaration { $$ = que_node_list_add_last(NULL, $1); } |
|
572 |
| parameter_declaration_list ',' parameter_declaration |
|
573 |
{ $$ = que_node_list_add_last($1, $3); } |
|
574 |
;
|
|
575 |
||
576 |
variable_declaration: |
|
577 |
PARS_ID_TOKEN type_name ';' |
|
578 |
{ $$ = pars_variable_declaration($1, $2); } |
|
579 |
;
|
|
580 |
||
581 |
variable_declaration_list: |
|
582 |
/* Nothing */
|
|
583 |
| variable_declaration |
|
584 |
| variable_declaration_list variable_declaration |
|
585 |
;
|
|
586 |
||
587 |
cursor_declaration: |
|
588 |
PARS_DECLARE_TOKEN PARS_CURSOR_TOKEN PARS_ID_TOKEN |
|
589 |
PARS_IS_TOKEN select_statement ';' |
|
590 |
{ $$ = pars_cursor_declaration($3, $5); } |
|
591 |
;
|
|
592 |
||
593 |
function_declaration: |
|
594 |
PARS_DECLARE_TOKEN PARS_FUNCTION_TOKEN PARS_ID_TOKEN ';' |
|
595 |
{ $$ = pars_function_declaration($3); } |
|
596 |
;
|
|
597 |
||
598 |
declaration: |
|
599 |
cursor_declaration
|
|
600 |
| function_declaration |
|
601 |
;
|
|
602 |
||
603 |
declaration_list: |
|
604 |
/* Nothing */
|
|
605 |
| declaration |
|
606 |
| declaration_list declaration |
|
607 |
;
|
|
608 |
||
609 |
procedure_definition: |
|
610 |
PARS_PROCEDURE_TOKEN PARS_ID_TOKEN '(' parameter_declaration_list ')' |
|
611 |
PARS_IS_TOKEN
|
|
612 |
variable_declaration_list
|
|
613 |
declaration_list
|
|
614 |
PARS_BEGIN_TOKEN
|
|
615 |
statement_list
|
|
616 |
PARS_END_TOKEN { $$ = pars_procedure_definition($2, $4, |
|
617 |
$10); } |
|
618 |
;
|
|
619 |
||
620 |
%%
|