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