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