1//line sql.y:6
2package sqlparser
3
4import __yyfmt__ "fmt"
5
6//line sql.y:6
7import "bytes"
8
9func SetParseTree(yylex interface{}, stmt Statement) {
10	yylex.(*Tokenizer).ParseTree = stmt
11}
12
13func SetAllowComments(yylex interface{}, allow bool) {
14	yylex.(*Tokenizer).AllowComments = allow
15}
16
17func ForceEOF(yylex interface{}) {
18	yylex.(*Tokenizer).ForceEOF = true
19}
20
21var (
22	SHARE        = []byte("share")
23	MODE         = []byte("mode")
24	IF_BYTES     = []byte("if")
25	VALUES_BYTES = []byte("values")
26)
27
28//line sql.y:31
29type yySymType struct {
30	yys         int
31	empty       struct{}
32	statement   Statement
33	selStmt     SelectStatement
34	byt         byte
35	bytes       []byte
36	bytes2      [][]byte
37	str         string
38	selectExprs SelectExprs
39	selectExpr  SelectExpr
40	columns     Columns
41	colName     *ColName
42	tableExprs  TableExprs
43	tableExpr   TableExpr
44	smTableExpr SimpleTableExpr
45	tableName   *TableName
46	indexHints  *IndexHints
47	expr        Expr
48	boolExpr    BoolExpr
49	valExpr     ValExpr
50	colTuple    ColTuple
51	valExprs    ValExprs
52	values      Values
53	rowTuple    RowTuple
54	subquery    *Subquery
55	caseExpr    *CaseExpr
56	whens       []*When
57	when        *When
58	orderBy     OrderBy
59	order       *Order
60	limit       *Limit
61	insRows     InsertRows
62	updateExprs UpdateExprs
63	updateExpr  *UpdateExpr
64}
65
66const LEX_ERROR = 57346
67const SELECT = 57347
68const INSERT = 57348
69const UPDATE = 57349
70const DELETE = 57350
71const FROM = 57351
72const WHERE = 57352
73const GROUP = 57353
74const HAVING = 57354
75const ORDER = 57355
76const BY = 57356
77const LIMIT = 57357
78const FOR = 57358
79const ALL = 57359
80const DISTINCT = 57360
81const AS = 57361
82const EXISTS = 57362
83const IN = 57363
84const IS = 57364
85const LIKE = 57365
86const BETWEEN = 57366
87const NULL = 57367
88const ASC = 57368
89const DESC = 57369
90const VALUES = 57370
91const INTO = 57371
92const DUPLICATE = 57372
93const KEY = 57373
94const DEFAULT = 57374
95const SET = 57375
96const LOCK = 57376
97const KEYRANGE = 57377
98const ID = 57378
99const STRING = 57379
100const NUMBER = 57380
101const VALUE_ARG = 57381
102const LIST_ARG = 57382
103const COMMENT = 57383
104const LE = 57384
105const GE = 57385
106const NE = 57386
107const NULL_SAFE_EQUAL = 57387
108const UNION = 57388
109const MINUS = 57389
110const EXCEPT = 57390
111const INTERSECT = 57391
112const JOIN = 57392
113const STRAIGHT_JOIN = 57393
114const LEFT = 57394
115const RIGHT = 57395
116const INNER = 57396
117const OUTER = 57397
118const CROSS = 57398
119const NATURAL = 57399
120const USE = 57400
121const FORCE = 57401
122const ON = 57402
123const OR = 57403
124const AND = 57404
125const NOT = 57405
126const UNARY = 57406
127const CASE = 57407
128const WHEN = 57408
129const THEN = 57409
130const ELSE = 57410
131const END = 57411
132const CREATE = 57412
133const ALTER = 57413
134const DROP = 57414
135const RENAME = 57415
136const ANALYZE = 57416
137const TABLE = 57417
138const INDEX = 57418
139const VIEW = 57419
140const TO = 57420
141const IGNORE = 57421
142const IF = 57422
143const UNIQUE = 57423
144const USING = 57424
145const SHOW = 57425
146const DESCRIBE = 57426
147const EXPLAIN = 57427
148
149var yyToknames = []string{
150	"LEX_ERROR",
151	"SELECT",
152	"INSERT",
153	"UPDATE",
154	"DELETE",
155	"FROM",
156	"WHERE",
157	"GROUP",
158	"HAVING",
159	"ORDER",
160	"BY",
161	"LIMIT",
162	"FOR",
163	"ALL",
164	"DISTINCT",
165	"AS",
166	"EXISTS",
167	"IN",
168	"IS",
169	"LIKE",
170	"BETWEEN",
171	"NULL",
172	"ASC",
173	"DESC",
174	"VALUES",
175	"INTO",
176	"DUPLICATE",
177	"KEY",
178	"DEFAULT",
179	"SET",
180	"LOCK",
181	"KEYRANGE",
182	"ID",
183	"STRING",
184	"NUMBER",
185	"VALUE_ARG",
186	"LIST_ARG",
187	"COMMENT",
188	"LE",
189	"GE",
190	"NE",
191	"NULL_SAFE_EQUAL",
192	"'('",
193	"'='",
194	"'<'",
195	"'>'",
196	"'~'",
197	"UNION",
198	"MINUS",
199	"EXCEPT",
200	"INTERSECT",
201	"','",
202	"JOIN",
203	"STRAIGHT_JOIN",
204	"LEFT",
205	"RIGHT",
206	"INNER",
207	"OUTER",
208	"CROSS",
209	"NATURAL",
210	"USE",
211	"FORCE",
212	"ON",
213	"OR",
214	"AND",
215	"NOT",
216	"'&'",
217	"'|'",
218	"'^'",
219	"'+'",
220	"'-'",
221	"'*'",
222	"'/'",
223	"'%'",
224	"'.'",
225	"UNARY",
226	"CASE",
227	"WHEN",
228	"THEN",
229	"ELSE",
230	"END",
231	"CREATE",
232	"ALTER",
233	"DROP",
234	"RENAME",
235	"ANALYZE",
236	"TABLE",
237	"INDEX",
238	"VIEW",
239	"TO",
240	"IGNORE",
241	"IF",
242	"UNIQUE",
243	"USING",
244	"SHOW",
245	"DESCRIBE",
246	"EXPLAIN",
247}
248var yyStatenames = []string{}
249
250const yyEofCode = 1
251const yyErrCode = 2
252const yyMaxDepth = 200
253
254//line yacctab:1
255var yyExca = []int{
256	-1, 1,
257	1, -1,
258	-2, 0,
259}
260
261const yyNprod = 207
262const yyPrivate = 57344
263
264var yyTokenNames []string
265var yyStates []string
266
267const yyLast = 678
268
269var yyAct = []int{
270
271	51, 122, 141, 363, 359, 342, 49, 48, 83, 314,
272	366, 280, 126, 334, 225, 159, 142, 42, 43, 125,
273	3, 163, 205, 174, 332, 60, 47, 90, 138, 381,
274	381, 37, 31, 32, 33, 34, 84, 85, 99, 98,
275	268, 94, 15, 17, 18, 19, 153, 146, 127, 381,
276	86, 340, 128, 91, 196, 29, 320, 91, 91, 219,
277	71, 196, 73, 121, 124, 76, 74, 77, 136, 330,
278	20, 144, 194, 38, 148, 383, 382, 150, 143, 329,
279	132, 154, 195, 328, 147, 230, 231, 232, 233, 234,
280	43, 235, 236, 43, 149, 380, 168, 339, 170, 302,
281	299, 82, 173, 251, 249, 181, 182, 197, 185, 186,
282	187, 188, 189, 190, 191, 192, 171, 172, 167, 304,
283	157, 78, 21, 22, 24, 23, 25, 176, 293, 295,
284	297, 198, 43, 43, 206, 26, 27, 28, 79, 80,
285	81, 206, 183, 255, 241, 99, 98, 152, 215, 109,
286	110, 111, 112, 113, 214, 209, 223, 216, 294, 218,
287	306, 203, 200, 202, 193, 161, 207, 97, 96, 210,
288	274, 111, 112, 113, 99, 98, 98, 198, 227, 211,
289	335, 244, 245, 327, 325, 224, 184, 240, 242, 272,
290	335, 167, 316, 275, 170, 222, 287, 326, 248, 291,
291	285, 288, 243, 43, 176, 286, 290, 169, 160, 144,
292	289, 260, 144, 211, 264, 373, 143, 354, 196, 143,
293	252, 228, 265, 212, 256, 92, 262, 254, 263, 155,
294	129, 352, 278, 250, 258, 230, 231, 232, 233, 234,
295	279, 235, 236, 271, 273, 270, 166, 259, 301, 351,
296	283, 284, 15, 211, 167, 167, 165, 305, 350, 144,
297	144, 310, 31, 32, 33, 34, 143, 312, 177, 317,
298	134, 91, 133, 131, 175, 130, 313, 309, 318, 303,
299	158, 239, 96, 166, 198, 123, 346, 345, 298, 95,
300	322, 59, 296, 165, 321, 324, 277, 276, 238, 323,
301	261, 220, 331, 56, 57, 58, 96, 217, 333, 213,
302	139, 156, 151, 16, 364, 337, 208, 370, 353, 15,
303	137, 247, 379, 341, 338, 266, 29, 178, 348, 179,
304	180, 221, 365, 347, 87, 343, 344, 282, 315, 281,
305	226, 144, 308, 349, 160, 357, 360, 356, 355, 88,
306	140, 367, 367, 367, 361, 384, 378, 362, 15, 36,
307	267, 371, 368, 369, 72, 319, 269, 75, 377, 145,
308	311, 257, 374, 358, 385, 360, 375, 376, 386, 35,
309	388, 387, 389, 253, 201, 144, 54, 390, 135, 391,
310	204, 59, 143, 53, 65, 50, 52, 67, 68, 69,
311	70, 55, 41, 56, 57, 58, 336, 307, 100, 44,
312	292, 164, 46, 229, 162, 40, 63, 237, 93, 30,
313	106, 107, 108, 109, 110, 111, 112, 113, 89, 14,
314	13, 12, 11, 10, 9, 45, 8, 7, 6, 61,
315	62, 39, 5, 4, 2, 1, 66, 54, 0, 0,
316	0, 0, 59, 0, 0, 65, 0, 0, 0, 0,
317	0, 64, 55, 41, 56, 57, 58, 199, 0, 372,
318	0, 0, 0, 46, 0, 0, 0, 63, 0, 0,
319	0, 0, 0, 15, 106, 107, 108, 109, 110, 111,
320	112, 113, 0, 0, 0, 0, 45, 0, 54, 0,
321	61, 62, 39, 59, 0, 0, 65, 66, 0, 0,
322	0, 0, 0, 55, 123, 56, 57, 58, 54, 0,
323	0, 0, 64, 59, 46, 0, 65, 0, 63, 0,
324	0, 0, 0, 55, 123, 56, 57, 58, 0, 0,
325	0, 0, 0, 15, 46, 0, 0, 45, 63, 0,
326	0, 61, 62, 0, 0, 0, 0, 0, 66, 0,
327	0, 0, 0, 59, 0, 0, 65, 45, 0, 0,
328	0, 61, 62, 64, 123, 56, 57, 58, 66, 0,
329	0, 0, 0, 59, 129, 0, 65, 0, 63, 0,
330	0, 0, 0, 64, 123, 56, 57, 58, 0, 0,
331	0, 0, 0, 0, 129, 0, 0, 0, 63, 0,
332	0, 61, 62, 101, 105, 103, 104, 300, 66, 106,
333	107, 108, 109, 110, 111, 112, 113, 0, 0, 0,
334	0, 61, 62, 64, 117, 118, 119, 120, 66, 114,
335	115, 116, 246, 0, 106, 107, 108, 109, 110, 111,
336	112, 113, 0, 64, 0, 0, 0, 0, 0, 0,
337	0, 102, 106, 107, 108, 109, 110, 111, 112, 113,
338	106, 107, 108, 109, 110, 111, 112, 113,
339}
340var yyPact = []int{
341
342	37, -1000, -1000, 211, -1000, -1000, -1000, -1000, -1000, -1000,
343	-1000, -1000, -1000, -1000, -1000, -1000, 427, -1000, -1000, -1000,
344	-1000, -30, -27, 31, 48, 11, -1000, -1000, -1000, -1000,
345	353, 317, -1000, -1000, -1000, 308, -1000, 216, -1000, -1000,
346	270, 89, 107, 592, -1000, 498, 478, -1000, -1000, -1000,
347	558, 229, 227, -1000, 226, 224, -1000, -1000, -1000, -1000,
348	-1000, -1000, -1000, -1000, -1000, -1000, 558, 291, 274, 341,
349	249, -48, -7, 246, -1000, 4, 246, -1000, 276, -49,
350	246, -49, 275, -1000, -1000, -1000, -1000, -1000, 427, 239,
351	334, 427, 210, -1000, -1000, 246, -1000, 132, 498, 498,
352	558, 228, 306, 558, 558, 117, 558, 558, 558, 558,
353	558, 558, 558, 558, -1000, -1000, -1000, -1000, -1000, -1000,
354	-1000, -1000, 592, 86, -29, -19, 6, 592, -1000, 538,
355	366, 427, -1000, 353, 266, 53, 600, 274, 283, 77,
356	274, 158, -1000, 176, -1000, 273, 85, 246, -1000, 271,
357	-1000, -34, 265, 311, 129, 246, -1000, 216, -1000, 329,
358	498, -1000, 166, 179, 262, 247, 66, -1000, -1000, -1000,
359	-1000, -1000, 108, 600, -1000, 538, -1000, -1000, 228, 558,
360	558, 600, 574, -1000, 296, 76, 76, 76, 96, 96,
361	-1000, -1000, -1000, 246, -1000, -1000, 558, -1000, 600, -1000,
362	3, 427, 2, 165, 60, -1000, 498, 201, 249, 264,
363	334, 249, 558, -1000, 305, -57, -1000, 157, -1000, 261,
364	-1000, -1000, 260, -1000, 334, 327, 323, 107, 210, 210,
365	-1000, -1000, 144, 140, 154, 150, 143, 64, -1000, 256,
366	29, 252, -1, -1000, 600, 549, 558, -1000, 600, -1000,
367	-2, -1000, 266, 35, -1000, 558, 78, 314, 249, 249,
368	198, -1000, 325, -1000, 600, -1000, -1000, 126, 246, -1000,
369	-37, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 329,
370	325, 498, 558, 179, 118, -1000, 141, -1000, 127, -1000,
371	-1000, -1000, -1000, -8, -12, -22, -1000, -1000, -1000, -1000,
372	558, 600, -1000, -77, -1000, 600, 558, 114, 184, 211,
373	124, -4, -1000, 325, 320, 322, 251, -1000, -1000, 250,
374	-1000, 327, 320, 107, 163, 498, -1000, -1000, 212, 203,
375	185, 600, -1000, 600, -1000, 288, 162, -1000, -1000, -1000,
376	249, 320, -1000, 558, 558, -1000, -1000, 325, 298, 107,
377	246, 246, 246, 286, 184, -1000, -1000, 414, 160, -1000,
378	350, -1000, 320, -1000, 349, 301, -6, -1000, -25, -26,
379	348, -1000, 558, 558, -1000, -1000, -1000, 298, -1000, 246,
380	-1000, 246, -1000, -1000, 249, 600, -1000, -1000, 246, -1000,
381	158, -1000,
382}
383var yyPgo = []int{
384
385	0, 445, 444, 19, 443, 442, 438, 437, 436, 434,
386	433, 432, 431, 430, 429, 379, 428, 419, 313, 31,
387	73, 418, 417, 415, 414, 21, 27, 413, 411, 28,
388	410, 10, 15, 17, 409, 408, 407, 26, 1, 23,
389	12, 406, 6, 396, 25, 395, 7, 393, 390, 22,
390	388, 383, 14, 11, 9, 373, 4, 372, 5, 3,
391	371, 370, 13, 2, 16, 147, 369, 367, 366, 365,
392	364, 360, 0, 8, 359,
393}
394var yyR1 = []int{
395
396	0, 1, 2, 2, 2, 2, 2, 2, 2, 2,
397	2, 2, 2, 2, 4, 3, 3, 5, 5, 6,
398	7, 8, 9, 9, 9, 10, 10, 10, 11, 12,
399	12, 12, 13, 14, 14, 14, 74, 15, 16, 16,
400	17, 17, 17, 17, 17, 18, 18, 19, 19, 20,
401	20, 20, 23, 23, 21, 21, 21, 24, 24, 25,
402	25, 25, 25, 22, 22, 22, 27, 27, 27, 27,
403	27, 27, 27, 27, 27, 28, 28, 28, 29, 29,
404	30, 30, 30, 30, 31, 31, 26, 26, 32, 32,
405	33, 33, 33, 33, 33, 34, 34, 34, 34, 34,
406	34, 34, 34, 34, 34, 34, 35, 35, 35, 35,
407	35, 35, 35, 39, 39, 39, 44, 40, 40, 38,
408	38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
409	38, 38, 38, 38, 38, 38, 43, 43, 45, 45,
410	45, 47, 50, 50, 48, 48, 49, 51, 51, 46,
411	46, 37, 37, 37, 37, 52, 52, 53, 53, 54,
412	54, 55, 55, 56, 57, 57, 57, 58, 58, 58,
413	59, 59, 59, 60, 60, 61, 61, 62, 62, 36,
414	36, 41, 41, 42, 42, 63, 63, 64, 65, 65,
415	66, 66, 67, 67, 68, 68, 68, 68, 68, 69,
416	69, 70, 70, 71, 71, 72, 73,
417}
418var yyR2 = []int{
419
420	0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
421	1, 1, 1, 1, 9, 11, 3, 7, 7, 8,
422	7, 3, 5, 8, 4, 6, 7, 4, 5, 4,
423	5, 5, 3, 2, 2, 2, 0, 2, 0, 2,
424	1, 2, 1, 1, 1, 0, 1, 1, 3, 1,
425	2, 3, 1, 1, 0, 1, 2, 1, 3, 3,
426	3, 3, 5, 0, 1, 2, 1, 1, 2, 3,
427	2, 3, 2, 2, 2, 1, 3, 1, 1, 3,
428	0, 5, 5, 5, 1, 3, 0, 2, 0, 2,
429	1, 3, 3, 2, 3, 3, 3, 4, 3, 4,
430	5, 6, 3, 4, 2, 6, 1, 1, 1, 1,
431	1, 1, 1, 3, 1, 1, 3, 1, 3, 1,
432	1, 1, 3, 3, 3, 3, 3, 3, 3, 3,
433	2, 3, 4, 5, 4, 1, 1, 1, 1, 1,
434	1, 5, 0, 1, 1, 2, 4, 0, 2, 1,
435	3, 1, 1, 1, 1, 0, 3, 0, 2, 0,
436	3, 1, 3, 2, 0, 1, 1, 0, 2, 4,
437	0, 2, 4, 0, 3, 1, 3, 0, 5, 2,
438	1, 1, 3, 3, 1, 1, 3, 3, 0, 2,
439	0, 3, 0, 1, 1, 1, 1, 1, 1, 0,
440	1, 0, 1, 0, 2, 1, 0,
441}
442var yyChk = []int{
443
444	-1000, -1, -2, -3, -4, -5, -6, -7, -8, -9,
445	-10, -11, -12, -13, -14, 5, -18, 6, 7, 8,
446	33, 85, 86, 88, 87, 89, 98, 99, 100, 18,
447	-17, 51, 52, 53, 54, -15, -74, -19, -20, 75,
448	-23, 36, -33, -38, -34, 69, 46, -37, -46, -42,
449	-45, -72, -43, -47, 20, 35, 37, 38, 39, 25,
450	-44, 73, 74, 50, 95, 28, 80, -15, -15, -15,
451	-15, 90, -70, 92, 96, -67, 92, 94, 90, 90,
452	91, 92, 90, -73, -73, -73, -3, 17, -18, -16,
453	-26, 55, 9, -21, -72, 19, 36, 78, 68, 67,
454	-35, 21, 69, 23, 24, 22, 70, 71, 72, 73,
455	74, 75, 76, 77, 47, 48, 49, 42, 43, 44,
456	45, -33, -38, 36, -33, -3, -40, -38, -38, 46,
457	46, 46, -44, 46, 46, -50, -38, 29, -29, 36,
458	9, -63, -64, -46, -72, -66, 95, 91, -72, 90,
459	-72, 36, -65, 95, -72, -65, 36, -19, 41, -32,
460	10, -20, -24, -25, -28, 46, 36, -44, -72, 75,
461	-72, -33, -33, -38, -39, 46, -44, 40, 21, 23,
462	24, -38, -38, 25, 69, -38, -38, -38, -38, -38,
463	-38, -38, -38, 78, 101, 101, 55, 101, -38, 101,
464	-19, 18, -19, -37, -48, -49, 81, -29, 33, 78,
465	-29, 55, 47, 36, 69, -72, -73, 36, -73, 93,
466	36, 20, 66, -72, -26, -52, 11, -33, 55, -27,
467	56, 57, 58, 59, 60, 62, 63, -22, 36, 19,
468	-25, 78, -40, -39, -38, -38, 68, 25, -38, 101,
469	-19, 101, 55, -51, -49, 83, -33, -60, 33, 46,
470	-63, 36, -32, -64, -38, -73, 20, -71, 97, -68,
471	88, 86, 32, 87, 13, 36, 36, 36, -73, -32,
472	-53, 12, 14, -25, -25, 56, 61, 56, 61, 56,
473	56, 56, -30, 64, 94, 65, 36, 101, 36, 101,
474	68, -38, 101, -37, 84, -38, 82, -36, 28, -3,
475	-63, -61, -46, -32, -54, 13, 66, -72, -73, -69,
476	93, -52, -54, -33, -40, 66, 56, 56, 91, 91,
477	91, -38, 101, -38, -62, 66, -41, -42, -62, 101,
478	55, -54, -58, 15, 14, 36, 36, -53, -58, -33,
479	46, 46, 46, 30, 55, -46, -58, -38, -55, -56,
480	-38, -73, -54, -59, 16, 34, -31, -72, -31, -31,
481	31, -42, 55, 55, -57, 26, 27, -58, 7, 21,
482	101, 55, 101, 101, 7, -38, -56, -59, -72, -72,
483	-63, -72,
484}
485var yyDef = []int{
486
487	45, -2, 1, 2, 3, 4, 5, 6, 7, 8,
488	9, 10, 11, 12, 13, 36, 0, 36, 36, 36,
489	36, 201, 192, 0, 0, 0, 206, 206, 206, 46,
490	0, 40, 42, 43, 44, 45, 38, 86, 47, 49,
491	54, 205, 52, 53, 90, 0, 0, 119, 120, 121,
492	0, 149, 0, 135, 0, 0, 151, 152, 153, 154,
493	184, 138, 139, 140, 136, 137, 142, 0, 0, 0,
494	0, 190, 0, 0, 202, 0, 0, 193, 0, 188,
495	0, 188, 0, 33, 34, 35, 16, 41, 0, 37,
496	88, 0, 0, 50, 55, 0, 205, 0, 0, 0,
497	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
498	0, 0, 0, 0, 106, 107, 108, 109, 110, 111,
499	112, 93, 0, 205, 0, 0, 0, 117, 130, 0,
500	0, 0, 104, 0, 0, 0, 143, 0, 0, 78,
501	0, 21, 185, 0, 149, 0, 0, 0, 206, 0,
502	206, 0, 0, 0, 0, 0, 32, 86, 39, 155,
503	0, 48, 87, 57, 63, 0, 75, 77, 56, 51,
504	150, 91, 92, 95, 96, 0, 114, 115, 0, 0,
505	0, 98, 0, 102, 0, 122, 123, 124, 125, 126,
506	127, 128, 129, 0, 94, 116, 0, 183, 117, 131,
507	0, 0, 0, 0, 147, 144, 0, 173, 0, 0,
508	88, 0, 0, 206, 0, 203, 24, 0, 27, 0,
509	29, 189, 0, 206, 88, 157, 0, 89, 0, 0,
510	66, 67, 0, 0, 0, 0, 0, 80, 64, 0,
511	0, 0, 0, 97, 99, 0, 0, 103, 118, 132,
512	0, 134, 0, 0, 145, 0, 0, 0, 0, 0,
513	88, 79, 159, 186, 187, 22, 191, 0, 0, 206,
514	199, 194, 195, 196, 197, 198, 28, 30, 31, 155,
515	159, 0, 0, 58, 61, 68, 0, 70, 0, 72,
516	73, 74, 59, 0, 0, 0, 65, 60, 76, 113,
517	0, 100, 133, 0, 141, 148, 0, 177, 0, 180,
518	177, 0, 175, 159, 167, 0, 0, 204, 25, 0,
519	200, 157, 167, 158, 156, 0, 69, 71, 0, 0,
520	0, 101, 105, 146, 17, 0, 179, 181, 18, 174,
521	0, 167, 20, 0, 0, 206, 26, 159, 170, 62,
522	0, 0, 0, 0, 0, 176, 19, 168, 160, 161,
523	164, 23, 167, 14, 0, 0, 0, 84, 0, 0,
524	0, 182, 0, 0, 163, 165, 166, 170, 171, 0,
525	81, 0, 82, 83, 0, 169, 162, 15, 0, 85,
526	178, 172,
527}
528var yyTok1 = []int{
529
530	1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
531	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
532	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
533	3, 3, 3, 3, 3, 3, 3, 77, 70, 3,
534	46, 101, 75, 73, 55, 74, 78, 76, 3, 3,
535	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
536	48, 47, 49, 3, 3, 3, 3, 3, 3, 3,
537	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
538	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
539	3, 3, 3, 3, 72, 3, 3, 3, 3, 3,
540	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
541	3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
542	3, 3, 3, 3, 71, 3, 50,
543}
544var yyTok2 = []int{
545
546	2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
547	12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
548	22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
549	32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
550	42, 43, 44, 45, 51, 52, 53, 54, 56, 57,
551	58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
552	68, 69, 79, 80, 81, 82, 83, 84, 85, 86,
553	87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
554	97, 98, 99, 100,
555}
556var yyTok3 = []int{
557	0,
558}
559
560//line yaccpar:1
561
562/*	parser for yacc output	*/
563
564var yyDebug = 0
565
566type yyLexer interface {
567	Lex(lval *yySymType) int
568	Error(s string)
569}
570
571const yyFlag = -1000
572
573func yyTokname(c int) string {
574	// 4 is TOKSTART above
575	if c >= 4 && c-4 < len(yyToknames) {
576		if yyToknames[c-4] != "" {
577			return yyToknames[c-4]
578		}
579	}
580	return __yyfmt__.Sprintf("tok-%v", c)
581}
582
583func yyStatname(s int) string {
584	if s >= 0 && s < len(yyStatenames) {
585		if yyStatenames[s] != "" {
586			return yyStatenames[s]
587		}
588	}
589	return __yyfmt__.Sprintf("state-%v", s)
590}
591
592func yylex1(lex yyLexer, lval *yySymType) int {
593	c := 0
594	char := lex.Lex(lval)
595	if char <= 0 {
596		c = yyTok1[0]
597		goto out
598	}
599	if char < len(yyTok1) {
600		c = yyTok1[char]
601		goto out
602	}
603	if char >= yyPrivate {
604		if char < yyPrivate+len(yyTok2) {
605			c = yyTok2[char-yyPrivate]
606			goto out
607		}
608	}
609	for i := 0; i < len(yyTok3); i += 2 {
610		c = yyTok3[i+0]
611		if c == char {
612			c = yyTok3[i+1]
613			goto out
614		}
615	}
616
617out:
618	if c == 0 {
619		c = yyTok2[1] /* unknown char */
620	}
621	if yyDebug >= 3 {
622		__yyfmt__.Printf("lex %s(%d)\n", yyTokname(c), uint(char))
623	}
624	return c
625}
626
627func yyParse(yylex yyLexer) int {
628	var yyn int
629	var yylval yySymType
630	var yyVAL yySymType
631	yyS := make([]yySymType, yyMaxDepth)
632
633	Nerrs := 0   /* number of errors */
634	Errflag := 0 /* error recovery flag */
635	yystate := 0
636	yychar := -1
637	yyp := -1
638	goto yystack
639
640ret0:
641	return 0
642
643ret1:
644	return 1
645
646yystack:
647	/* put a state and value onto the stack */
648	if yyDebug >= 4 {
649		__yyfmt__.Printf("char %v in %v\n", yyTokname(yychar), yyStatname(yystate))
650	}
651
652	yyp++
653	if yyp >= len(yyS) {
654		nyys := make([]yySymType, len(yyS)*2)
655		copy(nyys, yyS)
656		yyS = nyys
657	}
658	yyS[yyp] = yyVAL
659	yyS[yyp].yys = yystate
660
661yynewstate:
662	yyn = yyPact[yystate]
663	if yyn <= yyFlag {
664		goto yydefault /* simple state */
665	}
666	if yychar < 0 {
667		yychar = yylex1(yylex, &yylval)
668	}
669	yyn += yychar
670	if yyn < 0 || yyn >= yyLast {
671		goto yydefault
672	}
673	yyn = yyAct[yyn]
674	if yyChk[yyn] == yychar { /* valid shift */
675		yychar = -1
676		yyVAL = yylval
677		yystate = yyn
678		if Errflag > 0 {
679			Errflag--
680		}
681		goto yystack
682	}
683
684yydefault:
685	/* default state action */
686	yyn = yyDef[yystate]
687	if yyn == -2 {
688		if yychar < 0 {
689			yychar = yylex1(yylex, &yylval)
690		}
691
692		/* look through exception table */
693		xi := 0
694		for {
695			if yyExca[xi+0] == -1 && yyExca[xi+1] == yystate {
696				break
697			}
698			xi += 2
699		}
700		for xi += 2; ; xi += 2 {
701			yyn = yyExca[xi+0]
702			if yyn < 0 || yyn == yychar {
703				break
704			}
705		}
706		yyn = yyExca[xi+1]
707		if yyn < 0 {
708			goto ret0
709		}
710	}
711	if yyn == 0 {
712		/* error ... attempt to resume parsing */
713		switch Errflag {
714		case 0: /* brand new error */
715			yylex.Error("syntax error")
716			Nerrs++
717			if yyDebug >= 1 {
718				__yyfmt__.Printf("%s", yyStatname(yystate))
719				__yyfmt__.Printf(" saw %s\n", yyTokname(yychar))
720			}
721			fallthrough
722
723		case 1, 2: /* incompletely recovered error ... try again */
724			Errflag = 3
725
726			/* find a state where "error" is a legal shift action */
727			for yyp >= 0 {
728				yyn = yyPact[yyS[yyp].yys] + yyErrCode
729				if yyn >= 0 && yyn < yyLast {
730					yystate = yyAct[yyn] /* simulate a shift of "error" */
731					if yyChk[yystate] == yyErrCode {
732						goto yystack
733					}
734				}
735
736				/* the current p has no shift on "error", pop stack */
737				if yyDebug >= 2 {
738					__yyfmt__.Printf("error recovery pops state %d\n", yyS[yyp].yys)
739				}
740				yyp--
741			}
742			/* there is no state on the stack with an error shift ... abort */
743			goto ret1
744
745		case 3: /* no shift yet; clobber input char */
746			if yyDebug >= 2 {
747				__yyfmt__.Printf("error recovery discards %s\n", yyTokname(yychar))
748			}
749			if yychar == yyEofCode {
750				goto ret1
751			}
752			yychar = -1
753			goto yynewstate /* try again in the same state */
754		}
755	}
756
757	/* reduction by production yyn */
758	if yyDebug >= 2 {
759		__yyfmt__.Printf("reduce %v in:\n\t%v\n", yyn, yyStatname(yystate))
760	}
761
762	yynt := yyn
763	yypt := yyp
764	_ = yypt // guard against "declared and not used"
765
766	yyp -= yyR2[yyn]
767	yyVAL = yyS[yyp+1]
768
769	/* consult goto table to find next state */
770	yyn = yyR1[yyn]
771	yyg := yyPgo[yyn]
772	yyj := yyg + yyS[yyp].yys + 1
773
774	if yyj >= yyLast {
775		yystate = yyAct[yyg]
776	} else {
777		yystate = yyAct[yyj]
778		if yyChk[yystate] != -yyn {
779			yystate = yyAct[yyg]
780		}
781	}
782	// dummy call; replaced with literal code
783	switch yynt {
784
785	case 1:
786		//line sql.y:154
787		{
788			SetParseTree(yylex, yyS[yypt-0].statement)
789		}
790	case 2:
791		//line sql.y:160
792		{
793			yyVAL.statement = yyS[yypt-0].selStmt
794		}
795	case 3:
796		//line sql.y:164
797		{
798			yyVAL.statement = yyS[yypt-0].selStmt
799		}
800	case 4:
801		yyVAL.statement = yyS[yypt-0].statement
802	case 5:
803		yyVAL.statement = yyS[yypt-0].statement
804	case 6:
805		yyVAL.statement = yyS[yypt-0].statement
806	case 7:
807		yyVAL.statement = yyS[yypt-0].statement
808	case 8:
809		yyVAL.statement = yyS[yypt-0].statement
810	case 9:
811		yyVAL.statement = yyS[yypt-0].statement
812	case 10:
813		yyVAL.statement = yyS[yypt-0].statement
814	case 11:
815		yyVAL.statement = yyS[yypt-0].statement
816	case 12:
817		yyVAL.statement = yyS[yypt-0].statement
818	case 13:
819		yyVAL.statement = yyS[yypt-0].statement
820	case 14:
821		//line sql.y:180
822		{
823			yyVAL.selStmt = &Select{Comments: nil, Distinct: yyS[yypt-8].str, SelectExprs: yyS[yypt-7].selectExprs, From: NewFrom(AST_FROM, yyS[yypt-6].tableExprs), Where: NewWhere(AST_WHERE, yyS[yypt-5].boolExpr), GroupBy: GroupBy(yyS[yypt-4].valExprs), Having: NewWhere(AST_HAVING, yyS[yypt-3].boolExpr), OrderBy: yyS[yypt-2].orderBy, Limit: yyS[yypt-1].limit, Lock: yyS[yypt-0].str}
824		}
825	case 15:
826		//line sql.y:186
827		{
828			yyVAL.selStmt = &Select{Comments: Comments(yyS[yypt-9].bytes2), Distinct: yyS[yypt-8].str, SelectExprs: yyS[yypt-7].selectExprs, From: NewFrom(AST_FROM, yyS[yypt-6].tableExprs), Where: NewWhere(AST_WHERE, yyS[yypt-5].boolExpr), GroupBy: GroupBy(yyS[yypt-4].valExprs), Having: NewWhere(AST_HAVING, yyS[yypt-3].boolExpr), OrderBy: yyS[yypt-2].orderBy, Limit: yyS[yypt-1].limit, Lock: yyS[yypt-0].str}
829		}
830	case 16:
831		//line sql.y:190
832		{
833			yyVAL.selStmt = &Union{Type: yyS[yypt-1].str, Left: yyS[yypt-2].selStmt, Right: yyS[yypt-0].selStmt}
834		}
835	case 17:
836		//line sql.y:196
837		{
838			yyVAL.statement = &Insert{Comments: Comments(yyS[yypt-5].bytes2), Table: yyS[yypt-3].tableName, Columns: yyS[yypt-2].columns, Rows: yyS[yypt-1].insRows, OnDup: OnDup(yyS[yypt-0].updateExprs)}
839		}
840	case 18:
841		//line sql.y:200
842		{
843			cols := make(Columns, 0, len(yyS[yypt-1].updateExprs))
844			vals := make(ValTuple, 0, len(yyS[yypt-1].updateExprs))
845			for _, col := range yyS[yypt-1].updateExprs {
846				cols = append(cols, &NonStarExpr{Expr: col.Name})
847				vals = append(vals, col.Expr)
848			}
849			yyVAL.statement = &Insert{Comments: Comments(yyS[yypt-5].bytes2), Table: yyS[yypt-3].tableName, Columns: cols, Rows: Values{vals}, OnDup: OnDup(yyS[yypt-0].updateExprs)}
850		}
851	case 19:
852		//line sql.y:212
853		{
854			yyVAL.statement = &Update{Comments: Comments(yyS[yypt-6].bytes2), Table: yyS[yypt-5].tableName, Exprs: yyS[yypt-3].updateExprs, Where: NewWhere(AST_WHERE, yyS[yypt-2].boolExpr), OrderBy: yyS[yypt-1].orderBy, Limit: yyS[yypt-0].limit}
855		}
856	case 20:
857		//line sql.y:218
858		{
859			yyVAL.statement = &Delete{Comments: Comments(yyS[yypt-5].bytes2), Table: yyS[yypt-3].tableName, Where: NewWhere(AST_WHERE, yyS[yypt-2].boolExpr), OrderBy: yyS[yypt-1].orderBy, Limit: yyS[yypt-0].limit}
860		}
861	case 21:
862		//line sql.y:224
863		{
864			yyVAL.statement = &Set{Comments: Comments(yyS[yypt-1].bytes2), Exprs: yyS[yypt-0].updateExprs}
865		}
866	case 22:
867		//line sql.y:230
868		{
869			yyVAL.statement = &DDL{Action: AST_CREATE, NewName: yyS[yypt-1].bytes}
870		}
871	case 23:
872		//line sql.y:234
873		{
874			// Change this to an alter statement
875			yyVAL.statement = &DDL{Action: AST_ALTER, Table: yyS[yypt-1].bytes, NewName: yyS[yypt-1].bytes}
876		}
877	case 24:
878		//line sql.y:239
879		{
880			yyVAL.statement = &DDL{Action: AST_CREATE, NewName: yyS[yypt-1].bytes}
881		}
882	case 25:
883		//line sql.y:245
884		{
885			yyVAL.statement = &DDL{Action: AST_ALTER, Table: yyS[yypt-2].bytes, NewName: yyS[yypt-2].bytes}
886		}
887	case 26:
888		//line sql.y:249
889		{
890			// Change this to a rename statement
891			yyVAL.statement = &DDL{Action: AST_RENAME, Table: yyS[yypt-3].bytes, NewName: yyS[yypt-0].bytes}
892		}
893	case 27:
894		//line sql.y:254
895		{
896			yyVAL.statement = &DDL{Action: AST_ALTER, Table: yyS[yypt-1].bytes, NewName: yyS[yypt-1].bytes}
897		}
898	case 28:
899		//line sql.y:260
900		{
901			yyVAL.statement = &DDL{Action: AST_RENAME, Table: yyS[yypt-2].bytes, NewName: yyS[yypt-0].bytes}
902		}
903	case 29:
904		//line sql.y:266
905		{
906			yyVAL.statement = &DDL{Action: AST_DROP, Table: yyS[yypt-0].bytes}
907		}
908	case 30:
909		//line sql.y:270
910		{
911			// Change this to an alter statement
912			yyVAL.statement = &DDL{Action: AST_ALTER, Table: yyS[yypt-0].bytes, NewName: yyS[yypt-0].bytes}
913		}
914	case 31:
915		//line sql.y:275
916		{
917			yyVAL.statement = &DDL{Action: AST_DROP, Table: yyS[yypt-1].bytes}
918		}
919	case 32:
920		//line sql.y:281
921		{
922			yyVAL.statement = &DDL{Action: AST_ALTER, Table: yyS[yypt-0].bytes, NewName: yyS[yypt-0].bytes}
923		}
924	case 33:
925		//line sql.y:287
926		{
927			yyVAL.statement = &Other{}
928		}
929	case 34:
930		//line sql.y:291
931		{
932			yyVAL.statement = &Other{}
933		}
934	case 35:
935		//line sql.y:295
936		{
937			yyVAL.statement = &Other{}
938		}
939	case 36:
940		//line sql.y:300
941		{
942			SetAllowComments(yylex, true)
943		}
944	case 37:
945		//line sql.y:304
946		{
947			yyVAL.bytes2 = yyS[yypt-0].bytes2
948			SetAllowComments(yylex, false)
949		}
950	case 38:
951		//line sql.y:310
952		{
953			yyVAL.bytes2 = nil
954		}
955	case 39:
956		//line sql.y:314
957		{
958			yyVAL.bytes2 = append(yyS[yypt-1].bytes2, yyS[yypt-0].bytes)
959		}
960	case 40:
961		//line sql.y:320
962		{
963			yyVAL.str = AST_UNION
964		}
965	case 41:
966		//line sql.y:324
967		{
968			yyVAL.str = AST_UNION_ALL
969		}
970	case 42:
971		//line sql.y:328
972		{
973			yyVAL.str = AST_SET_MINUS
974		}
975	case 43:
976		//line sql.y:332
977		{
978			yyVAL.str = AST_EXCEPT
979		}
980	case 44:
981		//line sql.y:336
982		{
983			yyVAL.str = AST_INTERSECT
984		}
985	case 45:
986		//line sql.y:341
987		{
988			yyVAL.str = ""
989		}
990	case 46:
991		//line sql.y:345
992		{
993			yyVAL.str = AST_DISTINCT
994		}
995	case 47:
996		//line sql.y:351
997		{
998			yyVAL.selectExprs = SelectExprs{yyS[yypt-0].selectExpr}
999		}
1000	case 48:
1001		//line sql.y:355
1002		{
1003			yyVAL.selectExprs = append(yyVAL.selectExprs, yyS[yypt-0].selectExpr)
1004		}
1005	case 49:
1006		//line sql.y:361
1007		{
1008			yyVAL.selectExpr = &StarExpr{}
1009		}
1010	case 50:
1011		//line sql.y:365
1012		{
1013			yyVAL.selectExpr = &NonStarExpr{Expr: yyS[yypt-1].expr, As: yyS[yypt-0].bytes}
1014		}
1015	case 51:
1016		//line sql.y:369
1017		{
1018			yyVAL.selectExpr = &StarExpr{TableName: yyS[yypt-2].bytes}
1019		}
1020	case 52:
1021		//line sql.y:375
1022		{
1023			yyVAL.expr = yyS[yypt-0].boolExpr
1024		}
1025	case 53:
1026		//line sql.y:379
1027		{
1028			yyVAL.expr = yyS[yypt-0].valExpr
1029		}
1030	case 54:
1031		//line sql.y:384
1032		{
1033			yyVAL.bytes = nil
1034		}
1035	case 55:
1036		//line sql.y:388
1037		{
1038			yyVAL.bytes = yyS[yypt-0].bytes
1039		}
1040	case 56:
1041		//line sql.y:392
1042		{
1043			yyVAL.bytes = yyS[yypt-0].bytes
1044		}
1045	case 57:
1046		//line sql.y:398
1047		{
1048			yyVAL.tableExprs = TableExprs{yyS[yypt-0].tableExpr}
1049		}
1050	case 58:
1051		//line sql.y:402
1052		{
1053			yyVAL.tableExprs = append(yyVAL.tableExprs, yyS[yypt-0].tableExpr)
1054		}
1055	case 59:
1056		//line sql.y:408
1057		{
1058			yyVAL.tableExpr = &AliasedTableExpr{Expr: yyS[yypt-2].smTableExpr, As: yyS[yypt-1].bytes, Hints: yyS[yypt-0].indexHints}
1059		}
1060	case 60:
1061		//line sql.y:412
1062		{
1063			yyVAL.tableExpr = &ParenTableExpr{Expr: yyS[yypt-1].tableExpr}
1064		}
1065	case 61:
1066		//line sql.y:416
1067		{
1068			yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyS[yypt-2].tableExpr, Join: yyS[yypt-1].str, RightExpr: yyS[yypt-0].tableExpr}
1069		}
1070	case 62:
1071		//line sql.y:420
1072		{
1073			yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyS[yypt-4].tableExpr, Join: yyS[yypt-3].str, RightExpr: yyS[yypt-2].tableExpr, On: yyS[yypt-0].boolExpr}
1074		}
1075	case 63:
1076		//line sql.y:425
1077		{
1078			yyVAL.bytes = nil
1079		}
1080	case 64:
1081		//line sql.y:429
1082		{
1083			yyVAL.bytes = yyS[yypt-0].bytes
1084		}
1085	case 65:
1086		//line sql.y:433
1087		{
1088			yyVAL.bytes = yyS[yypt-0].bytes
1089		}
1090	case 66:
1091		//line sql.y:439
1092		{
1093			yyVAL.str = AST_JOIN
1094		}
1095	case 67:
1096		//line sql.y:443
1097		{
1098			yyVAL.str = AST_STRAIGHT_JOIN
1099		}
1100	case 68:
1101		//line sql.y:447
1102		{
1103			yyVAL.str = AST_LEFT_JOIN
1104		}
1105	case 69:
1106		//line sql.y:451
1107		{
1108			yyVAL.str = AST_LEFT_JOIN
1109		}
1110	case 70:
1111		//line sql.y:455
1112		{
1113			yyVAL.str = AST_RIGHT_JOIN
1114		}
1115	case 71:
1116		//line sql.y:459
1117		{
1118			yyVAL.str = AST_RIGHT_JOIN
1119		}
1120	case 72:
1121		//line sql.y:463
1122		{
1123			yyVAL.str = AST_JOIN
1124		}
1125	case 73:
1126		//line sql.y:467
1127		{
1128			yyVAL.str = AST_CROSS_JOIN
1129		}
1130	case 74:
1131		//line sql.y:471
1132		{
1133			yyVAL.str = AST_NATURAL_JOIN
1134		}
1135	case 75:
1136		//line sql.y:477
1137		{
1138			yyVAL.smTableExpr = &TableName{Name: yyS[yypt-0].bytes}
1139		}
1140	case 76:
1141		//line sql.y:481
1142		{
1143			yyVAL.smTableExpr = &TableName{Qualifier: yyS[yypt-2].bytes, Name: yyS[yypt-0].bytes}
1144		}
1145	case 77:
1146		//line sql.y:485
1147		{
1148			yyVAL.smTableExpr = yyS[yypt-0].subquery
1149		}
1150	case 78:
1151		//line sql.y:491
1152		{
1153			yyVAL.tableName = &TableName{Name: yyS[yypt-0].bytes}
1154		}
1155	case 79:
1156		//line sql.y:495
1157		{
1158			yyVAL.tableName = &TableName{Qualifier: yyS[yypt-2].bytes, Name: yyS[yypt-0].bytes}
1159		}
1160	case 80:
1161		//line sql.y:500
1162		{
1163			yyVAL.indexHints = nil
1164		}
1165	case 81:
1166		//line sql.y:504
1167		{
1168			yyVAL.indexHints = &IndexHints{Type: AST_USE, Indexes: yyS[yypt-1].bytes2}
1169		}
1170	case 82:
1171		//line sql.y:508
1172		{
1173			yyVAL.indexHints = &IndexHints{Type: AST_IGNORE, Indexes: yyS[yypt-1].bytes2}
1174		}
1175	case 83:
1176		//line sql.y:512
1177		{
1178			yyVAL.indexHints = &IndexHints{Type: AST_FORCE, Indexes: yyS[yypt-1].bytes2}
1179		}
1180	case 84:
1181		//line sql.y:518
1182		{
1183			yyVAL.bytes2 = [][]byte{yyS[yypt-0].bytes}
1184		}
1185	case 85:
1186		//line sql.y:522
1187		{
1188			yyVAL.bytes2 = append(yyS[yypt-2].bytes2, yyS[yypt-0].bytes)
1189		}
1190	case 86:
1191		//line sql.y:527
1192		{
1193			yyVAL.tableExprs = nil
1194		}
1195	case 87:
1196		//line sql.y:531
1197		{
1198			yyVAL.tableExprs = yyS[yypt-0].tableExprs
1199		}
1200	case 88:
1201		//line sql.y:537
1202		{
1203			yyVAL.boolExpr = nil
1204		}
1205	case 89:
1206		//line sql.y:541
1207		{
1208			yyVAL.boolExpr = yyS[yypt-0].boolExpr
1209		}
1210	case 90:
1211		yyVAL.boolExpr = yyS[yypt-0].boolExpr
1212	case 91:
1213		//line sql.y:548
1214		{
1215			yyVAL.boolExpr = &AndExpr{Left: yyS[yypt-2].boolExpr, Right: yyS[yypt-0].boolExpr}
1216		}
1217	case 92:
1218		//line sql.y:552
1219		{
1220			yyVAL.boolExpr = &OrExpr{Left: yyS[yypt-2].boolExpr, Right: yyS[yypt-0].boolExpr}
1221		}
1222	case 93:
1223		//line sql.y:556
1224		{
1225			yyVAL.boolExpr = &NotExpr{Expr: yyS[yypt-0].boolExpr}
1226		}
1227	case 94:
1228		//line sql.y:560
1229		{
1230			yyVAL.boolExpr = &ParenBoolExpr{Expr: yyS[yypt-1].boolExpr}
1231		}
1232	case 95:
1233		//line sql.y:566
1234		{
1235			yyVAL.boolExpr = &ComparisonExpr{Left: yyS[yypt-2].valExpr, Operator: yyS[yypt-1].str, Right: yyS[yypt-0].valExpr}
1236		}
1237	case 96:
1238		//line sql.y:570
1239		{
1240			yyVAL.boolExpr = &ComparisonExpr{Left: yyS[yypt-2].valExpr, Operator: AST_IN, Right: yyS[yypt-0].colTuple}
1241		}
1242	case 97:
1243		//line sql.y:574
1244		{
1245			yyVAL.boolExpr = &ComparisonExpr{Left: yyS[yypt-3].valExpr, Operator: AST_NOT_IN, Right: yyS[yypt-0].colTuple}
1246		}
1247	case 98:
1248		//line sql.y:578
1249		{
1250			yyVAL.boolExpr = &ComparisonExpr{Left: yyS[yypt-2].valExpr, Operator: AST_LIKE, Right: yyS[yypt-0].valExpr}
1251		}
1252	case 99:
1253		//line sql.y:582
1254		{
1255			yyVAL.boolExpr = &ComparisonExpr{Left: yyS[yypt-3].valExpr, Operator: AST_NOT_LIKE, Right: yyS[yypt-0].valExpr}
1256		}
1257	case 100:
1258		//line sql.y:586
1259		{
1260			yyVAL.boolExpr = &RangeCond{Left: yyS[yypt-4].valExpr, Operator: AST_BETWEEN, From: yyS[yypt-2].valExpr, To: yyS[yypt-0].valExpr}
1261		}
1262	case 101:
1263		//line sql.y:590
1264		{
1265			yyVAL.boolExpr = &RangeCond{Left: yyS[yypt-5].valExpr, Operator: AST_NOT_BETWEEN, From: yyS[yypt-2].valExpr, To: yyS[yypt-0].valExpr}
1266		}
1267	case 102:
1268		//line sql.y:594
1269		{
1270			yyVAL.boolExpr = &NullCheck{Operator: AST_IS_NULL, Expr: yyS[yypt-2].valExpr}
1271		}
1272	case 103:
1273		//line sql.y:598
1274		{
1275			yyVAL.boolExpr = &NullCheck{Operator: AST_IS_NOT_NULL, Expr: yyS[yypt-3].valExpr}
1276		}
1277	case 104:
1278		//line sql.y:602
1279		{
1280			yyVAL.boolExpr = &ExistsExpr{Subquery: yyS[yypt-0].subquery}
1281		}
1282	case 105:
1283		//line sql.y:606
1284		{
1285			yyVAL.boolExpr = &KeyrangeExpr{Start: yyS[yypt-3].valExpr, End: yyS[yypt-1].valExpr}
1286		}
1287	case 106:
1288		//line sql.y:612
1289		{
1290			yyVAL.str = AST_EQ
1291		}
1292	case 107:
1293		//line sql.y:616
1294		{
1295			yyVAL.str = AST_LT
1296		}
1297	case 108:
1298		//line sql.y:620
1299		{
1300			yyVAL.str = AST_GT
1301		}
1302	case 109:
1303		//line sql.y:624
1304		{
1305			yyVAL.str = AST_LE
1306		}
1307	case 110:
1308		//line sql.y:628
1309		{
1310			yyVAL.str = AST_GE
1311		}
1312	case 111:
1313		//line sql.y:632
1314		{
1315			yyVAL.str = AST_NE
1316		}
1317	case 112:
1318		//line sql.y:636
1319		{
1320			yyVAL.str = AST_NSE
1321		}
1322	case 113:
1323		//line sql.y:642
1324		{
1325			yyVAL.colTuple = ValTuple(yyS[yypt-1].valExprs)
1326		}
1327	case 114:
1328		//line sql.y:646
1329		{
1330			yyVAL.colTuple = yyS[yypt-0].subquery
1331		}
1332	case 115:
1333		//line sql.y:650
1334		{
1335			yyVAL.colTuple = ListArg(yyS[yypt-0].bytes)
1336		}
1337	case 116:
1338		//line sql.y:656
1339		{
1340			yyVAL.subquery = &Subquery{yyS[yypt-1].selStmt}
1341		}
1342	case 117:
1343		//line sql.y:662
1344		{
1345			yyVAL.valExprs = ValExprs{yyS[yypt-0].valExpr}
1346		}
1347	case 118:
1348		//line sql.y:666
1349		{
1350			yyVAL.valExprs = append(yyS[yypt-2].valExprs, yyS[yypt-0].valExpr)
1351		}
1352	case 119:
1353		//line sql.y:672
1354		{
1355			yyVAL.valExpr = yyS[yypt-0].valExpr
1356		}
1357	case 120:
1358		//line sql.y:676
1359		{
1360			yyVAL.valExpr = yyS[yypt-0].colName
1361		}
1362	case 121:
1363		//line sql.y:680
1364		{
1365			yyVAL.valExpr = yyS[yypt-0].rowTuple
1366		}
1367	case 122:
1368		//line sql.y:684
1369		{
1370			yyVAL.valExpr = &BinaryExpr{Left: yyS[yypt-2].valExpr, Operator: AST_BITAND, Right: yyS[yypt-0].valExpr}
1371		}
1372	case 123:
1373		//line sql.y:688
1374		{
1375			yyVAL.valExpr = &BinaryExpr{Left: yyS[yypt-2].valExpr, Operator: AST_BITOR, Right: yyS[yypt-0].valExpr}
1376		}
1377	case 124:
1378		//line sql.y:692
1379		{
1380			yyVAL.valExpr = &BinaryExpr{Left: yyS[yypt-2].valExpr, Operator: AST_BITXOR, Right: yyS[yypt-0].valExpr}
1381		}
1382	case 125:
1383		//line sql.y:696
1384		{
1385			yyVAL.valExpr = &BinaryExpr{Left: yyS[yypt-2].valExpr, Operator: AST_PLUS, Right: yyS[yypt-0].valExpr}
1386		}
1387	case 126:
1388		//line sql.y:700
1389		{
1390			yyVAL.valExpr = &BinaryExpr{Left: yyS[yypt-2].valExpr, Operator: AST_MINUS, Right: yyS[yypt-0].valExpr}
1391		}
1392	case 127:
1393		//line sql.y:704
1394		{
1395			yyVAL.valExpr = &BinaryExpr{Left: yyS[yypt-2].valExpr, Operator: AST_MULT, Right: yyS[yypt-0].valExpr}
1396		}
1397	case 128:
1398		//line sql.y:708
1399		{
1400			yyVAL.valExpr = &BinaryExpr{Left: yyS[yypt-2].valExpr, Operator: AST_DIV, Right: yyS[yypt-0].valExpr}
1401		}
1402	case 129:
1403		//line sql.y:712
1404		{
1405			yyVAL.valExpr = &BinaryExpr{Left: yyS[yypt-2].valExpr, Operator: AST_MOD, Right: yyS[yypt-0].valExpr}
1406		}
1407	case 130:
1408		//line sql.y:716
1409		{
1410			if num, ok := yyS[yypt-0].valExpr.(NumVal); ok {
1411				switch yyS[yypt-1].byt {
1412				case '-':
1413					yyVAL.valExpr = append(NumVal("-"), num...)
1414				case '+':
1415					yyVAL.valExpr = num
1416				default:
1417					yyVAL.valExpr = &UnaryExpr{Operator: yyS[yypt-1].byt, Expr: yyS[yypt-0].valExpr}
1418				}
1419			} else {
1420				yyVAL.valExpr = &UnaryExpr{Operator: yyS[yypt-1].byt, Expr: yyS[yypt-0].valExpr}
1421			}
1422		}
1423	case 131:
1424		//line sql.y:731
1425		{
1426			yyVAL.valExpr = &FuncExpr{Name: yyS[yypt-2].bytes}
1427		}
1428	case 132:
1429		//line sql.y:735
1430		{
1431			yyVAL.valExpr = &FuncExpr{Name: yyS[yypt-3].bytes, Exprs: yyS[yypt-1].selectExprs}
1432		}
1433	case 133:
1434		//line sql.y:739
1435		{
1436			yyVAL.valExpr = &FuncExpr{Name: yyS[yypt-4].bytes, Distinct: true, Exprs: yyS[yypt-1].selectExprs}
1437		}
1438	case 134:
1439		//line sql.y:743
1440		{
1441			yyVAL.valExpr = &FuncExpr{Name: yyS[yypt-3].bytes, Exprs: yyS[yypt-1].selectExprs}
1442		}
1443	case 135:
1444		//line sql.y:747
1445		{
1446			yyVAL.valExpr = yyS[yypt-0].caseExpr
1447		}
1448	case 136:
1449		//line sql.y:753
1450		{
1451			yyVAL.bytes = IF_BYTES
1452		}
1453	case 137:
1454		//line sql.y:757
1455		{
1456			yyVAL.bytes = VALUES_BYTES
1457		}
1458	case 138:
1459		//line sql.y:763
1460		{
1461			yyVAL.byt = AST_UPLUS
1462		}
1463	case 139:
1464		//line sql.y:767
1465		{
1466			yyVAL.byt = AST_UMINUS
1467		}
1468	case 140:
1469		//line sql.y:771
1470		{
1471			yyVAL.byt = AST_TILDA
1472		}
1473	case 141:
1474		//line sql.y:777
1475		{
1476			yyVAL.caseExpr = &CaseExpr{Expr: yyS[yypt-3].valExpr, Whens: yyS[yypt-2].whens, Else: yyS[yypt-1].valExpr}
1477		}
1478	case 142:
1479		//line sql.y:782
1480		{
1481			yyVAL.valExpr = nil
1482		}
1483	case 143:
1484		//line sql.y:786
1485		{
1486			yyVAL.valExpr = yyS[yypt-0].valExpr
1487		}
1488	case 144:
1489		//line sql.y:792
1490		{
1491			yyVAL.whens = []*When{yyS[yypt-0].when}
1492		}
1493	case 145:
1494		//line sql.y:796
1495		{
1496			yyVAL.whens = append(yyS[yypt-1].whens, yyS[yypt-0].when)
1497		}
1498	case 146:
1499		//line sql.y:802
1500		{
1501			yyVAL.when = &When{Cond: yyS[yypt-2].boolExpr, Val: yyS[yypt-0].valExpr}
1502		}
1503	case 147:
1504		//line sql.y:807
1505		{
1506			yyVAL.valExpr = nil
1507		}
1508	case 148:
1509		//line sql.y:811
1510		{
1511			yyVAL.valExpr = yyS[yypt-0].valExpr
1512		}
1513	case 149:
1514		//line sql.y:817
1515		{
1516			yyVAL.colName = &ColName{Name: yyS[yypt-0].bytes}
1517		}
1518	case 150:
1519		//line sql.y:821
1520		{
1521			yyVAL.colName = &ColName{Qualifier: yyS[yypt-2].bytes, Name: yyS[yypt-0].bytes}
1522		}
1523	case 151:
1524		//line sql.y:827
1525		{
1526			yyVAL.valExpr = StrVal(yyS[yypt-0].bytes)
1527		}
1528	case 152:
1529		//line sql.y:831
1530		{
1531			yyVAL.valExpr = NumVal(yyS[yypt-0].bytes)
1532		}
1533	case 153:
1534		//line sql.y:835
1535		{
1536			yyVAL.valExpr = ValArg(yyS[yypt-0].bytes)
1537		}
1538	case 154:
1539		//line sql.y:839
1540		{
1541			yyVAL.valExpr = &NullVal{}
1542		}
1543	case 155:
1544		//line sql.y:844
1545		{
1546			yyVAL.valExprs = nil
1547		}
1548	case 156:
1549		//line sql.y:848
1550		{
1551			yyVAL.valExprs = yyS[yypt-0].valExprs
1552		}
1553	case 157:
1554		//line sql.y:853
1555		{
1556			yyVAL.boolExpr = nil
1557		}
1558	case 158:
1559		//line sql.y:857
1560		{
1561			yyVAL.boolExpr = yyS[yypt-0].boolExpr
1562		}
1563	case 159:
1564		//line sql.y:862
1565		{
1566			yyVAL.orderBy = nil
1567		}
1568	case 160:
1569		//line sql.y:866
1570		{
1571			yyVAL.orderBy = yyS[yypt-0].orderBy
1572		}
1573	case 161:
1574		//line sql.y:872
1575		{
1576			yyVAL.orderBy = OrderBy{yyS[yypt-0].order}
1577		}
1578	case 162:
1579		//line sql.y:876
1580		{
1581			yyVAL.orderBy = append(yyS[yypt-2].orderBy, yyS[yypt-0].order)
1582		}
1583	case 163:
1584		//line sql.y:882
1585		{
1586			yyVAL.order = &Order{Expr: yyS[yypt-1].valExpr, Direction: yyS[yypt-0].str}
1587		}
1588	case 164:
1589		//line sql.y:887
1590		{
1591			yyVAL.str = AST_ASC
1592		}
1593	case 165:
1594		//line sql.y:891
1595		{
1596			yyVAL.str = AST_ASC
1597		}
1598	case 166:
1599		//line sql.y:895
1600		{
1601			yyVAL.str = AST_DESC
1602		}
1603	case 167:
1604		//line sql.y:900
1605		{
1606			yyVAL.limit = nil
1607		}
1608	case 168:
1609		//line sql.y:904
1610		{
1611			yyVAL.limit = &Limit{Rowcount: yyS[yypt-0].valExpr}
1612		}
1613	case 169:
1614		//line sql.y:908
1615		{
1616			yyVAL.limit = &Limit{Offset: yyS[yypt-2].valExpr, Rowcount: yyS[yypt-0].valExpr}
1617		}
1618	case 170:
1619		//line sql.y:913
1620		{
1621			yyVAL.str = ""
1622		}
1623	case 171:
1624		//line sql.y:917
1625		{
1626			yyVAL.str = AST_FOR_UPDATE
1627		}
1628	case 172:
1629		//line sql.y:921
1630		{
1631			if !bytes.Equal(yyS[yypt-1].bytes, SHARE) {
1632				yylex.Error("expecting share")
1633				return 1
1634			}
1635			if !bytes.Equal(yyS[yypt-0].bytes, MODE) {
1636				yylex.Error("expecting mode")
1637				return 1
1638			}
1639			yyVAL.str = AST_SHARE_MODE
1640		}
1641	case 173:
1642		//line sql.y:934
1643		{
1644			yyVAL.columns = nil
1645		}
1646	case 174:
1647		//line sql.y:938
1648		{
1649			yyVAL.columns = yyS[yypt-1].columns
1650		}
1651	case 175:
1652		//line sql.y:944
1653		{
1654			yyVAL.columns = Columns{&NonStarExpr{Expr: yyS[yypt-0].colName}}
1655		}
1656	case 176:
1657		//line sql.y:948
1658		{
1659			yyVAL.columns = append(yyVAL.columns, &NonStarExpr{Expr: yyS[yypt-0].colName})
1660		}
1661	case 177:
1662		//line sql.y:953
1663		{
1664			yyVAL.updateExprs = nil
1665		}
1666	case 178:
1667		//line sql.y:957
1668		{
1669			yyVAL.updateExprs = yyS[yypt-0].updateExprs
1670		}
1671	case 179:
1672		//line sql.y:963
1673		{
1674			yyVAL.insRows = yyS[yypt-0].values
1675		}
1676	case 180:
1677		//line sql.y:967
1678		{
1679			yyVAL.insRows = yyS[yypt-0].selStmt
1680		}
1681	case 181:
1682		//line sql.y:973
1683		{
1684			yyVAL.values = Values{yyS[yypt-0].rowTuple}
1685		}
1686	case 182:
1687		//line sql.y:977
1688		{
1689			yyVAL.values = append(yyS[yypt-2].values, yyS[yypt-0].rowTuple)
1690		}
1691	case 183:
1692		//line sql.y:983
1693		{
1694			yyVAL.rowTuple = ValTuple(yyS[yypt-1].valExprs)
1695		}
1696	case 184:
1697		//line sql.y:987
1698		{
1699			yyVAL.rowTuple = yyS[yypt-0].subquery
1700		}
1701	case 185:
1702		//line sql.y:993
1703		{
1704			yyVAL.updateExprs = UpdateExprs{yyS[yypt-0].updateExpr}
1705		}
1706	case 186:
1707		//line sql.y:997
1708		{
1709			yyVAL.updateExprs = append(yyS[yypt-2].updateExprs, yyS[yypt-0].updateExpr)
1710		}
1711	case 187:
1712		//line sql.y:1003
1713		{
1714			yyVAL.updateExpr = &UpdateExpr{Name: yyS[yypt-2].colName, Expr: yyS[yypt-0].valExpr}
1715		}
1716	case 188:
1717		//line sql.y:1008
1718		{
1719			yyVAL.empty = struct{}{}
1720		}
1721	case 189:
1722		//line sql.y:1010
1723		{
1724			yyVAL.empty = struct{}{}
1725		}
1726	case 190:
1727		//line sql.y:1013
1728		{
1729			yyVAL.empty = struct{}{}
1730		}
1731	case 191:
1732		//line sql.y:1015
1733		{
1734			yyVAL.empty = struct{}{}
1735		}
1736	case 192:
1737		//line sql.y:1018
1738		{
1739			yyVAL.empty = struct{}{}
1740		}
1741	case 193:
1742		//line sql.y:1020
1743		{
1744			yyVAL.empty = struct{}{}
1745		}
1746	case 194:
1747		//line sql.y:1024
1748		{
1749			yyVAL.empty = struct{}{}
1750		}
1751	case 195:
1752		//line sql.y:1026
1753		{
1754			yyVAL.empty = struct{}{}
1755		}
1756	case 196:
1757		//line sql.y:1028
1758		{
1759			yyVAL.empty = struct{}{}
1760		}
1761	case 197:
1762		//line sql.y:1030
1763		{
1764			yyVAL.empty = struct{}{}
1765		}
1766	case 198:
1767		//line sql.y:1032
1768		{
1769			yyVAL.empty = struct{}{}
1770		}
1771	case 199:
1772		//line sql.y:1035
1773		{
1774			yyVAL.empty = struct{}{}
1775		}
1776	case 200:
1777		//line sql.y:1037
1778		{
1779			yyVAL.empty = struct{}{}
1780		}
1781	case 201:
1782		//line sql.y:1040
1783		{
1784			yyVAL.empty = struct{}{}
1785		}
1786	case 202:
1787		//line sql.y:1042
1788		{
1789			yyVAL.empty = struct{}{}
1790		}
1791	case 203:
1792		//line sql.y:1045
1793		{
1794			yyVAL.empty = struct{}{}
1795		}
1796	case 204:
1797		//line sql.y:1047
1798		{
1799			yyVAL.empty = struct{}{}
1800		}
1801	case 205:
1802		//line sql.y:1051
1803		{
1804			yyVAL.bytes = yyS[yypt-0].bytes
1805		}
1806	case 206:
1807		//line sql.y:1056
1808		{
1809			ForceEOF(yylex)
1810		}
1811	}
1812	goto yystack /* stack new state and value */
1813}
1814