1 /* Driver template for the LEMON parser generator.
2 ** The author disclaims copyright to this source code.
3 */
4 /* First off, code is included that follows the "include" declaration
5 ** in the input grammar file. */
6 #include <stdio.h>
7 #line 36 "./parser.y"
8
9 #include <string.h>
10 #include <glib.h>
11 #include <glib-object.h>
12 #include <glib/gi18n-lib.h>
13 #include <libgda/sql-parser/gda-sql-parser-private.h>
14 #include <libgda/sql-parser/gda-statement-struct-util.h>
15 #include <libgda/sql-parser/gda-statement-struct-trans.h>
16 #include <libgda/sql-parser/gda-statement-struct-insert.h>
17 #include <libgda/sql-parser/gda-statement-struct-update.h>
18 #include <libgda/sql-parser/gda-statement-struct-delete.h>
19 #include <libgda/sql-parser/gda-statement-struct-select.h>
20 #include <libgda/sql-parser/gda-statement-struct-compound.h>
21 #include <libgda/sql-parser/gda-statement-struct-parts.h>
22 #include <assert.h>
23
24 typedef struct {
25 GValue *fname;
26 GdaSqlExpr *expr;
27 } UpdateSet;
28
29 typedef struct {
30 gboolean distinct;
31 GdaSqlExpr *expr;
32 } Distinct;
33
34 typedef struct {
35 GdaSqlExpr *count;
36 GdaSqlExpr *offset;
37 } Limit;
38
39 typedef struct {
40 GSList *when_list;
41 GSList *then_list;
42 } CaseBody;
43
44 static GdaSqlOperatorType
sql_operation_string_to_operator(const gchar * op)45 sql_operation_string_to_operator (const gchar *op)
46 {
47 switch (g_ascii_toupper (*op)) {
48 case 'A':
49 return GDA_SQL_OPERATOR_TYPE_AND;
50 case 'O':
51 return GDA_SQL_OPERATOR_TYPE_OR;
52 case 'N':
53 return GDA_SQL_OPERATOR_TYPE_NOT;
54 case '=':
55 return GDA_SQL_OPERATOR_TYPE_EQ;
56 case 'I':
57 if (op[1] == 'S')
58 return GDA_SQL_OPERATOR_TYPE_IS;
59 else if (op[1] == 'N')
60 return GDA_SQL_OPERATOR_TYPE_IN;
61 break;
62 case 'L':
63 return GDA_SQL_OPERATOR_TYPE_LIKE;
64 case 'B':
65 return GDA_SQL_OPERATOR_TYPE_BETWEEN;
66 case '>':
67 if (op[1] == '=')
68 return GDA_SQL_OPERATOR_TYPE_GEQ;
69 else if (op[1] == 0)
70 return GDA_SQL_OPERATOR_TYPE_GT;
71 break;
72 case '<':
73 if (op[1] == '=')
74 return GDA_SQL_OPERATOR_TYPE_LEQ;
75 else if (op[1] == '>')
76 return GDA_SQL_OPERATOR_TYPE_DIFF;
77 else if (op[1] == 0)
78 return GDA_SQL_OPERATOR_TYPE_LT;
79 break;
80 case '!':
81 if (op[1] == '=')
82 return GDA_SQL_OPERATOR_TYPE_DIFF;
83 else if (op[1] == '~') {
84 if (op[2] == 0)
85 return GDA_SQL_OPERATOR_TYPE_NOT_REGEXP;
86 else if (op[2] == '*')
87 return GDA_SQL_OPERATOR_TYPE_NOT_REGEXP_CI;
88 }
89 break;
90 case '~':
91 if (op[1] == '*')
92 return GDA_SQL_OPERATOR_TYPE_REGEXP_CI;
93 else if (op[1] == 0)
94 return GDA_SQL_OPERATOR_TYPE_REGEXP;
95 break;
96 case 'S':
97 return GDA_SQL_OPERATOR_TYPE_SIMILAR;
98 case '|':
99 if (op[1] == '|')
100 return GDA_SQL_OPERATOR_TYPE_CONCAT;
101 else
102 return GDA_SQL_OPERATOR_TYPE_BITOR;
103 case '+':
104 return GDA_SQL_OPERATOR_TYPE_PLUS;
105 case '-':
106 return GDA_SQL_OPERATOR_TYPE_MINUS;
107 case '*':
108 return GDA_SQL_OPERATOR_TYPE_STAR;
109 case '/':
110 return GDA_SQL_OPERATOR_TYPE_DIV;
111 case '%':
112 return GDA_SQL_OPERATOR_TYPE_REM;
113 case '&':
114 return GDA_SQL_OPERATOR_TYPE_BITAND;
115 }
116 g_error ("Unhandled operator named '%s'\n", op);
117 return 0;
118 }
119
120 static GdaSqlOperatorType
string_to_op_type(GValue * value)121 string_to_op_type (GValue *value)
122 {
123 GdaSqlOperatorType op;
124 op = sql_operation_string_to_operator (g_value_get_string (value));
125 g_value_reset (value);
126 g_free (value);
127 return op;
128 }
129
130 static GdaSqlExpr *
compose_multiple_expr(GdaSqlOperatorType op,GdaSqlExpr * left,GdaSqlExpr * right)131 compose_multiple_expr (GdaSqlOperatorType op, GdaSqlExpr *left, GdaSqlExpr *right) {
132 GdaSqlExpr *ret;
133 if (left->cond && (left->cond->operator_type == op)) {
134 ret = left;
135 ret->cond->operands = g_slist_append (ret->cond->operands, right);
136 }
137 else {
138 GdaSqlOperation *cond;
139 ret = gda_sql_expr_new (NULL);
140 cond = gda_sql_operation_new (GDA_SQL_ANY_PART (ret));
141 ret->cond = cond;
142 cond->operator_type = op;
143 cond->operands = g_slist_prepend (NULL, right);
144 GDA_SQL_ANY_PART (right)->parent = GDA_SQL_ANY_PART (cond);
145 cond->operands = g_slist_prepend (cond->operands, left);
146 GDA_SQL_ANY_PART (left)->parent = GDA_SQL_ANY_PART (cond);
147 }
148 return ret;
149 }
150
151 static GdaSqlExpr *
create_two_expr(GdaSqlOperatorType op,GdaSqlExpr * left,GdaSqlExpr * right)152 create_two_expr (GdaSqlOperatorType op, GdaSqlExpr *left, GdaSqlExpr *right) {
153 GdaSqlExpr *ret;
154 GdaSqlOperation *cond;
155 ret = gda_sql_expr_new (NULL);
156 cond = gda_sql_operation_new (GDA_SQL_ANY_PART (ret));
157 ret->cond = cond;
158 cond->operator_type = op;
159 cond->operands = g_slist_prepend (NULL, right);
160 GDA_SQL_ANY_PART (right)->parent = GDA_SQL_ANY_PART (cond);
161 cond->operands = g_slist_prepend (cond->operands, left);
162 GDA_SQL_ANY_PART (left)->parent = GDA_SQL_ANY_PART (cond);
163 return ret;
164 }
165
166 static GdaSqlExpr *
create_uni_expr(GdaSqlOperatorType op,GdaSqlExpr * expr)167 create_uni_expr (GdaSqlOperatorType op, GdaSqlExpr *expr) {
168 GdaSqlExpr *ret;
169 GdaSqlOperation *cond;
170 ret = gda_sql_expr_new (NULL);
171 cond = gda_sql_operation_new (GDA_SQL_ANY_PART (ret));
172 ret->cond = cond;
173 cond->operator_type = op;
174 cond->operands = g_slist_prepend (NULL, expr);
175 GDA_SQL_ANY_PART (expr)->parent = GDA_SQL_ANY_PART (cond);
176 return ret;
177 }
178
179 static GdaSqlStatement *
compose_multiple_compounds(GdaSqlStatementCompoundType ctype,GdaSqlStatement * left,GdaSqlStatement * right)180 compose_multiple_compounds (GdaSqlStatementCompoundType ctype, GdaSqlStatement *left, GdaSqlStatement *right) {
181 GdaSqlStatement *ret = NULL;
182 GdaSqlStatementCompound *lc = (GdaSqlStatementCompound*) left->contents;
183 if (lc->compound_type == ctype) {
184 GdaSqlStatementCompound *rc = (GdaSqlStatementCompound*) right->contents;
185 if (!rc->stmt_list->next || rc->compound_type == ctype) {
186 GSList *list;
187 for (list = rc->stmt_list; list; list = list->next)
188 GDA_SQL_ANY_PART (((GdaSqlStatement*)list->data)->contents)->parent = GDA_SQL_ANY_PART (lc);
189
190 ret = left;
191 lc->stmt_list = g_slist_concat (lc->stmt_list, rc->stmt_list);
192 rc->stmt_list = NULL;
193 gda_sql_statement_free (right);
194 }
195 }
196 else {
197 ret = gda_sql_statement_new (GDA_SQL_STATEMENT_COMPOUND);
198 gda_sql_statement_compound_set_type (ret, ctype);
199 gda_sql_statement_compound_take_stmt (ret, left);
200 gda_sql_statement_compound_take_stmt (ret, right);
201 }
202 return ret;
203 }
204
205 #line 206 "parser.c"
206 /* Next is all token values, in a form suitable for use by makeheaders.
207 ** This section will be null unless lemon is run with the -m switch.
208 */
209 /*
210 ** These constants (all generated automatically by the parser generator)
211 ** specify the various kinds of tokens (terminals) that the parser
212 ** understands.
213 **
214 ** Each symbol here is a terminal symbol in the grammar.
215 */
216 /* Make sure the INTERFACE macro is defined.
217 */
218 #ifndef INTERFACE
219 # define INTERFACE 1
220 #endif
221 /* The next thing included is series of defines which control
222 ** various aspects of the generated parser.
223 ** YYCODETYPE is the data type used for storing terminal
224 ** and nonterminal numbers. "unsigned char" is
225 ** used if there are fewer than 250 terminals
226 ** and nonterminals. "int" is used otherwise.
227 ** YYNOCODE is a number of type YYCODETYPE which corresponds
228 ** to no legal terminal or nonterminal number. This
229 ** number is used to fill in empty slots of the hash
230 ** table.
231 ** YYFALLBACK If defined, this indicates that one or more tokens
232 ** have fall-back values which should be used if the
233 ** original value of the token will not parse.
234 ** YYACTIONTYPE is the data type used for storing terminal
235 ** and nonterminal numbers. "unsigned char" is
236 ** used if there are fewer than 250 rules and
237 ** states combined. "int" is used otherwise.
238 ** gda_lemon_firebird_parserTOKENTYPE is the data type used for minor tokens given
239 ** directly to the parser from the tokenizer.
240 ** YYMINORTYPE is the data type used for all minor tokens.
241 ** This is typically a union of many types, one of
242 ** which is gda_lemon_firebird_parserTOKENTYPE. The entry in the union
243 ** for base tokens is called "yy0".
244 ** YYSTACKDEPTH is the maximum depth of the parser's stack. If
245 ** zero the stack is dynamically sized using realloc()
246 ** gda_lemon_firebird_parserARG_SDECL A static variable declaration for the %extra_argument
247 ** gda_lemon_firebird_parserARG_PDECL A parameter declaration for the %extra_argument
248 ** gda_lemon_firebird_parserARG_STORE Code to store %extra_argument into yypParser
249 ** gda_lemon_firebird_parserARG_FETCH Code to extract %extra_argument from yypParser
250 ** YYNSTATE the combined number of states.
251 ** YYNRULE the number of rules in the grammar
252 ** YYERRORSYMBOL is the code number of the error symbol. If not
253 ** defined, then do no error processing.
254 */
255 #define YYCODETYPE unsigned char
256 #define YYNOCODE 209
257 #define YYACTIONTYPE unsigned short int
258 #define gda_lemon_firebird_parserTOKENTYPE GValue *
259 typedef union {
260 int yyinit;
261 gda_lemon_firebird_parserTOKENTYPE yy0;
262 GSList * yy33;
263 CaseBody yy51;
264 gboolean yy100;
265 GSList* yy105;
266 GdaTransactionIsolation yy197;
267 Distinct * yy249;
268 GdaSqlStatement * yy252;
269 GdaSqlSelectFrom * yy259;
270 GdaSqlOperatorType yy295;
271 GdaSqlExpr * yy302;
272 GdaSqlParamSpec * yy303;
273 GdaSqlExpr* yy354;
274 GdaSqlSelectJoinType yy367;
275 Limit yy408;
276 GdaSqlSelectTarget * yy414;
277 } YYMINORTYPE;
278 #ifndef YYSTACKDEPTH
279 #define YYSTACKDEPTH 100
280 #endif
281 #define gda_lemon_firebird_parserARG_SDECL GdaSqlParserIface *pdata;
282 #define gda_lemon_firebird_parserARG_PDECL ,GdaSqlParserIface *pdata
283 #define gda_lemon_firebird_parserARG_FETCH GdaSqlParserIface *pdata = yypParser->pdata
284 #define gda_lemon_firebird_parserARG_STORE yypParser->pdata = pdata
285 #define YYNSTATE 361
286 #define YYNRULE 196
287 #define YYFALLBACK 1
288 #define YY_NO_ACTION (YYNSTATE+YYNRULE+2)
289 #define YY_ACCEPT_ACTION (YYNSTATE+YYNRULE+1)
290 #define YY_ERROR_ACTION (YYNSTATE+YYNRULE)
291
292 /* The yyzerominor constant is used to initialize instances of
293 ** YYMINORTYPE objects to zero. */
294 static const YYMINORTYPE yyzerominor = { 0 };
295
296 /* Define the yytestcase() macro to be a no-op if is not already defined
297 ** otherwise.
298 **
299 ** Applications can choose to define yytestcase() in the %include section
300 ** to a macro that can assist in verifying code coverage. For production
301 ** code the yytestcase() macro should be turned off. But it is useful
302 ** for testing.
303 */
304 #ifndef yytestcase
305 # define yytestcase(X)
306 #endif
307
308
309 /* Next are the tables used to determine what action to take based on the
310 ** current state and lookahead token. These tables are used to implement
311 ** functions that take a state number and lookahead value and return an
312 ** action integer.
313 **
314 ** Suppose the action integer is N. Then the action is determined as
315 ** follows
316 **
317 ** 0 <= N < YYNSTATE Shift N. That is, push the lookahead
318 ** token onto the stack and goto state N.
319 **
320 ** YYNSTATE <= N < YYNSTATE+YYNRULE Reduce by rule N-YYNSTATE.
321 **
322 ** N == YYNSTATE+YYNRULE A syntax error has occurred.
323 **
324 ** N == YYNSTATE+YYNRULE+1 The parser accepts its input.
325 **
326 ** N == YYNSTATE+YYNRULE+2 No such action. Denotes unused
327 ** slots in the yy_action[] table.
328 **
329 ** The action table is constructed as a single large table named yy_action[].
330 ** Given state S and lookahead X, the action is computed as
331 **
332 ** yy_action[ yy_shift_ofst[S] + X ]
333 **
334 ** If the index value yy_shift_ofst[S]+X is out of range or if the value
335 ** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X or if yy_shift_ofst[S]
336 ** is equal to YY_SHIFT_USE_DFLT, it means that the action is not in the table
337 ** and that yy_default[S] should be used instead.
338 **
339 ** The formula above is for computing the action when the lookahead is
340 ** a terminal symbol. If the lookahead is a non-terminal (as occurs after
341 ** a reduce action) then the yy_reduce_ofst[] array is used in place of
342 ** the yy_shift_ofst[] array and YY_REDUCE_USE_DFLT is used in place of
343 ** YY_SHIFT_USE_DFLT.
344 **
345 ** The following are the tables generated in this section:
346 **
347 ** yy_action[] A single table containing all actions.
348 ** yy_lookahead[] A table containing the lookahead for each entry in
349 ** yy_action. Used to detect hash collisions.
350 ** yy_shift_ofst[] For each state, the offset into yy_action for
351 ** shifting terminals.
352 ** yy_reduce_ofst[] For each state, the offset into yy_action for
353 ** shifting non-terminals after a reduce.
354 ** yy_default[] Default action for each state.
355 */
356 #define YY_ACTTAB_COUNT (1400)
357 static const YYACTIONTYPE yy_action[] = {
358 /* 0 */ 39, 243, 324, 240, 558, 143, 22, 121, 361, 101,
359 /* 10 */ 36, 41, 41, 41, 41, 37, 37, 37, 37, 37,
360 /* 20 */ 48, 45, 45, 310, 357, 50, 50, 49, 47, 47,
361 /* 30 */ 42, 362, 241, 350, 349, 161, 348, 347, 346, 345,
362 /* 40 */ 43, 44, 199, 13, 38, 235, 335, 76, 40, 40,
363 /* 50 */ 36, 41, 41, 41, 41, 37, 37, 37, 37, 37,
364 /* 60 */ 223, 45, 45, 319, 167, 50, 50, 49, 47, 47,
365 /* 70 */ 42, 353, 318, 314, 225, 224, 196, 195, 194, 226,
366 /* 80 */ 243, 287, 201, 287, 39, 134, 285, 76, 285, 135,
367 /* 90 */ 315, 286, 292, 286, 21, 41, 41, 41, 41, 37,
368 /* 100 */ 37, 37, 37, 37, 219, 45, 45, 308, 171, 50,
369 /* 110 */ 50, 49, 47, 47, 42, 280, 191, 232, 216, 215,
370 /* 120 */ 216, 192, 34, 192, 43, 44, 199, 13, 38, 235,
371 /* 130 */ 335, 76, 40, 40, 36, 41, 41, 41, 41, 37,
372 /* 140 */ 37, 37, 37, 37, 222, 45, 45, 133, 353, 50,
373 /* 150 */ 50, 49, 47, 47, 42, 39, 37, 320, 45, 45,
374 /* 160 */ 284, 283, 50, 50, 49, 47, 47, 42, 278, 277,
375 /* 170 */ 338, 76, 329, 354, 348, 347, 346, 345, 306, 289,
376 /* 180 */ 136, 127, 358, 129, 76, 276, 52, 169, 168, 167,
377 /* 190 */ 169, 168, 167, 360, 359, 43, 44, 199, 13, 38,
378 /* 200 */ 235, 335, 42, 40, 40, 36, 41, 41, 41, 41,
379 /* 210 */ 37, 37, 37, 37, 37, 221, 45, 45, 190, 76,
380 /* 220 */ 50, 50, 49, 47, 47, 42, 39, 28, 352, 26,
381 /* 230 */ 243, 344, 240, 37, 37, 37, 37, 37, 61, 45,
382 /* 240 */ 45, 1, 76, 50, 50, 49, 47, 47, 42, 229,
383 /* 250 */ 354, 50, 50, 49, 47, 47, 42, 275, 261, 260,
384 /* 260 */ 189, 241, 350, 276, 299, 76, 43, 44, 199, 13,
385 /* 270 */ 38, 235, 335, 76, 40, 40, 36, 41, 41, 41,
386 /* 280 */ 41, 37, 37, 37, 37, 37, 317, 45, 45, 64,
387 /* 290 */ 128, 50, 50, 49, 47, 47, 42, 179, 151, 338,
388 /* 300 */ 178, 265, 264, 39, 239, 352, 240, 243, 200, 240,
389 /* 310 */ 180, 198, 102, 76, 357, 102, 364, 357, 169, 168,
390 /* 320 */ 167, 360, 359, 343, 364, 364, 364, 118, 57, 54,
391 /* 330 */ 149, 169, 168, 167, 231, 241, 350, 46, 241, 350,
392 /* 340 */ 131, 122, 75, 43, 44, 199, 13, 38, 235, 335,
393 /* 350 */ 80, 40, 40, 36, 41, 41, 41, 41, 37, 37,
394 /* 360 */ 37, 37, 37, 339, 45, 45, 263, 262, 50, 50,
395 /* 370 */ 49, 47, 47, 42, 209, 66, 39, 243, 336, 240,
396 /* 380 */ 3, 142, 53, 51, 337, 93, 49, 47, 47, 42,
397 /* 390 */ 76, 326, 169, 168, 167, 295, 48, 372, 227, 169,
398 /* 400 */ 168, 167, 82, 170, 148, 55, 76, 204, 241, 350,
399 /* 410 */ 144, 372, 372, 142, 334, 282, 43, 44, 199, 13,
400 /* 420 */ 38, 235, 335, 27, 40, 40, 36, 41, 41, 41,
401 /* 430 */ 41, 37, 37, 37, 37, 37, 2, 45, 45, 56,
402 /* 440 */ 125, 50, 50, 49, 47, 47, 42, 177, 323, 39,
403 /* 450 */ 325, 322, 397, 353, 243, 353, 240, 154, 197, 169,
404 /* 460 */ 168, 167, 102, 76, 357, 169, 168, 167, 48, 287,
405 /* 470 */ 146, 169, 168, 167, 285, 243, 243, 301, 301, 286,
406 /* 480 */ 11, 193, 185, 20, 18, 241, 350, 353, 48, 43,
407 /* 490 */ 44, 199, 13, 38, 235, 335, 24, 40, 40, 36,
408 /* 500 */ 41, 41, 41, 41, 37, 37, 37, 37, 37, 192,
409 /* 510 */ 45, 45, 10, 302, 50, 50, 49, 47, 47, 42,
410 /* 520 */ 176, 353, 282, 181, 313, 312, 39, 243, 371, 240,
411 /* 530 */ 243, 74, 240, 311, 252, 88, 76, 357, 88, 243,
412 /* 540 */ 357, 137, 371, 371, 309, 341, 282, 340, 141, 243,
413 /* 550 */ 274, 355, 48, 152, 271, 354, 276, 354, 241, 350,
414 /* 560 */ 276, 241, 350, 156, 6, 55, 43, 44, 199, 13,
415 /* 570 */ 38, 235, 335, 80, 40, 40, 36, 41, 41, 41,
416 /* 580 */ 41, 37, 37, 37, 37, 37, 353, 45, 45, 354,
417 /* 590 */ 251, 50, 50, 49, 47, 47, 42, 39, 243, 307,
418 /* 600 */ 240, 239, 188, 240, 142, 332, 102, 331, 48, 63,
419 /* 610 */ 352, 269, 352, 76, 294, 60, 259, 276, 250, 338,
420 /* 620 */ 243, 77, 236, 354, 305, 243, 16, 303, 290, 241,
421 /* 630 */ 350, 293, 241, 350, 333, 330, 74, 43, 35, 199,
422 /* 640 */ 13, 38, 235, 335, 352, 40, 40, 36, 41, 41,
423 /* 650 */ 41, 41, 37, 37, 37, 37, 37, 353, 45, 45,
424 /* 660 */ 184, 279, 50, 50, 49, 47, 47, 42, 39, 243,
425 /* 670 */ 218, 240, 243, 187, 240, 182, 186, 102, 352, 217,
426 /* 680 */ 102, 182, 244, 213, 76, 356, 212, 357, 354, 267,
427 /* 690 */ 9, 268, 357, 243, 243, 147, 145, 276, 357, 357,
428 /* 700 */ 241, 350, 357, 241, 350, 150, 397, 123, 43, 33,
429 /* 710 */ 199, 13, 38, 235, 335, 183, 40, 40, 36, 41,
430 /* 720 */ 41, 41, 41, 37, 37, 37, 37, 37, 353, 45,
431 /* 730 */ 45, 70, 357, 50, 50, 49, 47, 47, 42, 39,
432 /* 740 */ 243, 175, 240, 352, 243, 258, 203, 243, 106, 298,
433 /* 750 */ 243, 276, 202, 207, 8, 76, 7, 249, 357, 354,
434 /* 760 */ 58, 68, 15, 14, 173, 172, 291, 160, 81, 79,
435 /* 770 */ 338, 241, 350, 78, 73, 51, 282, 76, 297, 158,
436 /* 780 */ 44, 199, 13, 38, 235, 335, 132, 40, 40, 36,
437 /* 790 */ 41, 41, 41, 41, 37, 37, 37, 37, 37, 140,
438 /* 800 */ 45, 45, 25, 353, 50, 50, 49, 47, 47, 42,
439 /* 810 */ 39, 243, 237, 240, 352, 243, 159, 240, 228, 120,
440 /* 820 */ 19, 155, 23, 138, 157, 230, 76, 321, 304, 17,
441 /* 830 */ 354, 220, 281, 216, 296, 273, 55, 270, 72, 174,
442 /* 840 */ 266, 65, 241, 350, 205, 210, 241, 350, 69, 59,
443 /* 850 */ 206, 208, 199, 13, 38, 235, 335, 248, 40, 40,
444 /* 860 */ 36, 41, 41, 41, 41, 37, 37, 37, 37, 37,
445 /* 870 */ 30, 45, 45, 353, 67, 50, 50, 49, 47, 47,
446 /* 880 */ 42, 243, 237, 240, 243, 352, 240, 246, 243, 105,
447 /* 890 */ 240, 83, 139, 31, 32, 342, 87, 76, 243, 166,
448 /* 900 */ 240, 234, 29, 4, 300, 354, 119, 153, 247, 242,
449 /* 910 */ 126, 351, 241, 350, 256, 241, 350, 255, 288, 241,
450 /* 920 */ 350, 332, 254, 331, 238, 124, 272, 257, 245, 241,
451 /* 930 */ 350, 353, 253, 316, 142, 559, 559, 559, 559, 559,
452 /* 940 */ 30, 559, 559, 559, 559, 327, 12, 353, 559, 353,
453 /* 950 */ 333, 330, 233, 559, 559, 328, 237, 559, 559, 559,
454 /* 960 */ 352, 559, 353, 31, 32, 559, 243, 559, 240, 559,
455 /* 970 */ 559, 237, 29, 5, 110, 354, 243, 559, 240, 559,
456 /* 980 */ 243, 559, 240, 559, 107, 559, 559, 559, 165, 130,
457 /* 990 */ 559, 332, 559, 331, 559, 559, 559, 241, 350, 559,
458 /* 1000 */ 559, 559, 559, 559, 559, 174, 559, 241, 350, 211,
459 /* 1010 */ 214, 241, 350, 559, 30, 559, 12, 559, 559, 559,
460 /* 1020 */ 333, 330, 233, 559, 243, 328, 240, 559, 559, 30,
461 /* 1030 */ 352, 353, 116, 354, 559, 559, 559, 31, 32, 342,
462 /* 1040 */ 237, 559, 559, 559, 559, 559, 29, 5, 559, 354,
463 /* 1050 */ 559, 354, 31, 32, 559, 241, 350, 559, 559, 559,
464 /* 1060 */ 559, 29, 4, 559, 354, 332, 71, 331, 559, 243,
465 /* 1070 */ 559, 240, 559, 559, 559, 559, 243, 114, 240, 559,
466 /* 1080 */ 332, 559, 331, 559, 113, 559, 559, 559, 352, 559,
467 /* 1090 */ 12, 559, 559, 142, 333, 330, 233, 559, 30, 328,
468 /* 1100 */ 241, 350, 559, 559, 352, 12, 352, 241, 350, 333,
469 /* 1110 */ 330, 233, 559, 559, 328, 559, 559, 559, 559, 352,
470 /* 1120 */ 559, 31, 32, 559, 559, 559, 243, 559, 240, 559,
471 /* 1130 */ 29, 5, 559, 354, 112, 243, 559, 240, 559, 243,
472 /* 1140 */ 559, 240, 559, 117, 243, 559, 240, 104, 559, 332,
473 /* 1150 */ 559, 331, 115, 243, 559, 240, 559, 241, 350, 559,
474 /* 1160 */ 559, 103, 559, 559, 559, 559, 241, 350, 559, 559,
475 /* 1170 */ 241, 350, 559, 559, 12, 241, 350, 559, 333, 330,
476 /* 1180 */ 233, 559, 559, 328, 241, 350, 559, 243, 352, 240,
477 /* 1190 */ 559, 243, 559, 240, 559, 109, 243, 559, 240, 164,
478 /* 1200 */ 559, 243, 559, 240, 163, 559, 559, 559, 243, 108,
479 /* 1210 */ 240, 559, 559, 559, 559, 559, 162, 559, 241, 350,
480 /* 1220 */ 559, 559, 241, 350, 559, 559, 559, 241, 350, 559,
481 /* 1230 */ 559, 559, 241, 350, 559, 243, 559, 240, 559, 241,
482 /* 1240 */ 350, 559, 243, 86, 240, 559, 559, 243, 559, 240,
483 /* 1250 */ 100, 243, 559, 240, 559, 99, 559, 559, 559, 85,
484 /* 1260 */ 559, 243, 559, 240, 559, 559, 241, 350, 559, 98,
485 /* 1270 */ 559, 559, 559, 241, 350, 559, 559, 559, 241, 350,
486 /* 1280 */ 559, 559, 241, 350, 559, 559, 559, 559, 559, 559,
487 /* 1290 */ 559, 559, 241, 350, 559, 559, 559, 243, 559, 240,
488 /* 1300 */ 559, 243, 559, 240, 243, 84, 240, 559, 243, 97,
489 /* 1310 */ 240, 559, 96, 559, 559, 243, 62, 240, 243, 559,
490 /* 1320 */ 240, 559, 243, 95, 240, 559, 94, 559, 241, 350,
491 /* 1330 */ 92, 559, 241, 350, 559, 241, 350, 559, 559, 241,
492 /* 1340 */ 350, 559, 559, 559, 559, 559, 241, 350, 559, 241,
493 /* 1350 */ 350, 559, 559, 241, 350, 243, 559, 240, 243, 559,
494 /* 1360 */ 240, 559, 243, 91, 240, 559, 90, 243, 559, 240,
495 /* 1370 */ 89, 559, 559, 559, 559, 111, 559, 559, 559, 559,
496 /* 1380 */ 559, 559, 559, 559, 559, 559, 241, 350, 559, 241,
497 /* 1390 */ 350, 559, 559, 241, 350, 559, 559, 559, 241, 350,
498 };
499 static const YYCODETYPE yy_lookahead[] = {
500 /* 0 */ 26, 170, 102, 172, 160, 161, 32, 163, 0, 178,
501 /* 10 */ 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
502 /* 20 */ 120, 87, 88, 103, 180, 91, 92, 93, 94, 95,
503 /* 30 */ 96, 0, 201, 202, 152, 204, 154, 155, 156, 157,
504 /* 40 */ 66, 67, 68, 69, 70, 71, 72, 113, 74, 75,
505 /* 50 */ 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
506 /* 60 */ 140, 87, 88, 5, 112, 91, 92, 93, 94, 95,
507 /* 70 */ 96, 1, 14, 103, 104, 105, 106, 107, 108, 109,
508 /* 80 */ 170, 13, 172, 13, 26, 141, 18, 113, 18, 179,
509 /* 90 */ 120, 23, 131, 23, 120, 77, 78, 79, 80, 81,
510 /* 100 */ 82, 83, 84, 85, 143, 87, 88, 103, 151, 91,
511 /* 110 */ 92, 93, 94, 95, 96, 52, 53, 71, 50, 56,
512 /* 120 */ 50, 53, 76, 53, 66, 67, 68, 69, 70, 71,
513 /* 130 */ 72, 113, 74, 75, 76, 77, 78, 79, 80, 81,
514 /* 140 */ 82, 83, 84, 85, 140, 87, 88, 141, 1, 91,
515 /* 150 */ 92, 93, 94, 95, 96, 26, 85, 190, 87, 88,
516 /* 160 */ 57, 58, 91, 92, 93, 94, 95, 96, 54, 55,
517 /* 170 */ 203, 113, 152, 103, 154, 155, 156, 157, 103, 164,
518 /* 180 */ 165, 166, 102, 141, 113, 170, 118, 110, 111, 112,
519 /* 190 */ 110, 111, 112, 116, 117, 66, 67, 68, 69, 70,
520 /* 200 */ 71, 72, 96, 74, 75, 76, 77, 78, 79, 80,
521 /* 210 */ 81, 82, 83, 84, 85, 140, 87, 88, 23, 113,
522 /* 220 */ 91, 92, 93, 94, 95, 96, 26, 145, 158, 147,
523 /* 230 */ 170, 102, 172, 81, 82, 83, 84, 85, 178, 87,
524 /* 240 */ 88, 101, 113, 91, 92, 93, 94, 95, 96, 189,
525 /* 250 */ 103, 91, 92, 93, 94, 95, 96, 164, 63, 64,
526 /* 260 */ 65, 201, 202, 170, 1, 113, 66, 67, 68, 69,
527 /* 270 */ 70, 71, 72, 113, 74, 75, 76, 77, 78, 79,
528 /* 280 */ 80, 81, 82, 83, 84, 85, 190, 87, 88, 8,
529 /* 290 */ 141, 91, 92, 93, 94, 95, 96, 163, 17, 203,
530 /* 300 */ 163, 63, 64, 26, 170, 158, 172, 170, 174, 172,
531 /* 310 */ 102, 174, 178, 113, 180, 178, 102, 180, 110, 111,
532 /* 320 */ 112, 116, 117, 102, 110, 111, 112, 192, 193, 48,
533 /* 330 */ 49, 110, 111, 112, 200, 201, 202, 101, 201, 202,
534 /* 340 */ 59, 60, 142, 66, 67, 68, 69, 70, 71, 72,
535 /* 350 */ 101, 74, 75, 76, 77, 78, 79, 80, 81, 82,
536 /* 360 */ 83, 84, 85, 102, 87, 88, 63, 64, 91, 92,
537 /* 370 */ 93, 94, 95, 96, 125, 120, 26, 170, 102, 172,
538 /* 380 */ 101, 132, 101, 128, 102, 178, 93, 94, 95, 96,
539 /* 390 */ 113, 102, 110, 111, 112, 120, 120, 102, 191, 110,
540 /* 400 */ 111, 112, 127, 151, 123, 142, 113, 126, 201, 202,
541 /* 410 */ 129, 116, 117, 132, 17, 120, 66, 67, 68, 69,
542 /* 420 */ 70, 71, 72, 146, 74, 75, 76, 77, 78, 79,
543 /* 430 */ 80, 81, 82, 83, 84, 85, 101, 87, 88, 165,
544 /* 440 */ 166, 91, 92, 93, 94, 95, 96, 163, 102, 26,
545 /* 450 */ 102, 102, 50, 1, 170, 1, 172, 102, 174, 110,
546 /* 460 */ 111, 112, 178, 113, 180, 110, 111, 112, 120, 13,
547 /* 470 */ 102, 110, 111, 112, 18, 170, 170, 172, 172, 23,
548 /* 480 */ 135, 176, 176, 120, 120, 201, 202, 1, 120, 66,
549 /* 490 */ 67, 68, 69, 70, 71, 72, 146, 74, 75, 76,
550 /* 500 */ 77, 78, 79, 80, 81, 82, 83, 84, 85, 53,
551 /* 510 */ 87, 88, 135, 102, 91, 92, 93, 94, 95, 96,
552 /* 520 */ 163, 1, 120, 163, 103, 103, 26, 170, 102, 172,
553 /* 530 */ 170, 120, 172, 103, 102, 178, 113, 180, 178, 170,
554 /* 540 */ 180, 172, 116, 117, 103, 93, 120, 93, 183, 170,
555 /* 550 */ 164, 172, 120, 167, 164, 103, 170, 103, 201, 202,
556 /* 560 */ 170, 201, 202, 194, 199, 142, 66, 67, 68, 69,
557 /* 570 */ 70, 71, 72, 101, 74, 75, 76, 77, 78, 79,
558 /* 580 */ 80, 81, 82, 83, 84, 85, 1, 87, 88, 103,
559 /* 590 */ 102, 91, 92, 93, 94, 95, 96, 26, 170, 103,
560 /* 600 */ 172, 170, 174, 172, 132, 119, 178, 121, 120, 178,
561 /* 610 */ 158, 164, 158, 113, 198, 101, 169, 170, 102, 203,
562 /* 620 */ 170, 101, 172, 103, 103, 170, 139, 172, 102, 201,
563 /* 630 */ 202, 200, 201, 202, 148, 149, 120, 66, 67, 68,
564 /* 640 */ 69, 70, 71, 72, 158, 74, 75, 76, 77, 78,
565 /* 650 */ 79, 80, 81, 82, 83, 84, 85, 1, 87, 88,
566 /* 660 */ 51, 53, 91, 92, 93, 94, 95, 96, 26, 170,
567 /* 670 */ 163, 172, 170, 174, 172, 163, 174, 178, 158, 161,
568 /* 680 */ 178, 163, 163, 119, 113, 163, 120, 180, 103, 121,
569 /* 690 */ 101, 164, 180, 170, 170, 172, 172, 170, 180, 180,
570 /* 700 */ 201, 202, 180, 201, 202, 119, 50, 122, 66, 67,
571 /* 710 */ 68, 69, 70, 71, 72, 163, 74, 75, 76, 77,
572 /* 720 */ 78, 79, 80, 81, 82, 83, 84, 85, 1, 87,
573 /* 730 */ 88, 124, 180, 91, 92, 93, 94, 95, 96, 26,
574 /* 740 */ 170, 163, 172, 158, 170, 164, 172, 170, 178, 172,
575 /* 750 */ 170, 170, 172, 120, 101, 113, 101, 1, 180, 103,
576 /* 760 */ 130, 127, 75, 75, 207, 207, 131, 177, 181, 181,
577 /* 770 */ 203, 201, 202, 181, 118, 128, 120, 113, 201, 186,
578 /* 780 */ 67, 68, 69, 70, 71, 72, 59, 74, 75, 76,
579 /* 790 */ 77, 78, 79, 80, 81, 82, 83, 84, 85, 205,
580 /* 800 */ 87, 88, 145, 1, 91, 92, 93, 94, 95, 96,
581 /* 810 */ 26, 170, 10, 172, 158, 170, 185, 172, 137, 178,
582 /* 820 */ 136, 195, 133, 178, 187, 134, 113, 188, 196, 139,
583 /* 830 */ 103, 138, 166, 50, 198, 166, 142, 118, 168, 57,
584 /* 840 */ 169, 168, 201, 202, 66, 171, 201, 202, 173, 101,
585 /* 850 */ 120, 175, 68, 69, 70, 71, 72, 177, 74, 75,
586 /* 860 */ 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
587 /* 870 */ 68, 87, 88, 1, 171, 91, 92, 93, 94, 95,
588 /* 880 */ 96, 170, 10, 172, 170, 158, 172, 162, 170, 178,
589 /* 890 */ 172, 182, 178, 91, 92, 93, 178, 113, 170, 184,
590 /* 900 */ 172, 206, 100, 101, 198, 103, 178, 167, 177, 170,
591 /* 910 */ 167, 170, 201, 202, 170, 201, 202, 170, 165, 201,
592 /* 920 */ 202, 119, 170, 121, 170, 167, 165, 170, 162, 201,
593 /* 930 */ 202, 1, 170, 197, 132, 208, 208, 208, 208, 208,
594 /* 940 */ 68, 208, 208, 208, 208, 73, 144, 1, 208, 1,
595 /* 950 */ 148, 149, 150, 208, 208, 153, 10, 208, 208, 208,
596 /* 960 */ 158, 208, 1, 91, 92, 208, 170, 208, 172, 208,
597 /* 970 */ 208, 10, 100, 101, 178, 103, 170, 208, 172, 208,
598 /* 980 */ 170, 208, 172, 208, 178, 208, 208, 208, 178, 59,
599 /* 990 */ 208, 119, 208, 121, 208, 208, 208, 201, 202, 208,
600 /* 1000 */ 208, 208, 208, 208, 208, 57, 208, 201, 202, 61,
601 /* 1010 */ 62, 201, 202, 208, 68, 208, 144, 208, 208, 208,
602 /* 1020 */ 148, 149, 150, 208, 170, 153, 172, 208, 208, 68,
603 /* 1030 */ 158, 1, 178, 103, 208, 208, 208, 91, 92, 93,
604 /* 1040 */ 10, 208, 208, 208, 208, 208, 100, 101, 208, 103,
605 /* 1050 */ 208, 103, 91, 92, 208, 201, 202, 208, 208, 208,
606 /* 1060 */ 208, 100, 101, 208, 103, 119, 118, 121, 208, 170,
607 /* 1070 */ 208, 172, 208, 208, 208, 208, 170, 178, 172, 208,
608 /* 1080 */ 119, 208, 121, 208, 178, 208, 208, 208, 158, 208,
609 /* 1090 */ 144, 208, 208, 132, 148, 149, 150, 208, 68, 153,
610 /* 1100 */ 201, 202, 208, 208, 158, 144, 158, 201, 202, 148,
611 /* 1110 */ 149, 150, 208, 208, 153, 208, 208, 208, 208, 158,
612 /* 1120 */ 208, 91, 92, 208, 208, 208, 170, 208, 172, 208,
613 /* 1130 */ 100, 101, 208, 103, 178, 170, 208, 172, 208, 170,
614 /* 1140 */ 208, 172, 208, 178, 170, 208, 172, 178, 208, 119,
615 /* 1150 */ 208, 121, 178, 170, 208, 172, 208, 201, 202, 208,
616 /* 1160 */ 208, 178, 208, 208, 208, 208, 201, 202, 208, 208,
617 /* 1170 */ 201, 202, 208, 208, 144, 201, 202, 208, 148, 149,
618 /* 1180 */ 150, 208, 208, 153, 201, 202, 208, 170, 158, 172,
619 /* 1190 */ 208, 170, 208, 172, 208, 178, 170, 208, 172, 178,
620 /* 1200 */ 208, 170, 208, 172, 178, 208, 208, 208, 170, 178,
621 /* 1210 */ 172, 208, 208, 208, 208, 208, 178, 208, 201, 202,
622 /* 1220 */ 208, 208, 201, 202, 208, 208, 208, 201, 202, 208,
623 /* 1230 */ 208, 208, 201, 202, 208, 170, 208, 172, 208, 201,
624 /* 1240 */ 202, 208, 170, 178, 172, 208, 208, 170, 208, 172,
625 /* 1250 */ 178, 170, 208, 172, 208, 178, 208, 208, 208, 178,
626 /* 1260 */ 208, 170, 208, 172, 208, 208, 201, 202, 208, 178,
627 /* 1270 */ 208, 208, 208, 201, 202, 208, 208, 208, 201, 202,
628 /* 1280 */ 208, 208, 201, 202, 208, 208, 208, 208, 208, 208,
629 /* 1290 */ 208, 208, 201, 202, 208, 208, 208, 170, 208, 172,
630 /* 1300 */ 208, 170, 208, 172, 170, 178, 172, 208, 170, 178,
631 /* 1310 */ 172, 208, 178, 208, 208, 170, 178, 172, 170, 208,
632 /* 1320 */ 172, 208, 170, 178, 172, 208, 178, 208, 201, 202,
633 /* 1330 */ 178, 208, 201, 202, 208, 201, 202, 208, 208, 201,
634 /* 1340 */ 202, 208, 208, 208, 208, 208, 201, 202, 208, 201,
635 /* 1350 */ 202, 208, 208, 201, 202, 170, 208, 172, 170, 208,
636 /* 1360 */ 172, 208, 170, 178, 172, 208, 178, 170, 208, 172,
637 /* 1370 */ 178, 208, 208, 208, 208, 178, 208, 208, 208, 208,
638 /* 1380 */ 208, 208, 208, 208, 208, 208, 201, 202, 208, 201,
639 /* 1390 */ 202, 208, 208, 201, 202, 208, 208, 208, 201, 202,
640 };
641 #define YY_SHIFT_USE_DFLT (-119)
642 #define YY_SHIFT_COUNT (246)
643 #define YY_SHIFT_MIN (-118)
644 #define YY_SHIFT_MAX (1030)
645 static const short yy_shift_ofst[] = {
646 /* 0 */ 281, 802, 961, 961, 961, 961, 946, 1030, 1030, 1030,
647 /* 10 */ 1030, 1030, 1030, 872, 1030, 1030, 1030, 1030, 1030, 1030,
648 /* 20 */ 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030,
649 /* 30 */ 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030,
650 /* 40 */ 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030,
651 /* 50 */ 1030, 1030, 70, 281, 948, 486, 656, 520, 147, 147,
652 /* 60 */ 147, 58, 58, 423, 68, 585, 147, 147, 147, 249,
653 /* 70 */ 147, 147, 147, 147, 147, 147, 147, 472, 472, 472,
654 /* 80 */ 472, 472, -119, -119, -26, 350, 277, 200, 129, 500,
655 /* 90 */ 500, 500, 500, 500, 500, 500, 500, 500, 500, 500,
656 /* 100 */ 500, 500, 500, 642, 571, 500, 500, 713, 784, 784,
657 /* 110 */ 784, -66, -66, -66, -66, 18, 152, 71, -30, 160,
658 /* 120 */ 293, 77, 930, 727, 456, 426, 456, 295, 454, 452,
659 /* 130 */ 147, 147, 147, 147, 147, 255, 402, 263, 106, 106,
660 /* 140 */ 82, 275, -39, 205, 778, 647, 730, 748, 778, 719,
661 /* 150 */ 782, 719, 783, 783, 694, 693, 690, 689, 691, 684,
662 /* 160 */ 681, 657, 664, 664, 664, 664, 647, 635, 635, 635,
663 /* 170 */ -119, -119, 20, -118, 195, 355, 349, 289, 282, 221,
664 /* 180 */ 214, 208, 80, 361, 63, 516, 488, 432, 368, 303,
665 /* 190 */ 238, 114, 103, 411, 75, 4, -80, 348, 276, 46,
666 /* 200 */ -100, 688, 687, 630, 634, 756, 655, 653, 633, 589,
667 /* 210 */ 607, 586, 568, 566, 564, 608, 609, 526, -48, 487,
668 /* 220 */ 514, 521, 496, 441, 430, 422, 421, 364, 377, 363,
669 /* 230 */ 345, 346, 335, 252, 397, 279, 261, 236, 149, 42,
670 /* 240 */ 140, -43, 6, -56, -48, 31, 8,
671 };
672 #define YY_REDUCE_USE_DFLT (-170)
673 #define YY_REDUCE_COUNT (171)
674 #define YY_REDUCE_MIN (-169)
675 #define YY_REDUCE_MAX (1197)
676 static const short yy_reduce_ofst[] = {
677 /* 0 */ -156, 134, 284, 137, 360, 357, 431, 502, 499, 428,
678 /* 10 */ 207, 60, -169, 1197, 1192, 1188, 1185, 1152, 1148, 1145,
679 /* 20 */ 1138, 1134, 1131, 1127, 1091, 1081, 1077, 1072, 1065, 1038,
680 /* 30 */ 1031, 1026, 1021, 1017, 983, 974, 969, 965, 956, 906,
681 /* 40 */ 899, 854, 810, 806, 796, 728, 718, 714, 711, 645,
682 /* 50 */ 641, 570, 15, 518, 447, 577, 386, 369, -90, 306,
683 /* 60 */ 305, 96, -33, 416, 274, 581, 580, 574, 524, 552,
684 /* 70 */ 523, 527, 390, 93, 455, 450, 379, 578, 522, 519,
685 /* 80 */ 512, 507, 135, 365, 567, 567, 567, 567, 567, 567,
686 /* 90 */ 567, 567, 567, 567, 567, 567, 567, 567, 567, 567,
687 /* 100 */ 567, 567, 567, 567, 567, 567, 567, 567, 567, 567,
688 /* 110 */ 567, 567, 567, 567, 567, 567, 567, 567, 736, 567,
689 /* 120 */ 567, 766, 762, 757, 761, 758, 753, 743, 741, 754,
690 /* 130 */ 752, 747, 744, 741, 739, 731, 740, 706, 567, 567,
691 /* 140 */ 695, 715, 709, 725, 703, 680, 676, 675, 674, 673,
692 /* 150 */ 671, 670, 669, 666, 636, 632, 626, 639, 637, 593,
693 /* 160 */ 631, 594, 567, 567, 567, 567, 590, 592, 588, 587,
694 /* 170 */ 558, 557,
695 };
696 static const YYACTIONTYPE yy_default[] = {
697 /* 0 */ 557, 493, 493, 493, 557, 557, 557, 493, 493, 493,
698 /* 10 */ 557, 557, 532, 557, 557, 557, 557, 557, 557, 557,
699 /* 20 */ 557, 557, 557, 557, 557, 557, 557, 557, 557, 557,
700 /* 30 */ 557, 557, 557, 557, 557, 557, 557, 557, 557, 557,
701 /* 40 */ 557, 557, 557, 557, 557, 557, 557, 557, 557, 557,
702 /* 50 */ 557, 557, 403, 557, 403, 557, 403, 557, 557, 557,
703 /* 60 */ 557, 449, 449, 486, 367, 403, 557, 557, 557, 557,
704 /* 70 */ 557, 403, 403, 403, 557, 557, 557, 557, 557, 557,
705 /* 80 */ 557, 557, 459, 478, 440, 557, 557, 557, 557, 431,
706 /* 90 */ 430, 490, 461, 492, 491, 451, 442, 441, 534, 535,
707 /* 100 */ 533, 531, 495, 557, 557, 494, 428, 512, 521, 520,
708 /* 110 */ 511, 524, 517, 516, 515, 519, 514, 518, 455, 508,
709 /* 120 */ 505, 557, 557, 557, 557, 397, 557, 397, 557, 557,
710 /* 130 */ 557, 557, 557, 557, 557, 427, 373, 486, 506, 507,
711 /* 140 */ 536, 454, 487, 557, 418, 427, 415, 422, 418, 395,
712 /* 150 */ 383, 395, 557, 557, 486, 458, 462, 439, 443, 450,
713 /* 160 */ 452, 557, 522, 510, 509, 513, 427, 436, 436, 436,
714 /* 170 */ 546, 546, 557, 557, 557, 557, 557, 557, 557, 557,
715 /* 180 */ 525, 557, 557, 417, 557, 557, 557, 557, 557, 388,
716 /* 190 */ 387, 557, 557, 557, 557, 557, 557, 557, 557, 557,
717 /* 200 */ 557, 557, 557, 557, 557, 557, 557, 557, 416, 557,
718 /* 210 */ 557, 557, 557, 381, 557, 557, 557, 557, 433, 489,
719 /* 220 */ 557, 557, 557, 557, 557, 557, 557, 453, 557, 444,
720 /* 230 */ 557, 557, 557, 557, 557, 557, 557, 557, 555, 554,
721 /* 240 */ 499, 497, 555, 554, 434, 557, 557, 429, 426, 419,
722 /* 250 */ 423, 421, 420, 412, 411, 410, 414, 413, 386, 385,
723 /* 260 */ 390, 389, 394, 393, 392, 391, 384, 382, 380, 379,
724 /* 270 */ 396, 378, 377, 376, 370, 369, 404, 402, 401, 400,
725 /* 280 */ 399, 374, 398, 409, 408, 407, 406, 405, 375, 368,
726 /* 290 */ 363, 437, 488, 480, 479, 477, 476, 485, 484, 475,
727 /* 300 */ 474, 425, 457, 424, 456, 473, 472, 471, 470, 469,
728 /* 310 */ 468, 467, 466, 465, 464, 463, 460, 446, 448, 447,
729 /* 320 */ 445, 438, 525, 502, 500, 528, 529, 538, 545, 543,
730 /* 330 */ 542, 541, 540, 539, 530, 537, 526, 527, 523, 503,
731 /* 340 */ 483, 482, 481, 501, 498, 550, 549, 548, 547, 544,
732 /* 350 */ 496, 556, 553, 552, 551, 504, 435, 432, 364, 366,
733 /* 360 */ 365,
734 };
735
736 /* The next table maps tokens into fallback tokens. If a construct
737 ** like the following:
738 **
739 ** %fallback ID X Y Z.
740 **
741 ** appears in the grammar, then ID becomes a fallback token for X, Y,
742 ** and Z. Whenever one of the tokens X, Y, or Z is input to the parser
743 ** but it does not parse, the type of the token is changed to ID and
744 ** the parse is retried before an error is thrown.
745 */
746 #ifdef YYFALLBACK
747 static const YYCODETYPE yyFallback[] = {
748 0, /* $ => nothing */
749 0, /* ID => nothing */
750 1, /* ABORT => ID */
751 1, /* AFTER => ID */
752 1, /* ANALYZE => ID */
753 1, /* ASC => ID */
754 1, /* ATTACH => ID */
755 1, /* BEFORE => ID */
756 1, /* BEGIN => ID */
757 1, /* CASCADE => ID */
758 1, /* CAST => ID */
759 1, /* CONFLICT => ID */
760 1, /* DATABASE => ID */
761 1, /* DEFERRED => ID */
762 1, /* DESC => ID */
763 1, /* DETACH => ID */
764 1, /* EACH => ID */
765 1, /* END => ID */
766 1, /* EXCLUSIVE => ID */
767 1, /* EXPLAIN => ID */
768 1, /* FAIL => ID */
769 1, /* FOR => ID */
770 1, /* IGNORE => ID */
771 1, /* IMMEDIATE => ID */
772 1, /* INITIALLY => ID */
773 1, /* INSTEAD => ID */
774 1, /* LIKE => ID */
775 1, /* MATCH => ID */
776 1, /* PLAN => ID */
777 1, /* QUERY => ID */
778 1, /* KEY => ID */
779 1, /* OF => ID */
780 1, /* OFFSET => ID */
781 1, /* PRAGMA => ID */
782 1, /* RAISE => ID */
783 1, /* REPLACE => ID */
784 1, /* RESTRICT => ID */
785 1, /* ROW => ID */
786 1, /* TEMP => ID */
787 1, /* TRIGGER => ID */
788 1, /* VACUUM => ID */
789 1, /* VIEW => ID */
790 1, /* VIRTUAL => ID */
791 1, /* REINDEX => ID */
792 1, /* RENAME => ID */
793 1, /* CTIME_KW => ID */
794 1, /* IF => ID */
795 1, /* DELIMITER => ID */
796 1, /* COMMIT => ID */
797 1, /* ROLLBACK => ID */
798 1, /* ISOLATION => ID */
799 1, /* LEVEL => ID */
800 1, /* SERIALIZABLE => ID */
801 1, /* READ => ID */
802 1, /* COMMITTED => ID */
803 1, /* UNCOMMITTED => ID */
804 1, /* REPEATABLE => ID */
805 1, /* WRITE => ID */
806 1, /* ONLY => ID */
807 1, /* SAVEPOINT => ID */
808 1, /* RELEASE => ID */
809 1, /* COMMENT => ID */
810 1, /* FORCE => ID */
811 1, /* WAIT => ID */
812 1, /* NOWAIT => ID */
813 1, /* BATCH => ID */
814 };
815 #endif /* YYFALLBACK */
816
817 /* The following structure represents a single element of the
818 ** parser's stack. Information stored includes:
819 **
820 ** + The state number for the parser at this level of the stack.
821 **
822 ** + The value of the token stored at this level of the stack.
823 ** (In other words, the "major" token.)
824 **
825 ** + The semantic value stored at this level of the stack. This is
826 ** the information used by the action routines in the grammar.
827 ** It is sometimes called the "minor" token.
828 */
829 struct yyStackEntry {
830 YYACTIONTYPE stateno; /* The state-number */
831 YYCODETYPE major; /* The major token value. This is the code
832 ** number for the token at this stack level */
833 YYMINORTYPE minor; /* The user-supplied minor token value. This
834 ** is the value of the token */
835 };
836 typedef struct yyStackEntry yyStackEntry;
837
838 /* The state of the parser is completely contained in an instance of
839 ** the following structure */
840 struct yyParser {
841 int yyidx; /* Index of top element in stack */
842 #ifdef YYTRACKMAXSTACKDEPTH
843 int yyidxMax; /* Maximum value of yyidx */
844 #endif
845 int yyerrcnt; /* Shifts left before out of the error */
846 gda_lemon_firebird_parserARG_SDECL /* A place to hold %extra_argument */
847 #if YYSTACKDEPTH<=0
848 int yystksz; /* Current side of the stack */
849 yyStackEntry *yystack; /* The parser's stack */
850 #else
851 yyStackEntry yystack[YYSTACKDEPTH]; /* The parser's stack */
852 #endif
853 };
854 typedef struct yyParser yyParser;
855
856 #ifndef NDEBUG
857 #include <stdio.h>
858 static FILE *yyTraceFILE = 0;
859 static char *yyTracePrompt = 0;
860 #endif /* NDEBUG */
861
862 #ifndef NDEBUG
863 /*
864 ** Turn parser tracing on by giving a stream to which to write the trace
865 ** and a prompt to preface each trace message. Tracing is turned off
866 ** by making either argument NULL
867 **
868 ** Inputs:
869 ** <ul>
870 ** <li> A FILE* to which trace output should be written.
871 ** If NULL, then tracing is turned off.
872 ** <li> A prefix string written at the beginning of every
873 ** line of trace output. If NULL, then tracing is
874 ** turned off.
875 ** </ul>
876 **
877 ** Outputs:
878 ** None.
879 */
gda_lemon_firebird_parserTrace(FILE * TraceFILE,char * zTracePrompt)880 void gda_lemon_firebird_parserTrace(FILE *TraceFILE, char *zTracePrompt){
881 yyTraceFILE = TraceFILE;
882 yyTracePrompt = zTracePrompt;
883 if( yyTraceFILE==0 ) yyTracePrompt = 0;
884 else if( yyTracePrompt==0 ) yyTraceFILE = 0;
885 }
886 #endif /* NDEBUG */
887
888 #ifndef NDEBUG
889 /* For tracing shifts, the names of all terminals and nonterminals
890 ** are required. The following table supplies these names */
891 static const char *const yyTokenName[] = {
892 "$", "ID", "ABORT", "AFTER",
893 "ANALYZE", "ASC", "ATTACH", "BEFORE",
894 "BEGIN", "CASCADE", "CAST", "CONFLICT",
895 "DATABASE", "DEFERRED", "DESC", "DETACH",
896 "EACH", "END", "EXCLUSIVE", "EXPLAIN",
897 "FAIL", "FOR", "IGNORE", "IMMEDIATE",
898 "INITIALLY", "INSTEAD", "LIKE", "MATCH",
899 "PLAN", "QUERY", "KEY", "OF",
900 "OFFSET", "PRAGMA", "RAISE", "REPLACE",
901 "RESTRICT", "ROW", "TEMP", "TRIGGER",
902 "VACUUM", "VIEW", "VIRTUAL", "REINDEX",
903 "RENAME", "CTIME_KW", "IF", "DELIMITER",
904 "COMMIT", "ROLLBACK", "ISOLATION", "LEVEL",
905 "SERIALIZABLE", "READ", "COMMITTED", "UNCOMMITTED",
906 "REPEATABLE", "WRITE", "ONLY", "SAVEPOINT",
907 "RELEASE", "COMMENT", "FORCE", "WAIT",
908 "NOWAIT", "BATCH", "OR", "AND",
909 "NOT", "IS", "NOTLIKE", "IN",
910 "ISNULL", "NOTNULL", "DIFF", "EQ",
911 "BETWEEN", "GT", "LEQ", "LT",
912 "GEQ", "REGEXP", "REGEXP_CI", "NOT_REGEXP",
913 "NOT_REGEXP_CI", "SIMILAR", "ESCAPE", "BITAND",
914 "BITOR", "LSHIFT", "RSHIFT", "PLUS",
915 "MINUS", "STAR", "SLASH", "REM",
916 "CONCAT", "COLLATE", "UMINUS", "UPLUS",
917 "BITNOT", "LP", "RP", "JOIN",
918 "INNER", "NATURAL", "LEFT", "RIGHT",
919 "FULL", "CROSS", "UNION", "EXCEPT",
920 "INTERSECT", "PGCAST", "ILLEGAL", "SQLCOMMENT",
921 "SEMI", "END_OF_FILE", "TRANSACTION", "STRING",
922 "COMMA", "INTEGER", "TO", "INSERT",
923 "INTO", "VALUES", "DELETE", "FROM",
924 "WHERE", "UPDATE", "SET", "ALL",
925 "SELECT", "LIMIT", "ORDER", "BY",
926 "HAVING", "GROUP", "USING", "ON",
927 "OUTER", "DOT", "AS", "DISTINCT",
928 "CASE", "WHEN", "THEN", "ELSE",
929 "NULL", "FLOAT", "UNSPECVAL", "LSBRACKET",
930 "RSBRACKET", "SIMPLEPARAM", "PNAME", "PDESCR",
931 "PTYPE", "PNULLOK", "TEXTUAL", "error",
932 "stmt", "cmd", "eos", "compound",
933 "nm_opt", "transtype", "transilev", "opt_comma",
934 "trans_opt_kw", "ora_commit_write", "nm", "opt_on_conflict",
935 "fullname", "inscollist_opt", "rexprlist", "ins_extra_values",
936 "inscollist", "where_opt", "expr", "setlist",
937 "selectcmd", "opt_compound_all", "distinct", "selcollist",
938 "from", "groupby_opt", "having_opt", "orderby_opt",
939 "limit_opt", "sortlist", "sortorder", "rnexprlist",
940 "seltablist", "stl_prefix", "seltarget", "on_cond",
941 "using_opt", "jointype", "as", "sclp",
942 "starname", "value", "pvalue", "uni_op",
943 "case_operand", "case_exprlist", "case_else", "paramspec",
944 };
945 #endif /* NDEBUG */
946
947 #ifndef NDEBUG
948 /* For tracing reduce actions, the names of all rules are required.
949 */
950 static const char *const yyRuleName[] = {
951 /* 0 */ "stmt ::= cmd eos",
952 /* 1 */ "stmt ::= compound eos",
953 /* 2 */ "cmd ::= LP cmd RP",
954 /* 3 */ "compound ::= LP compound RP",
955 /* 4 */ "eos ::= SEMI",
956 /* 5 */ "eos ::= END_OF_FILE",
957 /* 6 */ "cmd ::= BEGIN",
958 /* 7 */ "cmd ::= BEGIN TRANSACTION nm_opt",
959 /* 8 */ "cmd ::= BEGIN transtype TRANSACTION nm_opt",
960 /* 9 */ "cmd ::= BEGIN transtype nm_opt",
961 /* 10 */ "cmd ::= BEGIN transilev",
962 /* 11 */ "cmd ::= BEGIN TRANSACTION transilev",
963 /* 12 */ "cmd ::= BEGIN TRANSACTION transtype",
964 /* 13 */ "cmd ::= BEGIN TRANSACTION transtype opt_comma transilev",
965 /* 14 */ "cmd ::= BEGIN TRANSACTION transilev opt_comma transtype",
966 /* 15 */ "cmd ::= BEGIN transtype opt_comma transilev",
967 /* 16 */ "cmd ::= BEGIN transilev opt_comma transtype",
968 /* 17 */ "cmd ::= END trans_opt_kw nm_opt",
969 /* 18 */ "cmd ::= COMMIT nm_opt",
970 /* 19 */ "cmd ::= COMMIT TRANSACTION nm_opt",
971 /* 20 */ "cmd ::= COMMIT FORCE STRING",
972 /* 21 */ "cmd ::= COMMIT FORCE STRING COMMA INTEGER",
973 /* 22 */ "cmd ::= COMMIT COMMENT STRING",
974 /* 23 */ "cmd ::= COMMIT COMMENT STRING ora_commit_write",
975 /* 24 */ "cmd ::= COMMIT ora_commit_write",
976 /* 25 */ "cmd ::= ROLLBACK trans_opt_kw nm_opt",
977 /* 26 */ "ora_commit_write ::= WRITE IMMEDIATE",
978 /* 27 */ "ora_commit_write ::= WRITE BATCH",
979 /* 28 */ "ora_commit_write ::= WRITE WAIT",
980 /* 29 */ "ora_commit_write ::= WRITE NOWAIT",
981 /* 30 */ "ora_commit_write ::= WRITE IMMEDIATE WAIT",
982 /* 31 */ "ora_commit_write ::= WRITE IMMEDIATE NOWAIT",
983 /* 32 */ "ora_commit_write ::= WRITE BATCH WAIT",
984 /* 33 */ "ora_commit_write ::= WRITE BATCH NOWAIT",
985 /* 34 */ "trans_opt_kw ::=",
986 /* 35 */ "trans_opt_kw ::= TRANSACTION",
987 /* 36 */ "opt_comma ::=",
988 /* 37 */ "opt_comma ::= COMMA",
989 /* 38 */ "transilev ::= ISOLATION LEVEL SERIALIZABLE",
990 /* 39 */ "transilev ::= ISOLATION LEVEL REPEATABLE READ",
991 /* 40 */ "transilev ::= ISOLATION LEVEL READ COMMITTED",
992 /* 41 */ "transilev ::= ISOLATION LEVEL READ UNCOMMITTED",
993 /* 42 */ "nm_opt ::=",
994 /* 43 */ "nm_opt ::= nm",
995 /* 44 */ "transtype ::= DEFERRED",
996 /* 45 */ "transtype ::= IMMEDIATE",
997 /* 46 */ "transtype ::= EXCLUSIVE",
998 /* 47 */ "transtype ::= READ WRITE",
999 /* 48 */ "transtype ::= READ ONLY",
1000 /* 49 */ "cmd ::= SAVEPOINT nm",
1001 /* 50 */ "cmd ::= RELEASE SAVEPOINT nm",
1002 /* 51 */ "cmd ::= RELEASE nm",
1003 /* 52 */ "cmd ::= ROLLBACK trans_opt_kw TO nm",
1004 /* 53 */ "cmd ::= ROLLBACK trans_opt_kw TO SAVEPOINT nm",
1005 /* 54 */ "cmd ::= INSERT opt_on_conflict INTO fullname inscollist_opt VALUES LP rexprlist RP",
1006 /* 55 */ "cmd ::= INSERT opt_on_conflict INTO fullname inscollist_opt VALUES LP rexprlist RP ins_extra_values",
1007 /* 56 */ "cmd ::= INSERT opt_on_conflict INTO fullname inscollist_opt compound",
1008 /* 57 */ "opt_on_conflict ::=",
1009 /* 58 */ "opt_on_conflict ::= OR ID",
1010 /* 59 */ "ins_extra_values ::= ins_extra_values COMMA LP rexprlist RP",
1011 /* 60 */ "ins_extra_values ::= COMMA LP rexprlist RP",
1012 /* 61 */ "inscollist_opt ::=",
1013 /* 62 */ "inscollist_opt ::= LP inscollist RP",
1014 /* 63 */ "inscollist ::= inscollist COMMA fullname",
1015 /* 64 */ "inscollist ::= fullname",
1016 /* 65 */ "cmd ::= DELETE FROM fullname where_opt",
1017 /* 66 */ "where_opt ::=",
1018 /* 67 */ "where_opt ::= WHERE expr",
1019 /* 68 */ "cmd ::= UPDATE opt_on_conflict fullname SET setlist where_opt",
1020 /* 69 */ "setlist ::= setlist COMMA fullname EQ expr",
1021 /* 70 */ "setlist ::= fullname EQ expr",
1022 /* 71 */ "compound ::= selectcmd",
1023 /* 72 */ "compound ::= compound UNION opt_compound_all compound",
1024 /* 73 */ "compound ::= compound EXCEPT opt_compound_all compound",
1025 /* 74 */ "compound ::= compound INTERSECT opt_compound_all compound",
1026 /* 75 */ "opt_compound_all ::=",
1027 /* 76 */ "opt_compound_all ::= ALL",
1028 /* 77 */ "selectcmd ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt",
1029 /* 78 */ "limit_opt ::=",
1030 /* 79 */ "limit_opt ::= LIMIT expr",
1031 /* 80 */ "limit_opt ::= LIMIT expr OFFSET expr",
1032 /* 81 */ "limit_opt ::= LIMIT expr COMMA expr",
1033 /* 82 */ "orderby_opt ::=",
1034 /* 83 */ "orderby_opt ::= ORDER BY sortlist",
1035 /* 84 */ "sortlist ::= sortlist COMMA expr sortorder",
1036 /* 85 */ "sortlist ::= expr sortorder",
1037 /* 86 */ "sortorder ::= ASC",
1038 /* 87 */ "sortorder ::= DESC",
1039 /* 88 */ "sortorder ::=",
1040 /* 89 */ "having_opt ::=",
1041 /* 90 */ "having_opt ::= HAVING expr",
1042 /* 91 */ "groupby_opt ::=",
1043 /* 92 */ "groupby_opt ::= GROUP BY rnexprlist",
1044 /* 93 */ "from ::=",
1045 /* 94 */ "from ::= FROM seltablist",
1046 /* 95 */ "seltablist ::= stl_prefix seltarget on_cond using_opt",
1047 /* 96 */ "using_opt ::= USING LP inscollist RP",
1048 /* 97 */ "using_opt ::=",
1049 /* 98 */ "stl_prefix ::=",
1050 /* 99 */ "stl_prefix ::= seltablist jointype",
1051 /* 100 */ "on_cond ::= ON expr",
1052 /* 101 */ "on_cond ::=",
1053 /* 102 */ "jointype ::= COMMA",
1054 /* 103 */ "jointype ::= JOIN",
1055 /* 104 */ "jointype ::= CROSS JOIN",
1056 /* 105 */ "jointype ::= INNER JOIN",
1057 /* 106 */ "jointype ::= NATURAL JOIN",
1058 /* 107 */ "jointype ::= LEFT JOIN",
1059 /* 108 */ "jointype ::= LEFT OUTER JOIN",
1060 /* 109 */ "jointype ::= RIGHT JOIN",
1061 /* 110 */ "jointype ::= RIGHT OUTER JOIN",
1062 /* 111 */ "jointype ::= FULL JOIN",
1063 /* 112 */ "jointype ::= FULL OUTER JOIN",
1064 /* 113 */ "seltarget ::= fullname as",
1065 /* 114 */ "seltarget ::= fullname ID",
1066 /* 115 */ "seltarget ::= LP compound RP as",
1067 /* 116 */ "sclp ::= selcollist COMMA",
1068 /* 117 */ "sclp ::=",
1069 /* 118 */ "selcollist ::= sclp expr as",
1070 /* 119 */ "selcollist ::= sclp starname",
1071 /* 120 */ "starname ::= STAR",
1072 /* 121 */ "starname ::= nm DOT STAR",
1073 /* 122 */ "starname ::= nm DOT nm DOT STAR",
1074 /* 123 */ "as ::= AS fullname",
1075 /* 124 */ "as ::= AS value",
1076 /* 125 */ "as ::=",
1077 /* 126 */ "distinct ::=",
1078 /* 127 */ "distinct ::= ALL",
1079 /* 128 */ "distinct ::= DISTINCT",
1080 /* 129 */ "distinct ::= DISTINCT ON expr",
1081 /* 130 */ "rnexprlist ::= rnexprlist COMMA expr",
1082 /* 131 */ "rnexprlist ::= expr",
1083 /* 132 */ "rexprlist ::=",
1084 /* 133 */ "rexprlist ::= rexprlist COMMA expr",
1085 /* 134 */ "rexprlist ::= expr",
1086 /* 135 */ "expr ::= pvalue",
1087 /* 136 */ "expr ::= value",
1088 /* 137 */ "expr ::= LP expr RP",
1089 /* 138 */ "expr ::= fullname",
1090 /* 139 */ "expr ::= fullname LP rexprlist RP",
1091 /* 140 */ "expr ::= fullname LP compound RP",
1092 /* 141 */ "expr ::= fullname LP starname RP",
1093 /* 142 */ "expr ::= CAST LP expr AS fullname RP",
1094 /* 143 */ "expr ::= expr PGCAST fullname",
1095 /* 144 */ "expr ::= expr PLUS|MINUS expr",
1096 /* 145 */ "expr ::= expr STAR expr",
1097 /* 146 */ "expr ::= expr SLASH|REM expr",
1098 /* 147 */ "expr ::= expr BITAND|BITOR expr",
1099 /* 148 */ "expr ::= MINUS expr",
1100 /* 149 */ "expr ::= PLUS expr",
1101 /* 150 */ "expr ::= expr AND expr",
1102 /* 151 */ "expr ::= expr OR expr",
1103 /* 152 */ "expr ::= expr CONCAT expr",
1104 /* 153 */ "expr ::= expr GT|LEQ|GEQ|LT expr",
1105 /* 154 */ "expr ::= expr DIFF|EQ expr",
1106 /* 155 */ "expr ::= expr LIKE expr",
1107 /* 156 */ "expr ::= expr NOTLIKE expr",
1108 /* 157 */ "expr ::= expr REGEXP|REGEXP_CI|NOT_REGEXP|NOT_REGEXP_CI|SIMILAR expr",
1109 /* 158 */ "expr ::= expr BETWEEN expr AND expr",
1110 /* 159 */ "expr ::= expr NOT BETWEEN expr AND expr",
1111 /* 160 */ "expr ::= NOT expr",
1112 /* 161 */ "expr ::= BITNOT expr",
1113 /* 162 */ "expr ::= expr uni_op",
1114 /* 163 */ "expr ::= expr IS expr",
1115 /* 164 */ "expr ::= LP compound RP",
1116 /* 165 */ "expr ::= expr IN LP rexprlist RP",
1117 /* 166 */ "expr ::= expr IN LP compound RP",
1118 /* 167 */ "expr ::= expr NOT IN LP rexprlist RP",
1119 /* 168 */ "expr ::= expr NOT IN LP compound RP",
1120 /* 169 */ "expr ::= CASE case_operand case_exprlist case_else END",
1121 /* 170 */ "case_operand ::= expr",
1122 /* 171 */ "case_operand ::=",
1123 /* 172 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr",
1124 /* 173 */ "case_exprlist ::= WHEN expr THEN expr",
1125 /* 174 */ "case_else ::= ELSE expr",
1126 /* 175 */ "case_else ::=",
1127 /* 176 */ "uni_op ::= ISNULL",
1128 /* 177 */ "uni_op ::= IS NOTNULL",
1129 /* 178 */ "value ::= NULL",
1130 /* 179 */ "value ::= STRING",
1131 /* 180 */ "value ::= INTEGER",
1132 /* 181 */ "value ::= FLOAT",
1133 /* 182 */ "pvalue ::= UNSPECVAL LSBRACKET paramspec RSBRACKET",
1134 /* 183 */ "pvalue ::= value LSBRACKET paramspec RSBRACKET",
1135 /* 184 */ "pvalue ::= SIMPLEPARAM",
1136 /* 185 */ "paramspec ::=",
1137 /* 186 */ "paramspec ::= paramspec PNAME",
1138 /* 187 */ "paramspec ::= paramspec PDESCR",
1139 /* 188 */ "paramspec ::= paramspec PTYPE",
1140 /* 189 */ "paramspec ::= paramspec PNULLOK",
1141 /* 190 */ "nm ::= JOIN",
1142 /* 191 */ "nm ::= ID",
1143 /* 192 */ "nm ::= TEXTUAL",
1144 /* 193 */ "fullname ::= nm",
1145 /* 194 */ "fullname ::= nm DOT nm",
1146 /* 195 */ "fullname ::= nm DOT nm DOT nm",
1147 };
1148 #endif /* NDEBUG */
1149
1150
1151 #if YYSTACKDEPTH<=0
1152 /*
1153 ** Try to increase the size of the parser stack.
1154 */
yyGrowStack(yyParser * p)1155 static void yyGrowStack(yyParser *p){
1156 int newSize;
1157 yyStackEntry *pNew;
1158
1159 newSize = p->yystksz*2 + 100;
1160 pNew = realloc(p->yystack, newSize*sizeof(pNew[0]));
1161 if( pNew ){
1162 p->yystack = pNew;
1163 p->yystksz = newSize;
1164 #ifndef NDEBUG
1165 if( yyTraceFILE ){
1166 fprintf(yyTraceFILE,"%sStack grows to %d entries!\n",
1167 yyTracePrompt, p->yystksz);
1168 }
1169 #endif
1170 }
1171 }
1172 #endif
1173
1174 /*
1175 ** This function allocates a new parser.
1176 ** The only argument is a pointer to a function which works like
1177 ** malloc.
1178 **
1179 ** Inputs:
1180 ** A pointer to the function used to allocate memory.
1181 **
1182 ** Outputs:
1183 ** A pointer to a parser. This pointer is used in subsequent calls
1184 ** to gda_lemon_firebird_parser and gda_lemon_firebird_parserFree.
1185 */
gda_lemon_firebird_parserAlloc(void * (* mallocProc)(size_t))1186 void *gda_lemon_firebird_parserAlloc(void *(*mallocProc)(size_t)){
1187 yyParser *pParser;
1188 pParser = (yyParser*)(*mallocProc)( (size_t)sizeof(yyParser) );
1189 if( pParser ){
1190 pParser->yyidx = -1;
1191 #ifdef YYTRACKMAXSTACKDEPTH
1192 pParser->yyidxMax = 0;
1193 #endif
1194 #if YYSTACKDEPTH<=0
1195 pParser->yystack = NULL;
1196 pParser->yystksz = 0;
1197 yyGrowStack(pParser);
1198 #endif
1199 }
1200 return pParser;
1201 }
1202
1203 /* The following function deletes the value associated with a
1204 ** symbol. The symbol can be either a terminal or nonterminal.
1205 ** "yymajor" is the symbol code, and "yypminor" is a pointer to
1206 ** the value.
1207 */
yy_destructor(yyParser * yypParser,YYCODETYPE yymajor,YYMINORTYPE * yypminor)1208 static void yy_destructor(
1209 yyParser *yypParser, /* The parser */
1210 YYCODETYPE yymajor, /* Type code for object to destroy */
1211 YYMINORTYPE *yypminor /* The object to be destroyed */
1212 ){
1213 gda_lemon_firebird_parserARG_FETCH;
1214 switch( yymajor ){
1215 /* Here is inserted the actions which take place when a
1216 ** terminal or non-terminal is destroyed. This can happen
1217 ** when the symbol is popped from the stack during a
1218 ** reduce or during error processing or when a parser is
1219 ** being destroyed before it is finished parsing.
1220 **
1221 ** Note: during a reduce, the only symbols destroyed are those
1222 ** which appear on the RHS of the rule, but which are not used
1223 ** inside the C code.
1224 */
1225 /* TERMINAL Destructor */
1226 case 1: /* ID */
1227 case 2: /* ABORT */
1228 case 3: /* AFTER */
1229 case 4: /* ANALYZE */
1230 case 5: /* ASC */
1231 case 6: /* ATTACH */
1232 case 7: /* BEFORE */
1233 case 8: /* BEGIN */
1234 case 9: /* CASCADE */
1235 case 10: /* CAST */
1236 case 11: /* CONFLICT */
1237 case 12: /* DATABASE */
1238 case 13: /* DEFERRED */
1239 case 14: /* DESC */
1240 case 15: /* DETACH */
1241 case 16: /* EACH */
1242 case 17: /* END */
1243 case 18: /* EXCLUSIVE */
1244 case 19: /* EXPLAIN */
1245 case 20: /* FAIL */
1246 case 21: /* FOR */
1247 case 22: /* IGNORE */
1248 case 23: /* IMMEDIATE */
1249 case 24: /* INITIALLY */
1250 case 25: /* INSTEAD */
1251 case 26: /* LIKE */
1252 case 27: /* MATCH */
1253 case 28: /* PLAN */
1254 case 29: /* QUERY */
1255 case 30: /* KEY */
1256 case 31: /* OF */
1257 case 32: /* OFFSET */
1258 case 33: /* PRAGMA */
1259 case 34: /* RAISE */
1260 case 35: /* REPLACE */
1261 case 36: /* RESTRICT */
1262 case 37: /* ROW */
1263 case 38: /* TEMP */
1264 case 39: /* TRIGGER */
1265 case 40: /* VACUUM */
1266 case 41: /* VIEW */
1267 case 42: /* VIRTUAL */
1268 case 43: /* REINDEX */
1269 case 44: /* RENAME */
1270 case 45: /* CTIME_KW */
1271 case 46: /* IF */
1272 case 47: /* DELIMITER */
1273 case 48: /* COMMIT */
1274 case 49: /* ROLLBACK */
1275 case 50: /* ISOLATION */
1276 case 51: /* LEVEL */
1277 case 52: /* SERIALIZABLE */
1278 case 53: /* READ */
1279 case 54: /* COMMITTED */
1280 case 55: /* UNCOMMITTED */
1281 case 56: /* REPEATABLE */
1282 case 57: /* WRITE */
1283 case 58: /* ONLY */
1284 case 59: /* SAVEPOINT */
1285 case 60: /* RELEASE */
1286 case 61: /* COMMENT */
1287 case 62: /* FORCE */
1288 case 63: /* WAIT */
1289 case 64: /* NOWAIT */
1290 case 65: /* BATCH */
1291 case 66: /* OR */
1292 case 67: /* AND */
1293 case 68: /* NOT */
1294 case 69: /* IS */
1295 case 70: /* NOTLIKE */
1296 case 71: /* IN */
1297 case 72: /* ISNULL */
1298 case 73: /* NOTNULL */
1299 case 74: /* DIFF */
1300 case 75: /* EQ */
1301 case 76: /* BETWEEN */
1302 case 77: /* GT */
1303 case 78: /* LEQ */
1304 case 79: /* LT */
1305 case 80: /* GEQ */
1306 case 81: /* REGEXP */
1307 case 82: /* REGEXP_CI */
1308 case 83: /* NOT_REGEXP */
1309 case 84: /* NOT_REGEXP_CI */
1310 case 85: /* SIMILAR */
1311 case 86: /* ESCAPE */
1312 case 87: /* BITAND */
1313 case 88: /* BITOR */
1314 case 89: /* LSHIFT */
1315 case 90: /* RSHIFT */
1316 case 91: /* PLUS */
1317 case 92: /* MINUS */
1318 case 93: /* STAR */
1319 case 94: /* SLASH */
1320 case 95: /* REM */
1321 case 96: /* CONCAT */
1322 case 97: /* COLLATE */
1323 case 98: /* UMINUS */
1324 case 99: /* UPLUS */
1325 case 100: /* BITNOT */
1326 case 101: /* LP */
1327 case 102: /* RP */
1328 case 103: /* JOIN */
1329 case 104: /* INNER */
1330 case 105: /* NATURAL */
1331 case 106: /* LEFT */
1332 case 107: /* RIGHT */
1333 case 108: /* FULL */
1334 case 109: /* CROSS */
1335 case 110: /* UNION */
1336 case 111: /* EXCEPT */
1337 case 112: /* INTERSECT */
1338 case 113: /* PGCAST */
1339 case 114: /* ILLEGAL */
1340 case 115: /* SQLCOMMENT */
1341 case 116: /* SEMI */
1342 case 117: /* END_OF_FILE */
1343 case 118: /* TRANSACTION */
1344 case 119: /* STRING */
1345 case 120: /* COMMA */
1346 case 121: /* INTEGER */
1347 case 122: /* TO */
1348 case 123: /* INSERT */
1349 case 124: /* INTO */
1350 case 125: /* VALUES */
1351 case 126: /* DELETE */
1352 case 127: /* FROM */
1353 case 128: /* WHERE */
1354 case 129: /* UPDATE */
1355 case 130: /* SET */
1356 case 131: /* ALL */
1357 case 132: /* SELECT */
1358 case 133: /* LIMIT */
1359 case 134: /* ORDER */
1360 case 135: /* BY */
1361 case 136: /* HAVING */
1362 case 137: /* GROUP */
1363 case 138: /* USING */
1364 case 139: /* ON */
1365 case 140: /* OUTER */
1366 case 141: /* DOT */
1367 case 142: /* AS */
1368 case 143: /* DISTINCT */
1369 case 144: /* CASE */
1370 case 145: /* WHEN */
1371 case 146: /* THEN */
1372 case 147: /* ELSE */
1373 case 148: /* NULL */
1374 case 149: /* FLOAT */
1375 case 150: /* UNSPECVAL */
1376 case 151: /* LSBRACKET */
1377 case 152: /* RSBRACKET */
1378 case 153: /* SIMPLEPARAM */
1379 case 154: /* PNAME */
1380 case 155: /* PDESCR */
1381 case 156: /* PTYPE */
1382 case 157: /* PNULLOK */
1383 case 158: /* TEXTUAL */
1384 {
1385 #line 9 "./parser.y"
1386 if ((yypminor->yy0)) {
1387 #ifdef GDA_DEBUG_NO
1388 gchar *str = gda_sql_value_stringify ((yypminor->yy0));
1389 g_print ("___ token destructor /%s/\n", str)
1390 g_free (str);
1391 #endif
1392 g_value_unset ((yypminor->yy0)); g_free ((yypminor->yy0));}
1393 #line 1394 "parser.c"
1394 }
1395 break;
1396 case 160: /* stmt */
1397 {
1398 #line 278 "./parser.y"
1399 g_print ("Statement destroyed by parser: %p\n", (yypminor->yy252)); gda_sql_statement_free ((yypminor->yy252));
1400 #line 1401 "parser.c"
1401 }
1402 break;
1403 case 161: /* cmd */
1404 case 163: /* compound */
1405 case 180: /* selectcmd */
1406 {
1407 #line 301 "./parser.y"
1408 gda_sql_statement_free ((yypminor->yy252));
1409 #line 1410 "parser.c"
1410 }
1411 break;
1412 case 173: /* inscollist_opt */
1413 case 176: /* inscollist */
1414 case 196: /* using_opt */
1415 {
1416 #line 478 "./parser.y"
1417 if ((yypminor->yy105)) {g_slist_foreach ((yypminor->yy105), (GFunc) gda_sql_field_free, NULL); g_slist_free ((yypminor->yy105));}
1418 #line 1419 "parser.c"
1419 }
1420 break;
1421 case 174: /* rexprlist */
1422 case 191: /* rnexprlist */
1423 {
1424 #line 764 "./parser.y"
1425 if ((yypminor->yy33)) {g_slist_foreach ((yypminor->yy33), (GFunc) gda_sql_expr_free, NULL); g_slist_free ((yypminor->yy33));}
1426 #line 1427 "parser.c"
1427 }
1428 break;
1429 case 175: /* ins_extra_values */
1430 {
1431 #line 467 "./parser.y"
1432 GSList *list;
1433 for (list = (yypminor->yy105); list; list = list->next) {
1434 g_slist_foreach ((GSList*) list->data, (GFunc) gda_sql_field_free, NULL);
1435 g_slist_free ((GSList*) list->data);
1436 }
1437 g_slist_free ((yypminor->yy105));
1438
1439 #line 1440 "parser.c"
1440 }
1441 break;
1442 case 177: /* where_opt */
1443 case 178: /* expr */
1444 case 186: /* having_opt */
1445 case 195: /* on_cond */
1446 case 202: /* pvalue */
1447 {
1448 #line 500 "./parser.y"
1449 gda_sql_expr_free ((yypminor->yy302));
1450 #line 1451 "parser.c"
1451 }
1452 break;
1453 case 179: /* setlist */
1454 {
1455 #line 520 "./parser.y"
1456 GSList *list;
1457 for (list = (yypminor->yy105); list; list = list->next) {
1458 UpdateSet *set = (UpdateSet*) list->data;
1459 g_value_reset (set->fname); g_free (set->fname);
1460 gda_sql_expr_free (set->expr);
1461 g_free (set);
1462 }
1463 g_slist_free ((yypminor->yy105));
1464
1465 #line 1466 "parser.c"
1466 }
1467 break;
1468 case 182: /* distinct */
1469 {
1470 #line 750 "./parser.y"
1471 if ((yypminor->yy249)) {if ((yypminor->yy249)->expr) gda_sql_expr_free ((yypminor->yy249)->expr); g_free ((yypminor->yy249));}
1472 #line 1473 "parser.c"
1473 }
1474 break;
1475 case 183: /* selcollist */
1476 case 199: /* sclp */
1477 {
1478 #line 707 "./parser.y"
1479 g_slist_foreach ((yypminor->yy33), (GFunc) gda_sql_select_field_free, NULL); g_slist_free ((yypminor->yy33));
1480 #line 1481 "parser.c"
1481 }
1482 break;
1483 case 184: /* from */
1484 case 192: /* seltablist */
1485 case 193: /* stl_prefix */
1486 {
1487 #line 633 "./parser.y"
1488 gda_sql_select_from_free ((yypminor->yy259));
1489 #line 1490 "parser.c"
1490 }
1491 break;
1492 case 185: /* groupby_opt */
1493 {
1494 #line 628 "./parser.y"
1495 if ((yypminor->yy105)) {g_slist_foreach ((yypminor->yy105), (GFunc) gda_sql_expr_free, NULL); g_slist_free ((yypminor->yy105));}
1496 #line 1497 "parser.c"
1497 }
1498 break;
1499 case 187: /* orderby_opt */
1500 case 189: /* sortlist */
1501 {
1502 #line 597 "./parser.y"
1503 if ((yypminor->yy33)) {g_slist_foreach ((yypminor->yy33), (GFunc) gda_sql_select_order_free, NULL); g_slist_free ((yypminor->yy33));}
1504 #line 1505 "parser.c"
1505 }
1506 break;
1507 case 188: /* limit_opt */
1508 {
1509 #line 590 "./parser.y"
1510 gda_sql_expr_free ((yypminor->yy408).count); gda_sql_expr_free ((yypminor->yy408).offset);
1511 #line 1512 "parser.c"
1512 }
1513 break;
1514 case 194: /* seltarget */
1515 {
1516 #line 692 "./parser.y"
1517 gda_sql_select_target_free ((yypminor->yy414));
1518 #line 1519 "parser.c"
1519 }
1520 break;
1521 case 204: /* case_operand */
1522 case 206: /* case_else */
1523 {
1524 #line 929 "./parser.y"
1525 gda_sql_expr_free ((yypminor->yy354));
1526 #line 1527 "parser.c"
1527 }
1528 break;
1529 case 205: /* case_exprlist */
1530 {
1531 #line 934 "./parser.y"
1532 g_slist_foreach ((yypminor->yy51).when_list, (GFunc) gda_sql_expr_free, NULL); g_slist_free ((yypminor->yy51).when_list);
1533 g_slist_foreach ((yypminor->yy51).then_list, (GFunc) gda_sql_expr_free, NULL); g_slist_free ((yypminor->yy51).then_list);
1534 #line 1535 "parser.c"
1535 }
1536 break;
1537 case 207: /* paramspec */
1538 {
1539 #line 972 "./parser.y"
1540 gda_sql_param_spec_free ((yypminor->yy303));
1541 #line 1542 "parser.c"
1542 }
1543 break;
1544 default: break; /* If no destructor action specified: do nothing */
1545 }
1546 }
1547
1548 /*
1549 ** Pop the parser's stack once.
1550 **
1551 ** If there is a destructor routine associated with the token which
1552 ** is popped from the stack, then call it.
1553 **
1554 ** Return the major token number for the symbol popped.
1555 */
yy_pop_parser_stack(yyParser * pParser)1556 static int yy_pop_parser_stack(yyParser *pParser){
1557 YYCODETYPE yymajor;
1558 yyStackEntry *yytos;
1559
1560 if( pParser->yyidx<0 ) return 0;
1561 yytos = &pParser->yystack[pParser->yyidx];
1562 #ifndef NDEBUG
1563 if( yyTraceFILE && pParser->yyidx>=0 ){
1564 fprintf(yyTraceFILE,"%sPopping %s\n",
1565 yyTracePrompt,
1566 yyTokenName[yytos->major]);
1567 }
1568 #endif
1569 yymajor = yytos->major;
1570 yy_destructor(pParser, yymajor, &yytos->minor);
1571 pParser->yyidx--;
1572 return yymajor;
1573 }
1574
1575 /*
1576 ** Deallocate and destroy a parser. Destructors are all called for
1577 ** all stack elements before shutting the parser down.
1578 **
1579 ** Inputs:
1580 ** <ul>
1581 ** <li> A pointer to the parser. This should be a pointer
1582 ** obtained from gda_lemon_firebird_parserAlloc.
1583 ** <li> A pointer to a function used to reclaim memory obtained
1584 ** from malloc.
1585 ** </ul>
1586 */
gda_lemon_firebird_parserFree(void * p,void (* freeProc)(void *))1587 void gda_lemon_firebird_parserFree(
1588 void *p, /* The parser to be deleted */
1589 void (*freeProc)(void*) /* Function used to reclaim memory */
1590 ){
1591 yyParser *pParser = (yyParser*)p;
1592 if( pParser==0 ) return;
1593 while( pParser->yyidx>=0 ) yy_pop_parser_stack(pParser);
1594 #if YYSTACKDEPTH<=0
1595 free(pParser->yystack);
1596 #endif
1597 (*freeProc)((void*)pParser);
1598 }
1599
1600 /*
1601 ** Return the peak depth of the stack for a parser.
1602 */
1603 #ifdef YYTRACKMAXSTACKDEPTH
gda_lemon_firebird_parserStackPeak(void * p)1604 int gda_lemon_firebird_parserStackPeak(void *p){
1605 yyParser *pParser = (yyParser*)p;
1606 return pParser->yyidxMax;
1607 }
1608 #endif
1609
1610 /*
1611 ** Find the appropriate action for a parser given the terminal
1612 ** look-ahead token iLookAhead.
1613 **
1614 ** If the look-ahead token is YYNOCODE, then check to see if the action is
1615 ** independent of the look-ahead. If it is, return the action, otherwise
1616 ** return YY_NO_ACTION.
1617 */
yy_find_shift_action(yyParser * pParser,YYCODETYPE iLookAhead)1618 static int yy_find_shift_action(
1619 yyParser *pParser, /* The parser */
1620 YYCODETYPE iLookAhead /* The look-ahead token */
1621 ){
1622 int i;
1623 int stateno = pParser->yystack[pParser->yyidx].stateno;
1624
1625 if( stateno>YY_SHIFT_COUNT
1626 || (i = yy_shift_ofst[stateno])==YY_SHIFT_USE_DFLT ){
1627 return yy_default[stateno];
1628 }
1629 assert( iLookAhead!=YYNOCODE );
1630 i += iLookAhead;
1631 if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){
1632 if( iLookAhead>0 ){
1633 #ifdef YYFALLBACK
1634 YYCODETYPE iFallback; /* Fallback token */
1635 if( iLookAhead<sizeof(yyFallback)/sizeof(yyFallback[0])
1636 && (iFallback = yyFallback[iLookAhead])!=0 ){
1637 #ifndef NDEBUG
1638 if( yyTraceFILE ){
1639 fprintf(yyTraceFILE, "%sFALLBACK %s => %s\n",
1640 yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]);
1641 }
1642 #endif
1643 return yy_find_shift_action(pParser, iFallback);
1644 }
1645 #endif
1646 #ifdef YYWILDCARD
1647 {
1648 int j = i - iLookAhead + YYWILDCARD;
1649 if(
1650 #if YY_SHIFT_MIN+YYWILDCARD<0
1651 j>=0 &&
1652 #endif
1653 #if YY_SHIFT_MAX+YYWILDCARD>=YY_ACTTAB_COUNT
1654 j<YY_ACTTAB_COUNT &&
1655 #endif
1656 yy_lookahead[j]==YYWILDCARD
1657 ){
1658 #ifndef NDEBUG
1659 if( yyTraceFILE ){
1660 fprintf(yyTraceFILE, "%sWILDCARD %s => %s\n",
1661 yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[YYWILDCARD]);
1662 }
1663 #endif /* NDEBUG */
1664 return yy_action[j];
1665 }
1666 }
1667 #endif /* YYWILDCARD */
1668 }
1669 return yy_default[stateno];
1670 }else{
1671 return yy_action[i];
1672 }
1673 }
1674
1675 /*
1676 ** Find the appropriate action for a parser given the non-terminal
1677 ** look-ahead token iLookAhead.
1678 **
1679 ** If the look-ahead token is YYNOCODE, then check to see if the action is
1680 ** independent of the look-ahead. If it is, return the action, otherwise
1681 ** return YY_NO_ACTION.
1682 */
yy_find_reduce_action(int stateno,YYCODETYPE iLookAhead)1683 static int yy_find_reduce_action(
1684 int stateno, /* Current state number */
1685 YYCODETYPE iLookAhead /* The look-ahead token */
1686 ){
1687 int i;
1688 #ifdef YYERRORSYMBOL
1689 if( stateno>YY_REDUCE_COUNT ){
1690 return yy_default[stateno];
1691 }
1692 #else
1693 assert( stateno<=YY_REDUCE_COUNT );
1694 #endif
1695 i = yy_reduce_ofst[stateno];
1696 assert( i!=YY_REDUCE_USE_DFLT );
1697 assert( iLookAhead!=YYNOCODE );
1698 i += iLookAhead;
1699 #ifdef YYERRORSYMBOL
1700 if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){
1701 return yy_default[stateno];
1702 }
1703 #else
1704 assert( i>=0 && i<YY_ACTTAB_COUNT );
1705 assert( yy_lookahead[i]==iLookAhead );
1706 #endif
1707 return yy_action[i];
1708 }
1709
1710 /*
1711 ** The following routine is called if the stack overflows.
1712 */
yyStackOverflow(yyParser * yypParser,YYMINORTYPE * yypMinor)1713 static void yyStackOverflow(yyParser *yypParser, YYMINORTYPE *yypMinor){
1714 gda_lemon_firebird_parserARG_FETCH;
1715 yypParser->yyidx--;
1716 #ifndef NDEBUG
1717 if( yyTraceFILE ){
1718 fprintf(yyTraceFILE,"%sStack Overflow!\n",yyTracePrompt);
1719 }
1720 #endif
1721 while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
1722 /* Here code is inserted which will execute if the parser
1723 ** stack every overflows */
1724 #line 25 "./parser.y"
1725
1726 gda_sql_parser_set_overflow_error (pdata->parser);
1727 #line 1728 "parser.c"
1728 gda_lemon_firebird_parserARG_STORE; /* Suppress warning about unused %extra_argument var */
1729 }
1730
1731 /*
1732 ** Perform a shift action.
1733 */
yy_shift(yyParser * yypParser,int yyNewState,int yyMajor,YYMINORTYPE * yypMinor)1734 static void yy_shift(
1735 yyParser *yypParser, /* The parser to be shifted */
1736 int yyNewState, /* The new state to shift in */
1737 int yyMajor, /* The major token to shift in */
1738 YYMINORTYPE *yypMinor /* Pointer to the minor token to shift in */
1739 ){
1740 yyStackEntry *yytos;
1741 yypParser->yyidx++;
1742 #ifdef YYTRACKMAXSTACKDEPTH
1743 if( yypParser->yyidx>yypParser->yyidxMax ){
1744 yypParser->yyidxMax = yypParser->yyidx;
1745 }
1746 #endif
1747 #if YYSTACKDEPTH>0
1748 if( yypParser->yyidx>=YYSTACKDEPTH ){
1749 yyStackOverflow(yypParser, yypMinor);
1750 return;
1751 }
1752 #else
1753 if( yypParser->yyidx>=yypParser->yystksz ){
1754 yyGrowStack(yypParser);
1755 if( yypParser->yyidx>=yypParser->yystksz ){
1756 yyStackOverflow(yypParser, yypMinor);
1757 return;
1758 }
1759 }
1760 #endif
1761 yytos = &yypParser->yystack[yypParser->yyidx];
1762 yytos->stateno = (YYACTIONTYPE)yyNewState;
1763 yytos->major = (YYCODETYPE)yyMajor;
1764 yytos->minor = *yypMinor;
1765 #ifndef NDEBUG
1766 if( yyTraceFILE && yypParser->yyidx>0 ){
1767 int i;
1768 fprintf(yyTraceFILE,"%sShift %d\n",yyTracePrompt,yyNewState);
1769 fprintf(yyTraceFILE,"%sStack:",yyTracePrompt);
1770 for(i=1; i<=yypParser->yyidx; i++)
1771 fprintf(yyTraceFILE," %s",yyTokenName[yypParser->yystack[i].major]);
1772 fprintf(yyTraceFILE,"\n");
1773 }
1774 #endif
1775 }
1776
1777 /* The following table contains information about every rule that
1778 ** is used during the reduce.
1779 */
1780 static const struct {
1781 YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */
1782 unsigned char nrhs; /* Number of right-hand side symbols in the rule */
1783 } yyRuleInfo[] = {
1784 { 160, 2 },
1785 { 160, 2 },
1786 { 161, 3 },
1787 { 163, 3 },
1788 { 162, 1 },
1789 { 162, 1 },
1790 { 161, 1 },
1791 { 161, 3 },
1792 { 161, 4 },
1793 { 161, 3 },
1794 { 161, 2 },
1795 { 161, 3 },
1796 { 161, 3 },
1797 { 161, 5 },
1798 { 161, 5 },
1799 { 161, 4 },
1800 { 161, 4 },
1801 { 161, 3 },
1802 { 161, 2 },
1803 { 161, 3 },
1804 { 161, 3 },
1805 { 161, 5 },
1806 { 161, 3 },
1807 { 161, 4 },
1808 { 161, 2 },
1809 { 161, 3 },
1810 { 169, 2 },
1811 { 169, 2 },
1812 { 169, 2 },
1813 { 169, 2 },
1814 { 169, 3 },
1815 { 169, 3 },
1816 { 169, 3 },
1817 { 169, 3 },
1818 { 168, 0 },
1819 { 168, 1 },
1820 { 167, 0 },
1821 { 167, 1 },
1822 { 166, 3 },
1823 { 166, 4 },
1824 { 166, 4 },
1825 { 166, 4 },
1826 { 164, 0 },
1827 { 164, 1 },
1828 { 165, 1 },
1829 { 165, 1 },
1830 { 165, 1 },
1831 { 165, 2 },
1832 { 165, 2 },
1833 { 161, 2 },
1834 { 161, 3 },
1835 { 161, 2 },
1836 { 161, 4 },
1837 { 161, 5 },
1838 { 161, 9 },
1839 { 161, 10 },
1840 { 161, 6 },
1841 { 171, 0 },
1842 { 171, 2 },
1843 { 175, 5 },
1844 { 175, 4 },
1845 { 173, 0 },
1846 { 173, 3 },
1847 { 176, 3 },
1848 { 176, 1 },
1849 { 161, 4 },
1850 { 177, 0 },
1851 { 177, 2 },
1852 { 161, 6 },
1853 { 179, 5 },
1854 { 179, 3 },
1855 { 163, 1 },
1856 { 163, 4 },
1857 { 163, 4 },
1858 { 163, 4 },
1859 { 181, 0 },
1860 { 181, 1 },
1861 { 180, 9 },
1862 { 188, 0 },
1863 { 188, 2 },
1864 { 188, 4 },
1865 { 188, 4 },
1866 { 187, 0 },
1867 { 187, 3 },
1868 { 189, 4 },
1869 { 189, 2 },
1870 { 190, 1 },
1871 { 190, 1 },
1872 { 190, 0 },
1873 { 186, 0 },
1874 { 186, 2 },
1875 { 185, 0 },
1876 { 185, 3 },
1877 { 184, 0 },
1878 { 184, 2 },
1879 { 192, 4 },
1880 { 196, 4 },
1881 { 196, 0 },
1882 { 193, 0 },
1883 { 193, 2 },
1884 { 195, 2 },
1885 { 195, 0 },
1886 { 197, 1 },
1887 { 197, 1 },
1888 { 197, 2 },
1889 { 197, 2 },
1890 { 197, 2 },
1891 { 197, 2 },
1892 { 197, 3 },
1893 { 197, 2 },
1894 { 197, 3 },
1895 { 197, 2 },
1896 { 197, 3 },
1897 { 194, 2 },
1898 { 194, 2 },
1899 { 194, 4 },
1900 { 199, 2 },
1901 { 199, 0 },
1902 { 183, 3 },
1903 { 183, 2 },
1904 { 200, 1 },
1905 { 200, 3 },
1906 { 200, 5 },
1907 { 198, 2 },
1908 { 198, 2 },
1909 { 198, 0 },
1910 { 182, 0 },
1911 { 182, 1 },
1912 { 182, 1 },
1913 { 182, 3 },
1914 { 191, 3 },
1915 { 191, 1 },
1916 { 174, 0 },
1917 { 174, 3 },
1918 { 174, 1 },
1919 { 178, 1 },
1920 { 178, 1 },
1921 { 178, 3 },
1922 { 178, 1 },
1923 { 178, 4 },
1924 { 178, 4 },
1925 { 178, 4 },
1926 { 178, 6 },
1927 { 178, 3 },
1928 { 178, 3 },
1929 { 178, 3 },
1930 { 178, 3 },
1931 { 178, 3 },
1932 { 178, 2 },
1933 { 178, 2 },
1934 { 178, 3 },
1935 { 178, 3 },
1936 { 178, 3 },
1937 { 178, 3 },
1938 { 178, 3 },
1939 { 178, 3 },
1940 { 178, 3 },
1941 { 178, 3 },
1942 { 178, 5 },
1943 { 178, 6 },
1944 { 178, 2 },
1945 { 178, 2 },
1946 { 178, 2 },
1947 { 178, 3 },
1948 { 178, 3 },
1949 { 178, 5 },
1950 { 178, 5 },
1951 { 178, 6 },
1952 { 178, 6 },
1953 { 178, 5 },
1954 { 204, 1 },
1955 { 204, 0 },
1956 { 205, 5 },
1957 { 205, 4 },
1958 { 206, 2 },
1959 { 206, 0 },
1960 { 203, 1 },
1961 { 203, 2 },
1962 { 201, 1 },
1963 { 201, 1 },
1964 { 201, 1 },
1965 { 201, 1 },
1966 { 202, 4 },
1967 { 202, 4 },
1968 { 202, 1 },
1969 { 207, 0 },
1970 { 207, 2 },
1971 { 207, 2 },
1972 { 207, 2 },
1973 { 207, 2 },
1974 { 170, 1 },
1975 { 170, 1 },
1976 { 170, 1 },
1977 { 172, 1 },
1978 { 172, 3 },
1979 { 172, 5 },
1980 };
1981
1982 static void yy_accept(yyParser*); /* Forward Declaration */
1983
1984 /*
1985 ** Perform a reduce action and the shift that must immediately
1986 ** follow the reduce.
1987 */
yy_reduce(yyParser * yypParser,int yyruleno)1988 static void yy_reduce(
1989 yyParser *yypParser, /* The parser */
1990 int yyruleno /* Number of the rule by which to reduce */
1991 ){
1992 int yygoto; /* The next state */
1993 int yyact; /* The next action */
1994 YYMINORTYPE yygotominor; /* The LHS of the rule reduced */
1995 yyStackEntry *yymsp; /* The top of the parser's stack */
1996 int yysize; /* Amount to pop the stack */
1997 gda_lemon_firebird_parserARG_FETCH;
1998 yymsp = &yypParser->yystack[yypParser->yyidx];
1999 #ifndef NDEBUG
2000 if( yyTraceFILE && yyruleno>=0
2001 && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){
2002 fprintf(yyTraceFILE, "%sReduce [%s].\n", yyTracePrompt,
2003 yyRuleName[yyruleno]);
2004 }
2005 #endif /* NDEBUG */
2006
2007 /* Silence complaints from purify about yygotominor being uninitialized
2008 ** in some cases when it is copied into the stack after the following
2009 ** switch. yygotominor is uninitialized when a rule reduces that does
2010 ** not set the value of its left-hand side nonterminal. Leaving the
2011 ** value of the nonterminal uninitialized is utterly harmless as long
2012 ** as the value is never used. So really the only thing this code
2013 ** accomplishes is to quieten purify.
2014 **
2015 ** 2007-01-16: The wireshark project (www.wireshark.org) reports that
2016 ** without this code, their parser segfaults. I'm not sure what there
2017 ** parser is doing to make this happen. This is the second bug report
2018 ** from wireshark this week. Clearly they are stressing Lemon in ways
2019 ** that it has not been previously stressed... (SQLite ticket #2172)
2020 */
2021 /*memset(&yygotominor, 0, sizeof(yygotominor));*/
2022 yygotominor = yyzerominor;
2023
2024
2025 switch( yyruleno ){
2026 /* Beginning here are the reduction cases. A typical example
2027 ** follows:
2028 ** case 0:
2029 ** #line <lineno> <grammarfile>
2030 ** { ... } // User supplied code
2031 ** #line <lineno> <thisfile>
2032 ** break;
2033 */
2034 case 0: /* stmt ::= cmd eos */
2035 #line 279 "./parser.y"
2036 {pdata->parsed_statement = yymsp[-1].minor.yy252;}
2037 #line 2038 "parser.c"
2038 break;
2039 case 1: /* stmt ::= compound eos */
2040 #line 280 "./parser.y"
2041 {
2042 GdaSqlStatementCompound *scompound = (GdaSqlStatementCompound *) yymsp[-1].minor.yy252->contents;
2043 if (scompound->stmt_list->next)
2044 /* real compound (multiple statements) */
2045 pdata->parsed_statement = yymsp[-1].minor.yy252;
2046 else {
2047 /* false compound (only 1 select) */
2048 pdata->parsed_statement = (GdaSqlStatement*) scompound->stmt_list->data;
2049 GDA_SQL_ANY_PART (pdata->parsed_statement->contents)->parent = NULL;
2050 g_slist_free (scompound->stmt_list);
2051 scompound->stmt_list = NULL;
2052 gda_sql_statement_free (yymsp[-1].minor.yy252);
2053 }
2054 }
2055 #line 2056 "parser.c"
2056 break;
2057 case 2: /* cmd ::= LP cmd RP */
2058 case 3: /* compound ::= LP compound RP */ yytestcase(yyruleno==3);
2059 #line 294 "./parser.y"
2060 {yygotominor.yy252 = yymsp[-1].minor.yy252; yy_destructor(yypParser,101,&yymsp[-2].minor);
2061 yy_destructor(yypParser,102,&yymsp[0].minor);
2062 }
2063 #line 2064 "parser.c"
2064 break;
2065 case 4: /* eos ::= SEMI */
2066 #line 297 "./parser.y"
2067 {
2068 yy_destructor(yypParser,116,&yymsp[0].minor);
2069 }
2070 #line 2071 "parser.c"
2071 break;
2072 case 5: /* eos ::= END_OF_FILE */
2073 #line 298 "./parser.y"
2074 {
2075 yy_destructor(yypParser,117,&yymsp[0].minor);
2076 }
2077 #line 2078 "parser.c"
2078 break;
2079 case 6: /* cmd ::= BEGIN */
2080 #line 306 "./parser.y"
2081 {yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_BEGIN); yy_destructor(yypParser,8,&yymsp[0].minor);
2082 }
2083 #line 2084 "parser.c"
2084 break;
2085 case 7: /* cmd ::= BEGIN TRANSACTION nm_opt */
2086 #line 307 "./parser.y"
2087 {yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_BEGIN);
2088 gda_sql_statement_trans_take_name (yygotominor.yy252, yymsp[0].minor.yy0);
2089 yy_destructor(yypParser,8,&yymsp[-2].minor);
2090 yy_destructor(yypParser,118,&yymsp[-1].minor);
2091 }
2092 #line 2093 "parser.c"
2093 break;
2094 case 8: /* cmd ::= BEGIN transtype TRANSACTION nm_opt */
2095 #line 311 "./parser.y"
2096 {yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_BEGIN);
2097 gda_sql_statement_trans_take_mode (yygotominor.yy252, yymsp[-2].minor.yy0);
2098 gda_sql_statement_trans_take_name (yygotominor.yy252, yymsp[0].minor.yy0);
2099 yy_destructor(yypParser,8,&yymsp[-3].minor);
2100 yy_destructor(yypParser,118,&yymsp[-1].minor);
2101 }
2102 #line 2103 "parser.c"
2103 break;
2104 case 9: /* cmd ::= BEGIN transtype nm_opt */
2105 #line 316 "./parser.y"
2106 {yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_BEGIN);
2107 gda_sql_statement_trans_take_mode (yygotominor.yy252, yymsp[-1].minor.yy0);
2108 gda_sql_statement_trans_take_name (yygotominor.yy252, yymsp[0].minor.yy0);
2109 yy_destructor(yypParser,8,&yymsp[-2].minor);
2110 }
2111 #line 2112 "parser.c"
2112 break;
2113 case 10: /* cmd ::= BEGIN transilev */
2114 #line 321 "./parser.y"
2115 {yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_BEGIN);
2116 gda_sql_statement_trans_set_isol_level (yygotominor.yy252, yymsp[0].minor.yy197);
2117 yy_destructor(yypParser,8,&yymsp[-1].minor);
2118 }
2119 #line 2120 "parser.c"
2120 break;
2121 case 11: /* cmd ::= BEGIN TRANSACTION transilev */
2122 #line 325 "./parser.y"
2123 {yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_BEGIN);
2124 gda_sql_statement_trans_set_isol_level (yygotominor.yy252, yymsp[0].minor.yy197);
2125 yy_destructor(yypParser,8,&yymsp[-2].minor);
2126 yy_destructor(yypParser,118,&yymsp[-1].minor);
2127 }
2128 #line 2129 "parser.c"
2129 break;
2130 case 12: /* cmd ::= BEGIN TRANSACTION transtype */
2131 #line 329 "./parser.y"
2132 {yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_BEGIN);
2133 gda_sql_statement_trans_take_mode (yygotominor.yy252, yymsp[0].minor.yy0);
2134 yy_destructor(yypParser,8,&yymsp[-2].minor);
2135 yy_destructor(yypParser,118,&yymsp[-1].minor);
2136 }
2137 #line 2138 "parser.c"
2138 break;
2139 case 13: /* cmd ::= BEGIN TRANSACTION transtype opt_comma transilev */
2140 #line 333 "./parser.y"
2141 {yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_BEGIN);
2142 gda_sql_statement_trans_take_mode (yygotominor.yy252, yymsp[-2].minor.yy0);
2143 gda_sql_statement_trans_set_isol_level (yygotominor.yy252, yymsp[0].minor.yy197);
2144 yy_destructor(yypParser,8,&yymsp[-4].minor);
2145 yy_destructor(yypParser,118,&yymsp[-3].minor);
2146 }
2147 #line 2148 "parser.c"
2148 break;
2149 case 14: /* cmd ::= BEGIN TRANSACTION transilev opt_comma transtype */
2150 #line 338 "./parser.y"
2151 {yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_BEGIN);
2152 gda_sql_statement_trans_take_mode (yygotominor.yy252, yymsp[0].minor.yy0);
2153 gda_sql_statement_trans_set_isol_level (yygotominor.yy252, yymsp[-2].minor.yy197);
2154 yy_destructor(yypParser,8,&yymsp[-4].minor);
2155 yy_destructor(yypParser,118,&yymsp[-3].minor);
2156 }
2157 #line 2158 "parser.c"
2158 break;
2159 case 15: /* cmd ::= BEGIN transtype opt_comma transilev */
2160 #line 343 "./parser.y"
2161 {yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_BEGIN);
2162 gda_sql_statement_trans_take_mode (yygotominor.yy252, yymsp[-2].minor.yy0);
2163 gda_sql_statement_trans_set_isol_level (yygotominor.yy252, yymsp[0].minor.yy197);
2164 yy_destructor(yypParser,8,&yymsp[-3].minor);
2165 }
2166 #line 2167 "parser.c"
2167 break;
2168 case 16: /* cmd ::= BEGIN transilev opt_comma transtype */
2169 #line 348 "./parser.y"
2170 {yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_BEGIN);
2171 gda_sql_statement_trans_take_mode (yygotominor.yy252, yymsp[0].minor.yy0);
2172 gda_sql_statement_trans_set_isol_level (yygotominor.yy252, yymsp[-2].minor.yy197);
2173 yy_destructor(yypParser,8,&yymsp[-3].minor);
2174 }
2175 #line 2176 "parser.c"
2176 break;
2177 case 17: /* cmd ::= END trans_opt_kw nm_opt */
2178 #line 353 "./parser.y"
2179 {yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_COMMIT);
2180 gda_sql_statement_trans_take_name (yygotominor.yy252, yymsp[0].minor.yy0);
2181 yy_destructor(yypParser,17,&yymsp[-2].minor);
2182 }
2183 #line 2184 "parser.c"
2184 break;
2185 case 18: /* cmd ::= COMMIT nm_opt */
2186 #line 357 "./parser.y"
2187 {yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_COMMIT);
2188 gda_sql_statement_trans_take_name (yygotominor.yy252, yymsp[0].minor.yy0);
2189 yy_destructor(yypParser,48,&yymsp[-1].minor);
2190 }
2191 #line 2192 "parser.c"
2192 break;
2193 case 19: /* cmd ::= COMMIT TRANSACTION nm_opt */
2194 #line 361 "./parser.y"
2195 {yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_COMMIT);
2196 gda_sql_statement_trans_take_name (yygotominor.yy252, yymsp[0].minor.yy0);
2197 yy_destructor(yypParser,48,&yymsp[-2].minor);
2198 yy_destructor(yypParser,118,&yymsp[-1].minor);
2199 }
2200 #line 2201 "parser.c"
2201 break;
2202 case 20: /* cmd ::= COMMIT FORCE STRING */
2203 #line 365 "./parser.y"
2204 {yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_COMMIT); yy_destructor(yypParser,48,&yymsp[-2].minor);
2205 yy_destructor(yypParser,62,&yymsp[-1].minor);
2206 yy_destructor(yypParser,119,&yymsp[0].minor);
2207 }
2208 #line 2209 "parser.c"
2209 break;
2210 case 21: /* cmd ::= COMMIT FORCE STRING COMMA INTEGER */
2211 #line 366 "./parser.y"
2212 {yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_COMMIT); yy_destructor(yypParser,48,&yymsp[-4].minor);
2213 yy_destructor(yypParser,62,&yymsp[-3].minor);
2214 yy_destructor(yypParser,119,&yymsp[-2].minor);
2215 yy_destructor(yypParser,120,&yymsp[-1].minor);
2216 yy_destructor(yypParser,121,&yymsp[0].minor);
2217 }
2218 #line 2219 "parser.c"
2219 break;
2220 case 22: /* cmd ::= COMMIT COMMENT STRING */
2221 #line 367 "./parser.y"
2222 {yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_COMMIT); yy_destructor(yypParser,48,&yymsp[-2].minor);
2223 yy_destructor(yypParser,61,&yymsp[-1].minor);
2224 yy_destructor(yypParser,119,&yymsp[0].minor);
2225 }
2226 #line 2227 "parser.c"
2227 break;
2228 case 23: /* cmd ::= COMMIT COMMENT STRING ora_commit_write */
2229 #line 368 "./parser.y"
2230 {yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_COMMIT); yy_destructor(yypParser,48,&yymsp[-3].minor);
2231 yy_destructor(yypParser,61,&yymsp[-2].minor);
2232 yy_destructor(yypParser,119,&yymsp[-1].minor);
2233 }
2234 #line 2235 "parser.c"
2235 break;
2236 case 24: /* cmd ::= COMMIT ora_commit_write */
2237 #line 369 "./parser.y"
2238 {yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_COMMIT); yy_destructor(yypParser,48,&yymsp[-1].minor);
2239 }
2240 #line 2241 "parser.c"
2241 break;
2242 case 25: /* cmd ::= ROLLBACK trans_opt_kw nm_opt */
2243 #line 371 "./parser.y"
2244 {yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_ROLLBACK);
2245 gda_sql_statement_trans_take_name (yygotominor.yy252, yymsp[0].minor.yy0);
2246 yy_destructor(yypParser,49,&yymsp[-2].minor);
2247 }
2248 #line 2249 "parser.c"
2249 break;
2250 case 26: /* ora_commit_write ::= WRITE IMMEDIATE */
2251 #line 375 "./parser.y"
2252 {
2253 yy_destructor(yypParser,57,&yymsp[-1].minor);
2254 yy_destructor(yypParser,23,&yymsp[0].minor);
2255 }
2256 #line 2257 "parser.c"
2257 break;
2258 case 27: /* ora_commit_write ::= WRITE BATCH */
2259 #line 376 "./parser.y"
2260 {
2261 yy_destructor(yypParser,57,&yymsp[-1].minor);
2262 yy_destructor(yypParser,65,&yymsp[0].minor);
2263 }
2264 #line 2265 "parser.c"
2265 break;
2266 case 28: /* ora_commit_write ::= WRITE WAIT */
2267 #line 377 "./parser.y"
2268 {
2269 yy_destructor(yypParser,57,&yymsp[-1].minor);
2270 yy_destructor(yypParser,63,&yymsp[0].minor);
2271 }
2272 #line 2273 "parser.c"
2273 break;
2274 case 29: /* ora_commit_write ::= WRITE NOWAIT */
2275 #line 378 "./parser.y"
2276 {
2277 yy_destructor(yypParser,57,&yymsp[-1].minor);
2278 yy_destructor(yypParser,64,&yymsp[0].minor);
2279 }
2280 #line 2281 "parser.c"
2281 break;
2282 case 30: /* ora_commit_write ::= WRITE IMMEDIATE WAIT */
2283 #line 379 "./parser.y"
2284 {
2285 yy_destructor(yypParser,57,&yymsp[-2].minor);
2286 yy_destructor(yypParser,23,&yymsp[-1].minor);
2287 yy_destructor(yypParser,63,&yymsp[0].minor);
2288 }
2289 #line 2290 "parser.c"
2290 break;
2291 case 31: /* ora_commit_write ::= WRITE IMMEDIATE NOWAIT */
2292 #line 380 "./parser.y"
2293 {
2294 yy_destructor(yypParser,57,&yymsp[-2].minor);
2295 yy_destructor(yypParser,23,&yymsp[-1].minor);
2296 yy_destructor(yypParser,64,&yymsp[0].minor);
2297 }
2298 #line 2299 "parser.c"
2299 break;
2300 case 32: /* ora_commit_write ::= WRITE BATCH WAIT */
2301 #line 381 "./parser.y"
2302 {
2303 yy_destructor(yypParser,57,&yymsp[-2].minor);
2304 yy_destructor(yypParser,65,&yymsp[-1].minor);
2305 yy_destructor(yypParser,63,&yymsp[0].minor);
2306 }
2307 #line 2308 "parser.c"
2308 break;
2309 case 33: /* ora_commit_write ::= WRITE BATCH NOWAIT */
2310 #line 382 "./parser.y"
2311 {
2312 yy_destructor(yypParser,57,&yymsp[-2].minor);
2313 yy_destructor(yypParser,65,&yymsp[-1].minor);
2314 yy_destructor(yypParser,64,&yymsp[0].minor);
2315 }
2316 #line 2317 "parser.c"
2317 break;
2318 case 35: /* trans_opt_kw ::= TRANSACTION */
2319 #line 385 "./parser.y"
2320 {
2321 yy_destructor(yypParser,118,&yymsp[0].minor);
2322 }
2323 #line 2324 "parser.c"
2324 break;
2325 case 37: /* opt_comma ::= COMMA */
2326 #line 388 "./parser.y"
2327 {
2328 yy_destructor(yypParser,120,&yymsp[0].minor);
2329 }
2330 #line 2331 "parser.c"
2331 break;
2332 case 38: /* transilev ::= ISOLATION LEVEL SERIALIZABLE */
2333 #line 391 "./parser.y"
2334 {yygotominor.yy197 = GDA_TRANSACTION_ISOLATION_SERIALIZABLE; yy_destructor(yypParser,50,&yymsp[-2].minor);
2335 yy_destructor(yypParser,51,&yymsp[-1].minor);
2336 yy_destructor(yypParser,52,&yymsp[0].minor);
2337 }
2338 #line 2339 "parser.c"
2339 break;
2340 case 39: /* transilev ::= ISOLATION LEVEL REPEATABLE READ */
2341 #line 392 "./parser.y"
2342 {yygotominor.yy197 = GDA_TRANSACTION_ISOLATION_REPEATABLE_READ; yy_destructor(yypParser,50,&yymsp[-3].minor);
2343 yy_destructor(yypParser,51,&yymsp[-2].minor);
2344 yy_destructor(yypParser,56,&yymsp[-1].minor);
2345 yy_destructor(yypParser,53,&yymsp[0].minor);
2346 }
2347 #line 2348 "parser.c"
2348 break;
2349 case 40: /* transilev ::= ISOLATION LEVEL READ COMMITTED */
2350 #line 393 "./parser.y"
2351 {yygotominor.yy197 = GDA_TRANSACTION_ISOLATION_READ_COMMITTED; yy_destructor(yypParser,50,&yymsp[-3].minor);
2352 yy_destructor(yypParser,51,&yymsp[-2].minor);
2353 yy_destructor(yypParser,53,&yymsp[-1].minor);
2354 yy_destructor(yypParser,54,&yymsp[0].minor);
2355 }
2356 #line 2357 "parser.c"
2357 break;
2358 case 41: /* transilev ::= ISOLATION LEVEL READ UNCOMMITTED */
2359 #line 394 "./parser.y"
2360 {yygotominor.yy197 = GDA_TRANSACTION_ISOLATION_READ_UNCOMMITTED; yy_destructor(yypParser,50,&yymsp[-3].minor);
2361 yy_destructor(yypParser,51,&yymsp[-2].minor);
2362 yy_destructor(yypParser,53,&yymsp[-1].minor);
2363 yy_destructor(yypParser,55,&yymsp[0].minor);
2364 }
2365 #line 2366 "parser.c"
2366 break;
2367 case 42: /* nm_opt ::= */
2368 case 57: /* opt_on_conflict ::= */ yytestcase(yyruleno==57);
2369 case 125: /* as ::= */ yytestcase(yyruleno==125);
2370 #line 396 "./parser.y"
2371 {yygotominor.yy0 = NULL;}
2372 #line 2373 "parser.c"
2373 break;
2374 case 43: /* nm_opt ::= nm */
2375 case 44: /* transtype ::= DEFERRED */ yytestcase(yyruleno==44);
2376 case 45: /* transtype ::= IMMEDIATE */ yytestcase(yyruleno==45);
2377 case 46: /* transtype ::= EXCLUSIVE */ yytestcase(yyruleno==46);
2378 case 120: /* starname ::= STAR */ yytestcase(yyruleno==120);
2379 case 179: /* value ::= STRING */ yytestcase(yyruleno==179);
2380 case 180: /* value ::= INTEGER */ yytestcase(yyruleno==180);
2381 case 181: /* value ::= FLOAT */ yytestcase(yyruleno==181);
2382 case 190: /* nm ::= JOIN */ yytestcase(yyruleno==190);
2383 case 191: /* nm ::= ID */ yytestcase(yyruleno==191);
2384 case 192: /* nm ::= TEXTUAL */ yytestcase(yyruleno==192);
2385 case 193: /* fullname ::= nm */ yytestcase(yyruleno==193);
2386 #line 397 "./parser.y"
2387 {yygotominor.yy0 = yymsp[0].minor.yy0;}
2388 #line 2389 "parser.c"
2389 break;
2390 case 47: /* transtype ::= READ WRITE */
2391 #line 402 "./parser.y"
2392 {yygotominor.yy0 = g_new0 (GValue, 1);
2393 g_value_init (yygotominor.yy0, G_TYPE_STRING);
2394 g_value_set_string (yygotominor.yy0, "READ_WRITE");
2395 yy_destructor(yypParser,53,&yymsp[-1].minor);
2396 yy_destructor(yypParser,57,&yymsp[0].minor);
2397 }
2398 #line 2399 "parser.c"
2399 break;
2400 case 48: /* transtype ::= READ ONLY */
2401 #line 406 "./parser.y"
2402 {yygotominor.yy0 = g_new0 (GValue, 1);
2403 g_value_init (yygotominor.yy0, G_TYPE_STRING);
2404 g_value_set_string (yygotominor.yy0, "READ_ONLY");
2405 yy_destructor(yypParser,53,&yymsp[-1].minor);
2406 yy_destructor(yypParser,58,&yymsp[0].minor);
2407 }
2408 #line 2409 "parser.c"
2409 break;
2410 case 49: /* cmd ::= SAVEPOINT nm */
2411 #line 414 "./parser.y"
2412 {yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_SAVEPOINT);
2413 gda_sql_statement_trans_take_name (yygotominor.yy252, yymsp[0].minor.yy0);
2414 yy_destructor(yypParser,59,&yymsp[-1].minor);
2415 }
2416 #line 2417 "parser.c"
2417 break;
2418 case 50: /* cmd ::= RELEASE SAVEPOINT nm */
2419 #line 418 "./parser.y"
2420 {yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_DELETE_SAVEPOINT);
2421 gda_sql_statement_trans_take_name (yygotominor.yy252, yymsp[0].minor.yy0);
2422 yy_destructor(yypParser,60,&yymsp[-2].minor);
2423 yy_destructor(yypParser,59,&yymsp[-1].minor);
2424 }
2425 #line 2426 "parser.c"
2426 break;
2427 case 51: /* cmd ::= RELEASE nm */
2428 #line 422 "./parser.y"
2429 {yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_DELETE_SAVEPOINT);
2430 gda_sql_statement_trans_take_name (yygotominor.yy252, yymsp[0].minor.yy0);
2431 yy_destructor(yypParser,60,&yymsp[-1].minor);
2432 }
2433 #line 2434 "parser.c"
2434 break;
2435 case 52: /* cmd ::= ROLLBACK trans_opt_kw TO nm */
2436 #line 426 "./parser.y"
2437 {yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_ROLLBACK_SAVEPOINT);
2438 gda_sql_statement_trans_take_name (yygotominor.yy252, yymsp[0].minor.yy0);
2439 yy_destructor(yypParser,49,&yymsp[-3].minor);
2440 yy_destructor(yypParser,122,&yymsp[-1].minor);
2441 }
2442 #line 2443 "parser.c"
2443 break;
2444 case 53: /* cmd ::= ROLLBACK trans_opt_kw TO SAVEPOINT nm */
2445 #line 430 "./parser.y"
2446 {yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_ROLLBACK_SAVEPOINT);
2447 gda_sql_statement_trans_take_name (yygotominor.yy252, yymsp[0].minor.yy0);
2448 yy_destructor(yypParser,49,&yymsp[-4].minor);
2449 yy_destructor(yypParser,122,&yymsp[-2].minor);
2450 yy_destructor(yypParser,59,&yymsp[-1].minor);
2451 }
2452 #line 2453 "parser.c"
2453 break;
2454 case 54: /* cmd ::= INSERT opt_on_conflict INTO fullname inscollist_opt VALUES LP rexprlist RP */
2455 #line 437 "./parser.y"
2456 {
2457 yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_INSERT);
2458 gda_sql_statement_insert_take_table_name (yygotominor.yy252, yymsp[-5].minor.yy0);
2459 gda_sql_statement_insert_take_fields_list (yygotominor.yy252, yymsp[-4].minor.yy105);
2460 gda_sql_statement_insert_take_1_values_list (yygotominor.yy252, g_slist_reverse (yymsp[-1].minor.yy33));
2461 gda_sql_statement_insert_take_on_conflict (yygotominor.yy252, yymsp[-7].minor.yy0);
2462 yy_destructor(yypParser,123,&yymsp[-8].minor);
2463 yy_destructor(yypParser,124,&yymsp[-6].minor);
2464 yy_destructor(yypParser,125,&yymsp[-3].minor);
2465 yy_destructor(yypParser,101,&yymsp[-2].minor);
2466 yy_destructor(yypParser,102,&yymsp[0].minor);
2467 }
2468 #line 2469 "parser.c"
2469 break;
2470 case 55: /* cmd ::= INSERT opt_on_conflict INTO fullname inscollist_opt VALUES LP rexprlist RP ins_extra_values */
2471 #line 445 "./parser.y"
2472 {
2473 yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_INSERT);
2474 gda_sql_statement_insert_take_table_name (yygotominor.yy252, yymsp[-6].minor.yy0);
2475 gda_sql_statement_insert_take_fields_list (yygotominor.yy252, yymsp[-5].minor.yy105);
2476 gda_sql_statement_insert_take_1_values_list (yygotominor.yy252, g_slist_reverse (yymsp[-2].minor.yy33));
2477 gda_sql_statement_insert_take_extra_values_list (yygotominor.yy252, yymsp[0].minor.yy105);
2478 gda_sql_statement_insert_take_on_conflict (yygotominor.yy252, yymsp[-8].minor.yy0);
2479 yy_destructor(yypParser,123,&yymsp[-9].minor);
2480 yy_destructor(yypParser,124,&yymsp[-7].minor);
2481 yy_destructor(yypParser,125,&yymsp[-4].minor);
2482 yy_destructor(yypParser,101,&yymsp[-3].minor);
2483 yy_destructor(yypParser,102,&yymsp[-1].minor);
2484 }
2485 #line 2486 "parser.c"
2486 break;
2487 case 56: /* cmd ::= INSERT opt_on_conflict INTO fullname inscollist_opt compound */
2488 #line 454 "./parser.y"
2489 {
2490 yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_INSERT);
2491 gda_sql_statement_insert_take_table_name (yygotominor.yy252, yymsp[-2].minor.yy0);
2492 gda_sql_statement_insert_take_fields_list (yygotominor.yy252, yymsp[-1].minor.yy105);
2493 gda_sql_statement_insert_take_select (yygotominor.yy252, yymsp[0].minor.yy252);
2494 gda_sql_statement_insert_take_on_conflict (yygotominor.yy252, yymsp[-4].minor.yy0);
2495 yy_destructor(yypParser,123,&yymsp[-5].minor);
2496 yy_destructor(yypParser,124,&yymsp[-3].minor);
2497 }
2498 #line 2499 "parser.c"
2499 break;
2500 case 58: /* opt_on_conflict ::= OR ID */
2501 #line 464 "./parser.y"
2502 {yygotominor.yy0 = yymsp[0].minor.yy0; yy_destructor(yypParser,66,&yymsp[-1].minor);
2503 }
2504 #line 2505 "parser.c"
2505 break;
2506 case 59: /* ins_extra_values ::= ins_extra_values COMMA LP rexprlist RP */
2507 #line 474 "./parser.y"
2508 {yygotominor.yy105 = g_slist_append (yymsp[-4].minor.yy105, g_slist_reverse (yymsp[-1].minor.yy33)); yy_destructor(yypParser,120,&yymsp[-3].minor);
2509 yy_destructor(yypParser,101,&yymsp[-2].minor);
2510 yy_destructor(yypParser,102,&yymsp[0].minor);
2511 }
2512 #line 2513 "parser.c"
2513 break;
2514 case 60: /* ins_extra_values ::= COMMA LP rexprlist RP */
2515 #line 475 "./parser.y"
2516 {yygotominor.yy105 = g_slist_append (NULL, g_slist_reverse (yymsp[-1].minor.yy33)); yy_destructor(yypParser,120,&yymsp[-3].minor);
2517 yy_destructor(yypParser,101,&yymsp[-2].minor);
2518 yy_destructor(yypParser,102,&yymsp[0].minor);
2519 }
2520 #line 2521 "parser.c"
2521 break;
2522 case 61: /* inscollist_opt ::= */
2523 case 97: /* using_opt ::= */ yytestcase(yyruleno==97);
2524 #line 479 "./parser.y"
2525 {yygotominor.yy105 = NULL;}
2526 #line 2527 "parser.c"
2527 break;
2528 case 62: /* inscollist_opt ::= LP inscollist RP */
2529 #line 480 "./parser.y"
2530 {yygotominor.yy105 = yymsp[-1].minor.yy105; yy_destructor(yypParser,101,&yymsp[-2].minor);
2531 yy_destructor(yypParser,102,&yymsp[0].minor);
2532 }
2533 #line 2534 "parser.c"
2534 break;
2535 case 63: /* inscollist ::= inscollist COMMA fullname */
2536 #line 484 "./parser.y"
2537 {GdaSqlField *field;
2538 field = gda_sql_field_new (NULL);
2539 gda_sql_field_take_name (field, yymsp[0].minor.yy0);
2540 yygotominor.yy105 = g_slist_append (yymsp[-2].minor.yy105, field);
2541 yy_destructor(yypParser,120,&yymsp[-1].minor);
2542 }
2543 #line 2544 "parser.c"
2544 break;
2545 case 64: /* inscollist ::= fullname */
2546 #line 489 "./parser.y"
2547 {GdaSqlField *field = gda_sql_field_new (NULL);
2548 gda_sql_field_take_name (field, yymsp[0].minor.yy0);
2549 yygotominor.yy105 = g_slist_prepend (NULL, field);
2550 }
2551 #line 2552 "parser.c"
2552 break;
2553 case 65: /* cmd ::= DELETE FROM fullname where_opt */
2554 #line 495 "./parser.y"
2555 {yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_DELETE);
2556 gda_sql_statement_delete_take_table_name (yygotominor.yy252, yymsp[-1].minor.yy0);
2557 gda_sql_statement_delete_take_condition (yygotominor.yy252, yymsp[0].minor.yy302); yy_destructor(yypParser,126,&yymsp[-3].minor);
2558 yy_destructor(yypParser,127,&yymsp[-2].minor);
2559 }
2560 #line 2561 "parser.c"
2561 break;
2562 case 66: /* where_opt ::= */
2563 case 89: /* having_opt ::= */ yytestcase(yyruleno==89);
2564 case 101: /* on_cond ::= */ yytestcase(yyruleno==101);
2565 #line 501 "./parser.y"
2566 {yygotominor.yy302 = NULL;}
2567 #line 2568 "parser.c"
2568 break;
2569 case 67: /* where_opt ::= WHERE expr */
2570 #line 502 "./parser.y"
2571 {yygotominor.yy302 = yymsp[0].minor.yy302; yy_destructor(yypParser,128,&yymsp[-1].minor);
2572 }
2573 #line 2574 "parser.c"
2574 break;
2575 case 68: /* cmd ::= UPDATE opt_on_conflict fullname SET setlist where_opt */
2576 #line 505 "./parser.y"
2577 {
2578 GSList *list;
2579 yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_UPDATE);
2580 gda_sql_statement_update_take_table_name (yygotominor.yy252, yymsp[-3].minor.yy0);
2581 gda_sql_statement_update_take_on_conflict (yygotominor.yy252, yymsp[-4].minor.yy0);
2582 gda_sql_statement_update_take_condition (yygotominor.yy252, yymsp[0].minor.yy302);
2583 for (list = yymsp[-1].minor.yy105; list; list = list->next) {
2584 UpdateSet *set = (UpdateSet*) list->data;
2585 gda_sql_statement_update_take_set_value (yygotominor.yy252, set->fname, set->expr);
2586 g_free (set);
2587 }
2588 g_slist_free (yymsp[-1].minor.yy105);
2589 yy_destructor(yypParser,129,&yymsp[-5].minor);
2590 yy_destructor(yypParser,130,&yymsp[-2].minor);
2591 }
2592 #line 2593 "parser.c"
2593 break;
2594 case 69: /* setlist ::= setlist COMMA fullname EQ expr */
2595 #line 529 "./parser.y"
2596 {UpdateSet *set;
2597 set = g_new (UpdateSet, 1);
2598 set->fname = yymsp[-2].minor.yy0;
2599 set->expr = yymsp[0].minor.yy302;
2600 yygotominor.yy105 = g_slist_append (yymsp[-4].minor.yy105, set);
2601 yy_destructor(yypParser,120,&yymsp[-3].minor);
2602 yy_destructor(yypParser,75,&yymsp[-1].minor);
2603 }
2604 #line 2605 "parser.c"
2605 break;
2606 case 70: /* setlist ::= fullname EQ expr */
2607 #line 535 "./parser.y"
2608 {UpdateSet *set;
2609 set = g_new (UpdateSet, 1);
2610 set->fname = yymsp[-2].minor.yy0;
2611 set->expr = yymsp[0].minor.yy302;
2612 yygotominor.yy105 = g_slist_append (NULL, set);
2613 yy_destructor(yypParser,75,&yymsp[-1].minor);
2614 }
2615 #line 2616 "parser.c"
2616 break;
2617 case 71: /* compound ::= selectcmd */
2618 #line 546 "./parser.y"
2619 {
2620 yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_COMPOUND);
2621 gda_sql_statement_compound_take_stmt (yygotominor.yy252, yymsp[0].minor.yy252);
2622 }
2623 #line 2624 "parser.c"
2624 break;
2625 case 72: /* compound ::= compound UNION opt_compound_all compound */
2626 #line 550 "./parser.y"
2627 {
2628 yygotominor.yy252 = compose_multiple_compounds (yymsp[-1].minor.yy100 ? GDA_SQL_STATEMENT_COMPOUND_UNION_ALL : GDA_SQL_STATEMENT_COMPOUND_UNION,
2629 yymsp[-3].minor.yy252, yymsp[0].minor.yy252);
2630 yy_destructor(yypParser,110,&yymsp[-2].minor);
2631 }
2632 #line 2633 "parser.c"
2633 break;
2634 case 73: /* compound ::= compound EXCEPT opt_compound_all compound */
2635 #line 555 "./parser.y"
2636 {
2637 yygotominor.yy252 = compose_multiple_compounds (yymsp[-1].minor.yy100 ? GDA_SQL_STATEMENT_COMPOUND_EXCEPT_ALL : GDA_SQL_STATEMENT_COMPOUND_EXCEPT,
2638 yymsp[-3].minor.yy252, yymsp[0].minor.yy252);
2639 yy_destructor(yypParser,111,&yymsp[-2].minor);
2640 }
2641 #line 2642 "parser.c"
2642 break;
2643 case 74: /* compound ::= compound INTERSECT opt_compound_all compound */
2644 #line 560 "./parser.y"
2645 {
2646 yygotominor.yy252 = compose_multiple_compounds (yymsp[-1].minor.yy100 ? GDA_SQL_STATEMENT_COMPOUND_INTERSECT_ALL : GDA_SQL_STATEMENT_COMPOUND_INTERSECT,
2647 yymsp[-3].minor.yy252, yymsp[0].minor.yy252);
2648 yy_destructor(yypParser,112,&yymsp[-2].minor);
2649 }
2650 #line 2651 "parser.c"
2651 break;
2652 case 75: /* opt_compound_all ::= */
2653 #line 566 "./parser.y"
2654 {yygotominor.yy100 = FALSE;}
2655 #line 2656 "parser.c"
2656 break;
2657 case 76: /* opt_compound_all ::= ALL */
2658 #line 567 "./parser.y"
2659 {yygotominor.yy100 = TRUE; yy_destructor(yypParser,131,&yymsp[0].minor);
2660 }
2661 #line 2662 "parser.c"
2662 break;
2663 case 77: /* selectcmd ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
2664 #line 574 "./parser.y"
2665 {
2666 yygotominor.yy252 = gda_sql_statement_new (GDA_SQL_STATEMENT_SELECT);
2667 if (yymsp[-7].minor.yy249) {
2668 gda_sql_statement_select_take_distinct (yygotominor.yy252, yymsp[-7].minor.yy249->distinct, yymsp[-7].minor.yy249->expr);
2669 g_free (yymsp[-7].minor.yy249);
2670 }
2671 gda_sql_statement_select_take_expr_list (yygotominor.yy252, yymsp[-6].minor.yy33);
2672 gda_sql_statement_select_take_from (yygotominor.yy252, yymsp[-5].minor.yy259);
2673 gda_sql_statement_select_take_where_cond (yygotominor.yy252, yymsp[-4].minor.yy302);
2674 gda_sql_statement_select_take_group_by (yygotominor.yy252, yymsp[-3].minor.yy105);
2675 gda_sql_statement_select_take_having_cond (yygotominor.yy252, yymsp[-2].minor.yy302);
2676 gda_sql_statement_select_take_order_by (yygotominor.yy252, yymsp[-1].minor.yy33);
2677 gda_sql_statement_select_take_limits (yygotominor.yy252, yymsp[0].minor.yy408.count, yymsp[0].minor.yy408.offset);
2678 yy_destructor(yypParser,132,&yymsp[-8].minor);
2679 }
2680 #line 2681 "parser.c"
2681 break;
2682 case 78: /* limit_opt ::= */
2683 #line 591 "./parser.y"
2684 {yygotominor.yy408.count = NULL; yygotominor.yy408.offset = NULL;}
2685 #line 2686 "parser.c"
2686 break;
2687 case 79: /* limit_opt ::= LIMIT expr */
2688 #line 592 "./parser.y"
2689 {yygotominor.yy408.count = yymsp[0].minor.yy302; yygotominor.yy408.offset = NULL; yy_destructor(yypParser,133,&yymsp[-1].minor);
2690 }
2691 #line 2692 "parser.c"
2692 break;
2693 case 80: /* limit_opt ::= LIMIT expr OFFSET expr */
2694 #line 593 "./parser.y"
2695 {yygotominor.yy408.count = yymsp[-2].minor.yy302; yygotominor.yy408.offset = yymsp[0].minor.yy302; yy_destructor(yypParser,133,&yymsp[-3].minor);
2696 yy_destructor(yypParser,32,&yymsp[-1].minor);
2697 }
2698 #line 2699 "parser.c"
2699 break;
2700 case 81: /* limit_opt ::= LIMIT expr COMMA expr */
2701 #line 594 "./parser.y"
2702 {yygotominor.yy408.count = yymsp[-2].minor.yy302; yygotominor.yy408.offset = yymsp[0].minor.yy302; yy_destructor(yypParser,133,&yymsp[-3].minor);
2703 yy_destructor(yypParser,120,&yymsp[-1].minor);
2704 }
2705 #line 2706 "parser.c"
2706 break;
2707 case 82: /* orderby_opt ::= */
2708 #line 598 "./parser.y"
2709 {yygotominor.yy33 = 0;}
2710 #line 2711 "parser.c"
2711 break;
2712 case 83: /* orderby_opt ::= ORDER BY sortlist */
2713 #line 599 "./parser.y"
2714 {yygotominor.yy33 = yymsp[0].minor.yy33; yy_destructor(yypParser,134,&yymsp[-2].minor);
2715 yy_destructor(yypParser,135,&yymsp[-1].minor);
2716 }
2717 #line 2718 "parser.c"
2718 break;
2719 case 84: /* sortlist ::= sortlist COMMA expr sortorder */
2720 #line 603 "./parser.y"
2721 {GdaSqlSelectOrder *order;
2722 order = gda_sql_select_order_new (NULL);
2723 order->expr = yymsp[-1].minor.yy302;
2724 order->asc = yymsp[0].minor.yy100;
2725 yygotominor.yy33 = g_slist_append (yymsp[-3].minor.yy33, order);
2726 yy_destructor(yypParser,120,&yymsp[-2].minor);
2727 }
2728 #line 2729 "parser.c"
2729 break;
2730 case 85: /* sortlist ::= expr sortorder */
2731 #line 609 "./parser.y"
2732 {GdaSqlSelectOrder *order;
2733 order = gda_sql_select_order_new (NULL);
2734 order->expr = yymsp[-1].minor.yy302;
2735 order->asc = yymsp[0].minor.yy100;
2736 yygotominor.yy33 = g_slist_prepend (NULL, order);
2737 }
2738 #line 2739 "parser.c"
2739 break;
2740 case 86: /* sortorder ::= ASC */
2741 #line 617 "./parser.y"
2742 {yygotominor.yy100 = TRUE; yy_destructor(yypParser,5,&yymsp[0].minor);
2743 }
2744 #line 2745 "parser.c"
2745 break;
2746 case 87: /* sortorder ::= DESC */
2747 #line 618 "./parser.y"
2748 {yygotominor.yy100 = FALSE; yy_destructor(yypParser,14,&yymsp[0].minor);
2749 }
2750 #line 2751 "parser.c"
2751 break;
2752 case 88: /* sortorder ::= */
2753 #line 619 "./parser.y"
2754 {yygotominor.yy100 = TRUE;}
2755 #line 2756 "parser.c"
2756 break;
2757 case 90: /* having_opt ::= HAVING expr */
2758 #line 625 "./parser.y"
2759 {yygotominor.yy302 = yymsp[0].minor.yy302; yy_destructor(yypParser,136,&yymsp[-1].minor);
2760 }
2761 #line 2762 "parser.c"
2762 break;
2763 case 91: /* groupby_opt ::= */
2764 #line 629 "./parser.y"
2765 {yygotominor.yy105 = 0;}
2766 #line 2767 "parser.c"
2767 break;
2768 case 92: /* groupby_opt ::= GROUP BY rnexprlist */
2769 #line 630 "./parser.y"
2770 {yygotominor.yy105 = g_slist_reverse (yymsp[0].minor.yy33); yy_destructor(yypParser,137,&yymsp[-2].minor);
2771 yy_destructor(yypParser,135,&yymsp[-1].minor);
2772 }
2773 #line 2774 "parser.c"
2774 break;
2775 case 93: /* from ::= */
2776 case 98: /* stl_prefix ::= */ yytestcase(yyruleno==98);
2777 #line 634 "./parser.y"
2778 {yygotominor.yy259 = NULL;}
2779 #line 2780 "parser.c"
2780 break;
2781 case 94: /* from ::= FROM seltablist */
2782 #line 635 "./parser.y"
2783 {yygotominor.yy259 = yymsp[0].minor.yy259; yy_destructor(yypParser,127,&yymsp[-1].minor);
2784 }
2785 #line 2786 "parser.c"
2786 break;
2787 case 95: /* seltablist ::= stl_prefix seltarget on_cond using_opt */
2788 #line 642 "./parser.y"
2789 {
2790 GSList *last;
2791 if (yymsp[-3].minor.yy259)
2792 yygotominor.yy259 = yymsp[-3].minor.yy259;
2793 else
2794 yygotominor.yy259 = gda_sql_select_from_new (NULL);
2795 gda_sql_select_from_take_new_target (yygotominor.yy259, yymsp[-2].minor.yy414);
2796 last = g_slist_last (yygotominor.yy259->joins);
2797 if (last) {
2798 GdaSqlSelectJoin *join = (GdaSqlSelectJoin *) (last->data);
2799 join->expr = yymsp[-1].minor.yy302;
2800 join->position = g_slist_length (yygotominor.yy259->targets) - 1;
2801 join->use = yymsp[0].minor.yy105;
2802 }
2803 }
2804 #line 2805 "parser.c"
2805 break;
2806 case 96: /* using_opt ::= USING LP inscollist RP */
2807 #line 660 "./parser.y"
2808 {yygotominor.yy105 = yymsp[-1].minor.yy105; yy_destructor(yypParser,138,&yymsp[-3].minor);
2809 yy_destructor(yypParser,101,&yymsp[-2].minor);
2810 yy_destructor(yypParser,102,&yymsp[0].minor);
2811 }
2812 #line 2813 "parser.c"
2813 break;
2814 case 99: /* stl_prefix ::= seltablist jointype */
2815 #line 664 "./parser.y"
2816 {GdaSqlSelectJoin *join;
2817 yygotominor.yy259 = yymsp[-1].minor.yy259;
2818 join = gda_sql_select_join_new (GDA_SQL_ANY_PART (yygotominor.yy259));
2819 join->type = yymsp[0].minor.yy367;
2820 gda_sql_select_from_take_new_join (yygotominor.yy259, join);
2821 }
2822 #line 2823 "parser.c"
2823 break;
2824 case 100: /* on_cond ::= ON expr */
2825 #line 674 "./parser.y"
2826 {yygotominor.yy302 = yymsp[0].minor.yy302; yy_destructor(yypParser,139,&yymsp[-1].minor);
2827 }
2828 #line 2829 "parser.c"
2829 break;
2830 case 102: /* jointype ::= COMMA */
2831 #line 678 "./parser.y"
2832 {yygotominor.yy367 = GDA_SQL_SELECT_JOIN_CROSS; yy_destructor(yypParser,120,&yymsp[0].minor);
2833 }
2834 #line 2835 "parser.c"
2835 break;
2836 case 103: /* jointype ::= JOIN */
2837 #line 679 "./parser.y"
2838 {yygotominor.yy367 = GDA_SQL_SELECT_JOIN_INNER; yy_destructor(yypParser,103,&yymsp[0].minor);
2839 }
2840 #line 2841 "parser.c"
2841 break;
2842 case 104: /* jointype ::= CROSS JOIN */
2843 #line 680 "./parser.y"
2844 {yygotominor.yy367 = GDA_SQL_SELECT_JOIN_CROSS; yy_destructor(yypParser,109,&yymsp[-1].minor);
2845 yy_destructor(yypParser,103,&yymsp[0].minor);
2846 }
2847 #line 2848 "parser.c"
2848 break;
2849 case 105: /* jointype ::= INNER JOIN */
2850 #line 681 "./parser.y"
2851 {yygotominor.yy367 = GDA_SQL_SELECT_JOIN_INNER; yy_destructor(yypParser,104,&yymsp[-1].minor);
2852 yy_destructor(yypParser,103,&yymsp[0].minor);
2853 }
2854 #line 2855 "parser.c"
2855 break;
2856 case 106: /* jointype ::= NATURAL JOIN */
2857 #line 682 "./parser.y"
2858 {yygotominor.yy367 = GDA_SQL_SELECT_JOIN_NATURAL; yy_destructor(yypParser,105,&yymsp[-1].minor);
2859 yy_destructor(yypParser,103,&yymsp[0].minor);
2860 }
2861 #line 2862 "parser.c"
2862 break;
2863 case 107: /* jointype ::= LEFT JOIN */
2864 #line 683 "./parser.y"
2865 {yygotominor.yy367 = GDA_SQL_SELECT_JOIN_LEFT; yy_destructor(yypParser,106,&yymsp[-1].minor);
2866 yy_destructor(yypParser,103,&yymsp[0].minor);
2867 }
2868 #line 2869 "parser.c"
2869 break;
2870 case 108: /* jointype ::= LEFT OUTER JOIN */
2871 #line 684 "./parser.y"
2872 {yygotominor.yy367 = GDA_SQL_SELECT_JOIN_LEFT; yy_destructor(yypParser,106,&yymsp[-2].minor);
2873 yy_destructor(yypParser,140,&yymsp[-1].minor);
2874 yy_destructor(yypParser,103,&yymsp[0].minor);
2875 }
2876 #line 2877 "parser.c"
2877 break;
2878 case 109: /* jointype ::= RIGHT JOIN */
2879 #line 685 "./parser.y"
2880 {yygotominor.yy367 = GDA_SQL_SELECT_JOIN_RIGHT; yy_destructor(yypParser,107,&yymsp[-1].minor);
2881 yy_destructor(yypParser,103,&yymsp[0].minor);
2882 }
2883 #line 2884 "parser.c"
2884 break;
2885 case 110: /* jointype ::= RIGHT OUTER JOIN */
2886 #line 686 "./parser.y"
2887 {yygotominor.yy367 = GDA_SQL_SELECT_JOIN_RIGHT; yy_destructor(yypParser,107,&yymsp[-2].minor);
2888 yy_destructor(yypParser,140,&yymsp[-1].minor);
2889 yy_destructor(yypParser,103,&yymsp[0].minor);
2890 }
2891 #line 2892 "parser.c"
2892 break;
2893 case 111: /* jointype ::= FULL JOIN */
2894 #line 687 "./parser.y"
2895 {yygotominor.yy367 = GDA_SQL_SELECT_JOIN_FULL; yy_destructor(yypParser,108,&yymsp[-1].minor);
2896 yy_destructor(yypParser,103,&yymsp[0].minor);
2897 }
2898 #line 2899 "parser.c"
2899 break;
2900 case 112: /* jointype ::= FULL OUTER JOIN */
2901 #line 688 "./parser.y"
2902 {yygotominor.yy367 = GDA_SQL_SELECT_JOIN_FULL; yy_destructor(yypParser,108,&yymsp[-2].minor);
2903 yy_destructor(yypParser,140,&yymsp[-1].minor);
2904 yy_destructor(yypParser,103,&yymsp[0].minor);
2905 }
2906 #line 2907 "parser.c"
2907 break;
2908 case 113: /* seltarget ::= fullname as */
2909 #line 693 "./parser.y"
2910 {yygotominor.yy414 = gda_sql_select_target_new (NULL);
2911 gda_sql_select_target_take_alias (yygotominor.yy414, yymsp[0].minor.yy0);
2912 gda_sql_select_target_take_table_name (yygotominor.yy414, yymsp[-1].minor.yy0);
2913 }
2914 #line 2915 "parser.c"
2915 break;
2916 case 114: /* seltarget ::= fullname ID */
2917 #line 697 "./parser.y"
2918 {yygotominor.yy414 = gda_sql_select_target_new (NULL);
2919 gda_sql_select_target_take_alias (yygotominor.yy414, yymsp[0].minor.yy0);
2920 gda_sql_select_target_take_table_name (yygotominor.yy414, yymsp[-1].minor.yy0);
2921 }
2922 #line 2923 "parser.c"
2923 break;
2924 case 115: /* seltarget ::= LP compound RP as */
2925 #line 701 "./parser.y"
2926 {yygotominor.yy414 = gda_sql_select_target_new (NULL);
2927 gda_sql_select_target_take_alias (yygotominor.yy414, yymsp[0].minor.yy0);
2928 gda_sql_select_target_take_select (yygotominor.yy414, yymsp[-2].minor.yy252);
2929 yy_destructor(yypParser,101,&yymsp[-3].minor);
2930 yy_destructor(yypParser,102,&yymsp[-1].minor);
2931 }
2932 #line 2933 "parser.c"
2933 break;
2934 case 116: /* sclp ::= selcollist COMMA */
2935 #line 711 "./parser.y"
2936 {yygotominor.yy33 = yymsp[-1].minor.yy33; yy_destructor(yypParser,120,&yymsp[0].minor);
2937 }
2938 #line 2939 "parser.c"
2939 break;
2940 case 117: /* sclp ::= */
2941 case 132: /* rexprlist ::= */ yytestcase(yyruleno==132);
2942 #line 712 "./parser.y"
2943 {yygotominor.yy33 = NULL;}
2944 #line 2945 "parser.c"
2945 break;
2946 case 118: /* selcollist ::= sclp expr as */
2947 #line 714 "./parser.y"
2948 {GdaSqlSelectField *field;
2949 field = gda_sql_select_field_new (NULL);
2950 gda_sql_select_field_take_expr (field, yymsp[-1].minor.yy302);
2951 gda_sql_select_field_take_alias (field, yymsp[0].minor.yy0);
2952 yygotominor.yy33 = g_slist_append (yymsp[-2].minor.yy33, field);}
2953 #line 2954 "parser.c"
2954 break;
2955 case 119: /* selcollist ::= sclp starname */
2956 #line 719 "./parser.y"
2957 {GdaSqlSelectField *field;
2958 field = gda_sql_select_field_new (NULL);
2959 gda_sql_select_field_take_star_value (field, yymsp[0].minor.yy0);
2960 yygotominor.yy33 = g_slist_append (yymsp[-1].minor.yy33, field);}
2961 #line 2962 "parser.c"
2962 break;
2963 case 121: /* starname ::= nm DOT STAR */
2964 case 194: /* fullname ::= nm DOT nm */ yytestcase(yyruleno==194);
2965 #line 725 "./parser.y"
2966 {gchar *str;
2967 str = g_strdup_printf ("%s.%s", g_value_get_string (yymsp[-2].minor.yy0), g_value_get_string (yymsp[0].minor.yy0));
2968 yygotominor.yy0 = g_new0 (GValue, 1);
2969 g_value_init (yygotominor.yy0, G_TYPE_STRING);
2970 g_value_take_string (yygotominor.yy0, str);
2971 g_value_reset (yymsp[-2].minor.yy0); g_free (yymsp[-2].minor.yy0);
2972 g_value_reset (yymsp[0].minor.yy0); g_free (yymsp[0].minor.yy0);
2973 yy_destructor(yypParser,141,&yymsp[-1].minor);
2974 }
2975 #line 2976 "parser.c"
2976 break;
2977 case 122: /* starname ::= nm DOT nm DOT STAR */
2978 case 195: /* fullname ::= nm DOT nm DOT nm */ yytestcase(yyruleno==195);
2979 #line 734 "./parser.y"
2980 {gchar *str;
2981 str = g_strdup_printf ("%s.%s.%s", g_value_get_string (yymsp[-4].minor.yy0),
2982 g_value_get_string (yymsp[-2].minor.yy0), g_value_get_string (yymsp[0].minor.yy0));
2983 yygotominor.yy0 = g_new0 (GValue, 1);
2984 g_value_init (yygotominor.yy0, G_TYPE_STRING);
2985 g_value_take_string (yygotominor.yy0, str);
2986 g_value_reset (yymsp[-4].minor.yy0); g_free (yymsp[-4].minor.yy0);
2987 g_value_reset (yymsp[-2].minor.yy0); g_free (yymsp[-2].minor.yy0);
2988 g_value_reset (yymsp[0].minor.yy0); g_free (yymsp[0].minor.yy0);
2989 yy_destructor(yypParser,141,&yymsp[-3].minor);
2990 yy_destructor(yypParser,141,&yymsp[-1].minor);
2991 }
2992 #line 2993 "parser.c"
2993 break;
2994 case 123: /* as ::= AS fullname */
2995 case 124: /* as ::= AS value */ yytestcase(yyruleno==124);
2996 #line 745 "./parser.y"
2997 {yygotominor.yy0 = yymsp[0].minor.yy0; yy_destructor(yypParser,142,&yymsp[-1].minor);
2998 }
2999 #line 3000 "parser.c"
3000 break;
3001 case 126: /* distinct ::= */
3002 #line 751 "./parser.y"
3003 {yygotominor.yy249 = NULL;}
3004 #line 3005 "parser.c"
3005 break;
3006 case 127: /* distinct ::= ALL */
3007 #line 752 "./parser.y"
3008 {yygotominor.yy249 = NULL; yy_destructor(yypParser,131,&yymsp[0].minor);
3009 }
3010 #line 3011 "parser.c"
3011 break;
3012 case 128: /* distinct ::= DISTINCT */
3013 #line 753 "./parser.y"
3014 {yygotominor.yy249 = g_new0 (Distinct, 1); yygotominor.yy249->distinct = TRUE; yy_destructor(yypParser,143,&yymsp[0].minor);
3015 }
3016 #line 3017 "parser.c"
3017 break;
3018 case 129: /* distinct ::= DISTINCT ON expr */
3019 #line 754 "./parser.y"
3020 {yygotominor.yy249 = g_new0 (Distinct, 1); yygotominor.yy249->distinct = TRUE; yygotominor.yy249->expr = yymsp[0].minor.yy302; yy_destructor(yypParser,143,&yymsp[-2].minor);
3021 yy_destructor(yypParser,139,&yymsp[-1].minor);
3022 }
3023 #line 3024 "parser.c"
3024 break;
3025 case 130: /* rnexprlist ::= rnexprlist COMMA expr */
3026 case 133: /* rexprlist ::= rexprlist COMMA expr */ yytestcase(yyruleno==133);
3027 #line 759 "./parser.y"
3028 {yygotominor.yy33 = g_slist_prepend (yymsp[-2].minor.yy33, yymsp[0].minor.yy302); yy_destructor(yypParser,120,&yymsp[-1].minor);
3029 }
3030 #line 3031 "parser.c"
3031 break;
3032 case 131: /* rnexprlist ::= expr */
3033 case 134: /* rexprlist ::= expr */ yytestcase(yyruleno==134);
3034 #line 760 "./parser.y"
3035 {yygotominor.yy33 = g_slist_append (NULL, yymsp[0].minor.yy302);}
3036 #line 3037 "parser.c"
3037 break;
3038 case 135: /* expr ::= pvalue */
3039 #line 772 "./parser.y"
3040 {yygotominor.yy302 = yymsp[0].minor.yy302;}
3041 #line 3042 "parser.c"
3042 break;
3043 case 136: /* expr ::= value */
3044 case 138: /* expr ::= fullname */ yytestcase(yyruleno==138);
3045 #line 773 "./parser.y"
3046 {yygotominor.yy302 = gda_sql_expr_new (NULL); yygotominor.yy302->value = yymsp[0].minor.yy0;}
3047 #line 3048 "parser.c"
3048 break;
3049 case 137: /* expr ::= LP expr RP */
3050 #line 774 "./parser.y"
3051 {yygotominor.yy302 = yymsp[-1].minor.yy302; yy_destructor(yypParser,101,&yymsp[-2].minor);
3052 yy_destructor(yypParser,102,&yymsp[0].minor);
3053 }
3054 #line 3055 "parser.c"
3055 break;
3056 case 139: /* expr ::= fullname LP rexprlist RP */
3057 #line 776 "./parser.y"
3058 {GdaSqlFunction *func;
3059 yygotominor.yy302 = gda_sql_expr_new (NULL);
3060 func = gda_sql_function_new (GDA_SQL_ANY_PART (yygotominor.yy302));
3061 gda_sql_function_take_name (func, yymsp[-3].minor.yy0);
3062 gda_sql_function_take_args_list (func, g_slist_reverse (yymsp[-1].minor.yy33));
3063 yygotominor.yy302->func = func; yy_destructor(yypParser,101,&yymsp[-2].minor);
3064 yy_destructor(yypParser,102,&yymsp[0].minor);
3065 }
3066 #line 3067 "parser.c"
3067 break;
3068 case 140: /* expr ::= fullname LP compound RP */
3069 #line 782 "./parser.y"
3070 {GdaSqlFunction *func;
3071 GdaSqlExpr *expr;
3072 yygotominor.yy302 = gda_sql_expr_new (NULL);
3073 func = gda_sql_function_new (GDA_SQL_ANY_PART (yygotominor.yy302));
3074 gda_sql_function_take_name (func, yymsp[-3].minor.yy0);
3075 expr = gda_sql_expr_new (GDA_SQL_ANY_PART (func));
3076 gda_sql_expr_take_select (expr, yymsp[-1].minor.yy252);
3077 gda_sql_function_take_args_list (func, g_slist_prepend (NULL, expr));
3078 yygotominor.yy302->func = func; yy_destructor(yypParser,101,&yymsp[-2].minor);
3079 yy_destructor(yypParser,102,&yymsp[0].minor);
3080 }
3081 #line 3082 "parser.c"
3082 break;
3083 case 141: /* expr ::= fullname LP starname RP */
3084 #line 791 "./parser.y"
3085 {GdaSqlFunction *func;
3086 GdaSqlExpr *expr;
3087 yygotominor.yy302 = gda_sql_expr_new (NULL);
3088 func = gda_sql_function_new (GDA_SQL_ANY_PART (yygotominor.yy302));
3089 gda_sql_function_take_name (func, yymsp[-3].minor.yy0);
3090 expr = gda_sql_expr_new (GDA_SQL_ANY_PART (func));
3091 expr->value = yymsp[-1].minor.yy0;
3092 gda_sql_function_take_args_list (func, g_slist_prepend (NULL, expr));
3093 yygotominor.yy302->func = func; yy_destructor(yypParser,101,&yymsp[-2].minor);
3094 yy_destructor(yypParser,102,&yymsp[0].minor);
3095 }
3096 #line 3097 "parser.c"
3097 break;
3098 case 142: /* expr ::= CAST LP expr AS fullname RP */
3099 #line 800 "./parser.y"
3100 {yygotominor.yy302 = yymsp[-3].minor.yy302;
3101 yymsp[-3].minor.yy302->cast_as = g_value_dup_string (yymsp[-1].minor.yy0);
3102 g_value_reset (yymsp[-1].minor.yy0);
3103 g_free (yymsp[-1].minor.yy0); yy_destructor(yypParser,10,&yymsp[-5].minor);
3104 yy_destructor(yypParser,101,&yymsp[-4].minor);
3105 yy_destructor(yypParser,142,&yymsp[-2].minor);
3106 yy_destructor(yypParser,102,&yymsp[0].minor);
3107 }
3108 #line 3109 "parser.c"
3109 break;
3110 case 143: /* expr ::= expr PGCAST fullname */
3111 #line 804 "./parser.y"
3112 {yygotominor.yy302 = yymsp[-2].minor.yy302;
3113 yymsp[-2].minor.yy302->cast_as = g_value_dup_string (yymsp[0].minor.yy0);
3114 g_value_reset (yymsp[0].minor.yy0);
3115 g_free (yymsp[0].minor.yy0); yy_destructor(yypParser,113,&yymsp[-1].minor);
3116 }
3117 #line 3118 "parser.c"
3118 break;
3119 case 144: /* expr ::= expr PLUS|MINUS expr */
3120 #line 809 "./parser.y"
3121 {yygotominor.yy302 = compose_multiple_expr (string_to_op_type (yymsp[-1].minor.yy0), yymsp[-2].minor.yy302, yymsp[0].minor.yy302);}
3122 #line 3123 "parser.c"
3123 break;
3124 case 145: /* expr ::= expr STAR expr */
3125 #line 810 "./parser.y"
3126 {yygotominor.yy302 = compose_multiple_expr (GDA_SQL_OPERATOR_TYPE_STAR, yymsp[-2].minor.yy302, yymsp[0].minor.yy302); yy_destructor(yypParser,93,&yymsp[-1].minor);
3127 }
3128 #line 3129 "parser.c"
3129 break;
3130 case 146: /* expr ::= expr SLASH|REM expr */
3131 case 147: /* expr ::= expr BITAND|BITOR expr */ yytestcase(yyruleno==147);
3132 case 153: /* expr ::= expr GT|LEQ|GEQ|LT expr */ yytestcase(yyruleno==153);
3133 case 154: /* expr ::= expr DIFF|EQ expr */ yytestcase(yyruleno==154);
3134 case 157: /* expr ::= expr REGEXP|REGEXP_CI|NOT_REGEXP|NOT_REGEXP_CI|SIMILAR expr */ yytestcase(yyruleno==157);
3135 #line 811 "./parser.y"
3136 {yygotominor.yy302 = create_two_expr (string_to_op_type (yymsp[-1].minor.yy0), yymsp[-2].minor.yy302, yymsp[0].minor.yy302);}
3137 #line 3138 "parser.c"
3138 break;
3139 case 148: /* expr ::= MINUS expr */
3140 #line 814 "./parser.y"
3141 {yygotominor.yy302 = create_uni_expr (GDA_SQL_OPERATOR_TYPE_MINUS, yymsp[0].minor.yy302); yy_destructor(yypParser,92,&yymsp[-1].minor);
3142 }
3143 #line 3144 "parser.c"
3144 break;
3145 case 149: /* expr ::= PLUS expr */
3146 #line 815 "./parser.y"
3147 {yygotominor.yy302 = create_uni_expr (GDA_SQL_OPERATOR_TYPE_PLUS, yymsp[0].minor.yy302); yy_destructor(yypParser,91,&yymsp[-1].minor);
3148 }
3149 #line 3150 "parser.c"
3150 break;
3151 case 150: /* expr ::= expr AND expr */
3152 #line 817 "./parser.y"
3153 {yygotominor.yy302 = compose_multiple_expr (GDA_SQL_OPERATOR_TYPE_AND, yymsp[-2].minor.yy302, yymsp[0].minor.yy302); yy_destructor(yypParser,67,&yymsp[-1].minor);
3154 }
3155 #line 3156 "parser.c"
3156 break;
3157 case 151: /* expr ::= expr OR expr */
3158 #line 818 "./parser.y"
3159 {yygotominor.yy302 = compose_multiple_expr (GDA_SQL_OPERATOR_TYPE_OR, yymsp[-2].minor.yy302, yymsp[0].minor.yy302); yy_destructor(yypParser,66,&yymsp[-1].minor);
3160 }
3161 #line 3162 "parser.c"
3162 break;
3163 case 152: /* expr ::= expr CONCAT expr */
3164 #line 819 "./parser.y"
3165 {yygotominor.yy302 = compose_multiple_expr (GDA_SQL_OPERATOR_TYPE_CONCAT, yymsp[-2].minor.yy302, yymsp[0].minor.yy302); yy_destructor(yypParser,96,&yymsp[-1].minor);
3166 }
3167 #line 3168 "parser.c"
3168 break;
3169 case 155: /* expr ::= expr LIKE expr */
3170 #line 823 "./parser.y"
3171 {yygotominor.yy302 = create_two_expr (GDA_SQL_OPERATOR_TYPE_LIKE, yymsp[-2].minor.yy302, yymsp[0].minor.yy302); yy_destructor(yypParser,26,&yymsp[-1].minor);
3172 }
3173 #line 3174 "parser.c"
3174 break;
3175 case 156: /* expr ::= expr NOTLIKE expr */
3176 #line 824 "./parser.y"
3177 {yygotominor.yy302 = create_two_expr (GDA_SQL_OPERATOR_TYPE_NOTLIKE, yymsp[-2].minor.yy302, yymsp[0].minor.yy302); yy_destructor(yypParser,70,&yymsp[-1].minor);
3178 }
3179 #line 3180 "parser.c"
3180 break;
3181 case 158: /* expr ::= expr BETWEEN expr AND expr */
3182 #line 826 "./parser.y"
3183 {GdaSqlOperation *cond;
3184 yygotominor.yy302 = gda_sql_expr_new (NULL);
3185 cond = gda_sql_operation_new (GDA_SQL_ANY_PART (yygotominor.yy302));
3186 yygotominor.yy302->cond = cond;
3187 cond->operator_type = GDA_SQL_OPERATOR_TYPE_BETWEEN;
3188 cond->operands = g_slist_append (NULL, yymsp[-4].minor.yy302);
3189 GDA_SQL_ANY_PART (yymsp[-4].minor.yy302)->parent = GDA_SQL_ANY_PART (cond);
3190 cond->operands = g_slist_append (cond->operands, yymsp[-2].minor.yy302);
3191 GDA_SQL_ANY_PART (yymsp[-2].minor.yy302)->parent = GDA_SQL_ANY_PART (cond);
3192 cond->operands = g_slist_append (cond->operands, yymsp[0].minor.yy302);
3193 GDA_SQL_ANY_PART (yymsp[0].minor.yy302)->parent = GDA_SQL_ANY_PART (cond);
3194 yy_destructor(yypParser,76,&yymsp[-3].minor);
3195 yy_destructor(yypParser,67,&yymsp[-1].minor);
3196 }
3197 #line 3198 "parser.c"
3198 break;
3199 case 159: /* expr ::= expr NOT BETWEEN expr AND expr */
3200 #line 839 "./parser.y"
3201 {GdaSqlOperation *cond;
3202 GdaSqlExpr *expr;
3203 expr = gda_sql_expr_new (NULL);
3204 cond = gda_sql_operation_new (GDA_SQL_ANY_PART (expr));
3205 expr->cond = cond;
3206 cond->operator_type = GDA_SQL_OPERATOR_TYPE_BETWEEN;
3207 cond->operands = g_slist_append (NULL, yymsp[-5].minor.yy302);
3208 GDA_SQL_ANY_PART (yymsp[-5].minor.yy302)->parent = GDA_SQL_ANY_PART (cond);
3209 cond->operands = g_slist_append (cond->operands, yymsp[-2].minor.yy302);
3210 GDA_SQL_ANY_PART (yymsp[-2].minor.yy302)->parent = GDA_SQL_ANY_PART (cond);
3211 cond->operands = g_slist_append (cond->operands, yymsp[0].minor.yy302);
3212 GDA_SQL_ANY_PART (yymsp[0].minor.yy302)->parent = GDA_SQL_ANY_PART (cond);
3213
3214 yygotominor.yy302 = gda_sql_expr_new (NULL);
3215 cond = gda_sql_operation_new (GDA_SQL_ANY_PART (yygotominor.yy302));
3216 yygotominor.yy302->cond = cond;
3217 cond->operator_type = GDA_SQL_OPERATOR_TYPE_NOT;
3218 cond->operands = g_slist_prepend (NULL, expr);
3219 GDA_SQL_ANY_PART (expr)->parent = GDA_SQL_ANY_PART (cond);
3220 yy_destructor(yypParser,68,&yymsp[-4].minor);
3221 yy_destructor(yypParser,76,&yymsp[-3].minor);
3222 yy_destructor(yypParser,67,&yymsp[-1].minor);
3223 }
3224 #line 3225 "parser.c"
3225 break;
3226 case 160: /* expr ::= NOT expr */
3227 #line 860 "./parser.y"
3228 {yygotominor.yy302 = create_uni_expr (GDA_SQL_OPERATOR_TYPE_NOT, yymsp[0].minor.yy302); yy_destructor(yypParser,68,&yymsp[-1].minor);
3229 }
3230 #line 3231 "parser.c"
3231 break;
3232 case 161: /* expr ::= BITNOT expr */
3233 #line 861 "./parser.y"
3234 {yygotominor.yy302 = create_uni_expr (GDA_SQL_OPERATOR_TYPE_BITNOT, yymsp[0].minor.yy302); yy_destructor(yypParser,100,&yymsp[-1].minor);
3235 }
3236 #line 3237 "parser.c"
3237 break;
3238 case 162: /* expr ::= expr uni_op */
3239 #line 862 "./parser.y"
3240 {yygotominor.yy302 = create_uni_expr (yymsp[0].minor.yy295, yymsp[-1].minor.yy302);}
3241 #line 3242 "parser.c"
3242 break;
3243 case 163: /* expr ::= expr IS expr */
3244 #line 864 "./parser.y"
3245 {yygotominor.yy302 = create_two_expr (GDA_SQL_OPERATOR_TYPE_IS, yymsp[-2].minor.yy302, yymsp[0].minor.yy302); yy_destructor(yypParser,69,&yymsp[-1].minor);
3246 }
3247 #line 3248 "parser.c"
3248 break;
3249 case 164: /* expr ::= LP compound RP */
3250 #line 865 "./parser.y"
3251 {yygotominor.yy302 = gda_sql_expr_new (NULL); gda_sql_expr_take_select (yygotominor.yy302, yymsp[-1].minor.yy252); yy_destructor(yypParser,101,&yymsp[-2].minor);
3252 yy_destructor(yypParser,102,&yymsp[0].minor);
3253 }
3254 #line 3255 "parser.c"
3255 break;
3256 case 165: /* expr ::= expr IN LP rexprlist RP */
3257 #line 866 "./parser.y"
3258 {GdaSqlOperation *cond;
3259 GSList *list;
3260 yygotominor.yy302 = gda_sql_expr_new (NULL);
3261 cond = gda_sql_operation_new (GDA_SQL_ANY_PART (yygotominor.yy302));
3262 yygotominor.yy302->cond = cond;
3263 cond->operator_type = GDA_SQL_OPERATOR_TYPE_IN;
3264 cond->operands = g_slist_prepend (g_slist_reverse (yymsp[-1].minor.yy33), yymsp[-4].minor.yy302);
3265 for (list = cond->operands; list; list = list->next)
3266 GDA_SQL_ANY_PART (list->data)->parent = GDA_SQL_ANY_PART (cond);
3267 yy_destructor(yypParser,71,&yymsp[-3].minor);
3268 yy_destructor(yypParser,101,&yymsp[-2].minor);
3269 yy_destructor(yypParser,102,&yymsp[0].minor);
3270 }
3271 #line 3272 "parser.c"
3272 break;
3273 case 166: /* expr ::= expr IN LP compound RP */
3274 #line 876 "./parser.y"
3275 {GdaSqlOperation *cond;
3276 GdaSqlExpr *expr;
3277 yygotominor.yy302 = gda_sql_expr_new (NULL);
3278 cond = gda_sql_operation_new (GDA_SQL_ANY_PART (yygotominor.yy302));
3279 yygotominor.yy302->cond = cond;
3280 cond->operator_type = GDA_SQL_OPERATOR_TYPE_IN;
3281
3282 expr = gda_sql_expr_new (GDA_SQL_ANY_PART (cond));
3283 gda_sql_expr_take_select (expr, yymsp[-1].minor.yy252);
3284 cond->operands = g_slist_prepend (NULL, expr);
3285 cond->operands = g_slist_prepend (cond->operands, yymsp[-4].minor.yy302);
3286 GDA_SQL_ANY_PART (yymsp[-4].minor.yy302)->parent = GDA_SQL_ANY_PART (cond);
3287 yy_destructor(yypParser,71,&yymsp[-3].minor);
3288 yy_destructor(yypParser,101,&yymsp[-2].minor);
3289 yy_destructor(yypParser,102,&yymsp[0].minor);
3290 }
3291 #line 3292 "parser.c"
3292 break;
3293 case 167: /* expr ::= expr NOT IN LP rexprlist RP */
3294 #line 889 "./parser.y"
3295 {GdaSqlOperation *cond;
3296 GSList *list;
3297 yygotominor.yy302 = gda_sql_expr_new (NULL);
3298 cond = gda_sql_operation_new (GDA_SQL_ANY_PART (yygotominor.yy302));
3299 yygotominor.yy302->cond = cond;
3300 cond->operator_type = GDA_SQL_OPERATOR_TYPE_NOTIN;
3301 cond->operands = g_slist_prepend (g_slist_reverse (yymsp[-1].minor.yy33), yymsp[-5].minor.yy302);
3302 for (list = cond->operands; list; list = list->next)
3303 GDA_SQL_ANY_PART (list->data)->parent = GDA_SQL_ANY_PART (cond);
3304 yy_destructor(yypParser,68,&yymsp[-4].minor);
3305 yy_destructor(yypParser,71,&yymsp[-3].minor);
3306 yy_destructor(yypParser,101,&yymsp[-2].minor);
3307 yy_destructor(yypParser,102,&yymsp[0].minor);
3308 }
3309 #line 3310 "parser.c"
3310 break;
3311 case 168: /* expr ::= expr NOT IN LP compound RP */
3312 #line 899 "./parser.y"
3313 {GdaSqlOperation *cond;
3314 GdaSqlExpr *expr;
3315 yygotominor.yy302 = gda_sql_expr_new (NULL);
3316 cond = gda_sql_operation_new (GDA_SQL_ANY_PART (yygotominor.yy302));
3317 yygotominor.yy302->cond = cond;
3318 cond->operator_type = GDA_SQL_OPERATOR_TYPE_NOTIN;
3319
3320 expr = gda_sql_expr_new (GDA_SQL_ANY_PART (cond));
3321 gda_sql_expr_take_select (expr, yymsp[-1].minor.yy252);
3322 cond->operands = g_slist_prepend (NULL, expr);
3323 cond->operands = g_slist_prepend (cond->operands, yymsp[-5].minor.yy302);
3324 GDA_SQL_ANY_PART (yymsp[-5].minor.yy302)->parent = GDA_SQL_ANY_PART (cond);
3325 yy_destructor(yypParser,68,&yymsp[-4].minor);
3326 yy_destructor(yypParser,71,&yymsp[-3].minor);
3327 yy_destructor(yypParser,101,&yymsp[-2].minor);
3328 yy_destructor(yypParser,102,&yymsp[0].minor);
3329 }
3330 #line 3331 "parser.c"
3331 break;
3332 case 169: /* expr ::= CASE case_operand case_exprlist case_else END */
3333 #line 912 "./parser.y"
3334 {
3335 GdaSqlCase *sc;
3336 GSList *list;
3337 yygotominor.yy302 = gda_sql_expr_new (NULL);
3338 sc = gda_sql_case_new (GDA_SQL_ANY_PART (yygotominor.yy302));
3339 sc->base_expr = yymsp[-3].minor.yy354;
3340 sc->else_expr = yymsp[-1].minor.yy354;
3341 sc->when_expr_list = yymsp[-2].minor.yy51.when_list;
3342 sc->then_expr_list = yymsp[-2].minor.yy51.then_list;
3343 yygotominor.yy302->case_s = sc;
3344 for (list = sc->when_expr_list; list; list = list->next)
3345 GDA_SQL_ANY_PART (list->data)->parent = GDA_SQL_ANY_PART (sc);
3346 for (list = sc->then_expr_list; list; list = list->next)
3347 GDA_SQL_ANY_PART (list->data)->parent = GDA_SQL_ANY_PART (sc);
3348 yy_destructor(yypParser,144,&yymsp[-4].minor);
3349 yy_destructor(yypParser,17,&yymsp[0].minor);
3350 }
3351 #line 3352 "parser.c"
3352 break;
3353 case 170: /* case_operand ::= expr */
3354 #line 930 "./parser.y"
3355 {yygotominor.yy354 = yymsp[0].minor.yy302;}
3356 #line 3357 "parser.c"
3357 break;
3358 case 171: /* case_operand ::= */
3359 case 175: /* case_else ::= */ yytestcase(yyruleno==175);
3360 #line 931 "./parser.y"
3361 {yygotominor.yy354 = NULL;}
3362 #line 3363 "parser.c"
3363 break;
3364 case 172: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */
3365 #line 937 "./parser.y"
3366 {
3367 yygotominor.yy51.when_list = g_slist_append (yymsp[-4].minor.yy51.when_list, yymsp[-2].minor.yy302);
3368 yygotominor.yy51.then_list = g_slist_append (yymsp[-4].minor.yy51.then_list, yymsp[0].minor.yy302);
3369 yy_destructor(yypParser,145,&yymsp[-3].minor);
3370 yy_destructor(yypParser,146,&yymsp[-1].minor);
3371 }
3372 #line 3373 "parser.c"
3373 break;
3374 case 173: /* case_exprlist ::= WHEN expr THEN expr */
3375 #line 941 "./parser.y"
3376 {
3377 yygotominor.yy51.when_list = g_slist_prepend (NULL, yymsp[-2].minor.yy302);
3378 yygotominor.yy51.then_list = g_slist_prepend (NULL, yymsp[0].minor.yy302);
3379 yy_destructor(yypParser,145,&yymsp[-3].minor);
3380 yy_destructor(yypParser,146,&yymsp[-1].minor);
3381 }
3382 #line 3383 "parser.c"
3383 break;
3384 case 174: /* case_else ::= ELSE expr */
3385 #line 948 "./parser.y"
3386 {yygotominor.yy354 = yymsp[0].minor.yy302; yy_destructor(yypParser,147,&yymsp[-1].minor);
3387 }
3388 #line 3389 "parser.c"
3389 break;
3390 case 176: /* uni_op ::= ISNULL */
3391 #line 952 "./parser.y"
3392 {yygotominor.yy295 = GDA_SQL_OPERATOR_TYPE_ISNULL; yy_destructor(yypParser,72,&yymsp[0].minor);
3393 }
3394 #line 3395 "parser.c"
3395 break;
3396 case 177: /* uni_op ::= IS NOTNULL */
3397 #line 953 "./parser.y"
3398 {yygotominor.yy295 = GDA_SQL_OPERATOR_TYPE_ISNOTNULL; yy_destructor(yypParser,69,&yymsp[-1].minor);
3399 yy_destructor(yypParser,73,&yymsp[0].minor);
3400 }
3401 #line 3402 "parser.c"
3402 break;
3403 case 178: /* value ::= NULL */
3404 #line 957 "./parser.y"
3405 {yygotominor.yy0 = NULL; yy_destructor(yypParser,148,&yymsp[0].minor);
3406 }
3407 #line 3408 "parser.c"
3408 break;
3409 case 182: /* pvalue ::= UNSPECVAL LSBRACKET paramspec RSBRACKET */
3410 #line 966 "./parser.y"
3411 {yygotominor.yy302 = gda_sql_expr_new (NULL); yygotominor.yy302->param_spec = yymsp[-1].minor.yy303; yy_destructor(yypParser,150,&yymsp[-3].minor);
3412 yy_destructor(yypParser,151,&yymsp[-2].minor);
3413 yy_destructor(yypParser,152,&yymsp[0].minor);
3414 }
3415 #line 3416 "parser.c"
3416 break;
3417 case 183: /* pvalue ::= value LSBRACKET paramspec RSBRACKET */
3418 #line 967 "./parser.y"
3419 {yygotominor.yy302 = gda_sql_expr_new (NULL); yygotominor.yy302->value = yymsp[-3].minor.yy0; yygotominor.yy302->param_spec = yymsp[-1].minor.yy303; yy_destructor(yypParser,151,&yymsp[-2].minor);
3420 yy_destructor(yypParser,152,&yymsp[0].minor);
3421 }
3422 #line 3423 "parser.c"
3423 break;
3424 case 184: /* pvalue ::= SIMPLEPARAM */
3425 #line 968 "./parser.y"
3426 {yygotominor.yy302 = gda_sql_expr_new (NULL); yygotominor.yy302->param_spec = gda_sql_param_spec_new (yymsp[0].minor.yy0);}
3427 #line 3428 "parser.c"
3428 break;
3429 case 185: /* paramspec ::= */
3430 #line 973 "./parser.y"
3431 {yygotominor.yy303 = NULL;}
3432 #line 3433 "parser.c"
3433 break;
3434 case 186: /* paramspec ::= paramspec PNAME */
3435 #line 974 "./parser.y"
3436 {if (!yymsp[-1].minor.yy303) yygotominor.yy303 = gda_sql_param_spec_new (NULL); else yygotominor.yy303 = yymsp[-1].minor.yy303;
3437 gda_sql_param_spec_take_name (yygotominor.yy303, yymsp[0].minor.yy0);}
3438 #line 3439 "parser.c"
3439 break;
3440 case 187: /* paramspec ::= paramspec PDESCR */
3441 #line 976 "./parser.y"
3442 {if (!yymsp[-1].minor.yy303) yygotominor.yy303 = gda_sql_param_spec_new (NULL); else yygotominor.yy303 = yymsp[-1].minor.yy303;
3443 gda_sql_param_spec_take_descr (yygotominor.yy303, yymsp[0].minor.yy0);}
3444 #line 3445 "parser.c"
3445 break;
3446 case 188: /* paramspec ::= paramspec PTYPE */
3447 #line 978 "./parser.y"
3448 {if (!yymsp[-1].minor.yy303) yygotominor.yy303 = gda_sql_param_spec_new (NULL); else yygotominor.yy303 = yymsp[-1].minor.yy303;
3449 gda_sql_param_spec_take_type (yygotominor.yy303, yymsp[0].minor.yy0);}
3450 #line 3451 "parser.c"
3451 break;
3452 case 189: /* paramspec ::= paramspec PNULLOK */
3453 #line 980 "./parser.y"
3454 {if (!yymsp[-1].minor.yy303) yygotominor.yy303 = gda_sql_param_spec_new (NULL); else yygotominor.yy303 = yymsp[-1].minor.yy303;
3455 gda_sql_param_spec_take_nullok (yygotominor.yy303, yymsp[0].minor.yy0);}
3456 #line 3457 "parser.c"
3457 break;
3458 default:
3459 /* (34) trans_opt_kw ::= */ yytestcase(yyruleno==34);
3460 /* (36) opt_comma ::= */ yytestcase(yyruleno==36);
3461 break;
3462 };
3463 yygoto = yyRuleInfo[yyruleno].lhs;
3464 yysize = yyRuleInfo[yyruleno].nrhs;
3465 yypParser->yyidx -= yysize;
3466 yyact = yy_find_reduce_action(yymsp[-yysize].stateno,(YYCODETYPE)yygoto);
3467 if( yyact < YYNSTATE ){
3468 #ifdef NDEBUG
3469 /* If we are not debugging and the reduce action popped at least
3470 ** one element off the stack, then we can push the new element back
3471 ** onto the stack here, and skip the stack overflow test in yy_shift().
3472 ** That gives a significant speed improvement. */
3473 if( yysize ){
3474 yypParser->yyidx++;
3475 yymsp -= yysize-1;
3476 yymsp->stateno = (YYACTIONTYPE)yyact;
3477 yymsp->major = (YYCODETYPE)yygoto;
3478 yymsp->minor = yygotominor;
3479 }else
3480 #endif
3481 {
3482 yy_shift(yypParser,yyact,yygoto,&yygotominor);
3483 }
3484 }else{
3485 assert( yyact == YYNSTATE + YYNRULE + 1 );
3486 yy_accept(yypParser);
3487 }
3488 }
3489
3490 /*
3491 ** The following code executes when the parse fails
3492 */
3493 #ifndef YYNOERRORRECOVERY
yy_parse_failed(yyParser * yypParser)3494 static void yy_parse_failed(
3495 yyParser *yypParser /* The parser */
3496 ){
3497 gda_lemon_firebird_parserARG_FETCH;
3498 #ifndef NDEBUG
3499 if( yyTraceFILE ){
3500 fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt);
3501 }
3502 #endif
3503 while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
3504 /* Here code is inserted which will be executed whenever the
3505 ** parser fails */
3506 gda_lemon_firebird_parserARG_STORE; /* Suppress warning about unused %extra_argument variable */
3507 }
3508 #endif /* YYNOERRORRECOVERY */
3509
3510 /*
3511 ** The following code executes when a syntax error first occurs.
3512 */
yy_syntax_error(yyParser * yypParser,int yymajor,YYMINORTYPE yyminor)3513 static void yy_syntax_error(
3514 yyParser *yypParser, /* The parser */
3515 int yymajor, /* The major type of the error token */
3516 YYMINORTYPE yyminor /* The minor type of the error token */
3517 ){
3518 gda_lemon_firebird_parserARG_FETCH;
3519 #define TOKEN (yyminor.yy0)
3520 #line 22 "./parser.y"
3521
3522 gda_sql_parser_set_syntax_error (pdata->parser);
3523 #line 3524 "parser.c"
3524 gda_lemon_firebird_parserARG_STORE; /* Suppress warning about unused %extra_argument variable */
3525 }
3526
3527 /*
3528 ** The following is executed when the parser accepts
3529 */
yy_accept(yyParser * yypParser)3530 static void yy_accept(
3531 yyParser *yypParser /* The parser */
3532 ){
3533 gda_lemon_firebird_parserARG_FETCH;
3534 #ifndef NDEBUG
3535 if( yyTraceFILE ){
3536 fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt);
3537 }
3538 #endif
3539 while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
3540 /* Here code is inserted which will be executed whenever the
3541 ** parser accepts */
3542 gda_lemon_firebird_parserARG_STORE; /* Suppress warning about unused %extra_argument variable */
3543 }
3544
3545 /* The main parser program.
3546 ** The first argument is a pointer to a structure obtained from
3547 ** "gda_lemon_firebird_parserAlloc" which describes the current state of the parser.
3548 ** The second argument is the major token number. The third is
3549 ** the minor token. The fourth optional argument is whatever the
3550 ** user wants (and specified in the grammar) and is available for
3551 ** use by the action routines.
3552 **
3553 ** Inputs:
3554 ** <ul>
3555 ** <li> A pointer to the parser (an opaque structure.)
3556 ** <li> The major token number.
3557 ** <li> The minor token number.
3558 ** <li> An option argument of a grammar-specified type.
3559 ** </ul>
3560 **
3561 ** Outputs:
3562 ** None.
3563 */
gda_lemon_firebird_parser(void * yyp,int yymajor,gda_lemon_firebird_parserTOKENTYPE yyminor gda_lemon_firebird_parserARG_PDECL)3564 void gda_lemon_firebird_parser(
3565 void *yyp, /* The parser */
3566 int yymajor, /* The major token code number */
3567 gda_lemon_firebird_parserTOKENTYPE yyminor /* The value for the token */
3568 gda_lemon_firebird_parserARG_PDECL /* Optional %extra_argument parameter */
3569 ){
3570 YYMINORTYPE yyminorunion;
3571 int yyact; /* The parser action. */
3572 int yyendofinput; /* True if we are at the end of input */
3573 #ifdef YYERRORSYMBOL
3574 int yyerrorhit = 0; /* True if yymajor has invoked an error */
3575 #endif
3576 yyParser *yypParser; /* The parser */
3577
3578 /* (re)initialize the parser, if necessary */
3579 yypParser = (yyParser*)yyp;
3580 if( yypParser->yyidx<0 ){
3581 #if YYSTACKDEPTH<=0
3582 if( yypParser->yystksz <=0 ){
3583 /*memset(&yyminorunion, 0, sizeof(yyminorunion));*/
3584 yyminorunion = yyzerominor;
3585 yyStackOverflow(yypParser, &yyminorunion);
3586 return;
3587 }
3588 #endif
3589 yypParser->yyidx = 0;
3590 yypParser->yyerrcnt = -1;
3591 yypParser->yystack[0].stateno = 0;
3592 yypParser->yystack[0].major = 0;
3593 }
3594 yyminorunion.yy0 = yyminor;
3595 yyendofinput = (yymajor==0);
3596 gda_lemon_firebird_parserARG_STORE;
3597
3598 #ifndef NDEBUG
3599 if( yyTraceFILE ){
3600 fprintf(yyTraceFILE,"%sInput %s\n",yyTracePrompt,yyTokenName[yymajor]);
3601 }
3602 #endif
3603
3604 do{
3605 yyact = yy_find_shift_action(yypParser,(YYCODETYPE)yymajor);
3606 if( yyact<YYNSTATE ){
3607 assert( !yyendofinput ); /* Impossible to shift the $ token */
3608 yy_shift(yypParser,yyact,yymajor,&yyminorunion);
3609 yypParser->yyerrcnt--;
3610 yymajor = YYNOCODE;
3611 }else if( yyact < YYNSTATE + YYNRULE ){
3612 yy_reduce(yypParser,yyact-YYNSTATE);
3613 }else{
3614 assert( yyact == YY_ERROR_ACTION );
3615 #ifdef YYERRORSYMBOL
3616 int yymx;
3617 #endif
3618 #ifndef NDEBUG
3619 if( yyTraceFILE ){
3620 fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt);
3621 }
3622 #endif
3623 #ifdef YYERRORSYMBOL
3624 /* A syntax error has occurred.
3625 ** The response to an error depends upon whether or not the
3626 ** grammar defines an error token "ERROR".
3627 **
3628 ** This is what we do if the grammar does define ERROR:
3629 **
3630 ** * Call the %syntax_error function.
3631 **
3632 ** * Begin popping the stack until we enter a state where
3633 ** it is legal to shift the error symbol, then shift
3634 ** the error symbol.
3635 **
3636 ** * Set the error count to three.
3637 **
3638 ** * Begin accepting and shifting new tokens. No new error
3639 ** processing will occur until three tokens have been
3640 ** shifted successfully.
3641 **
3642 */
3643 if( yypParser->yyerrcnt<0 ){
3644 yy_syntax_error(yypParser,yymajor,yyminorunion);
3645 }
3646 yymx = yypParser->yystack[yypParser->yyidx].major;
3647 if( yymx==YYERRORSYMBOL || yyerrorhit ){
3648 #ifndef NDEBUG
3649 if( yyTraceFILE ){
3650 fprintf(yyTraceFILE,"%sDiscard input token %s\n",
3651 yyTracePrompt,yyTokenName[yymajor]);
3652 }
3653 #endif
3654 yy_destructor(yypParser, (YYCODETYPE)yymajor,&yyminorunion);
3655 yymajor = YYNOCODE;
3656 }else{
3657 while(
3658 yypParser->yyidx >= 0 &&
3659 yymx != YYERRORSYMBOL &&
3660 (yyact = yy_find_reduce_action(
3661 yypParser->yystack[yypParser->yyidx].stateno,
3662 YYERRORSYMBOL)) >= YYNSTATE
3663 ){
3664 yy_pop_parser_stack(yypParser);
3665 }
3666 if( yypParser->yyidx < 0 || yymajor==0 ){
3667 yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
3668 yy_parse_failed(yypParser);
3669 yymajor = YYNOCODE;
3670 }else if( yymx!=YYERRORSYMBOL ){
3671 YYMINORTYPE u2;
3672 u2.YYERRSYMDT = 0;
3673 yy_shift(yypParser,yyact,YYERRORSYMBOL,&u2);
3674 }
3675 }
3676 yypParser->yyerrcnt = 3;
3677 yyerrorhit = 1;
3678 #elif defined(YYNOERRORRECOVERY)
3679 /* If the YYNOERRORRECOVERY macro is defined, then do not attempt to
3680 ** do any kind of error recovery. Instead, simply invoke the syntax
3681 ** error routine and continue going as if nothing had happened.
3682 **
3683 ** Applications can set this macro (for example inside %include) if
3684 ** they intend to abandon the parse upon the first syntax error seen.
3685 */
3686 yy_syntax_error(yypParser,yymajor,yyminorunion);
3687 yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
3688 yymajor = YYNOCODE;
3689
3690 #else /* YYERRORSYMBOL is not defined */
3691 /* This is what we do if the grammar does not define ERROR:
3692 **
3693 ** * Report an error message, and throw away the input token.
3694 **
3695 ** * If the input token is $, then fail the parse.
3696 **
3697 ** As before, subsequent error messages are suppressed until
3698 ** three input tokens have been successfully shifted.
3699 */
3700 if( yypParser->yyerrcnt<=0 ){
3701 yy_syntax_error(yypParser,yymajor,yyminorunion);
3702 }
3703 yypParser->yyerrcnt = 3;
3704 yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
3705 if( yyendofinput ){
3706 yy_parse_failed(yypParser);
3707 }
3708 yymajor = YYNOCODE;
3709 #endif
3710 }
3711 }while( yymajor!=YYNOCODE && yypParser->yyidx>=0 );
3712 return;
3713 }
3714