diff --git a/data/test/tabletserver/exec_cases.txt b/data/test/tabletserver/exec_cases.txt index 4fb2d9c4903..17b2d064124 100644 --- a/data/test/tabletserver/exec_cases.txt +++ b/data/test/tabletserver/exec_cases.txt @@ -1036,6 +1036,30 @@ "PKValues":[":a"] } +# insert no values autoinc +"insert into auto values ()" +{ + "PlanID": "INSERT_PK", + "TableName": "auto", + "FullQuery": "insert into auto values ()", + "OuterQuery": "insert into auto(id) values (null)", + "PKValues":[ + [null] + ] +} + +# insert no values defaults +"insert into with_defaults values ()" +{ + "PlanID": "INSERT_PK", + "TableName": "with_defaults", + "FullQuery": "insert into with_defaults values ()", + "OuterQuery": "insert into with_defaults(aid, bid, cid) values (3, -2, null)", + "PKValues":[ + 3 + ] +} + # nextval on non-sequence table "select next value from a" "a is not a sequence" diff --git a/data/test/tabletserver/schema_test.json b/data/test/tabletserver/schema_test.json index 29c710c0d51..1a23e93eea4 100644 --- a/data/test/tabletserver/schema_test.json +++ b/data/test/tabletserver/schema_test.json @@ -247,6 +247,68 @@ ], "Type": 1 }, + { + "Name": "auto", + "Columns": [ + { + "Name": "id", + "IsAuto": true + } + ], + "Indexes": [ + { + "Name": "PRIMARY", + "Unique": true, + "Columns": [ + "id" + ], + "Cardinality": [ + 1 + ], + "DataColumns": [ + ] + } + ], + "PKColumns": [ + 0 + ], + "Type": 0 + }, + { + "Name": "with_defaults", + "Columns": [ + { + "Name": "aid", + "Default": 3 + }, + { + "Name": "bid", + "Default": -2 + }, + { + "Name": "cid", + "Default": null + } + ], + "Indexes": [ + { + "Name": "PRIMARY", + "Unique": true, + "Columns": [ + "id" + ], + "Cardinality": [ + 1 + ], + "DataColumns": [ + ] + } + ], + "PKColumns": [ + 0 + ], + "Type": 0 + }, { "Name": "msg", "Columns": [ diff --git a/go/sqltypes/type.go b/go/sqltypes/type.go index 67a65b226b6..6f9d8e7b28f 100644 --- a/go/sqltypes/type.go +++ b/go/sqltypes/type.go @@ -104,6 +104,10 @@ func isNumber(t querypb.Type) bool { // neither binary or text. // querypb.Type_TUPLE is not included in this list // because it's not a valid Value type. +// TODO(sougou): provide a categorization function +// that returns enums, which will allow for cleaner +// switch statements for those who want to cover types +// by their category. const ( Null = querypb.Type_NULL_TYPE Int8 = querypb.Type_INT8 diff --git a/go/vt/sqlparser/ast.go b/go/vt/sqlparser/ast.go index 9f79c9967fb..131ea9e6c0f 100644 --- a/go/vt/sqlparser/ast.go +++ b/go/vt/sqlparser/ast.go @@ -27,6 +27,8 @@ import ( "github.com/youtube/vitess/go/sqltypes" querypb "github.com/youtube/vitess/go/vt/proto/query" + vtrpcpb "github.com/youtube/vitess/go/vt/proto/vtrpc" + "github.com/youtube/vitess/go/vt/vterrors" ) // Instructions for creating new types: If a type @@ -1770,6 +1772,24 @@ func (node *ExistsExpr) WalkSubtree(visit Visit) error { ) } +// ExprFromValue converts the given Value into an Expr or returns an error. +func ExprFromValue(value sqltypes.Value) (Expr, error) { + // The type checks here follow the rules defined in sqltypes/types.go. + switch { + case value.Type() == sqltypes.Null: + return &NullVal{}, nil + case value.IsIntegral(): + return NewIntVal(value.ToBytes()), nil + case value.IsFloat() || value.Type() == sqltypes.Decimal: + return NewFloatVal(value.ToBytes()), nil + case value.IsQuoted(): + return NewStrVal(value.ToBytes()), nil + default: + // We cannot support sqltypes.Expression, or any other invalid type. + return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "cannot convert value %v to AST", value) + } +} + // ValType specifies the type for SQLVal. type ValType int diff --git a/go/vt/sqlparser/ast_test.go b/go/vt/sqlparser/ast_test.go index 993746c4cf4..3df96370a2d 100644 --- a/go/vt/sqlparser/ast_test.go +++ b/go/vt/sqlparser/ast_test.go @@ -22,6 +22,8 @@ import ( "reflect" "testing" "unsafe" + + "github.com/youtube/vitess/go/sqltypes" ) func TestAppend(t *testing.T) { @@ -199,6 +201,47 @@ func TestIsAggregate(t *testing.T) { } } +func TestExprFromValue(t *testing.T) { + tcases := []struct { + in sqltypes.Value + out SQLNode + err string + }{{ + in: sqltypes.NULL, + out: &NullVal{}, + }, { + in: sqltypes.NewInt64(1), + out: NewIntVal([]byte("1")), + }, { + in: sqltypes.NewFloat64(1.1), + out: NewFloatVal([]byte("1.1")), + }, { + in: sqltypes.MakeTrusted(sqltypes.Decimal, []byte("1.1")), + out: NewFloatVal([]byte("1.1")), + }, { + in: sqltypes.NewVarChar("aa"), + out: NewStrVal([]byte("aa")), + }, { + in: sqltypes.MakeTrusted(sqltypes.Expression, []byte("rand()")), + err: "cannot convert value EXPRESSION(rand()) to AST", + }} + for _, tcase := range tcases { + got, err := ExprFromValue(tcase.in) + if tcase.err != "" { + if err == nil || err.Error() != tcase.err { + t.Errorf("ExprFromValue(%v) err: %v, want %s", tcase.in, err, tcase.err) + } + continue + } + if err != nil { + t.Error(err) + } + if got, want := got, tcase.out; !reflect.DeepEqual(got, want) { + t.Errorf("ExprFromValue(%v): %v, want %s", tcase.in, got, want) + } + } +} + func TestColNameEqual(t *testing.T) { var c1, c2 *ColName if c1.Equal(c2) { diff --git a/go/vt/sqlparser/parse_test.go b/go/vt/sqlparser/parse_test.go index f2648ec1f7c..c5ccf1faad9 100644 --- a/go/vt/sqlparser/parse_test.go +++ b/go/vt/sqlparser/parse_test.go @@ -637,6 +637,12 @@ func TestValid(t *testing.T) { }, { input: "set character set utf8", output: "set ", + }, { + input: "set character set 'utf8'", + output: "set ", + }, { + input: "set character set \"utf8\"", + output: "set ", }, { input: "set charset default", output: "set ", diff --git a/go/vt/sqlparser/sql.go b/go/vt/sqlparser/sql.go index 0e505eece6b..47581a3cd7e 100644 --- a/go/vt/sqlparser/sql.go +++ b/go/vt/sqlparser/sql.go @@ -1,9 +1,9 @@ -//line sql.y:18 +//line ./go/vt/sqlparser/sql.y:18 package sqlparser import __yyfmt__ "fmt" -//line sql.y:18 +//line ./go/vt/sqlparser/sql.y:18 func setParseTree(yylex interface{}, stmt Statement) { yylex.(*Tokenizer).ParseTree = stmt } @@ -32,7 +32,7 @@ func forceEOF(yylex interface{}) { yylex.(*Tokenizer).ForceEOF = true } -//line sql.y:50 +//line ./go/vt/sqlparser/sql.y:50 type yySymType struct { yys int empty struct{} @@ -491,503 +491,491 @@ var yyExca = [...]int{ 5, 21, -2, 4, -1, 263, - 77, 550, - 105, 550, + 77, 552, + 105, 552, -2, 38, -1, 265, - 77, 572, - 105, 572, + 77, 574, + 105, 574, -2, 40, -1, 270, - 105, 451, - -2, 447, + 105, 453, + -2, 449, -1, 271, - 105, 452, - -2, 448, - -1, 539, - 5, 21, - -2, 398, - -1, 576, 105, 454, -2, 450, - -1, 729, + -1, 541, + 5, 21, + -2, 400, + -1, 578, + 105, 456, + -2, 452, + -1, 731, 5, 22, - -2, 276, - -1, 820, + -2, 278, + -1, 822, 5, 22, - -2, 399, - -1, 892, - 5, 21, -2, 401, - -1, 959, + -1, 894, + 5, 21, + -2, 403, + -1, 961, 5, 22, - -2, 402, + -2, 404, } -const yyNprod = 611 const yyPrivate = 57344 -var yyTokenNames []string -var yyStates []string - -const yyLast = 7223 +const yyLast = 7320 var yyAct = [...]int{ - 328, 37, 964, 289, 498, 835, 327, 897, 717, 302, - 262, 615, 602, 567, 718, 235, 869, 790, 376, 437, - 43, 681, 674, 377, 3, 575, 579, 782, 753, 578, - 714, 698, 684, 291, 271, 651, 588, 300, 37, 350, - 365, 273, 250, 42, 356, 380, 240, 683, 266, 244, - 251, 255, 611, 991, 392, 47, 596, 982, 631, 62, - 988, 234, 267, 977, 135, 227, 986, 981, 976, 249, - 882, 929, 629, 277, 439, 49, 50, 51, 52, 228, - 749, 595, 839, 951, 134, 227, 227, 603, 924, 922, - 985, 227, 983, 965, 304, 773, 283, 635, 906, 590, - 18, 38, 20, 21, 619, 388, 628, 284, 279, 560, - 562, 126, 229, 230, 231, 232, 233, 125, 31, 126, - 870, 445, 440, 22, 732, 274, 731, 297, 967, 465, - 464, 474, 475, 467, 468, 469, 470, 471, 472, 473, - 466, 30, 872, 476, 40, 254, 387, 128, 129, 130, - 510, 730, 770, 625, 630, 623, 590, 275, 772, 280, - 227, 799, 227, 874, 131, 878, 227, 873, 127, 871, - 488, 489, 936, 914, 876, 633, 636, 453, 452, 561, - 823, 794, 743, 875, 736, 603, 589, 497, 877, 879, - 907, 587, 905, 586, 454, 396, 384, 466, 754, 627, - 476, 476, 24, 25, 27, 26, 28, 848, 451, 454, - 658, 395, 288, 626, 884, 389, 29, 32, 33, 975, - 452, 34, 35, 36, 656, 657, 655, 286, 699, 290, - 800, 699, 442, 806, 747, 632, 454, 644, 646, 647, - 968, 37, 645, 589, 943, 771, 634, 769, 467, 468, - 469, 470, 471, 472, 473, 466, 378, 849, 476, 352, - 358, 453, 452, 910, 353, 465, 464, 474, 475, 467, - 468, 469, 470, 471, 472, 473, 466, 438, 454, 476, - 909, 962, 438, 227, 39, 453, 452, 762, 40, 592, - 227, 227, 886, 227, 593, 761, 62, 354, 654, 485, - 487, 444, 454, 325, 469, 470, 471, 472, 473, 466, - 750, 62, 476, 227, 954, 227, 62, 908, 227, 456, - 760, 227, 775, 776, 777, 675, 496, 676, 60, 500, - 501, 502, 503, 504, 505, 506, 390, 509, 511, 511, - 511, 511, 511, 511, 511, 511, 519, 520, 521, 522, - 254, 972, 290, 455, 938, 290, 268, 528, 902, 901, - 540, 788, 290, 290, 255, 255, 255, 255, 527, 453, - 452, 847, 267, 542, 854, 853, 851, 850, 947, 378, - 556, 557, 837, 539, 525, 526, 454, 255, 822, 290, - 62, 744, 689, 290, 486, 227, 677, 436, 227, 227, - 227, 227, 558, 267, 529, 569, 543, 285, 545, 227, - 564, 363, 290, 227, 554, 544, 227, 546, 274, 227, - 946, 227, 227, 604, 605, 606, 844, 563, 453, 452, - 398, 397, 62, 490, 491, 492, 493, 494, 495, 566, - 583, 815, 572, 18, 715, 454, 393, 617, 689, 393, - 438, 576, 362, 801, 818, 363, 852, 568, 254, 254, - 254, 254, 598, 599, 600, 601, 652, 788, 891, 639, - 571, 574, 580, 254, 363, 227, 737, 608, 609, 610, - 227, 254, 788, 227, 62, 613, 614, 40, 37, 512, - 513, 514, 515, 516, 517, 518, 44, 363, 568, 453, - 452, 500, 690, 686, 464, 474, 475, 467, 468, 469, - 470, 471, 472, 473, 466, 701, 454, 476, 523, 840, - 841, 842, 18, 40, 558, 597, 678, 679, 843, 241, - 62, 616, 18, 788, 740, 612, 607, 124, 393, 720, - 54, 37, 703, 763, 62, 719, 725, 267, 716, 691, - 692, 696, 576, 695, 653, 537, 724, 538, 715, 448, - 16, 707, 729, 706, 721, 391, 40, 702, 535, 704, - 705, 728, 688, 40, 551, 62, 40, 727, 548, 552, - 391, 547, 713, 735, 984, 391, 650, 248, 733, 659, - 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, - 670, 671, 672, 673, 549, 738, 239, 245, 246, 550, - 980, 751, 752, 62, 774, 979, 367, 370, 371, 372, - 368, 438, 369, 373, 742, 640, 726, 316, 315, 318, - 319, 320, 321, 756, 757, 758, 317, 322, 357, 553, - 765, 371, 372, 367, 370, 371, 372, 368, 860, 369, - 373, 355, 712, 580, 62, 62, 711, 755, 394, 531, - 746, 945, 652, 944, 889, 741, 268, 816, 465, 464, - 474, 475, 467, 468, 469, 470, 471, 472, 473, 466, - 292, 785, 476, 912, 375, 786, 621, 447, 357, 795, - 710, 778, 293, 242, 243, 797, 798, 268, 709, 802, - 391, 391, 766, 236, 808, 957, 809, 810, 811, 812, - 474, 475, 467, 468, 469, 470, 471, 472, 473, 466, - 237, 62, 476, 44, 819, 820, 821, 956, 932, 805, - 787, 827, 828, 829, 568, 933, 450, 46, 48, 386, - 294, 351, 41, 227, 803, 824, 1, 817, 624, 830, - 653, 963, 834, 391, 465, 464, 474, 475, 467, 468, - 469, 470, 471, 472, 473, 466, 833, 832, 476, 585, - 577, 62, 62, 272, 62, 62, 53, 584, 759, 904, - 845, 846, 838, 591, 779, 780, 781, 748, 594, 942, - 745, 863, 783, 401, 402, 400, 404, 403, 227, 680, - 457, 391, 227, 399, 132, 374, 379, 859, 62, 865, - 789, 831, 580, 700, 580, 618, 255, 868, 881, 720, - 867, 864, 893, 880, 883, 719, 62, 55, 887, 768, - 767, 622, 499, 890, 888, 278, 899, 900, 484, 508, - 896, 268, 708, 261, 723, 892, 722, 524, 857, 576, - 227, 349, 955, 931, 804, 507, 438, 62, 62, 738, - 697, 303, 62, 62, 62, 643, 314, 62, 311, 688, - 313, 312, 915, 916, 530, 911, 536, 458, 301, 295, - 559, 253, 391, 927, 925, 926, 920, 359, 366, 326, - 62, 364, 720, 903, 37, 259, 252, 814, 719, 573, - 934, 937, 928, 939, 940, 966, 534, 580, 941, 19, - 254, 861, 862, 948, 45, 247, 15, 935, 14, 13, - 225, 12, 23, 764, 391, 11, 256, 917, 918, 10, - 919, 950, 953, 921, 9, 923, 8, 62, 7, 959, - 257, 257, 269, 267, 958, 6, 257, 5, 4, 62, - 238, 17, 2, 0, 0, 0, 641, 642, 0, 648, - 649, 0, 970, 0, 0, 0, 0, 971, 0, 0, - 974, 62, 0, 62, 0, 978, 0, 0, 260, 0, - 0, 0, 0, 276, 0, 0, 987, 0, 913, 831, - 792, 0, 0, 992, 993, 0, 0, 0, 0, 0, - 62, 0, 0, 0, 499, 0, 0, 693, 694, 0, - 0, 0, 0, 0, 0, 257, 0, 257, 0, 0, - 0, 257, 0, 0, 0, 0, 0, 351, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 784, - 391, 391, 0, 391, 836, 0, 0, 0, 0, 0, - 0, 0, 281, 0, 282, 952, 0, 0, 287, 465, - 464, 474, 475, 467, 468, 469, 470, 471, 472, 473, - 466, 0, 734, 476, 0, 0, 0, 858, 465, 464, - 474, 475, 467, 468, 469, 470, 471, 472, 473, 466, - 0, 0, 476, 0, 0, 792, 0, 0, 391, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 989, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 894, 895, 0, 0, - 0, 898, 898, 898, 0, 0, 391, 0, 257, 0, - 0, 0, 0, 0, 0, 257, 382, 0, 257, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, - 0, 0, 0, 0, 0, 0, 0, 0, 257, 0, - 257, 0, 0, 257, 0, 361, 257, 0, 0, 0, - 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, - 0, 0, 0, 796, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 807, 0, 441, 836, 443, 0, 0, - 446, 0, 0, 449, 0, 0, 0, 0, 391, 0, - 0, 0, 0, 0, 499, 0, 0, 0, 0, 825, - 826, 0, 0, 0, 0, 0, 0, 268, 0, 0, - 960, 0, 961, 0, 0, 0, 0, 0, 0, 0, - 257, 0, 269, 257, 257, 257, 257, 0, 0, 0, - 0, 0, 0, 0, 555, 0, 0, 0, 257, 973, - 0, 382, 0, 0, 565, 0, 257, 257, 0, 0, - 0, 0, 0, 269, 0, 0, 565, 541, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 885, 0, 0, 0, 570, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 257, 0, 0, 0, 0, 257, 0, 0, 257, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 95, 0, 0, 0, 0, 0, 620, 0, 0, - 76, 0, 637, 0, 0, 638, 84, 0, 0, 103, - 91, 0, 0, 0, 0, 0, 687, 565, 0, 0, - 930, 687, 687, 0, 0, 687, 0, 61, 0, 0, - 0, 0, 0, 0, 0, 0, 71, 0, 0, 687, - 687, 687, 687, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 687, 0, 0, 269, 0, 0, - 0, 0, 465, 464, 474, 475, 467, 468, 469, 470, - 471, 472, 473, 466, 0, 0, 476, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, - 969, 499, 0, 0, 0, 98, 0, 0, 0, 72, - 0, 102, 96, 113, 0, 97, 101, 85, 107, 65, - 111, 105, 89, 80, 81, 64, 0, 100, 75, 79, - 74, 94, 108, 109, 73, 122, 68, 117, 67, 69, - 116, 93, 106, 112, 90, 87, 66, 110, 88, 86, - 82, 77, 0, 0, 0, 104, 114, 123, 0, 0, - 118, 119, 120, 92, 70, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63, 0, 83, 121, 99, 78, 115, 407, 0, 0, + 328, 37, 966, 289, 500, 837, 327, 719, 899, 302, + 262, 604, 617, 439, 720, 235, 376, 676, 871, 394, + 581, 792, 577, 377, 3, 683, 686, 784, 580, 716, + 685, 569, 700, 755, 271, 653, 350, 43, 37, 590, + 613, 291, 228, 266, 441, 273, 240, 251, 356, 134, + 47, 255, 42, 380, 993, 244, 984, 990, 979, 62, + 988, 234, 267, 365, 135, 227, 983, 249, 300, 884, + 49, 50, 51, 52, 250, 229, 230, 231, 232, 233, + 931, 277, 978, 633, 598, 227, 227, 751, 597, 841, + 953, 227, 605, 926, 304, 924, 987, 631, 969, 467, + 466, 476, 477, 469, 470, 471, 472, 473, 474, 475, + 468, 985, 967, 478, 18, 38, 20, 21, 872, 775, + 592, 297, 637, 621, 283, 284, 801, 562, 564, 908, + 388, 630, 31, 772, 279, 126, 125, 22, 126, 774, + 874, 447, 455, 454, 442, 254, 274, 128, 129, 130, + 490, 491, 734, 733, 732, 30, 275, 512, 40, 456, + 227, 876, 227, 880, 280, 875, 227, 873, 131, 127, + 938, 387, 878, 916, 325, 288, 592, 825, 627, 632, + 625, 877, 796, 738, 499, 453, 879, 881, 398, 384, + 468, 756, 605, 478, 478, 802, 397, 563, 456, 60, + 635, 638, 745, 886, 701, 455, 454, 591, 444, 850, + 970, 749, 589, 454, 588, 803, 24, 25, 27, 26, + 28, 909, 456, 907, 629, 945, 773, 268, 771, 456, + 29, 32, 33, 977, 594, 34, 35, 36, 628, 595, + 389, 37, 358, 467, 466, 476, 477, 469, 470, 471, + 472, 473, 474, 475, 468, 286, 378, 478, 912, 851, + 634, 455, 454, 591, 353, 471, 472, 473, 474, 475, + 468, 636, 660, 478, 40, 911, 352, 440, 456, 764, + 964, 785, 440, 227, 656, 763, 658, 659, 657, 752, + 227, 227, 354, 227, 956, 446, 62, 910, 39, 487, + 489, 762, 849, 455, 454, 701, 391, 808, 527, 528, + 888, 62, 677, 227, 678, 227, 62, 839, 227, 746, + 456, 227, 974, 290, 458, 679, 498, 940, 290, 502, + 503, 504, 505, 506, 507, 508, 438, 511, 513, 513, + 513, 513, 513, 513, 513, 513, 521, 522, 523, 524, + 254, 285, 455, 454, 646, 648, 649, 530, 457, 647, + 542, 777, 778, 779, 255, 255, 255, 255, 529, 456, + 904, 903, 267, 544, 455, 454, 842, 843, 844, 378, + 558, 559, 274, 541, 290, 845, 949, 255, 790, 290, + 62, 456, 856, 855, 488, 227, 853, 852, 227, 227, + 227, 227, 560, 571, 568, 267, 948, 566, 846, 227, + 531, 691, 546, 227, 548, 717, 227, 395, 578, 227, + 18, 227, 227, 395, 606, 607, 608, 492, 493, 494, + 495, 496, 497, 573, 62, 565, 393, 556, 545, 574, + 547, 824, 290, 576, 582, 893, 585, 691, 290, 820, + 619, 393, 440, 363, 290, 363, 393, 362, 254, 254, + 254, 254, 400, 399, 40, 641, 18, 854, 654, 44, + 790, 817, 18, 254, 570, 615, 616, 227, 570, 363, + 739, 254, 227, 525, 40, 227, 62, 599, 618, 539, + 37, 540, 600, 601, 602, 603, 514, 515, 516, 517, + 518, 519, 520, 502, 692, 765, 790, 610, 611, 612, + 40, 256, 790, 727, 363, 742, 40, 703, 395, 578, + 614, 367, 370, 371, 372, 368, 560, 369, 373, 609, + 533, 728, 62, 54, 693, 694, 241, 268, 697, 717, + 450, 722, 537, 37, 690, 730, 62, 721, 705, 267, + 718, 729, 704, 550, 706, 707, 655, 698, 16, 680, + 681, 124, 708, 260, 731, 549, 723, 715, 276, 986, + 268, 709, 982, 393, 393, 981, 726, 62, 553, 551, + 40, 776, 652, 554, 552, 661, 662, 663, 664, 665, + 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, + 688, 740, 642, 737, 239, 245, 246, 735, 290, 357, + 714, 248, 753, 754, 555, 62, 371, 372, 713, 292, + 757, 396, 355, 440, 748, 582, 393, 947, 818, 744, + 946, 293, 891, 743, 914, 623, 767, 281, 449, 282, + 758, 759, 760, 287, 467, 466, 476, 477, 469, 470, + 471, 472, 473, 474, 475, 468, 62, 62, 478, 367, + 370, 371, 372, 368, 654, 369, 373, 768, 375, 242, + 243, 357, 682, 236, 393, 469, 470, 471, 472, 473, + 474, 475, 468, 787, 712, 478, 702, 788, 959, 958, + 237, 797, 711, 780, 44, 935, 934, 799, 800, 570, + 452, 804, 46, 48, 386, 41, 810, 1, 811, 812, + 813, 814, 626, 965, 268, 789, 836, 725, 587, 579, + 272, 53, 586, 62, 761, 906, 821, 822, 823, 805, + 840, 593, 807, 829, 830, 831, 750, 316, 315, 318, + 319, 320, 321, 596, 944, 227, 317, 322, 819, 747, + 403, 832, 655, 404, 402, 393, 406, 405, 401, 132, + 361, 374, 835, 379, 826, 390, 791, 620, 834, 55, + 385, 770, 769, 62, 62, 624, 62, 62, 278, 486, + 781, 782, 783, 833, 582, 710, 582, 847, 848, 261, + 443, 724, 445, 865, 526, 448, 766, 393, 451, 349, + 227, 957, 933, 806, 227, 509, 699, 303, 645, 861, + 62, 314, 311, 859, 313, 867, 578, 866, 255, 869, + 882, 722, 883, 870, 895, 312, 532, 721, 62, 538, + 460, 301, 295, 561, 890, 892, 253, 294, 351, 901, + 902, 690, 898, 885, 359, 366, 364, 894, 889, 259, + 252, 816, 227, 930, 968, 740, 536, 19, 440, 62, + 62, 45, 247, 794, 62, 62, 62, 15, 14, 62, + 13, 913, 543, 12, 917, 918, 23, 11, 10, 582, + 9, 8, 7, 6, 5, 929, 927, 928, 4, 922, + 238, 326, 62, 17, 722, 2, 37, 459, 0, 572, + 721, 936, 0, 939, 0, 941, 942, 863, 864, 0, + 943, 0, 254, 393, 393, 950, 393, 838, 0, 937, + 0, 0, 225, 905, 0, 0, 0, 0, 0, 501, + 0, 0, 952, 0, 955, 0, 510, 0, 0, 62, + 0, 961, 257, 257, 269, 267, 960, 0, 257, 0, + 860, 62, 0, 0, 622, 0, 0, 919, 920, 639, + 921, 833, 640, 923, 972, 925, 0, 0, 794, 973, + 0, 393, 976, 62, 0, 62, 0, 980, 0, 0, + 0, 0, 0, 0, 915, 0, 0, 0, 989, 0, + 0, 0, 0, 0, 0, 994, 995, 0, 575, 896, + 897, 0, 62, 0, 900, 900, 900, 0, 0, 393, + 0, 0, 0, 862, 0, 0, 0, 257, 0, 257, + 0, 0, 0, 257, 0, 0, 0, 0, 0, 0, + 0, 0, 393, 467, 466, 476, 477, 469, 470, 471, + 472, 473, 474, 475, 468, 0, 786, 478, 0, 0, + 0, 954, 0, 0, 0, 643, 644, 0, 650, 651, + 0, 0, 0, 0, 0, 0, 467, 466, 476, 477, + 469, 470, 471, 472, 473, 474, 475, 468, 0, 838, + 478, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 393, 466, 476, 477, 469, 470, 471, 472, 473, + 474, 475, 468, 501, 0, 478, 695, 696, 0, 0, + 268, 991, 0, 962, 0, 963, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 351, 467, 466, 476, + 477, 469, 470, 471, 472, 473, 474, 475, 468, 0, + 257, 478, 975, 0, 0, 0, 0, 257, 382, 0, + 257, 409, 476, 477, 469, 470, 471, 472, 473, 474, + 475, 468, 0, 0, 478, 0, 0, 0, 0, 0, + 257, 736, 257, 421, 0, 257, 0, 0, 257, 0, + 0, 0, 0, 426, 427, 428, 429, 430, 431, 432, + 0, 433, 434, 435, 436, 437, 422, 423, 424, 425, + 407, 408, 0, 0, 410, 0, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 462, 0, 465, 0, + 0, 0, 815, 0, 479, 480, 481, 482, 483, 484, + 485, 0, 463, 464, 461, 467, 466, 476, 477, 469, + 470, 471, 472, 473, 474, 475, 468, 0, 0, 478, + 0, 0, 257, 0, 269, 257, 257, 257, 257, 0, + 0, 0, 0, 0, 0, 0, 557, 0, 0, 0, + 257, 0, 0, 382, 0, 0, 567, 857, 257, 257, + 0, 858, 0, 0, 0, 0, 0, 269, 0, 0, + 567, 0, 798, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, - 0, 0, 687, 0, 0, 0, 0, 0, 0, 424, - 425, 426, 427, 428, 429, 430, 687, 431, 432, 433, - 434, 435, 420, 421, 422, 423, 405, 406, 257, 0, - 408, 0, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 501, 0, 0, 0, 0, 827, 828, + 0, 0, 0, 0, 257, 0, 0, 0, 0, 257, + 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 813, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 257, 0, 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 687, 0, - 0, 0, 0, 0, 565, 687, 0, 0, 0, 0, - 855, 0, 0, 0, 856, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 213, 203, 176, 215, - 154, 168, 223, 169, 170, 197, 142, 184, 95, 166, - 0, 157, 137, 163, 138, 155, 178, 76, 181, 153, - 205, 187, 221, 84, 192, 0, 103, 91, 0, 0, - 180, 207, 182, 202, 175, 198, 147, 191, 216, 167, - 195, 0, 0, 0, 61, 0, 581, 582, 0, 0, - 0, 0, 0, 71, 0, 194, 212, 165, 196, 136, - 193, 0, 140, 143, 222, 210, 160, 161, 739, 0, - 0, 0, 0, 0, 0, 179, 183, 199, 173, 0, - 0, 0, 0, 0, 0, 0, 0, 158, 0, 190, - 0, 0, 0, 144, 141, 177, 0, 0, 0, 146, - 0, 159, 200, 269, 208, 174, 224, 211, 172, 171, - 214, 217, 98, 206, 156, 164, 72, 162, 102, 96, - 113, 189, 97, 101, 85, 107, 65, 111, 105, 89, - 80, 81, 64, 0, 100, 75, 79, 74, 94, 108, - 109, 73, 122, 68, 117, 67, 69, 116, 93, 106, - 112, 90, 87, 66, 110, 88, 86, 82, 77, 0, - 139, 0, 104, 114, 123, 152, 209, 118, 119, 120, - 92, 70, 150, 151, 148, 149, 185, 186, 218, 219, - 220, 201, 145, 0, 0, 204, 188, 63, 0, 83, - 121, 99, 78, 115, 213, 203, 176, 215, 154, 168, - 223, 169, 170, 197, 142, 184, 95, 166, 0, 157, - 137, 163, 138, 155, 178, 76, 181, 153, 205, 187, - 221, 84, 192, 0, 103, 91, 0, 0, 180, 207, - 182, 202, 175, 198, 147, 191, 216, 167, 195, 0, - 0, 0, 61, 0, 581, 582, 0, 0, 0, 0, - 0, 71, 0, 194, 212, 165, 196, 136, 193, 0, - 140, 143, 222, 210, 160, 161, 0, 0, 0, 0, - 0, 0, 0, 179, 183, 199, 173, 0, 0, 0, - 0, 0, 0, 0, 0, 158, 0, 190, 0, 0, - 0, 144, 141, 177, 0, 0, 0, 146, 0, 159, - 200, 0, 208, 174, 224, 211, 172, 171, 214, 217, - 98, 206, 156, 164, 72, 162, 102, 96, 113, 189, - 97, 101, 85, 107, 65, 111, 105, 89, 80, 81, - 64, 0, 100, 75, 79, 74, 94, 108, 109, 73, - 122, 68, 117, 67, 69, 116, 93, 106, 112, 90, - 87, 66, 110, 88, 86, 82, 77, 0, 139, 0, - 104, 114, 123, 152, 209, 118, 119, 120, 92, 70, - 150, 151, 148, 149, 185, 186, 218, 219, 220, 201, - 145, 0, 0, 204, 188, 63, 0, 83, 121, 99, - 78, 115, 213, 203, 176, 215, 154, 168, 223, 169, - 170, 197, 142, 184, 95, 166, 0, 157, 137, 163, - 138, 155, 178, 76, 181, 153, 205, 187, 221, 84, - 192, 0, 103, 91, 0, 0, 180, 207, 182, 202, - 175, 198, 147, 191, 216, 167, 195, 0, 0, 0, - 61, 0, 0, 0, 0, 0, 0, 0, 0, 71, - 0, 194, 212, 165, 196, 136, 193, 0, 140, 143, - 222, 210, 160, 161, 0, 0, 0, 0, 0, 0, - 0, 179, 183, 199, 173, 0, 0, 0, 0, 0, - 0, 949, 0, 158, 0, 190, 0, 0, 0, 144, - 141, 177, 0, 0, 0, 146, 0, 159, 200, 0, - 208, 174, 224, 211, 172, 171, 214, 217, 98, 206, - 156, 164, 72, 162, 102, 96, 113, 189, 97, 101, - 85, 107, 65, 111, 105, 89, 80, 81, 64, 0, - 100, 75, 79, 74, 94, 108, 109, 73, 122, 68, - 117, 67, 69, 116, 93, 106, 112, 90, 87, 66, - 110, 88, 86, 82, 77, 0, 139, 0, 104, 114, - 123, 152, 209, 118, 119, 120, 92, 70, 150, 151, - 148, 149, 185, 186, 218, 219, 220, 201, 145, 0, - 0, 204, 188, 63, 0, 83, 121, 99, 78, 115, - 213, 203, 176, 215, 154, 168, 223, 169, 170, 197, - 142, 184, 95, 166, 0, 157, 137, 163, 138, 155, - 178, 76, 181, 153, 205, 187, 221, 84, 192, 0, - 103, 91, 0, 0, 180, 207, 182, 202, 175, 198, - 147, 191, 216, 167, 195, 40, 0, 0, 61, 0, - 0, 0, 0, 0, 0, 0, 0, 71, 0, 194, - 212, 165, 196, 136, 193, 0, 140, 143, 222, 210, - 160, 161, 0, 0, 0, 0, 0, 0, 0, 179, - 183, 199, 173, 0, 0, 0, 0, 0, 0, 0, - 0, 158, 0, 190, 0, 0, 0, 144, 141, 177, - 0, 0, 0, 146, 0, 159, 200, 0, 208, 174, - 224, 211, 172, 171, 214, 217, 98, 206, 156, 164, - 72, 162, 102, 96, 113, 189, 97, 101, 85, 107, - 65, 111, 105, 89, 80, 81, 64, 0, 100, 75, - 79, 74, 94, 108, 109, 73, 122, 68, 117, 67, - 69, 116, 93, 106, 112, 90, 87, 66, 110, 88, - 86, 82, 77, 0, 139, 0, 104, 114, 123, 152, - 209, 118, 119, 120, 92, 70, 150, 151, 148, 149, - 185, 186, 218, 219, 220, 201, 145, 0, 0, 204, - 188, 63, 0, 83, 121, 99, 78, 115, 213, 203, - 176, 215, 154, 168, 223, 169, 170, 197, 142, 184, - 95, 166, 0, 157, 137, 163, 138, 155, 178, 76, - 181, 153, 205, 187, 221, 84, 192, 0, 103, 91, - 0, 0, 180, 207, 182, 202, 175, 198, 147, 191, - 216, 167, 195, 0, 0, 0, 270, 0, 0, 0, - 0, 0, 0, 0, 0, 71, 0, 194, 212, 165, - 196, 136, 193, 0, 140, 143, 222, 210, 160, 161, - 0, 0, 0, 0, 0, 0, 0, 179, 183, 199, - 173, 0, 0, 0, 0, 0, 0, 866, 0, 158, - 0, 190, 0, 0, 0, 144, 141, 177, 0, 0, - 0, 146, 0, 159, 200, 0, 208, 174, 224, 211, - 172, 171, 214, 217, 98, 206, 156, 164, 72, 162, - 102, 96, 113, 189, 97, 101, 85, 107, 65, 111, - 105, 89, 80, 81, 64, 0, 100, 75, 79, 74, - 94, 108, 109, 73, 122, 68, 117, 67, 69, 116, - 93, 106, 112, 90, 87, 66, 110, 88, 86, 82, - 77, 0, 139, 0, 104, 114, 123, 152, 209, 118, - 119, 120, 92, 70, 150, 151, 148, 149, 185, 186, - 218, 219, 220, 201, 145, 0, 0, 204, 188, 63, - 0, 83, 121, 99, 78, 115, 213, 203, 176, 215, - 154, 168, 223, 169, 170, 197, 142, 184, 95, 166, - 0, 157, 137, 163, 138, 155, 178, 76, 181, 153, - 205, 187, 221, 84, 192, 0, 103, 91, 0, 0, - 180, 207, 182, 202, 175, 198, 147, 191, 216, 167, - 195, 0, 0, 0, 61, 0, 0, 0, 0, 0, - 0, 0, 0, 71, 0, 194, 212, 165, 196, 136, - 193, 0, 140, 143, 222, 210, 160, 161, 0, 0, - 0, 0, 0, 0, 0, 179, 183, 199, 173, 0, - 0, 0, 0, 0, 0, 0, 0, 158, 0, 190, - 0, 0, 0, 144, 141, 177, 0, 0, 0, 146, - 0, 159, 200, 0, 208, 174, 224, 211, 172, 171, - 214, 217, 98, 206, 156, 164, 72, 162, 102, 96, - 113, 189, 97, 101, 85, 107, 65, 111, 105, 89, - 80, 81, 64, 0, 100, 75, 79, 74, 94, 108, - 109, 73, 122, 68, 117, 67, 69, 116, 93, 106, - 112, 90, 87, 66, 110, 88, 86, 82, 77, 0, - 139, 0, 104, 114, 123, 152, 209, 118, 119, 120, - 92, 70, 150, 151, 148, 149, 185, 186, 218, 219, - 220, 201, 145, 0, 0, 204, 188, 63, 0, 83, - 121, 99, 78, 115, 213, 203, 176, 215, 154, 168, - 223, 169, 170, 197, 142, 184, 95, 166, 0, 157, - 137, 163, 138, 155, 178, 76, 181, 153, 205, 187, - 221, 84, 192, 0, 103, 91, 0, 0, 180, 207, - 182, 202, 175, 198, 147, 191, 216, 167, 195, 0, - 0, 0, 270, 0, 0, 0, 0, 0, 0, 0, - 0, 71, 0, 194, 212, 165, 196, 136, 193, 0, - 140, 143, 222, 210, 160, 161, 0, 0, 0, 0, - 0, 0, 0, 179, 183, 199, 173, 0, 0, 0, - 0, 0, 0, 0, 0, 158, 0, 190, 0, 0, - 0, 144, 141, 177, 0, 0, 0, 146, 0, 159, - 200, 0, 208, 174, 224, 211, 172, 171, 214, 217, - 98, 206, 156, 164, 72, 162, 102, 96, 113, 189, - 97, 101, 85, 107, 65, 111, 105, 89, 80, 81, - 64, 0, 100, 75, 79, 74, 94, 108, 109, 73, - 122, 68, 117, 67, 69, 116, 93, 106, 112, 90, - 87, 66, 110, 88, 86, 82, 77, 0, 139, 0, - 104, 114, 123, 152, 209, 118, 119, 120, 92, 70, - 150, 151, 148, 149, 185, 186, 218, 219, 220, 201, - 145, 0, 0, 204, 188, 63, 0, 83, 121, 99, - 78, 115, 213, 203, 176, 215, 154, 168, 223, 169, - 170, 197, 142, 184, 95, 166, 0, 157, 137, 163, - 138, 155, 178, 76, 181, 153, 205, 187, 221, 84, - 192, 0, 103, 91, 0, 0, 180, 207, 182, 202, - 175, 198, 147, 191, 216, 167, 195, 0, 0, 0, - 226, 0, 0, 0, 0, 0, 0, 0, 0, 71, - 0, 194, 212, 165, 196, 136, 193, 0, 140, 143, - 222, 210, 160, 161, 0, 0, 0, 0, 0, 0, - 0, 179, 183, 199, 173, 0, 0, 0, 0, 0, - 0, 0, 0, 158, 0, 190, 0, 0, 0, 144, - 141, 177, 0, 0, 0, 146, 0, 159, 200, 0, - 208, 174, 224, 211, 172, 171, 214, 217, 98, 206, - 156, 164, 72, 162, 102, 96, 113, 189, 97, 101, - 85, 107, 65, 111, 105, 89, 80, 81, 64, 0, - 100, 75, 79, 74, 94, 108, 109, 73, 122, 68, - 117, 67, 69, 116, 93, 106, 112, 90, 87, 66, - 110, 88, 86, 82, 77, 0, 139, 0, 104, 114, - 123, 152, 209, 118, 119, 120, 92, 70, 150, 151, - 148, 149, 185, 186, 218, 219, 220, 201, 145, 0, - 0, 204, 188, 63, 0, 83, 121, 99, 78, 115, - 213, 203, 176, 215, 154, 168, 223, 169, 170, 197, - 142, 184, 95, 166, 0, 157, 137, 163, 138, 155, - 178, 76, 181, 153, 205, 187, 221, 84, 192, 0, - 103, 91, 0, 0, 180, 207, 182, 202, 175, 198, - 147, 191, 216, 167, 195, 0, 0, 0, 133, 0, - 0, 0, 0, 0, 0, 0, 0, 71, 0, 194, - 212, 165, 196, 136, 193, 0, 140, 143, 222, 210, - 160, 161, 0, 0, 0, 0, 0, 0, 0, 179, - 183, 199, 173, 0, 0, 0, 0, 0, 0, 0, - 0, 158, 0, 190, 0, 0, 0, 144, 141, 177, - 0, 0, 0, 146, 0, 159, 200, 0, 208, 174, - 224, 211, 172, 171, 214, 217, 98, 206, 156, 164, - 72, 162, 102, 96, 113, 189, 97, 101, 85, 107, - 65, 111, 105, 89, 80, 81, 64, 0, 100, 75, - 79, 74, 94, 108, 109, 73, 122, 68, 117, 67, - 69, 116, 93, 106, 112, 90, 87, 66, 110, 88, - 86, 82, 77, 0, 139, 0, 104, 114, 123, 152, - 209, 118, 119, 120, 92, 70, 150, 151, 148, 149, - 185, 186, 218, 219, 220, 201, 145, 0, 0, 204, - 188, 63, 0, 83, 121, 99, 78, 115, 95, 0, - 0, 682, 0, 299, 0, 0, 0, 76, 0, 298, - 0, 0, 336, 84, 0, 0, 103, 91, 0, 0, - 0, 0, 329, 330, 0, 0, 0, 0, 0, 0, - 0, 40, 0, 0, 270, 316, 315, 318, 319, 320, - 321, 0, 0, 71, 317, 322, 323, 324, 0, 0, - 296, 309, 0, 335, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, + 689, 567, 0, 0, 0, 689, 689, 76, 0, 689, + 0, 0, 0, 84, 0, 0, 103, 91, 0, 887, + 0, 0, 0, 689, 689, 689, 689, 0, 0, 0, + 0, 0, 0, 0, 61, 0, 0, 0, 689, 0, + 0, 269, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 306, 307, 685, 0, 0, 0, 347, - 0, 308, 0, 0, 305, 310, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 224, 0, 0, 345, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 467, + 466, 476, 477, 469, 470, 471, 472, 473, 474, 475, + 468, 0, 0, 478, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 224, 0, 0, 932, 0, 0, 98, 0, 0, 0, 72, 0, 102, 96, 113, 0, 97, 101, 85, 107, 65, 111, 105, 89, 80, 81, 64, 0, 100, 75, 79, 74, 94, 108, 109, 73, 122, 68, 117, 67, 69, 116, 93, 106, 112, 90, 87, 66, 110, 88, 86, 82, 77, 0, 0, 0, 104, 114, 123, 0, 0, 118, 119, 120, - 92, 70, 337, 346, 343, 344, 341, 342, 340, 339, - 338, 348, 331, 332, 334, 0, 333, 63, 0, 83, - 121, 99, 78, 115, 95, 0, 0, 0, 0, 299, - 0, 0, 0, 76, 0, 298, 0, 0, 336, 84, - 0, 0, 103, 91, 0, 0, 0, 0, 329, 330, - 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, - 270, 316, 315, 318, 319, 320, 321, 0, 0, 71, - 317, 322, 323, 324, 0, 0, 296, 309, 0, 335, + 92, 70, 0, 0, 0, 0, 0, 0, 0, 971, + 501, 0, 0, 0, 0, 0, 0, 63, 0, 83, + 121, 99, 78, 115, 0, 0, 689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, - 307, 685, 0, 0, 0, 347, 0, 308, 0, 0, - 305, 310, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 224, 0, 0, 345, 0, 0, 98, 0, - 0, 0, 72, 0, 102, 96, 113, 0, 97, 101, - 85, 107, 65, 111, 105, 89, 80, 81, 64, 0, - 100, 75, 79, 74, 94, 108, 109, 73, 122, 68, - 117, 67, 69, 116, 93, 106, 112, 90, 87, 66, - 110, 88, 86, 82, 77, 0, 0, 0, 104, 114, - 123, 0, 0, 118, 119, 120, 92, 70, 337, 346, - 343, 344, 341, 342, 340, 339, 338, 348, 331, 332, - 334, 0, 333, 63, 0, 83, 121, 99, 78, 115, - 95, 0, 0, 0, 0, 299, 0, 0, 0, 76, - 0, 298, 0, 0, 336, 84, 0, 0, 103, 91, - 0, 0, 0, 0, 329, 330, 0, 0, 0, 0, - 0, 0, 0, 40, 0, 290, 270, 316, 315, 318, - 319, 320, 321, 0, 0, 71, 317, 322, 323, 324, - 0, 0, 296, 309, 0, 335, 0, 0, 0, 0, + 689, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 257, 0, 0, 213, 203, 176, 215, 154, + 168, 223, 169, 170, 197, 142, 184, 95, 166, 0, + 157, 137, 163, 138, 155, 178, 76, 181, 153, 205, + 187, 221, 84, 192, 0, 103, 91, 0, 0, 180, + 207, 182, 202, 175, 198, 147, 191, 216, 167, 195, + 0, 0, 0, 61, 0, 583, 584, 257, 0, 0, + 0, 257, 71, 0, 194, 212, 165, 196, 136, 193, + 0, 140, 143, 222, 210, 160, 161, 741, 0, 0, + 0, 0, 689, 0, 179, 183, 199, 173, 567, 689, + 0, 0, 0, 0, 0, 0, 158, 0, 190, 0, + 0, 0, 144, 141, 177, 0, 0, 0, 146, 257, + 159, 200, 0, 208, 174, 224, 211, 172, 171, 214, + 217, 98, 206, 156, 164, 72, 162, 102, 96, 113, + 189, 97, 101, 85, 107, 65, 111, 105, 89, 80, + 81, 64, 0, 100, 75, 79, 74, 94, 108, 109, + 73, 122, 68, 117, 67, 69, 116, 93, 106, 112, + 90, 87, 66, 110, 88, 86, 82, 77, 0, 139, + 0, 104, 114, 123, 152, 209, 118, 119, 120, 92, + 70, 150, 151, 148, 149, 185, 186, 218, 219, 220, + 201, 145, 0, 0, 204, 188, 63, 0, 83, 121, + 99, 78, 115, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 213, 203, 176, 215, 154, 168, 223, + 169, 170, 197, 142, 184, 95, 166, 269, 157, 137, + 163, 138, 155, 178, 76, 181, 153, 205, 187, 221, + 84, 192, 0, 103, 91, 0, 0, 180, 207, 182, + 202, 175, 198, 147, 191, 216, 167, 195, 0, 0, + 0, 61, 0, 583, 584, 0, 0, 0, 0, 0, + 71, 0, 194, 212, 165, 196, 136, 193, 0, 140, + 143, 222, 210, 160, 161, 0, 0, 0, 0, 0, + 0, 0, 179, 183, 199, 173, 0, 0, 0, 0, + 0, 0, 0, 0, 158, 0, 190, 0, 0, 0, + 144, 141, 177, 0, 0, 0, 146, 0, 159, 200, + 0, 208, 174, 224, 211, 172, 171, 214, 217, 98, + 206, 156, 164, 72, 162, 102, 96, 113, 189, 97, + 101, 85, 107, 65, 111, 105, 89, 80, 81, 64, + 0, 100, 75, 79, 74, 94, 108, 109, 73, 122, + 68, 117, 67, 69, 116, 93, 106, 112, 90, 87, + 66, 110, 88, 86, 82, 77, 0, 139, 0, 104, + 114, 123, 152, 209, 118, 119, 120, 92, 70, 150, + 151, 148, 149, 185, 186, 218, 219, 220, 201, 145, + 0, 0, 204, 188, 63, 0, 83, 121, 99, 78, + 115, 213, 203, 176, 215, 154, 168, 223, 169, 170, + 197, 142, 184, 95, 166, 0, 157, 137, 163, 138, + 155, 178, 76, 181, 153, 205, 187, 221, 84, 192, + 0, 103, 91, 0, 0, 180, 207, 182, 202, 175, + 198, 147, 191, 216, 167, 195, 0, 0, 0, 61, + 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, + 194, 212, 165, 196, 136, 193, 0, 140, 143, 222, + 210, 160, 161, 0, 0, 0, 0, 0, 0, 0, + 179, 183, 199, 173, 0, 0, 0, 0, 0, 0, + 951, 0, 158, 0, 190, 0, 0, 0, 144, 141, + 177, 0, 0, 0, 146, 0, 159, 200, 0, 208, + 174, 224, 211, 172, 171, 214, 217, 98, 206, 156, + 164, 72, 162, 102, 96, 113, 189, 97, 101, 85, + 107, 65, 111, 105, 89, 80, 81, 64, 0, 100, + 75, 79, 74, 94, 108, 109, 73, 122, 68, 117, + 67, 69, 116, 93, 106, 112, 90, 87, 66, 110, + 88, 86, 82, 77, 0, 139, 0, 104, 114, 123, + 152, 209, 118, 119, 120, 92, 70, 150, 151, 148, + 149, 185, 186, 218, 219, 220, 201, 145, 0, 0, + 204, 188, 63, 0, 83, 121, 99, 78, 115, 213, + 203, 176, 215, 154, 168, 223, 169, 170, 197, 142, + 184, 95, 166, 0, 157, 137, 163, 138, 155, 178, + 76, 181, 153, 205, 187, 221, 84, 192, 0, 103, + 91, 0, 0, 180, 207, 182, 202, 175, 198, 147, + 191, 216, 167, 195, 40, 0, 0, 61, 0, 0, + 0, 0, 0, 0, 0, 0, 71, 0, 194, 212, + 165, 196, 136, 193, 0, 140, 143, 222, 210, 160, + 161, 0, 0, 0, 0, 0, 0, 0, 179, 183, + 199, 173, 0, 0, 0, 0, 0, 0, 0, 0, + 158, 0, 190, 0, 0, 0, 144, 141, 177, 0, + 0, 0, 146, 0, 159, 200, 0, 208, 174, 224, + 211, 172, 171, 214, 217, 98, 206, 156, 164, 72, + 162, 102, 96, 113, 189, 97, 101, 85, 107, 65, + 111, 105, 89, 80, 81, 64, 0, 100, 75, 79, + 74, 94, 108, 109, 73, 122, 68, 117, 67, 69, + 116, 93, 106, 112, 90, 87, 66, 110, 88, 86, + 82, 77, 0, 139, 0, 104, 114, 123, 152, 209, + 118, 119, 120, 92, 70, 150, 151, 148, 149, 185, + 186, 218, 219, 220, 201, 145, 0, 0, 204, 188, + 63, 0, 83, 121, 99, 78, 115, 213, 203, 176, + 215, 154, 168, 223, 169, 170, 197, 142, 184, 95, + 166, 0, 157, 137, 163, 138, 155, 178, 76, 181, + 153, 205, 187, 221, 84, 192, 0, 103, 91, 0, + 0, 180, 207, 182, 202, 175, 198, 147, 191, 216, + 167, 195, 0, 0, 0, 270, 0, 0, 0, 0, + 0, 0, 0, 0, 71, 0, 194, 212, 165, 196, + 136, 193, 0, 140, 143, 222, 210, 160, 161, 0, + 0, 0, 0, 0, 0, 0, 179, 183, 199, 173, + 0, 0, 0, 0, 0, 0, 868, 0, 158, 0, + 190, 0, 0, 0, 144, 141, 177, 0, 0, 0, + 146, 0, 159, 200, 0, 208, 174, 224, 211, 172, + 171, 214, 217, 98, 206, 156, 164, 72, 162, 102, + 96, 113, 189, 97, 101, 85, 107, 65, 111, 105, + 89, 80, 81, 64, 0, 100, 75, 79, 74, 94, + 108, 109, 73, 122, 68, 117, 67, 69, 116, 93, + 106, 112, 90, 87, 66, 110, 88, 86, 82, 77, + 0, 139, 0, 104, 114, 123, 152, 209, 118, 119, + 120, 92, 70, 150, 151, 148, 149, 185, 186, 218, + 219, 220, 201, 145, 0, 0, 204, 188, 63, 0, + 83, 121, 99, 78, 115, 213, 203, 176, 215, 154, + 168, 223, 169, 170, 197, 142, 184, 95, 166, 0, + 157, 137, 163, 138, 155, 178, 76, 181, 153, 205, + 187, 221, 84, 192, 0, 103, 91, 0, 0, 180, + 207, 182, 202, 175, 198, 147, 191, 216, 167, 195, + 0, 0, 0, 61, 0, 392, 0, 0, 0, 0, + 0, 0, 71, 0, 194, 212, 165, 196, 136, 193, + 0, 140, 143, 222, 210, 160, 161, 0, 0, 0, + 0, 0, 0, 0, 179, 183, 199, 173, 0, 0, + 0, 0, 0, 0, 0, 0, 158, 0, 190, 0, + 0, 0, 144, 141, 177, 0, 0, 0, 146, 0, + 159, 200, 0, 208, 174, 224, 211, 172, 171, 214, + 217, 98, 206, 156, 164, 72, 162, 102, 96, 113, + 189, 97, 101, 85, 107, 65, 111, 105, 89, 80, + 81, 64, 0, 100, 75, 79, 74, 94, 108, 109, + 73, 122, 68, 117, 67, 69, 116, 93, 106, 112, + 90, 87, 66, 110, 88, 86, 82, 77, 0, 139, + 0, 104, 114, 123, 152, 209, 118, 119, 120, 92, + 70, 150, 151, 148, 149, 185, 186, 218, 219, 220, + 201, 145, 0, 0, 204, 188, 63, 0, 83, 121, + 99, 78, 115, 213, 203, 176, 215, 154, 168, 223, + 169, 170, 197, 142, 184, 95, 166, 0, 157, 137, + 163, 138, 155, 178, 76, 181, 153, 205, 187, 221, + 84, 192, 0, 103, 91, 0, 0, 180, 207, 182, + 202, 175, 198, 147, 191, 216, 167, 195, 0, 0, + 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 71, 0, 194, 212, 165, 196, 136, 193, 0, 140, + 143, 222, 210, 160, 161, 0, 0, 0, 0, 0, + 0, 0, 179, 183, 199, 173, 0, 0, 0, 0, + 0, 0, 0, 0, 158, 0, 190, 0, 0, 0, + 144, 141, 177, 0, 0, 0, 146, 0, 159, 200, + 0, 208, 174, 224, 211, 172, 171, 214, 217, 98, + 206, 156, 164, 72, 162, 102, 96, 113, 189, 97, + 101, 85, 107, 65, 111, 105, 89, 80, 81, 64, + 0, 100, 75, 79, 74, 94, 108, 109, 73, 122, + 68, 117, 67, 69, 116, 93, 106, 112, 90, 87, + 66, 110, 88, 86, 82, 77, 0, 139, 0, 104, + 114, 123, 152, 209, 118, 119, 120, 92, 70, 150, + 151, 148, 149, 185, 186, 218, 219, 220, 201, 145, + 0, 0, 204, 188, 63, 0, 83, 121, 99, 78, + 115, 213, 203, 176, 215, 154, 168, 223, 169, 170, + 197, 142, 184, 95, 166, 0, 157, 137, 163, 138, + 155, 178, 76, 181, 153, 205, 187, 221, 84, 192, + 0, 103, 91, 0, 0, 180, 207, 182, 202, 175, + 198, 147, 191, 216, 167, 195, 0, 0, 0, 270, + 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, + 194, 212, 165, 196, 136, 193, 0, 140, 143, 222, + 210, 160, 161, 0, 0, 0, 0, 0, 0, 0, + 179, 183, 199, 173, 0, 0, 0, 0, 0, 0, + 0, 0, 158, 0, 190, 0, 0, 0, 144, 141, + 177, 0, 0, 0, 146, 0, 159, 200, 0, 208, + 174, 224, 211, 172, 171, 214, 217, 98, 206, 156, + 164, 72, 162, 102, 96, 113, 189, 97, 101, 85, + 107, 65, 111, 105, 89, 80, 81, 64, 0, 100, + 75, 79, 74, 94, 108, 109, 73, 122, 68, 117, + 67, 69, 116, 93, 106, 112, 90, 87, 66, 110, + 88, 86, 82, 77, 0, 139, 0, 104, 114, 123, + 152, 209, 118, 119, 120, 92, 70, 150, 151, 148, + 149, 185, 186, 218, 219, 220, 201, 145, 0, 0, + 204, 188, 63, 0, 83, 121, 99, 78, 115, 213, + 203, 176, 215, 154, 168, 223, 169, 170, 197, 142, + 184, 95, 166, 0, 157, 137, 163, 138, 155, 178, + 76, 181, 153, 205, 187, 221, 84, 192, 0, 103, + 91, 0, 0, 180, 207, 182, 202, 175, 198, 147, + 191, 216, 167, 195, 0, 0, 0, 226, 0, 0, + 0, 0, 0, 0, 0, 0, 71, 0, 194, 212, + 165, 196, 136, 193, 0, 140, 143, 222, 210, 160, + 161, 0, 0, 0, 0, 0, 0, 0, 179, 183, + 199, 173, 0, 0, 0, 0, 0, 0, 0, 0, + 158, 0, 190, 0, 0, 0, 144, 141, 177, 0, + 0, 0, 146, 0, 159, 200, 0, 208, 174, 224, + 211, 172, 171, 214, 217, 98, 206, 156, 164, 72, + 162, 102, 96, 113, 189, 97, 101, 85, 107, 65, + 111, 105, 89, 80, 81, 64, 0, 100, 75, 79, + 74, 94, 108, 109, 73, 122, 68, 117, 67, 69, + 116, 93, 106, 112, 90, 87, 66, 110, 88, 86, + 82, 77, 0, 139, 0, 104, 114, 123, 152, 209, + 118, 119, 120, 92, 70, 150, 151, 148, 149, 185, + 186, 218, 219, 220, 201, 145, 0, 0, 204, 188, + 63, 0, 83, 121, 99, 78, 115, 213, 203, 176, + 215, 154, 168, 223, 169, 170, 197, 142, 184, 95, + 166, 0, 157, 137, 163, 138, 155, 178, 76, 181, + 153, 205, 187, 221, 84, 192, 0, 103, 91, 0, + 0, 180, 207, 182, 202, 175, 198, 147, 191, 216, + 167, 195, 0, 0, 0, 133, 0, 0, 0, 0, + 0, 0, 0, 0, 71, 0, 194, 212, 165, 196, + 136, 193, 0, 140, 143, 222, 210, 160, 161, 0, + 0, 0, 0, 0, 0, 0, 179, 183, 199, 173, + 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, + 190, 0, 0, 0, 144, 141, 177, 0, 0, 0, + 146, 0, 159, 200, 0, 208, 174, 224, 211, 172, + 171, 214, 217, 98, 206, 156, 164, 72, 162, 102, + 96, 113, 189, 97, 101, 85, 107, 65, 111, 105, + 89, 80, 81, 64, 0, 100, 75, 79, 74, 94, + 108, 109, 73, 122, 68, 117, 67, 69, 116, 93, + 106, 112, 90, 87, 66, 110, 88, 86, 82, 77, + 0, 139, 0, 104, 114, 123, 152, 209, 118, 119, + 120, 92, 70, 150, 151, 148, 149, 185, 186, 218, + 219, 220, 201, 145, 0, 0, 204, 188, 63, 0, + 83, 121, 99, 78, 115, 95, 0, 0, 684, 0, + 299, 0, 0, 0, 76, 0, 298, 0, 0, 336, + 84, 0, 0, 103, 91, 0, 0, 0, 0, 329, + 330, 0, 0, 0, 0, 0, 0, 0, 40, 0, + 0, 270, 316, 315, 318, 319, 320, 321, 0, 0, + 71, 317, 322, 323, 324, 0, 0, 296, 309, 0, + 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 306, 307, 0, 0, 0, - 0, 347, 0, 308, 0, 0, 305, 310, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, - 0, 345, 0, 0, 98, 0, 0, 0, 72, 0, - 102, 96, 113, 0, 97, 101, 85, 107, 65, 111, - 105, 89, 80, 81, 64, 0, 100, 75, 79, 74, - 94, 108, 109, 73, 122, 68, 117, 67, 69, 116, - 93, 106, 112, 90, 87, 66, 110, 88, 86, 82, - 77, 0, 0, 0, 104, 114, 123, 0, 0, 118, - 119, 120, 92, 70, 337, 346, 343, 344, 341, 342, - 340, 339, 338, 348, 331, 332, 334, 18, 333, 63, - 0, 83, 121, 99, 78, 115, 0, 0, 95, 0, - 0, 0, 0, 299, 0, 0, 0, 76, 0, 298, - 0, 0, 336, 84, 0, 0, 103, 91, 0, 0, - 0, 0, 329, 330, 0, 0, 0, 0, 0, 0, - 0, 40, 0, 0, 270, 316, 315, 318, 319, 320, - 321, 0, 0, 71, 317, 322, 323, 324, 0, 0, - 296, 309, 0, 335, 0, 0, 0, 0, 0, 0, + 306, 307, 687, 0, 0, 0, 347, 0, 308, 0, + 0, 305, 310, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 224, 0, 0, 345, 0, 0, 98, + 0, 0, 0, 72, 0, 102, 96, 113, 0, 97, + 101, 85, 107, 65, 111, 105, 89, 80, 81, 64, + 0, 100, 75, 79, 74, 94, 108, 109, 73, 122, + 68, 117, 67, 69, 116, 93, 106, 112, 90, 87, + 66, 110, 88, 86, 82, 77, 0, 0, 0, 104, + 114, 123, 0, 0, 118, 119, 120, 92, 70, 337, + 346, 343, 344, 341, 342, 340, 339, 338, 348, 331, + 332, 334, 0, 333, 63, 0, 83, 121, 99, 78, + 115, 95, 0, 0, 0, 0, 299, 0, 0, 0, + 76, 0, 298, 0, 0, 336, 84, 0, 0, 103, + 91, 0, 0, 0, 0, 329, 330, 0, 0, 0, + 0, 0, 0, 0, 40, 0, 0, 270, 316, 315, + 318, 319, 320, 321, 0, 0, 71, 317, 322, 323, + 324, 0, 0, 296, 309, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 306, 307, 0, 0, 0, 0, 347, - 0, 308, 0, 0, 305, 310, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 224, 0, 0, 345, - 0, 0, 98, 0, 0, 0, 72, 0, 102, 96, - 113, 0, 97, 101, 85, 107, 65, 111, 105, 89, - 80, 81, 64, 0, 100, 75, 79, 74, 94, 108, - 109, 73, 122, 68, 117, 67, 69, 116, 93, 106, - 112, 90, 87, 66, 110, 88, 86, 82, 77, 0, - 0, 0, 104, 114, 123, 0, 0, 118, 119, 120, - 92, 70, 337, 346, 343, 344, 341, 342, 340, 339, - 338, 348, 331, 332, 334, 0, 333, 63, 0, 83, - 121, 99, 78, 115, 95, 0, 0, 0, 0, 299, - 0, 0, 0, 76, 0, 298, 0, 0, 336, 84, - 0, 0, 103, 91, 0, 0, 0, 0, 329, 330, - 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, - 270, 316, 315, 318, 319, 320, 321, 0, 0, 71, - 317, 322, 323, 324, 0, 0, 296, 309, 0, 335, + 0, 0, 0, 0, 0, 0, 306, 307, 687, 0, + 0, 0, 347, 0, 308, 0, 0, 305, 310, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, + 0, 0, 345, 0, 0, 98, 0, 0, 0, 72, + 0, 102, 96, 113, 0, 97, 101, 85, 107, 65, + 111, 105, 89, 80, 81, 64, 0, 100, 75, 79, + 74, 94, 108, 109, 73, 122, 68, 117, 67, 69, + 116, 93, 106, 112, 90, 87, 66, 110, 88, 86, + 82, 77, 0, 0, 0, 104, 114, 123, 0, 0, + 118, 119, 120, 92, 70, 337, 346, 343, 344, 341, + 342, 340, 339, 338, 348, 331, 332, 334, 0, 333, + 63, 0, 83, 121, 99, 78, 115, 95, 0, 0, + 0, 0, 299, 0, 0, 0, 76, 0, 298, 0, + 0, 336, 84, 0, 0, 103, 91, 0, 0, 0, + 0, 329, 330, 0, 0, 0, 0, 0, 0, 0, + 40, 0, 290, 270, 316, 315, 318, 319, 320, 321, + 0, 0, 71, 317, 322, 323, 324, 0, 0, 296, + 309, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, - 307, 0, 0, 0, 0, 347, 0, 308, 0, 0, - 305, 310, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 224, 0, 0, 345, 0, 0, 98, 0, - 0, 0, 72, 0, 102, 96, 113, 0, 97, 101, - 85, 107, 65, 111, 105, 89, 80, 81, 64, 0, - 100, 75, 79, 74, 94, 108, 109, 73, 122, 68, - 117, 67, 69, 116, 93, 106, 112, 90, 87, 66, - 110, 88, 86, 82, 77, 0, 0, 0, 104, 114, - 123, 0, 0, 118, 119, 120, 92, 70, 337, 346, - 343, 344, 341, 342, 340, 339, 338, 348, 331, 332, - 334, 95, 333, 63, 0, 83, 121, 99, 78, 115, - 76, 0, 0, 0, 0, 336, 84, 0, 0, 103, + 0, 0, 306, 307, 0, 0, 0, 0, 347, 0, + 308, 0, 0, 305, 310, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 224, 0, 0, 345, 0, + 0, 98, 0, 0, 0, 72, 0, 102, 96, 113, + 0, 97, 101, 85, 107, 65, 111, 105, 89, 80, + 81, 64, 0, 100, 75, 79, 74, 94, 108, 109, + 73, 122, 68, 117, 67, 69, 116, 93, 106, 112, + 90, 87, 66, 110, 88, 86, 82, 77, 0, 0, + 0, 104, 114, 123, 0, 0, 118, 119, 120, 92, + 70, 337, 346, 343, 344, 341, 342, 340, 339, 338, + 348, 331, 332, 334, 18, 333, 63, 0, 83, 121, + 99, 78, 115, 0, 0, 95, 0, 0, 0, 0, + 299, 0, 0, 0, 76, 0, 298, 0, 0, 336, + 84, 0, 0, 103, 91, 0, 0, 0, 0, 329, + 330, 0, 0, 0, 0, 0, 0, 0, 40, 0, + 0, 270, 316, 315, 318, 319, 320, 321, 0, 0, + 71, 317, 322, 323, 324, 0, 0, 296, 309, 0, + 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 306, 307, 0, 0, 0, 0, 347, 0, 308, 0, + 0, 305, 310, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 224, 0, 0, 345, 0, 0, 98, + 0, 0, 0, 72, 0, 102, 96, 113, 0, 97, + 101, 85, 107, 65, 111, 105, 89, 80, 81, 64, + 0, 100, 75, 79, 74, 94, 108, 109, 73, 122, + 68, 117, 67, 69, 116, 93, 106, 112, 90, 87, + 66, 110, 88, 86, 82, 77, 0, 0, 0, 104, + 114, 123, 0, 0, 118, 119, 120, 92, 70, 337, + 346, 343, 344, 341, 342, 340, 339, 338, 348, 331, + 332, 334, 0, 333, 63, 0, 83, 121, 99, 78, + 115, 95, 0, 0, 0, 0, 299, 0, 0, 0, + 76, 0, 298, 0, 0, 336, 84, 0, 0, 103, 91, 0, 0, 0, 0, 329, 330, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 270, 316, 315, 318, 319, 320, 321, 0, 0, 71, 317, 322, 323, - 324, 0, 0, 0, 309, 0, 335, 0, 0, 0, + 324, 0, 0, 296, 309, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 307, 0, 0, 0, 0, 347, 0, 308, 0, 0, 305, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, 345, 0, 0, 98, 0, 0, 0, 72, - 0, 102, 96, 113, 990, 97, 101, 85, 107, 65, + 0, 102, 96, 113, 0, 97, 101, 85, 107, 65, 111, 105, 89, 80, 81, 64, 0, 100, 75, 79, 74, 94, 108, 109, 73, 122, 68, 117, 67, 69, 116, 93, 106, 112, 90, 87, 66, 110, 88, 86, @@ -1005,58 +993,58 @@ var yyAct = [...]int{ 0, 308, 0, 0, 305, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, 345, 0, 0, 98, 0, 0, 0, 72, 0, 102, 96, - 113, 0, 97, 101, 85, 107, 65, 111, 105, 89, + 113, 992, 97, 101, 85, 107, 65, 111, 105, 89, 80, 81, 64, 0, 100, 75, 79, 74, 94, 108, 109, 73, 122, 68, 117, 67, 69, 116, 93, 106, 112, 90, 87, 66, 110, 88, 86, 82, 77, 0, 0, 0, 104, 114, 123, 0, 0, 118, 119, 120, 92, 70, 337, 346, 343, 344, 341, 342, 340, 339, - 338, 348, 331, 332, 334, 0, 333, 63, 0, 83, - 121, 99, 78, 115, 95, 0, 0, 0, 791, 0, - 0, 0, 0, 76, 0, 0, 0, 0, 0, 84, - 0, 0, 103, 91, 0, 0, 0, 0, 0, 0, + 338, 348, 331, 332, 334, 95, 333, 63, 0, 83, + 121, 99, 78, 115, 76, 0, 0, 0, 0, 336, + 84, 0, 0, 103, 91, 0, 0, 0, 0, 329, + 330, 0, 0, 0, 0, 0, 0, 0, 40, 0, + 0, 270, 316, 315, 318, 319, 320, 321, 0, 0, + 71, 317, 322, 323, 324, 0, 0, 0, 309, 0, + 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 61, 0, 793, 0, 0, 0, 0, 0, 0, 71, - 0, 0, 0, 0, 453, 452, 0, 0, 0, 0, - 0, 0, 0, 0, 460, 0, 463, 0, 0, 0, - 0, 454, 477, 478, 479, 480, 481, 482, 483, 0, - 461, 462, 459, 465, 464, 474, 475, 467, 468, 469, - 470, 471, 472, 473, 466, 0, 0, 476, 0, 0, - 0, 0, 224, 0, 0, 0, 0, 0, 98, 0, - 0, 0, 72, 0, 102, 96, 113, 0, 97, 101, - 85, 107, 65, 111, 105, 89, 80, 81, 64, 0, - 100, 75, 79, 74, 94, 108, 109, 73, 122, 68, - 117, 67, 69, 116, 93, 106, 112, 90, 87, 66, - 110, 88, 86, 82, 77, 0, 0, 0, 104, 114, - 123, 95, 0, 118, 119, 120, 92, 70, 0, 0, + 306, 307, 0, 0, 0, 0, 347, 0, 308, 0, + 0, 305, 310, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 224, 0, 0, 345, 0, 0, 98, + 0, 0, 0, 72, 0, 102, 96, 113, 0, 97, + 101, 85, 107, 65, 111, 105, 89, 80, 81, 64, + 0, 100, 75, 79, 74, 94, 108, 109, 73, 122, + 68, 117, 67, 69, 116, 93, 106, 112, 90, 87, + 66, 110, 88, 86, 82, 77, 0, 0, 0, 104, + 114, 123, 0, 0, 118, 119, 120, 92, 70, 337, + 346, 343, 344, 341, 342, 340, 339, 338, 348, 331, + 332, 334, 0, 333, 63, 0, 83, 121, 99, 78, + 115, 95, 0, 0, 0, 793, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 84, 0, 0, 103, - 91, 0, 0, 63, 0, 83, 121, 99, 78, 115, - 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, + 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 61, 0, 795, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, - 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 455, 454, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 58, 0, 56, - 0, 0, 0, 59, 0, 98, 0, 0, 0, 72, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, + 0, 0, 0, 0, 0, 98, 0, 0, 0, 72, 0, 102, 96, 113, 0, 97, 101, 85, 107, 65, 111, 105, 89, 80, 81, 64, 0, 100, 75, 79, 74, 94, 108, 109, 73, 122, 68, 117, 67, 69, 116, 93, 106, 112, 90, 87, 66, 110, 88, 86, - 82, 77, 0, 0, 0, 104, 114, 123, 0, 0, - 118, 119, 120, 92, 70, 0, 0, 18, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, - 63, 0, 83, 121, 99, 78, 115, 76, 0, 0, + 82, 77, 0, 0, 0, 104, 114, 123, 95, 0, + 118, 119, 120, 92, 70, 0, 0, 76, 0, 0, 0, 0, 0, 84, 0, 0, 103, 91, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 40, 0, 0, 61, 0, 0, 0, 0, 0, - 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, + 63, 0, 83, 121, 99, 78, 115, 0, 0, 0, + 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, + 0, 0, 0, 71, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, - 0, 0, 98, 0, 0, 0, 72, 0, 102, 96, + 0, 0, 0, 0, 58, 0, 56, 0, 0, 0, + 59, 0, 98, 0, 0, 0, 72, 0, 102, 96, 113, 0, 97, 101, 85, 107, 65, 111, 105, 89, 80, 81, 64, 0, 100, 75, 79, 74, 94, 108, 109, 73, 122, 68, 117, 67, 69, 116, 93, 106, @@ -1067,7 +1055,7 @@ var yyAct = [...]int{ 121, 99, 78, 115, 76, 0, 0, 0, 0, 0, 84, 0, 0, 103, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, - 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1079,11 +1067,13 @@ var yyAct = [...]int{ 0, 100, 75, 79, 74, 94, 108, 109, 73, 122, 68, 117, 67, 69, 116, 93, 106, 112, 90, 87, 66, 110, 88, 86, 82, 77, 0, 0, 0, 104, - 114, 123, 95, 0, 118, 119, 120, 92, 70, 0, - 0, 76, 0, 0, 0, 0, 0, 84, 0, 0, - 103, 91, 0, 0, 63, 0, 83, 121, 99, 78, - 115, 0, 0, 0, 0, 0, 0, 0, 61, 0, - 0, 532, 0, 0, 533, 0, 0, 71, 0, 0, + 114, 123, 0, 0, 118, 119, 120, 92, 70, 0, + 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 95, 0, 63, 0, 83, 121, 99, 78, + 115, 76, 0, 0, 0, 0, 0, 84, 0, 0, + 103, 91, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 40, 0, 0, 226, 0, + 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1094,28 +1084,28 @@ var yyAct = [...]int{ 65, 111, 105, 89, 80, 81, 64, 0, 100, 75, 79, 74, 94, 108, 109, 73, 122, 68, 117, 67, 69, 116, 93, 106, 112, 90, 87, 66, 110, 88, - 86, 82, 77, 0, 0, 0, 104, 114, 123, 0, - 0, 118, 119, 120, 92, 70, 0, 0, 0, 0, - 0, 0, 0, 95, 0, 0, 0, 381, 0, 0, - 0, 63, 76, 83, 121, 99, 78, 115, 84, 0, - 0, 103, 91, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 226, - 0, 383, 0, 0, 0, 0, 0, 0, 71, 0, + 86, 82, 77, 0, 0, 0, 104, 114, 123, 95, + 0, 118, 119, 120, 92, 70, 0, 0, 76, 0, + 0, 0, 0, 0, 84, 0, 0, 103, 91, 0, + 0, 63, 0, 83, 121, 99, 78, 115, 0, 0, + 0, 0, 0, 0, 0, 61, 0, 0, 534, 0, + 0, 535, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, + 0, 0, 0, 98, 0, 0, 0, 72, 0, 102, + 96, 113, 0, 97, 101, 85, 107, 65, 111, 105, + 89, 80, 81, 64, 0, 100, 75, 79, 74, 94, + 108, 109, 73, 122, 68, 117, 67, 69, 116, 93, + 106, 112, 90, 87, 66, 110, 88, 86, 82, 77, + 0, 0, 0, 104, 114, 123, 0, 0, 118, 119, + 120, 92, 70, 0, 0, 0, 0, 0, 0, 0, + 95, 0, 0, 0, 381, 0, 0, 0, 63, 76, + 83, 121, 99, 78, 115, 84, 0, 0, 103, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 224, 0, 0, 0, 0, 0, 98, 0, 0, - 0, 72, 0, 102, 96, 113, 0, 97, 101, 85, - 107, 65, 111, 105, 89, 80, 81, 64, 0, 100, - 75, 79, 74, 94, 108, 109, 73, 122, 68, 117, - 67, 69, 116, 93, 106, 112, 90, 87, 66, 110, - 88, 86, 82, 77, 0, 0, 0, 104, 114, 123, - 95, 0, 118, 119, 120, 92, 70, 0, 0, 76, - 0, 0, 0, 0, 0, 84, 0, 0, 103, 91, - 0, 0, 63, 0, 83, 121, 99, 78, 115, 0, - 0, 0, 0, 40, 0, 0, 226, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 226, 0, 383, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1131,7 +1121,7 @@ var yyAct = [...]int{ 119, 120, 92, 70, 0, 0, 76, 0, 0, 0, 0, 0, 84, 0, 0, 103, 91, 0, 0, 63, 0, 83, 121, 99, 78, 115, 0, 0, 0, 0, - 0, 0, 0, 61, 0, 793, 0, 0, 0, 0, + 40, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1147,7 +1137,7 @@ var yyAct = [...]int{ 70, 0, 0, 76, 0, 0, 0, 0, 0, 84, 0, 0, 103, 91, 0, 0, 63, 0, 83, 121, 99, 78, 115, 0, 0, 0, 0, 0, 0, 0, - 226, 0, 383, 0, 0, 0, 0, 0, 0, 71, + 61, 0, 795, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1159,10 +1149,10 @@ var yyAct = [...]int{ 100, 75, 79, 74, 94, 108, 109, 73, 122, 68, 117, 67, 69, 116, 93, 106, 112, 90, 87, 66, 110, 88, 86, 82, 77, 0, 0, 0, 104, 114, - 123, 95, 0, 118, 119, 120, 92, 70, 0, 360, + 123, 95, 0, 118, 119, 120, 92, 70, 0, 0, 76, 0, 0, 0, 0, 0, 84, 0, 0, 103, 91, 0, 0, 63, 0, 83, 121, 99, 78, 115, - 0, 0, 0, 0, 0, 0, 0, 226, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 226, 0, 383, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1174,27 +1164,27 @@ var yyAct = [...]int{ 111, 105, 89, 80, 81, 64, 0, 100, 75, 79, 74, 94, 108, 109, 73, 122, 68, 117, 67, 69, 116, 93, 106, 112, 90, 87, 66, 110, 88, 86, - 82, 77, 258, 0, 0, 104, 114, 123, 0, 95, - 118, 119, 120, 92, 70, 0, 0, 0, 76, 0, - 0, 0, 0, 0, 84, 0, 0, 103, 91, 0, + 82, 77, 0, 0, 0, 104, 114, 123, 95, 0, + 118, 119, 120, 92, 70, 0, 360, 76, 0, 0, + 0, 0, 0, 84, 0, 0, 103, 91, 0, 0, 63, 0, 83, 121, 99, 78, 115, 0, 0, 0, - 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, - 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, + 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, - 0, 0, 0, 98, 0, 0, 0, 72, 0, 102, - 96, 113, 0, 97, 101, 85, 107, 65, 111, 105, - 89, 80, 81, 64, 0, 100, 75, 79, 74, 94, - 108, 109, 73, 122, 68, 117, 67, 69, 116, 93, - 106, 112, 90, 87, 66, 110, 88, 86, 82, 77, - 0, 0, 0, 104, 114, 123, 95, 0, 118, 119, - 120, 92, 70, 0, 0, 76, 0, 0, 0, 0, - 0, 84, 0, 0, 103, 91, 0, 0, 63, 0, - 83, 121, 99, 78, 115, 0, 0, 0, 0, 0, - 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, + 0, 0, 98, 0, 0, 0, 72, 0, 102, 96, + 113, 0, 97, 101, 85, 107, 65, 111, 105, 89, + 80, 81, 64, 0, 100, 75, 79, 74, 94, 108, + 109, 73, 122, 68, 117, 67, 69, 116, 93, 106, + 112, 90, 87, 66, 110, 88, 86, 82, 77, 258, + 0, 0, 104, 114, 123, 0, 95, 118, 119, 120, + 92, 70, 0, 0, 0, 76, 0, 0, 0, 0, + 0, 84, 0, 0, 103, 91, 0, 63, 0, 83, + 121, 99, 78, 115, 0, 0, 0, 0, 0, 0, + 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1209,7 +1199,7 @@ var yyAct = [...]int{ 104, 114, 123, 95, 0, 118, 119, 120, 92, 70, 0, 0, 76, 0, 0, 0, 0, 0, 84, 0, 0, 103, 91, 0, 0, 63, 0, 83, 121, 99, - 78, 115, 0, 0, 0, 0, 0, 0, 0, 270, + 78, 115, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1225,7 +1215,7 @@ var yyAct = [...]int{ 95, 0, 118, 119, 120, 92, 70, 0, 0, 76, 0, 0, 0, 0, 0, 84, 0, 0, 103, 91, 0, 0, 63, 0, 83, 121, 99, 78, 115, 0, - 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1241,7 +1231,7 @@ var yyAct = [...]int{ 119, 120, 92, 70, 0, 0, 76, 0, 0, 0, 0, 0, 84, 0, 0, 103, 91, 0, 0, 63, 0, 83, 121, 99, 78, 115, 0, 0, 0, 0, - 0, 0, 0, 270, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1251,29 +1241,44 @@ var yyAct = [...]int{ 0, 98, 0, 0, 0, 72, 0, 102, 96, 113, 0, 97, 101, 85, 107, 65, 111, 105, 89, 80, 81, 64, 0, 100, 75, 79, 74, 94, 108, 109, - 73, 122, 68, 117, 67, 264, 116, 93, 106, 112, + 73, 122, 68, 117, 67, 69, 116, 93, 106, 112, 90, 87, 66, 110, 88, 86, 82, 77, 0, 0, - 0, 104, 114, 123, 0, 0, 118, 119, 120, 265, - 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 63, 0, 83, 121, - 99, 78, 115, + 0, 104, 114, 123, 95, 0, 118, 119, 120, 92, + 70, 0, 0, 76, 0, 0, 0, 0, 0, 84, + 0, 0, 103, 91, 0, 0, 63, 0, 83, 121, + 99, 78, 115, 0, 0, 0, 0, 0, 0, 0, + 270, 0, 0, 0, 0, 0, 0, 0, 0, 71, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 224, 0, 0, 0, 0, 0, 98, 0, + 0, 0, 72, 0, 102, 96, 113, 0, 97, 101, + 85, 107, 65, 111, 105, 89, 80, 81, 64, 0, + 100, 75, 79, 74, 94, 108, 109, 73, 122, 68, + 117, 67, 264, 116, 93, 106, 112, 90, 87, 66, + 110, 88, 86, 82, 77, 0, 0, 0, 104, 114, + 123, 0, 0, 118, 119, 120, 265, 263, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 83, 121, 99, 78, 115, } var yyPact = [...]int{ - 94, -1000, -160, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 709, 732, -1000, -1000, - -1000, -1000, -1000, 490, 4924, 2, 55, 34, 51, 3295, - 6863, -1000, -1000, -1000, -1000, -1000, -1000, 516, -1000, -1000, - -1000, -1000, -1000, 687, 705, 523, 674, 570, -1000, -6, - 5763, 6392, 7020, -1000, 365, 43, 6863, -117, -10, -1000, + 108, -1000, -151, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 680, 697, -1000, -1000, + -1000, -1000, -1000, 483, 5021, 21, 56, 34, 55, 3392, + 6960, -1000, -1000, -1000, -1000, -1000, -1000, 466, -1000, -1000, + -1000, -1000, -1000, 657, 675, 530, 650, 568, -1000, 18, + 5860, 6489, 7117, -1000, 329, 42, 6960, -109, 16, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 46, 6863, -1000, 6863, -11, 354, - -11, 6863, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 51, 6960, -1000, 6960, 7, 298, + 7, 6960, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -1283,151 +1288,151 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 311, 662, 4227, 4227, 709, -1000, - 516, -1000, -1000, -1000, 618, -1000, -1000, 199, 6234, 423, - 604, -1000, -1000, -1000, 663, 5278, 5606, 91, 6863, 95, - -1000, 2701, 398, -1000, 629, -1000, -1000, 134, -1000, 90, - -1000, -1000, 379, -1000, 1444, 344, 2305, 7, 6863, 163, - 6863, 2305, 5, 6863, 665, 510, 6863, -1000, -1000, -1000, - -1000, -1000, 728, 121, 302, -1000, 4227, 4775, 473, 473, - -1000, -1000, 64, -1000, -1000, 4581, 4581, 4581, 4581, 4581, - 4581, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 473, 82, -1000, 4041, 473, - 473, 473, 473, 473, 473, 4227, 473, 473, 473, 473, - 473, 473, 473, 473, 473, 473, 473, 473, 473, 467, - -1000, 361, 687, 311, 570, 5435, 528, -1000, -1000, 526, - 6863, -1000, 6706, 5763, 5763, 5763, 5763, -1000, 542, 539, - -1000, 565, 535, 600, 6863, -1000, 360, 311, 5278, 62, - -1000, 6077, -1000, -1000, 3097, 723, 5763, 6863, -1000, -1000, - -1000, -1000, -1000, 6706, -1000, 4227, 2899, 1909, 72, 225, - -91, -1000, -1000, 475, -1000, 475, 475, 475, 475, -68, - -68, -68, -68, -1000, -1000, -1000, -1000, -1000, 486, -1000, - 475, 475, 475, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 485, 485, 485, 481, 481, -16, -1000, -1000, -1000, - 6863, -1000, 664, 44, -1000, 6863, -1000, -1000, 6863, 2305, - -1000, 590, 4227, 4227, 173, 4227, 4227, 125, 4581, 238, - 139, 4581, 4581, 4581, 4581, 4581, 4581, 4581, 4581, 4581, - 4581, 4581, 4581, 4581, 4581, 4581, 272, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 343, -1000, 516, 573, 573, - 99, 99, 99, 99, 99, 1344, 3481, 2899, 341, 194, - 4041, 3667, 3667, 4227, 4227, 3667, 668, 155, 194, 6549, - -1000, 311, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 3667, - 3667, 3667, 3667, 4227, -1000, -1000, -1000, 662, -1000, 668, - 680, -1000, 625, 621, 3667, -1000, 509, 6706, 473, -1000, - 5101, -1000, 487, 604, 497, 577, -1000, -1000, -1000, -1000, - 538, -1000, 532, -1000, -1000, -1000, -1000, -1000, 311, -1000, - 37, 12, 10, -1000, -1000, -1000, -1000, 709, 4227, 446, - -1000, -1000, -1000, 194, -1000, 79, -1000, 425, 1711, -1000, - -1000, -1000, -1000, -1000, -1000, 484, 638, 129, 338, -1000, - -1000, 632, -1000, 170, -93, -1000, -1000, 254, -68, -68, - -1000, -1000, 96, 628, 96, 96, 96, 265, -1000, -1000, - -1000, -1000, 239, -1000, -1000, -1000, 231, -1000, 494, 6549, - 2305, -1000, -1000, 131, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -36, -1000, -1000, -1000, - 578, 125, 152, -1000, -1000, 258, -1000, -1000, 194, 194, - 990, -1000, -1000, -1000, -1000, 238, 4581, 4581, 4581, 666, - 990, 971, 620, 415, 99, 210, 210, 98, 98, 98, - 98, 98, 156, 156, -1000, -1000, -1000, 311, -1000, -1000, - -1000, 311, 3667, 416, -1000, -1000, 4767, 76, 473, 4227, - -1000, 310, 310, 110, 432, 310, 3667, 158, -1000, 4227, - 311, -1000, 310, 311, 310, 310, -1000, -1000, 6863, -1000, - -1000, -1000, -1000, 431, -1000, 641, 395, 403, -1000, -1000, - 3853, 311, 337, 75, 709, 4227, 4227, -1000, -1000, -1000, - 473, 473, 473, 687, 194, -1000, 2701, 1909, -1000, 1909, - 6549, -1000, 329, -1000, -1000, -87, 464, -1000, -1000, -1000, - 374, 96, 96, -1000, 318, 154, -1000, -1000, -1000, 325, - -1000, 405, 323, 6863, -1000, -1000, -1000, 6863, -1000, -1000, - -1000, -1000, -1000, 6549, -1000, -1000, -1000, -1000, -1000, 666, - 990, 580, -1000, 4581, 4581, -1000, -1000, 310, 3667, -1000, - -1000, 5920, -1000, -1000, 2503, 3667, 194, -1000, -1000, 17, - 272, 17, -126, 482, 138, -1000, 4227, 218, -1000, -1000, - -1000, -1000, -1000, -1000, 723, 5763, 637, -1000, 473, -1000, - -1000, 437, 6549, 6549, 687, 194, 194, 6549, 6549, 6549, - -1000, -1000, 1711, -1000, 307, -1000, 475, -1000, 71, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 262, 224, -1000, 207, 2305, -1000, -1000, 658, -1000, - 4581, 990, 990, -1000, -1000, -1000, -1000, 68, 311, 311, - 475, 475, -1000, 475, 481, -1000, 475, -51, 475, -52, - 311, 311, 473, -123, -1000, 194, 4227, 716, 404, 727, - -1000, 473, -1000, 516, 67, -1000, -1000, 303, -1000, 303, - 303, -1000, 6549, -1000, 182, 636, -1000, 634, -1000, 368, - 326, -1000, 473, 990, 2107, -1000, -1000, -1000, 30, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 4581, 311, 259, - 194, 714, 690, 6706, 403, 311, 6549, -1000, 6549, -1000, - -1000, -1000, -1000, 226, -1000, -1000, -1000, -1000, -38, -1000, - -1000, -1000, 41, -1000, -1000, -1000, 4227, 4227, 398, -1000, - -1000, -1000, -1000, 300, -1000, 6549, 311, 22, -137, 194, - 397, -1000, -38, 584, -1000, 574, -131, -144, -1000, -41, - -1000, 548, -1000, -44, -133, 473, -140, 4404, -148, 177, - 311, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 332, 601, 4324, 4324, 680, -1000, + 466, -1000, -1000, -1000, 589, -1000, -1000, 181, 6331, 428, + 620, -1000, -1000, -1000, 647, 5375, 5703, 84, 6960, 120, + -1000, 2600, 372, -1000, 592, -1000, -1000, 119, -1000, 83, + -1000, -1000, 411, -1000, 1048, 283, 2204, 29, 6960, 139, + 6960, 2204, 25, 6960, 616, 491, 6960, -1000, -1000, -1000, + -1000, -1000, 692, 98, 307, -1000, 4324, 1147, 434, 434, + -1000, -1000, 44, -1000, -1000, 4678, 4678, 4678, 4678, 4678, + 4678, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 434, 79, -1000, 4138, 434, + 434, 434, 434, 434, 434, 4324, 434, 434, 434, 434, + 434, 434, 434, 434, 434, 434, 434, 434, 434, 432, + -1000, 285, 657, 332, 568, 5532, 502, -1000, -1000, 460, + 6960, -1000, 6803, 5860, 5860, 5860, 5860, -1000, 526, 514, + -1000, 540, 539, 575, 6960, -1000, 402, 332, 5375, 80, + -1000, 6174, -1000, -1000, 3194, 688, 5860, 6960, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 6803, -1000, 4324, 2996, 1808, + 93, 170, -84, -1000, -1000, 437, -1000, 437, 437, 437, + 437, -63, -63, -63, -63, -1000, -1000, -1000, -1000, -1000, + 479, -1000, 437, 437, 437, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 470, 470, 470, 438, 438, 3, -1000, + -1000, -1000, 6960, -1000, 613, 69, -1000, 6960, -1000, -1000, + 6960, 2204, -1000, 567, 4324, 4324, 290, 4324, 4324, 114, + 4678, 224, 201, 4678, 4678, 4678, 4678, 4678, 4678, 4678, + 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678, 259, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 272, -1000, 466, + 683, 683, 92, 92, 92, 92, 92, 1371, 3578, 2996, + 396, 138, 4138, 3764, 3764, 4324, 4324, 3764, 651, 131, + 138, 6646, -1000, 332, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 3764, 3764, 3764, 3764, 4324, -1000, -1000, -1000, 601, + -1000, 651, 674, -1000, 587, 579, 3764, -1000, 490, 6803, + 434, -1000, 5198, -1000, 467, 620, 464, 482, -1000, -1000, + -1000, -1000, 512, -1000, 506, -1000, -1000, -1000, -1000, -1000, + 332, -1000, 40, 39, 38, -1000, -1000, -1000, -1000, 680, + 4324, 463, -1000, -1000, -1000, 138, -1000, 78, -1000, 429, + 1600, -1000, -1000, -1000, -1000, -1000, -1000, 465, 606, 149, + 266, -1000, -1000, 596, -1000, 147, -86, -1000, -1000, 233, + -63, -63, -1000, -1000, 89, 591, 89, 89, 89, 246, + -1000, -1000, -1000, -1000, 229, -1000, -1000, -1000, 223, -1000, + 456, 6646, 2204, -1000, -1000, 112, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -12, -1000, + -1000, -1000, 545, 114, 145, -1000, -1000, 297, -1000, -1000, + 138, 138, 1039, -1000, -1000, -1000, -1000, 224, 4678, 4678, + 4678, 155, 1039, 978, 1062, 1003, 92, 171, 171, 91, + 91, 91, 91, 91, 583, 583, -1000, -1000, -1000, 332, + -1000, -1000, -1000, 332, 3764, 419, -1000, -1000, 4864, 77, + 434, 4324, -1000, 337, 337, 75, 194, 337, 3764, 232, + -1000, 4324, 332, -1000, 337, 332, 337, 337, -1000, -1000, + 6960, -1000, -1000, -1000, -1000, 461, -1000, 602, 366, 398, + -1000, -1000, 3950, 332, 390, 72, 680, 4324, 4324, -1000, + -1000, -1000, 434, 434, 434, 657, 138, -1000, 2798, 1808, + -1000, 1808, 6646, -1000, 264, -1000, -1000, -80, 321, -1000, + -1000, -1000, 356, 89, 89, -1000, 249, 156, -1000, -1000, + -1000, 345, -1000, 416, 341, 6960, -1000, -1000, -1000, 6960, + -1000, -1000, -1000, -1000, -1000, 6646, -1000, -1000, -1000, -1000, + -1000, 155, 1039, 945, -1000, 4678, 4678, -1000, -1000, 337, + 3764, -1000, -1000, 6017, -1000, -1000, 2402, 3764, 138, -1000, + -1000, 15, 259, 15, -127, 455, 127, -1000, 4324, 236, + -1000, -1000, -1000, -1000, -1000, -1000, 688, 5860, 605, -1000, + 434, -1000, -1000, 414, 6646, 6646, 657, 138, 138, 6646, + 6646, 6646, -1000, -1000, 1600, -1000, 319, -1000, 437, -1000, + 102, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 242, 219, -1000, 202, 2204, -1000, -1000, + 609, -1000, 4678, 1039, 1039, -1000, -1000, -1000, -1000, 68, + 332, 332, 437, 437, -1000, 437, 438, -1000, 437, -45, + 437, -47, 332, 332, 434, -114, -1000, 138, 4324, 684, + 404, 687, -1000, 434, -1000, 466, 65, -1000, -1000, 276, + -1000, 276, 276, -1000, 6646, -1000, 163, 603, -1000, 600, + -1000, 354, 334, -1000, 434, 1039, 2006, -1000, -1000, -1000, + 37, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 4678, + 332, 239, 138, 676, 673, 6803, 398, 332, 6646, -1000, + 6646, -1000, -1000, -1000, -1000, 225, -1000, -1000, -1000, -1000, + -19, -1000, -1000, -1000, 11, -1000, -1000, -1000, 4324, 4324, + 372, -1000, -1000, -1000, -1000, 271, -1000, 6646, 332, 36, + -142, 138, 360, -1000, -19, 544, -1000, 536, -132, -145, + -1000, -22, -1000, 533, -1000, -38, -139, 434, -143, 4501, + -147, 556, 332, -1000, -1000, -1000, } var yyPgo = [...]int{ - 0, 952, 23, 560, 951, 950, 948, 947, 945, 938, - 936, 934, 929, 925, 922, 921, 919, 918, 916, 55, - 915, 914, 909, 44, 906, 49, 905, 902, 27, 47, - 21, 32, 503, 897, 18, 42, 50, 896, 895, 891, - 40, 888, 926, 887, 881, 880, 7, 13, 879, 878, - 877, 876, 37, 127, 874, 871, 870, 868, 866, 865, - 35, 4, 8, 6, 14, 861, 94, 9, 860, 31, - 855, 854, 853, 852, 20, 851, 39, 847, 15, 33, - 846, 30, 10, 843, 48, 842, 537, 838, 96, 835, - 831, 830, 829, 827, 815, 54, 34, 303, 74, 17, - 810, 889, 25, 45, 806, 805, 79, 19, 22, 16, - 804, 803, 797, 796, 795, 794, 793, 56, 790, 789, - 12, 28, 788, 787, 52, 11, 783, 782, 779, 778, - 41, 777, 36, 776, 773, 770, 29, 26, 769, 5, - 752, 751, 2, 748, 746, 742, 0, 3, 739, 738, - 150, + 0, 895, 23, 558, 893, 890, 888, 884, 883, 882, + 881, 880, 878, 877, 876, 873, 870, 868, 867, 50, + 862, 861, 857, 48, 856, 55, 854, 853, 27, 30, + 25, 26, 600, 851, 16, 74, 47, 850, 849, 846, + 63, 845, 511, 844, 836, 833, 8, 31, 832, 831, + 830, 829, 68, 121, 826, 825, 814, 812, 811, 808, + 35, 4, 7, 6, 14, 807, 94, 9, 806, 32, + 805, 803, 802, 801, 37, 799, 36, 794, 15, 41, + 791, 29, 10, 789, 43, 785, 561, 779, 124, 778, + 775, 772, 771, 769, 767, 19, 34, 174, 44, 21, + 766, 765, 891, 22, 53, 763, 761, 42, 13, 17, + 18, 759, 758, 757, 756, 754, 753, 750, 84, 749, + 744, 11, 33, 743, 736, 40, 12, 731, 730, 725, + 724, 45, 722, 39, 721, 720, 719, 28, 20, 718, + 5, 716, 713, 2, 712, 707, 705, 0, 3, 704, + 703, 157, } var yyR1 = [...]int{ - 0, 144, 145, 145, 1, 1, 1, 1, 1, 1, + 0, 145, 146, 146, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 4, 4, 5, 5, 6, 6, 22, 22, 7, - 8, 8, 148, 148, 38, 38, 9, 9, 83, 83, - 83, 10, 10, 10, 10, 14, 133, 134, 134, 134, - 130, 111, 111, 111, 114, 114, 112, 112, 112, 112, - 112, 112, 112, 113, 113, 113, 113, 113, 115, 115, - 115, 115, 115, 116, 116, 116, 116, 116, 116, 116, - 116, 116, 116, 116, 116, 116, 116, 129, 129, 117, - 117, 124, 124, 125, 125, 125, 122, 122, 123, 123, - 126, 126, 126, 118, 118, 118, 118, 118, 127, 127, - 120, 120, 120, 121, 121, 128, 128, 128, 128, 128, - 119, 119, 131, 138, 138, 138, 138, 132, 132, 140, - 140, 139, 135, 135, 135, 136, 136, 136, 137, 137, - 137, 11, 11, 11, 11, 11, 143, 141, 141, 142, - 142, 12, 13, 13, 13, 15, 110, 110, 110, 16, - 17, 18, 18, 18, 18, 18, 18, 149, 19, 20, - 20, 21, 21, 21, 25, 25, 25, 23, 23, 24, - 24, 30, 30, 29, 29, 31, 31, 31, 31, 100, - 100, 100, 99, 99, 33, 33, 34, 34, 35, 35, - 36, 36, 36, 44, 37, 37, 37, 37, 105, 105, - 104, 104, 104, 103, 103, 39, 39, 39, 39, 40, - 40, 40, 40, 41, 41, 43, 43, 42, 42, 45, - 45, 45, 45, 46, 46, 47, 47, 32, 32, 32, - 32, 32, 32, 32, 87, 87, 49, 49, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 59, 59, - 59, 59, 59, 59, 50, 50, 50, 50, 50, 50, - 50, 28, 28, 60, 60, 60, 66, 61, 61, 53, + 8, 8, 149, 149, 38, 38, 9, 9, 83, 83, + 83, 101, 101, 10, 10, 10, 10, 14, 134, 135, + 135, 135, 131, 112, 112, 112, 115, 115, 113, 113, + 113, 113, 113, 113, 113, 114, 114, 114, 114, 114, + 116, 116, 116, 116, 116, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, 117, 130, + 130, 118, 118, 125, 125, 126, 126, 126, 123, 123, + 124, 124, 127, 127, 127, 119, 119, 119, 119, 119, + 128, 128, 121, 121, 121, 122, 122, 129, 129, 129, + 129, 129, 120, 120, 132, 139, 139, 139, 139, 133, + 133, 141, 141, 140, 136, 136, 136, 137, 137, 137, + 138, 138, 138, 11, 11, 11, 11, 11, 144, 142, + 142, 143, 143, 12, 13, 13, 13, 15, 111, 111, + 111, 16, 17, 18, 18, 18, 18, 18, 18, 150, + 19, 20, 20, 21, 21, 21, 25, 25, 25, 23, + 23, 24, 24, 30, 30, 29, 29, 31, 31, 31, + 31, 100, 100, 100, 99, 99, 33, 33, 34, 34, + 35, 35, 36, 36, 36, 44, 37, 37, 37, 37, + 106, 106, 105, 105, 105, 104, 104, 39, 39, 39, + 39, 40, 40, 40, 40, 41, 41, 43, 43, 42, + 42, 45, 45, 45, 45, 46, 46, 47, 47, 32, + 32, 32, 32, 32, 32, 32, 87, 87, 49, 49, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 59, 59, 59, 59, 59, 59, 50, 50, 50, 50, + 50, 50, 50, 28, 28, 60, 60, 60, 66, 61, + 61, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 53, 53, 57, - 57, 57, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 56, 56, 56, 56, 56, 56, 56, 56, 150, - 150, 58, 58, 58, 58, 26, 26, 26, 26, 26, - 108, 108, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 70, 70, 27, 27, 68, - 68, 69, 71, 71, 67, 67, 67, 52, 52, 52, - 52, 52, 52, 52, 52, 54, 54, 54, 72, 72, - 73, 73, 74, 74, 75, 75, 76, 77, 77, 77, - 78, 78, 78, 78, 79, 79, 79, 51, 51, 51, - 51, 51, 51, 80, 80, 80, 80, 81, 81, 62, - 62, 64, 64, 63, 65, 82, 82, 84, 85, 85, - 88, 88, 89, 89, 86, 86, 90, 90, 90, 90, - 90, 90, 90, 90, 90, 90, 90, 91, 91, 91, - 92, 92, 93, 93, 93, 94, 94, 97, 97, 98, - 98, 101, 101, 102, 102, 95, 95, 95, 95, 95, + 53, 57, 57, 57, 55, 55, 55, 55, 55, 55, + 55, 55, 55, 56, 56, 56, 56, 56, 56, 56, + 56, 151, 151, 58, 58, 58, 58, 26, 26, 26, + 26, 26, 109, 109, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 70, 70, 27, + 27, 68, 68, 69, 71, 71, 67, 67, 67, 52, + 52, 52, 52, 52, 52, 52, 52, 54, 54, 54, + 72, 72, 73, 73, 74, 74, 75, 75, 76, 77, + 77, 77, 78, 78, 78, 78, 79, 79, 79, 51, + 51, 51, 51, 51, 51, 80, 80, 80, 80, 81, + 81, 62, 62, 64, 64, 63, 65, 82, 82, 84, + 85, 85, 88, 88, 89, 89, 86, 86, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 91, + 91, 91, 92, 92, 93, 93, 93, 94, 94, 97, + 97, 98, 98, 102, 102, 103, 103, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, @@ -1436,14 +1441,14 @@ var yyR1 = [...]int{ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 96, 96, 96, 96, 96, 96, 96, + 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 146, 147, 106, 107, 107, - 107, + 96, 96, 96, 96, 96, 96, 96, 147, 148, 107, + 108, 108, 108, } var yyR2 = [...]int{ @@ -1451,47 +1456,47 @@ var yyR2 = [...]int{ 1, 1, 1, 1, 1, 1, 1, 4, 6, 7, 10, 1, 3, 1, 3, 6, 7, 1, 1, 8, 7, 6, 1, 1, 1, 3, 5, 3, 1, 2, - 1, 2, 8, 4, 6, 4, 4, 1, 3, 3, - 7, 3, 1, 1, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 1, 2, - 2, 2, 1, 4, 4, 2, 2, 3, 3, 3, - 3, 1, 1, 1, 1, 1, 4, 1, 3, 0, - 3, 0, 5, 0, 3, 5, 0, 1, 0, 1, - 0, 1, 2, 0, 2, 2, 2, 2, 0, 1, - 0, 3, 3, 0, 2, 0, 2, 1, 2, 1, - 0, 2, 4, 2, 3, 2, 2, 1, 1, 1, - 3, 2, 0, 1, 3, 1, 2, 3, 1, 1, - 1, 6, 7, 7, 4, 5, 7, 1, 3, 8, - 8, 5, 4, 5, 5, 3, 1, 1, 1, 3, - 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, - 2, 1, 2, 2, 0, 1, 1, 0, 1, 0, - 1, 0, 1, 1, 3, 1, 2, 3, 5, 0, - 1, 2, 1, 1, 0, 2, 1, 3, 1, 1, - 1, 3, 3, 3, 3, 5, 5, 3, 0, 1, - 0, 1, 2, 1, 1, 1, 2, 2, 1, 2, - 3, 2, 3, 2, 2, 2, 1, 1, 3, 0, - 5, 5, 5, 1, 3, 0, 2, 1, 3, 3, - 2, 3, 1, 2, 0, 3, 1, 1, 3, 3, - 4, 4, 5, 3, 4, 5, 6, 2, 1, 2, - 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, - 1, 0, 2, 1, 1, 1, 3, 1, 3, 1, - 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, - 2, 2, 2, 2, 3, 1, 1, 1, 1, 4, - 5, 6, 4, 4, 6, 6, 6, 9, 7, 5, - 4, 2, 2, 2, 2, 2, 2, 2, 2, 0, - 2, 4, 4, 4, 4, 0, 3, 4, 7, 3, - 1, 1, 2, 3, 3, 1, 2, 2, 1, 2, - 1, 2, 2, 1, 2, 0, 1, 0, 2, 1, - 2, 4, 0, 2, 1, 3, 5, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 2, 0, 3, - 0, 2, 0, 3, 1, 3, 2, 0, 1, 1, - 0, 2, 4, 4, 0, 2, 4, 2, 1, 3, - 5, 4, 6, 1, 3, 3, 5, 0, 5, 1, - 3, 1, 2, 3, 1, 1, 3, 3, 1, 1, - 0, 2, 0, 3, 0, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, - 1, 1, 0, 1, 1, 0, 2, 1, 1, 1, + 1, 1, 1, 2, 8, 4, 6, 4, 4, 1, + 3, 3, 7, 3, 1, 1, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, + 1, 2, 2, 2, 1, 4, 4, 2, 2, 3, + 3, 3, 3, 1, 1, 1, 1, 1, 4, 1, + 3, 0, 3, 0, 5, 0, 3, 5, 0, 1, + 0, 1, 0, 1, 2, 0, 2, 2, 2, 2, + 0, 1, 0, 3, 3, 0, 2, 0, 2, 1, + 2, 1, 0, 2, 4, 2, 3, 2, 2, 1, + 1, 1, 3, 2, 0, 1, 3, 1, 2, 3, + 1, 1, 1, 6, 7, 7, 4, 5, 7, 1, + 3, 8, 8, 5, 4, 5, 5, 3, 1, 1, + 1, 3, 2, 2, 2, 2, 2, 2, 2, 0, + 2, 0, 2, 1, 2, 2, 0, 1, 1, 0, + 1, 0, 1, 0, 1, 1, 3, 1, 2, 3, + 5, 0, 1, 2, 1, 1, 0, 2, 1, 3, + 1, 1, 1, 3, 3, 3, 3, 5, 5, 3, + 0, 1, 0, 1, 2, 1, 1, 1, 2, 2, + 1, 2, 3, 2, 3, 2, 2, 2, 1, 1, + 3, 0, 5, 5, 5, 1, 3, 0, 2, 1, + 3, 3, 2, 3, 1, 2, 0, 3, 1, 1, + 3, 3, 4, 4, 5, 3, 4, 5, 6, 2, + 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, + 1, 1, 1, 0, 2, 1, 1, 1, 3, 1, + 3, 1, 1, 1, 1, 1, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 2, 2, 2, 2, 2, 3, 1, 1, 1, + 1, 4, 5, 6, 4, 4, 6, 6, 6, 9, + 7, 5, 4, 2, 2, 2, 2, 2, 2, 2, + 2, 0, 2, 4, 4, 4, 4, 0, 3, 4, + 7, 3, 1, 1, 2, 3, 3, 1, 2, 2, + 1, 2, 1, 2, 2, 1, 2, 0, 1, 0, + 2, 1, 2, 4, 0, 2, 1, 3, 5, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, + 0, 3, 0, 2, 0, 3, 1, 3, 2, 0, + 1, 1, 0, 2, 4, 4, 0, 2, 4, 2, + 1, 3, 5, 4, 6, 1, 3, 3, 5, 0, + 5, 1, 3, 1, 2, 3, 1, 1, 3, 3, + 1, 1, 0, 2, 0, 3, 0, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 1, 1, 1, 1, 0, 1, 1, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1507,17 +1512,17 @@ var yyR2 = [...]int{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, - 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 0, 1, 1, } var yyChk = [...]int{ - -1000, -144, -1, -2, -6, -7, -8, -9, -10, -11, + -1000, -145, -1, -2, -6, -7, -8, -9, -10, -11, -12, -13, -15, -16, -17, -18, -3, -4, 6, -22, 8, 9, 29, -14, 108, 109, 111, 110, 112, 122, - 47, 24, 123, 124, 127, 128, 129, -146, 7, 190, - 50, -145, 203, -74, 14, -21, 5, -19, -149, -19, - -19, -19, -19, -133, 50, -93, 115, 67, 113, 119, + 47, 24, 123, 124, 127, 128, 129, -147, 7, 190, + 50, -146, 203, -74, 14, -21, 5, -19, -150, -19, + -19, -19, -19, -134, 50, -93, 115, 67, 113, 119, -97, 53, -96, 196, 141, 135, 162, 154, 152, 155, 180, 62, 125, 150, 146, 144, 26, 167, 201, 145, 139, 140, 166, 198, 32, 133, 165, 161, 164, 138, @@ -1525,7 +1530,7 @@ var yyChk = [...]int{ 143, 132, 127, 35, 171, 137, 158, 134, 148, 149, 163, 136, 159, 129, 172, 202, 156, 153, 176, 177, 178, 199, 151, 173, -86, 115, 117, 113, 113, 114, - 115, 113, -110, 53, -95, -96, 68, 21, 23, 169, + 115, 113, -111, 53, -95, -96, 68, 21, 23, 169, 71, 103, 15, 72, 102, 191, 108, 45, 183, 184, 181, 182, 174, 28, 9, 24, 123, 20, 96, 110, 75, 76, 126, 22, 124, 66, 18, 48, 10, 12, @@ -1534,187 +1539,187 @@ var yyChk = [...]int{ 98, 46, 33, 69, 64, 49, 67, 14, 44, 86, 111, 190, 42, 6, 194, 29, 122, 40, 113, 175, 74, 116, 65, 5, 119, 8, 47, 120, 187, 188, - 189, 31, 73, 11, 115, -101, 53, -96, -106, -106, - -106, -106, -106, -106, -2, -78, 16, 15, -5, -3, - -146, 6, 19, 20, -25, 37, 38, -20, -86, -34, - -35, -36, -37, -44, -66, -146, -42, -101, 10, -38, - -42, -83, -82, 180, 155, 179, -84, -67, -97, -101, - 53, -96, -134, -130, 53, 114, -42, 190, -89, 118, - 113, -42, -42, -88, 118, 53, -88, -42, -106, -147, + 189, 31, 73, 11, 115, -102, 53, -96, -107, -107, + -107, -107, -107, -107, -2, -78, 16, 15, -5, -3, + -147, 6, 19, 20, -25, 37, 38, -20, -86, -34, + -35, -36, -37, -44, -66, -147, -42, -102, 10, -38, + -42, -83, -82, 180, 155, 179, -84, -67, -97, -102, + 53, -96, -135, -131, 53, 114, -42, 190, -89, 118, + 113, -42, -42, -88, 118, 53, -88, -42, -107, -148, 52, -79, 18, 30, -32, -48, 69, -53, 28, 22, -52, -49, -67, -65, -66, 103, 92, 93, 100, 70, 104, -57, -55, -56, -58, 55, 54, 63, 56, 57, - 58, 59, 64, 65, 66, -97, -101, -63, -146, 41, + 58, 59, 64, 65, 66, -97, -102, -63, -147, 41, 42, 191, 192, 195, 193, 72, 31, 181, 189, 188, 187, 185, 186, 183, 184, 118, 182, 98, 190, -75, -76, -32, -74, -2, -19, 33, -23, 20, 61, -43, 25, -42, 29, 51, -39, -40, -41, 39, 43, 45, - 40, 41, 42, 46, -105, 21, -34, -2, -146, -104, - -103, 21, -101, 55, 105, -42, -148, 51, 10, 120, - -98, -97, -95, 51, 29, 77, 105, 52, 51, -111, - -114, -116, -115, -112, -113, 152, 153, 103, 156, 158, - 159, 160, 161, 162, 163, 164, 165, 166, 167, 125, - 148, 149, 150, 151, 135, 136, 137, 138, 139, 140, - 141, 143, 144, 145, 146, 147, 53, -107, -146, -98, - 115, -42, 69, -42, -107, 116, -42, 22, 49, -42, - 8, 87, 68, 67, 84, 51, 17, -32, -50, 87, - 69, 85, 86, 71, 89, 88, 99, 92, 93, 94, - 95, 96, 97, 98, 90, 91, 102, 77, 78, 79, - 80, 81, 82, 83, -87, -146, -66, -146, 106, 107, - -53, -53, -53, -53, -53, -53, -146, 105, -61, -32, - -146, -146, -146, -146, -146, -146, -146, -70, -32, -146, - -150, -146, -150, -150, -150, -150, -150, -150, -150, -146, - -146, -146, -146, 51, -77, 23, 24, -78, -147, -25, - -54, -97, 56, 59, -24, 40, -51, 29, 31, -2, - -146, -42, -82, -35, -36, -35, -36, 39, 39, 39, - 44, 39, 44, 39, -40, -101, -147, -147, -2, -45, - 47, 117, 48, -103, -102, -101, -95, -47, 11, -34, - -42, -106, -84, -32, -98, -102, -95, -135, -136, -137, - -98, 55, 56, -130, -131, -138, 121, 119, -132, 114, - 27, -126, 64, 69, -122, 172, -117, 50, -117, -117, - -117, -117, -120, 155, -120, -120, -120, 50, -117, -117, - -117, -124, 50, -124, -124, -125, 50, -125, -94, 120, - -42, 22, -90, 111, -143, 109, 169, 155, 62, 28, - 110, 14, 191, 131, 202, 53, 132, -42, -42, -107, - 35, -32, -32, -59, 64, 69, 65, 66, -32, -32, - -53, -60, -63, -66, 60, 87, 85, 86, 71, -53, - -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, - -53, -53, -53, -53, -108, 53, 55, 53, -52, -52, - -97, -30, 20, -29, -31, 94, -32, -101, -98, 51, - -147, -29, -29, -32, -32, -29, -23, -68, -69, 73, - -97, -147, -29, -30, -29, -29, -76, -79, -85, 18, - 10, 31, 31, -29, -81, 49, -82, -62, -64, -63, - -146, -2, -80, -97, -47, 49, 49, 39, 39, -147, - 114, 114, 114, -74, -32, -47, 105, 51, -137, 77, - 50, 27, -132, 53, 53, -118, 28, 64, -123, 173, - 56, -120, -120, -121, 102, 29, -121, -121, -121, -129, - 55, 56, 56, 49, -97, -107, -106, -91, -92, 116, - 21, 114, 27, 131, 36, 64, 65, 66, -60, -53, - -53, -53, -28, 126, 68, -147, -147, -29, 51, -100, - -99, 21, -97, 55, 105, -146, -32, -147, -147, 51, - 120, 21, -147, -29, -71, -69, 75, -32, -147, -147, - -147, -147, -147, -42, -33, 10, 26, -81, 51, -147, - -147, -147, 51, 105, -74, -32, -32, -146, -146, -146, - -78, -98, -136, -137, -140, -139, -97, 53, -127, 169, - 55, 56, 57, 64, 52, -121, -121, 53, 53, 103, - 52, 51, 51, 52, 51, -42, -42, -106, -97, -28, - 68, -53, -53, -147, -31, -99, 94, -102, -30, -109, - 103, 152, 125, 150, 146, 166, 157, 171, 148, 172, - -108, -109, 196, -74, 76, -32, 74, -47, -34, 27, - -64, 31, -2, -146, -97, -97, -78, -46, -97, -46, - -46, 52, 51, -117, -128, 121, 27, 119, 55, 56, - 56, -107, 25, -53, 105, -147, -147, -117, -117, -117, - -125, -117, 140, -117, 140, -147, -147, -146, -27, 194, - -32, -72, 12, 8, -62, -2, 105, -147, 51, -147, - -147, -139, -119, 62, 27, 27, 52, 52, -146, 94, - -120, 53, -53, -147, 55, -73, 13, 15, -82, -147, - -97, -97, 55, -141, -142, 131, -26, 87, 199, -32, - -61, -147, 51, -97, -147, 197, 46, 200, -142, 31, - 36, 198, 201, 133, 36, 134, 199, -146, 200, -53, - 130, 201, -147, -147, + 40, 41, 42, 46, -106, 21, -34, -2, -147, -105, + -104, 21, -102, 55, 105, -42, -149, 51, 10, 120, + -101, -98, 55, -97, -95, 51, 29, 77, 105, 52, + 51, -112, -115, -117, -116, -113, -114, 152, 153, 103, + 156, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 125, 148, 149, 150, 151, 135, 136, 137, 138, + 139, 140, 141, 143, 144, 145, 146, 147, 53, -108, + -147, -98, 115, -42, 69, -42, -108, 116, -42, 22, + 49, -42, 8, 87, 68, 67, 84, 51, 17, -32, + -50, 87, 69, 85, 86, 71, 89, 88, 99, 92, + 93, 94, 95, 96, 97, 98, 90, 91, 102, 77, + 78, 79, 80, 81, 82, 83, -87, -147, -66, -147, + 106, 107, -53, -53, -53, -53, -53, -53, -147, 105, + -61, -32, -147, -147, -147, -147, -147, -147, -147, -70, + -32, -147, -151, -147, -151, -151, -151, -151, -151, -151, + -151, -147, -147, -147, -147, 51, -77, 23, 24, -78, + -148, -25, -54, -97, 56, 59, -24, 40, -51, 29, + 31, -2, -147, -42, -82, -35, -36, -35, -36, 39, + 39, 39, 44, 39, 44, 39, -40, -102, -148, -148, + -2, -45, 47, 117, 48, -104, -103, -102, -95, -47, + 11, -34, -42, -107, -84, -32, -98, -103, -95, -136, + -137, -138, -98, 55, 56, -131, -132, -139, 121, 119, + -133, 114, 27, -127, 64, 69, -123, 172, -118, 50, + -118, -118, -118, -118, -121, 155, -121, -121, -121, 50, + -118, -118, -118, -125, 50, -125, -125, -126, 50, -126, + -94, 120, -42, 22, -90, 111, -144, 109, 169, 155, + 62, 28, 110, 14, 191, 131, 202, 53, 132, -42, + -42, -108, 35, -32, -32, -59, 64, 69, 65, 66, + -32, -32, -53, -60, -63, -66, 60, 87, 85, 86, + 71, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -109, 53, 55, 53, + -52, -52, -97, -30, 20, -29, -31, 94, -32, -102, + -98, 51, -148, -29, -29, -32, -32, -29, -23, -68, + -69, 73, -97, -148, -29, -30, -29, -29, -76, -79, + -85, 18, 10, 31, 31, -29, -81, 49, -82, -62, + -64, -63, -147, -2, -80, -97, -47, 49, 49, 39, + 39, -148, 114, 114, 114, -74, -32, -47, 105, 51, + -138, 77, 50, 27, -133, 53, 53, -119, 28, 64, + -124, 173, 56, -121, -121, -122, 102, 29, -122, -122, + -122, -130, 55, 56, 56, 49, -97, -108, -107, -91, + -92, 116, 21, 114, 27, 131, 36, 64, 65, 66, + -60, -53, -53, -53, -28, 126, 68, -148, -148, -29, + 51, -100, -99, 21, -97, 55, 105, -147, -32, -148, + -148, 51, 120, 21, -148, -29, -71, -69, 75, -32, + -148, -148, -148, -148, -148, -42, -33, 10, 26, -81, + 51, -148, -148, -148, 51, 105, -74, -32, -32, -147, + -147, -147, -78, -98, -137, -138, -141, -140, -97, 53, + -128, 169, 55, 56, 57, 64, 52, -122, -122, 53, + 53, 103, 52, 51, 51, 52, 51, -42, -42, -107, + -97, -28, 68, -53, -53, -148, -31, -99, 94, -103, + -30, -110, 103, 152, 125, 150, 146, 166, 157, 171, + 148, 172, -109, -110, 196, -74, 76, -32, 74, -47, + -34, 27, -64, 31, -2, -147, -97, -97, -78, -46, + -97, -46, -46, 52, 51, -118, -129, 121, 27, 119, + 55, 56, 56, -108, 25, -53, 105, -148, -148, -118, + -118, -118, -126, -118, 140, -118, 140, -148, -148, -147, + -27, 194, -32, -72, 12, 8, -62, -2, 105, -148, + 51, -148, -148, -140, -120, 62, 27, 27, 52, 52, + -147, 94, -121, 53, -53, -148, 55, -73, 13, 15, + -82, -148, -97, -97, 55, -142, -143, 131, -26, 87, + 199, -32, -61, -148, 51, -97, -148, 197, 46, 200, + -143, 31, 36, 198, 201, 133, 36, 134, 199, -147, + 200, -53, 130, 201, -148, -148, } var yyDef = [...]int{ 0, -2, 2, -2, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 382, 0, 167, 167, - 167, 167, 167, 0, 442, 424, 0, 0, 0, 0, - 0, 607, 607, 607, 607, 607, 607, 0, 27, 28, - 605, 1, 3, 390, 0, 0, 171, 174, 169, 424, - 0, 0, 0, 41, 0, 0, 598, 0, 422, 443, - 444, 447, 448, 543, 544, 545, 546, 547, 548, 549, - 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, - 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, - 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, - 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, - 590, 591, 592, 593, 594, 595, 596, 597, 599, 600, - 601, 602, 603, 604, 0, 0, 425, 0, 420, 0, - 420, 0, 607, 156, 157, 158, 455, 456, 457, 458, - 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, - 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, - 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, - 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, - 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, - 539, 540, 541, 542, 598, 160, 451, 452, 161, 162, - 163, 164, 165, 166, 21, 394, 0, 0, 382, 23, - 0, 167, 172, 173, 177, 175, 176, 168, 0, 0, - 196, 198, 199, 200, 208, 0, 210, 227, 0, 0, - 34, 0, 37, -2, 549, -2, 415, 0, 364, 0, - -2, -2, 0, 47, 0, 0, 608, 0, 0, 0, - 0, 608, 0, 0, 0, 0, 0, 155, 159, 22, - 606, 17, 0, 0, 391, 237, 0, 242, 244, 0, - 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, - 0, 305, 306, 307, 308, 367, 368, 369, 370, 371, - 372, 373, 374, 246, 247, 364, 0, 414, 0, 0, - 0, 0, 0, 0, 0, 355, 0, 329, 329, 329, - 329, 329, 329, 329, 329, 0, 0, 0, 0, 383, - 384, 387, 390, 21, 174, 0, 179, 178, 170, 0, - 0, 226, 0, 0, 0, 0, 0, 215, 0, 0, - 218, 0, 0, 0, 0, 209, 0, 21, 0, 229, - 211, 0, 213, 214, 0, 235, 0, 0, 32, 33, - 607, 449, 450, 0, 39, 0, 0, 132, 0, 100, - 96, 52, 53, 89, 55, 89, 89, 89, 89, 110, - 110, 110, 110, 81, 82, 83, 84, 85, 0, 68, - 89, 89, 89, 72, 56, 57, 58, 59, 60, 61, - 62, 91, 91, 91, 93, 93, 445, 43, 609, 610, - 0, 45, 0, 0, 144, 0, 152, 421, 0, 608, - 395, 0, 0, 0, 0, 0, 0, 240, 0, 0, + 11, 12, 13, 14, 15, 16, 384, 0, 169, 169, + 169, 169, 169, 0, 444, 426, 0, 0, 0, 0, + 0, 609, 609, 609, 609, 609, 609, 0, 27, 28, + 607, 1, 3, 392, 0, 0, 173, 176, 171, 426, + 0, 0, 0, 43, 0, 0, 600, 0, 424, 445, + 446, 449, 450, 545, 546, 547, 548, 549, 550, 551, + 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, + 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, + 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, + 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, + 592, 593, 594, 595, 596, 597, 598, 599, 601, 602, + 603, 604, 605, 606, 0, 0, 427, 0, 422, 0, + 422, 0, 609, 158, 159, 160, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, + 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, + 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, + 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 600, 162, 453, 454, 163, 164, + 165, 166, 167, 168, 21, 396, 0, 0, 384, 23, + 0, 169, 174, 175, 179, 177, 178, 170, 0, 0, + 198, 200, 201, 202, 210, 0, 212, 229, 0, 0, + 34, 0, 37, -2, 551, -2, 417, 0, 366, 0, + -2, -2, 0, 49, 0, 0, 610, 0, 0, 0, + 0, 610, 0, 0, 0, 0, 0, 157, 161, 22, + 608, 17, 0, 0, 393, 239, 0, 244, 246, 0, + 281, 282, 283, 284, 285, 0, 0, 0, 0, 0, + 0, 307, 308, 309, 310, 369, 370, 371, 372, 373, + 374, 375, 376, 248, 249, 366, 0, 416, 0, 0, + 0, 0, 0, 0, 0, 357, 0, 331, 331, 331, + 331, 331, 331, 331, 331, 0, 0, 0, 0, 385, + 386, 389, 392, 21, 176, 0, 181, 180, 172, 0, + 0, 228, 0, 0, 0, 0, 0, 217, 0, 0, + 220, 0, 0, 0, 0, 211, 0, 21, 0, 231, + 213, 0, 215, 216, 0, 237, 0, 0, 32, 33, + 609, 41, 42, 451, 452, 0, 39, 0, 0, 134, + 0, 102, 98, 54, 55, 91, 57, 91, 91, 91, + 91, 112, 112, 112, 112, 83, 84, 85, 86, 87, + 0, 70, 91, 91, 91, 74, 58, 59, 60, 61, + 62, 63, 64, 93, 93, 93, 95, 95, 447, 45, + 611, 612, 0, 47, 0, 0, 146, 0, 154, 423, + 0, 610, 397, 0, 0, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 264, 265, 266, - 267, 268, 269, 270, 243, 0, 257, 0, 0, 0, - 299, 300, 301, 302, 303, 0, 181, 0, 0, 277, - 0, 0, 0, 0, 0, 0, 177, 0, 356, 0, - 321, 0, 322, 323, 324, 325, 326, 327, 328, 0, - 181, 0, 0, 0, 386, 388, 389, 394, 24, 177, - 0, 375, 0, 0, 0, 180, 407, 0, 0, -2, - 0, 225, 235, 197, 204, 0, 207, 216, 217, 219, - 0, 221, 0, 223, 224, 201, 202, 276, 21, 203, - 0, 0, 0, 212, 228, 453, 454, 382, 0, 235, - 35, 36, 416, 417, 365, 0, -2, 46, 133, 135, - 138, 139, 140, 48, 49, 0, 0, 0, 0, 127, - 128, 103, 101, 0, 98, 97, 54, 0, 110, 110, - 75, 76, 113, 0, 113, 113, 113, 0, 69, 70, - 71, 63, 0, 64, 65, 66, 0, 67, 0, 0, - 608, 423, 607, 437, 145, 426, 427, 428, 429, 430, - 431, 432, 433, 434, 435, 436, 0, 151, 153, 154, - 0, 238, 239, 241, 258, 0, 260, 262, 392, 393, - 248, 249, 273, 274, 275, 0, 0, 0, 0, 271, - 253, 0, 284, 285, 286, 287, 288, 289, 290, 291, - 292, 293, 294, 295, 298, 340, 341, 0, 296, 297, - 304, 0, 0, 182, 183, 185, 189, 0, 365, 0, - 413, 0, 0, 0, 0, 0, 0, 362, 359, 0, - 0, 330, 0, 0, 0, 0, 385, 18, 0, 418, - 419, 376, 377, 194, 25, 0, 407, 397, 409, 411, - 0, 21, 0, 403, 382, 0, 0, 220, 222, -2, - 0, 0, 0, 390, 236, 31, 0, 0, 136, 0, - 0, 123, 0, 125, 126, 108, 0, 102, 51, 99, - 0, 113, 113, 77, 0, 0, 78, 79, 80, 0, - 87, 0, 0, 0, 446, 44, 141, 0, 607, 438, - 439, 440, 441, 0, 396, 259, 261, 263, 250, 271, - 254, 0, 251, 0, 0, 245, 309, 0, 0, 186, - 190, 0, 192, 193, 0, 181, 278, 312, 313, 0, - 0, 0, 0, 382, 0, 360, 0, 0, 320, 331, - 332, 333, 334, 19, 235, 0, 0, 26, 0, 412, - -2, 0, 0, 0, 390, 205, 206, 0, 0, 0, - 30, 366, 134, 137, 0, 129, 89, 124, 115, 109, - 104, 105, 106, 107, 90, 73, 74, 114, 111, 112, - 86, 0, 0, 94, 0, 608, 142, 143, 0, 252, - 0, 272, 255, 310, 184, 191, 187, 0, 0, 0, - 89, 89, 345, 89, 93, 348, 89, 350, 89, 353, - 0, 0, 0, 357, 319, 363, 0, 378, 195, 0, - 410, 0, -2, 0, 405, 404, 29, 0, 233, 0, - 0, 122, 0, 131, 120, 0, 117, 119, 88, 0, - 0, 42, 0, 256, 0, 311, 314, 342, 110, 346, - 347, 349, 351, 352, 354, 316, 315, 0, 0, 0, - 361, 380, 0, 0, 400, 21, 0, 230, 0, 231, - 232, 130, 50, 0, 116, 118, 92, 95, 0, 188, - 343, 344, 335, 318, 358, 20, 0, 0, 408, -2, - 406, 234, 121, 0, 147, 0, 0, 0, 0, 381, - 379, 146, 0, 0, 317, 0, 0, 0, 148, 0, - 336, 0, 339, 0, 337, 0, 0, 0, 0, 0, - 0, 338, 149, 150, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 266, + 267, 268, 269, 270, 271, 272, 245, 0, 259, 0, + 0, 0, 301, 302, 303, 304, 305, 0, 183, 0, + 0, 279, 0, 0, 0, 0, 0, 0, 179, 0, + 358, 0, 323, 0, 324, 325, 326, 327, 328, 329, + 330, 0, 183, 0, 0, 0, 388, 390, 391, 396, + 24, 179, 0, 377, 0, 0, 0, 182, 409, 0, + 0, -2, 0, 227, 237, 199, 206, 0, 209, 218, + 219, 221, 0, 223, 0, 225, 226, 203, 204, 278, + 21, 205, 0, 0, 0, 214, 230, 455, 456, 384, + 0, 237, 35, 36, 418, 419, 367, 0, -2, 48, + 135, 137, 140, 141, 142, 50, 51, 0, 0, 0, + 0, 129, 130, 105, 103, 0, 100, 99, 56, 0, + 112, 112, 77, 78, 115, 0, 115, 115, 115, 0, + 71, 72, 73, 65, 0, 66, 67, 68, 0, 69, + 0, 0, 610, 425, 609, 439, 147, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 0, 153, + 155, 156, 0, 240, 241, 243, 260, 0, 262, 264, + 394, 395, 250, 251, 275, 276, 277, 0, 0, 0, + 0, 273, 255, 0, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 300, 342, 343, 0, + 298, 299, 306, 0, 0, 184, 185, 187, 191, 0, + 367, 0, 415, 0, 0, 0, 0, 0, 0, 364, + 361, 0, 0, 332, 0, 0, 0, 0, 387, 18, + 0, 420, 421, 378, 379, 196, 25, 0, 409, 399, + 411, 413, 0, 21, 0, 405, 384, 0, 0, 222, + 224, -2, 0, 0, 0, 392, 238, 31, 0, 0, + 138, 0, 0, 125, 0, 127, 128, 110, 0, 104, + 53, 101, 0, 115, 115, 79, 0, 0, 80, 81, + 82, 0, 89, 0, 0, 0, 448, 46, 143, 0, + 609, 440, 441, 442, 443, 0, 398, 261, 263, 265, + 252, 273, 256, 0, 253, 0, 0, 247, 311, 0, + 0, 188, 192, 0, 194, 195, 0, 183, 280, 314, + 315, 0, 0, 0, 0, 384, 0, 362, 0, 0, + 322, 333, 334, 335, 336, 19, 237, 0, 0, 26, + 0, 414, -2, 0, 0, 0, 392, 207, 208, 0, + 0, 0, 30, 368, 136, 139, 0, 131, 91, 126, + 117, 111, 106, 107, 108, 109, 92, 75, 76, 116, + 113, 114, 88, 0, 0, 96, 0, 610, 144, 145, + 0, 254, 0, 274, 257, 312, 186, 193, 189, 0, + 0, 0, 91, 91, 347, 91, 95, 350, 91, 352, + 91, 355, 0, 0, 0, 359, 321, 365, 0, 380, + 197, 0, 412, 0, -2, 0, 407, 406, 29, 0, + 235, 0, 0, 124, 0, 133, 122, 0, 119, 121, + 90, 0, 0, 44, 0, 258, 0, 313, 316, 344, + 112, 348, 349, 351, 353, 354, 356, 318, 317, 0, + 0, 0, 363, 382, 0, 0, 402, 21, 0, 232, + 0, 233, 234, 132, 52, 0, 118, 120, 94, 97, + 0, 190, 345, 346, 337, 320, 360, 20, 0, 0, + 410, -2, 408, 236, 123, 0, 149, 0, 0, 0, + 0, 383, 381, 148, 0, 0, 319, 0, 0, 0, + 150, 0, 338, 0, 341, 0, 339, 0, 0, 0, + 0, 0, 0, 340, 151, 152, } var yyTok1 = [...]int{ @@ -2097,29 +2102,29 @@ yydefault: case 1: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:270 + //line ./go/vt/sqlparser/sql.y:270 { setParseTree(yylex, yyDollar[1].statement) } case 2: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:275 + //line ./go/vt/sqlparser/sql.y:275 { } case 3: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:276 + //line ./go/vt/sqlparser/sql.y:276 { } case 4: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:280 + //line ./go/vt/sqlparser/sql.y:280 { yyVAL.statement = yyDollar[1].selStmt } case 17: yyDollar = yyS[yypt-4 : yypt+1] - //line sql.y:298 + //line ./go/vt/sqlparser/sql.y:298 { sel := yyDollar[1].selStmt.(*Select) sel.OrderBy = yyDollar[2].orderBy @@ -2129,49 +2134,49 @@ yydefault: } case 18: yyDollar = yyS[yypt-6 : yypt+1] - //line sql.y:306 + //line ./go/vt/sqlparser/sql.y:306 { yyVAL.selStmt = &Union{Type: yyDollar[2].str, Left: yyDollar[1].selStmt, Right: yyDollar[3].selStmt, OrderBy: yyDollar[4].orderBy, Limit: yyDollar[5].limit, Lock: yyDollar[6].str} } case 19: yyDollar = yyS[yypt-7 : yypt+1] - //line sql.y:310 + //line ./go/vt/sqlparser/sql.y:310 { yyVAL.selStmt = &Select{Comments: Comments(yyDollar[2].bytes2), Cache: yyDollar[3].str, SelectExprs: SelectExprs{Nextval{Expr: yyDollar[5].expr}}, From: TableExprs{&AliasedTableExpr{Expr: yyDollar[7].tableName}}} } case 20: yyDollar = yyS[yypt-10 : yypt+1] - //line sql.y:317 + //line ./go/vt/sqlparser/sql.y:317 { yyVAL.selStmt = &Select{Comments: Comments(yyDollar[2].bytes2), Cache: yyDollar[3].str, Distinct: yyDollar[4].str, Hints: yyDollar[5].str, SelectExprs: yyDollar[6].selectExprs, From: yyDollar[7].tableExprs, Where: NewWhere(WhereStr, yyDollar[8].expr), GroupBy: GroupBy(yyDollar[9].exprs), Having: NewWhere(HavingStr, yyDollar[10].expr)} } case 21: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:323 + //line ./go/vt/sqlparser/sql.y:323 { yyVAL.selStmt = yyDollar[1].selStmt } case 22: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:327 + //line ./go/vt/sqlparser/sql.y:327 { yyVAL.selStmt = &ParenSelect{Select: yyDollar[2].selStmt} } case 23: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:333 + //line ./go/vt/sqlparser/sql.y:333 { yyVAL.selStmt = yyDollar[1].selStmt } case 24: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:337 + //line ./go/vt/sqlparser/sql.y:337 { yyVAL.selStmt = &ParenSelect{Select: yyDollar[2].selStmt} } case 25: yyDollar = yyS[yypt-6 : yypt+1] - //line sql.y:344 + //line ./go/vt/sqlparser/sql.y:344 { // insert_data returns a *Insert pre-filled with Columns & Values ins := yyDollar[5].ins @@ -2184,7 +2189,7 @@ yydefault: } case 26: yyDollar = yyS[yypt-7 : yypt+1] - //line sql.y:355 + //line ./go/vt/sqlparser/sql.y:355 { cols := make(Columns, 0, len(yyDollar[6].updateExprs)) vals := make(ValTuple, 0, len(yyDollar[7].updateExprs)) @@ -2196,130 +2201,142 @@ yydefault: } case 27: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:367 + //line ./go/vt/sqlparser/sql.y:367 { yyVAL.str = InsertStr } case 28: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:371 + //line ./go/vt/sqlparser/sql.y:371 { yyVAL.str = ReplaceStr } case 29: yyDollar = yyS[yypt-8 : yypt+1] - //line sql.y:377 + //line ./go/vt/sqlparser/sql.y:377 { yyVAL.statement = &Update{Comments: Comments(yyDollar[2].bytes2), TableExprs: yyDollar[3].tableExprs, Exprs: yyDollar[5].updateExprs, Where: NewWhere(WhereStr, yyDollar[6].expr), OrderBy: yyDollar[7].orderBy, Limit: yyDollar[8].limit} } case 30: yyDollar = yyS[yypt-7 : yypt+1] - //line sql.y:383 + //line ./go/vt/sqlparser/sql.y:383 { yyVAL.statement = &Delete{Comments: Comments(yyDollar[2].bytes2), TableExprs: TableExprs{&AliasedTableExpr{Expr: yyDollar[4].tableName}}, Where: NewWhere(WhereStr, yyDollar[5].expr), OrderBy: yyDollar[6].orderBy, Limit: yyDollar[7].limit} } case 31: yyDollar = yyS[yypt-6 : yypt+1] - //line sql.y:387 + //line ./go/vt/sqlparser/sql.y:387 { yyVAL.statement = &Delete{Comments: Comments(yyDollar[2].bytes2), Targets: yyDollar[3].tableNames, TableExprs: yyDollar[5].tableExprs, Where: NewWhere(WhereStr, yyDollar[6].expr)} } case 32: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:392 + //line ./go/vt/sqlparser/sql.y:392 { } case 33: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:393 + //line ./go/vt/sqlparser/sql.y:393 { } case 34: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:397 + //line ./go/vt/sqlparser/sql.y:397 { yyVAL.tableNames = TableNames{yyDollar[1].tableName} } case 35: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:401 + //line ./go/vt/sqlparser/sql.y:401 { yyVAL.tableNames = append(yyVAL.tableNames, yyDollar[3].tableName) } case 36: yyDollar = yyS[yypt-5 : yypt+1] - //line sql.y:407 + //line ./go/vt/sqlparser/sql.y:407 { yyVAL.statement = &Set{Comments: Comments(yyDollar[2].bytes2), Charset: yyDollar[4].colIdent} } case 37: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:411 + //line ./go/vt/sqlparser/sql.y:411 { yyVAL.statement = &Set{Comments: Comments(yyDollar[2].bytes2), Exprs: yyDollar[3].updateExprs} } case 41: + yyDollar = yyS[yypt-1 : yypt+1] + //line ./go/vt/sqlparser/sql.y:422 + { + yyVAL.colIdent = yyDollar[1].colIdent + } + case 42: + yyDollar = yyS[yypt-1 : yypt+1] + //line ./go/vt/sqlparser/sql.y:426 + { + yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) + } + case 43: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:423 + //line ./go/vt/sqlparser/sql.y:432 { yyDollar[1].ddl.TableSpec = yyDollar[2].TableSpec yyVAL.statement = yyDollar[1].ddl } - case 42: + case 44: yyDollar = yyS[yypt-8 : yypt+1] - //line sql.y:428 + //line ./go/vt/sqlparser/sql.y:437 { // Change this to an alter statement yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[7].tableName, NewName: yyDollar[7].tableName} } - case 43: + case 45: yyDollar = yyS[yypt-4 : yypt+1] - //line sql.y:433 + //line ./go/vt/sqlparser/sql.y:442 { yyVAL.statement = &DDL{Action: CreateStr, NewName: yyDollar[3].tableName.ToViewName()} } - case 44: + case 46: yyDollar = yyS[yypt-6 : yypt+1] - //line sql.y:437 + //line ./go/vt/sqlparser/sql.y:446 { yyVAL.statement = &DDL{Action: CreateStr, NewName: yyDollar[5].tableName.ToViewName()} } - case 45: + case 47: yyDollar = yyS[yypt-4 : yypt+1] - //line sql.y:443 + //line ./go/vt/sqlparser/sql.y:452 { yyVAL.ddl = &DDL{Action: CreateStr, NewName: yyDollar[4].tableName} setDDL(yylex, yyVAL.ddl) } - case 46: + case 48: yyDollar = yyS[yypt-4 : yypt+1] - //line sql.y:450 + //line ./go/vt/sqlparser/sql.y:459 { yyVAL.TableSpec = yyDollar[2].TableSpec yyVAL.TableSpec.Options = yyDollar[4].str } - case 47: + case 49: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:457 + //line ./go/vt/sqlparser/sql.y:466 { yyVAL.TableSpec = &TableSpec{} yyVAL.TableSpec.AddColumn(yyDollar[1].columnDefinition) } - case 48: + case 50: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:462 + //line ./go/vt/sqlparser/sql.y:471 { yyVAL.TableSpec.AddColumn(yyDollar[3].columnDefinition) } - case 49: + case 51: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:466 + //line ./go/vt/sqlparser/sql.y:475 { yyVAL.TableSpec.AddIndex(yyDollar[3].indexDefinition) } - case 50: + case 52: yyDollar = yyS[yypt-7 : yypt+1] - //line sql.y:472 + //line ./go/vt/sqlparser/sql.y:481 { yyDollar[2].columnType.NotNull = yyDollar[3].boolVal yyDollar[2].columnType.Default = yyDollar[4].optVal @@ -2328,627 +2345,627 @@ yydefault: yyDollar[2].columnType.Comment = yyDollar[7].optVal yyVAL.columnDefinition = &ColumnDefinition{Name: NewColIdent(string(yyDollar[1].bytes)), Type: yyDollar[2].columnType} } - case 51: + case 53: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:482 + //line ./go/vt/sqlparser/sql.y:491 { yyVAL.columnType = yyDollar[1].columnType yyVAL.columnType.Unsigned = yyDollar[2].boolVal yyVAL.columnType.Zerofill = yyDollar[3].boolVal } - case 54: + case 56: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:492 + //line ./go/vt/sqlparser/sql.y:501 { yyVAL.columnType = yyDollar[1].columnType yyVAL.columnType.Length = yyDollar[2].optVal } - case 55: - yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:497 - { - yyVAL.columnType = yyDollar[1].columnType - } - case 56: - yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:503 - { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} - } case 57: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:507 + //line ./go/vt/sqlparser/sql.y:506 { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} + yyVAL.columnType = yyDollar[1].columnType } case 58: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:511 + //line ./go/vt/sqlparser/sql.y:512 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 59: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:515 + //line ./go/vt/sqlparser/sql.y:516 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 60: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:519 + //line ./go/vt/sqlparser/sql.y:520 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 61: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:523 + //line ./go/vt/sqlparser/sql.y:524 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 62: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:527 + //line ./go/vt/sqlparser/sql.y:528 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 63: + yyDollar = yyS[yypt-1 : yypt+1] + //line ./go/vt/sqlparser/sql.y:532 + { + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} + } + case 64: + yyDollar = yyS[yypt-1 : yypt+1] + //line ./go/vt/sqlparser/sql.y:536 + { + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} + } + case 65: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:533 + //line ./go/vt/sqlparser/sql.y:542 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 64: + case 66: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:539 + //line ./go/vt/sqlparser/sql.y:548 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 65: + case 67: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:545 + //line ./go/vt/sqlparser/sql.y:554 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 66: + case 68: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:551 + //line ./go/vt/sqlparser/sql.y:560 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 67: + case 69: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:557 + //line ./go/vt/sqlparser/sql.y:566 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 68: + case 70: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:565 + //line ./go/vt/sqlparser/sql.y:574 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 69: + case 71: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:569 + //line ./go/vt/sqlparser/sql.y:578 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } - case 70: + case 72: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:573 + //line ./go/vt/sqlparser/sql.y:582 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } - case 71: + case 73: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:577 + //line ./go/vt/sqlparser/sql.y:586 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } - case 72: + case 74: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:581 + //line ./go/vt/sqlparser/sql.y:590 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 73: + case 75: yyDollar = yyS[yypt-4 : yypt+1] - //line sql.y:587 + //line ./go/vt/sqlparser/sql.y:596 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal, Charset: yyDollar[3].str, Collate: yyDollar[4].str} } - case 74: + case 76: yyDollar = yyS[yypt-4 : yypt+1] - //line sql.y:591 + //line ./go/vt/sqlparser/sql.y:600 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal, Charset: yyDollar[3].str, Collate: yyDollar[4].str} } - case 75: + case 77: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:595 + //line ./go/vt/sqlparser/sql.y:604 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } - case 76: + case 78: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:599 + //line ./go/vt/sqlparser/sql.y:608 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } - case 77: + case 79: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:603 + //line ./go/vt/sqlparser/sql.y:612 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } - case 78: + case 80: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:607 + //line ./go/vt/sqlparser/sql.y:616 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } - case 79: + case 81: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:611 + //line ./go/vt/sqlparser/sql.y:620 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } - case 80: + case 82: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:615 + //line ./go/vt/sqlparser/sql.y:624 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } - case 81: + case 83: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:619 + //line ./go/vt/sqlparser/sql.y:628 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 82: + case 84: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:623 + //line ./go/vt/sqlparser/sql.y:632 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 83: + case 85: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:627 + //line ./go/vt/sqlparser/sql.y:636 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 84: + case 86: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:631 + //line ./go/vt/sqlparser/sql.y:640 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 85: + case 87: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:635 + //line ./go/vt/sqlparser/sql.y:644 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 86: + case 88: yyDollar = yyS[yypt-4 : yypt+1] - //line sql.y:639 + //line ./go/vt/sqlparser/sql.y:648 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), EnumValues: yyDollar[3].strs} } - case 87: + case 89: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:645 + //line ./go/vt/sqlparser/sql.y:654 { yyVAL.strs = make([]string, 0, 4) yyVAL.strs = append(yyVAL.strs, "'"+string(yyDollar[1].bytes)+"'") } - case 88: + case 90: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:650 + //line ./go/vt/sqlparser/sql.y:659 { yyVAL.strs = append(yyDollar[1].strs, "'"+string(yyDollar[3].bytes)+"'") } - case 89: + case 91: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:655 + //line ./go/vt/sqlparser/sql.y:664 { yyVAL.optVal = nil } - case 90: + case 92: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:659 + //line ./go/vt/sqlparser/sql.y:668 { yyVAL.optVal = NewIntVal(yyDollar[2].bytes) } - case 91: + case 93: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:664 + //line ./go/vt/sqlparser/sql.y:673 { yyVAL.LengthScaleOption = LengthScaleOption{} } - case 92: + case 94: yyDollar = yyS[yypt-5 : yypt+1] - //line sql.y:668 + //line ./go/vt/sqlparser/sql.y:677 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntVal(yyDollar[2].bytes), Scale: NewIntVal(yyDollar[4].bytes), } } - case 93: + case 95: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:676 + //line ./go/vt/sqlparser/sql.y:685 { yyVAL.LengthScaleOption = LengthScaleOption{} } - case 94: + case 96: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:680 + //line ./go/vt/sqlparser/sql.y:689 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntVal(yyDollar[2].bytes), } } - case 95: + case 97: yyDollar = yyS[yypt-5 : yypt+1] - //line sql.y:686 + //line ./go/vt/sqlparser/sql.y:695 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntVal(yyDollar[2].bytes), Scale: NewIntVal(yyDollar[4].bytes), } } - case 96: + case 98: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:694 + //line ./go/vt/sqlparser/sql.y:703 { yyVAL.boolVal = BoolVal(false) } - case 97: + case 99: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:698 + //line ./go/vt/sqlparser/sql.y:707 { yyVAL.boolVal = BoolVal(true) } - case 98: + case 100: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:703 + //line ./go/vt/sqlparser/sql.y:712 { yyVAL.boolVal = BoolVal(false) } - case 99: + case 101: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:707 + //line ./go/vt/sqlparser/sql.y:716 { yyVAL.boolVal = BoolVal(true) } - case 100: + case 102: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:713 + //line ./go/vt/sqlparser/sql.y:722 { yyVAL.boolVal = BoolVal(false) } - case 101: + case 103: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:717 + //line ./go/vt/sqlparser/sql.y:726 { yyVAL.boolVal = BoolVal(false) } - case 102: + case 104: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:721 + //line ./go/vt/sqlparser/sql.y:730 { yyVAL.boolVal = BoolVal(true) } - case 103: + case 105: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:726 + //line ./go/vt/sqlparser/sql.y:735 { yyVAL.optVal = nil } - case 104: + case 106: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:730 + //line ./go/vt/sqlparser/sql.y:739 { yyVAL.optVal = NewStrVal(yyDollar[2].bytes) } - case 105: + case 107: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:734 + //line ./go/vt/sqlparser/sql.y:743 { yyVAL.optVal = NewIntVal(yyDollar[2].bytes) } - case 106: + case 108: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:738 + //line ./go/vt/sqlparser/sql.y:747 { yyVAL.optVal = NewFloatVal(yyDollar[2].bytes) } - case 107: + case 109: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:742 + //line ./go/vt/sqlparser/sql.y:751 { yyVAL.optVal = NewValArg(yyDollar[2].bytes) } - case 108: + case 110: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:747 + //line ./go/vt/sqlparser/sql.y:756 { yyVAL.boolVal = BoolVal(false) } - case 109: + case 111: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:751 + //line ./go/vt/sqlparser/sql.y:760 { yyVAL.boolVal = BoolVal(true) } - case 110: + case 112: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:756 + //line ./go/vt/sqlparser/sql.y:765 { yyVAL.str = "" } - case 111: + case 113: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:760 + //line ./go/vt/sqlparser/sql.y:769 { yyVAL.str = string(yyDollar[3].bytes) } - case 112: + case 114: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:764 + //line ./go/vt/sqlparser/sql.y:773 { yyVAL.str = string(yyDollar[3].bytes) } - case 113: + case 115: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:769 + //line ./go/vt/sqlparser/sql.y:778 { yyVAL.str = "" } - case 114: + case 116: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:773 + //line ./go/vt/sqlparser/sql.y:782 { yyVAL.str = string(yyDollar[2].bytes) } - case 115: + case 117: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:778 + //line ./go/vt/sqlparser/sql.y:787 { yyVAL.colKeyOpt = colKeyNone } - case 116: + case 118: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:782 + //line ./go/vt/sqlparser/sql.y:791 { yyVAL.colKeyOpt = colKeyPrimary } - case 117: + case 119: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:786 + //line ./go/vt/sqlparser/sql.y:795 { yyVAL.colKeyOpt = colKey } - case 118: + case 120: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:790 + //line ./go/vt/sqlparser/sql.y:799 { yyVAL.colKeyOpt = colKeyUniqueKey } - case 119: + case 121: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:794 + //line ./go/vt/sqlparser/sql.y:803 { yyVAL.colKeyOpt = colKeyUnique } - case 120: + case 122: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:799 + //line ./go/vt/sqlparser/sql.y:808 { yyVAL.optVal = nil } - case 121: + case 123: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:803 + //line ./go/vt/sqlparser/sql.y:812 { yyVAL.optVal = NewStrVal(yyDollar[2].bytes) } - case 122: + case 124: yyDollar = yyS[yypt-4 : yypt+1] - //line sql.y:809 + //line ./go/vt/sqlparser/sql.y:818 { yyVAL.indexDefinition = &IndexDefinition{Info: yyDollar[1].indexInfo, Columns: yyDollar[3].indexColumns} } - case 123: + case 125: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:815 + //line ./go/vt/sqlparser/sql.y:824 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes) + " " + string(yyDollar[2].bytes), Name: NewColIdent("PRIMARY"), Primary: true, Unique: true} } - case 124: + case 126: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:819 + //line ./go/vt/sqlparser/sql.y:828 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes) + " " + string(yyDollar[2].str), Name: NewColIdent(string(yyDollar[3].bytes)), Unique: true} } - case 125: + case 127: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:823 + //line ./go/vt/sqlparser/sql.y:832 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes), Name: NewColIdent(string(yyDollar[2].bytes)), Unique: true} } - case 126: + case 128: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:827 + //line ./go/vt/sqlparser/sql.y:836 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].str), Name: NewColIdent(string(yyDollar[2].bytes)), Unique: false} } - case 127: + case 129: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:833 + //line ./go/vt/sqlparser/sql.y:842 { yyVAL.str = string(yyDollar[1].bytes) } - case 128: + case 130: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:837 + //line ./go/vt/sqlparser/sql.y:846 { yyVAL.str = string(yyDollar[1].bytes) } - case 129: + case 131: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:843 + //line ./go/vt/sqlparser/sql.y:852 { yyVAL.indexColumns = []*IndexColumn{yyDollar[1].indexColumn} } - case 130: + case 132: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:847 + //line ./go/vt/sqlparser/sql.y:856 { yyVAL.indexColumns = append(yyVAL.indexColumns, yyDollar[3].indexColumn) } - case 131: + case 133: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:853 + //line ./go/vt/sqlparser/sql.y:862 { yyVAL.indexColumn = &IndexColumn{Column: yyDollar[1].colIdent, Length: yyDollar[2].optVal} } - case 132: + case 134: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:858 + //line ./go/vt/sqlparser/sql.y:867 { yyVAL.str = "" } - case 133: + case 135: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:862 + //line ./go/vt/sqlparser/sql.y:871 { yyVAL.str = " " + string(yyDollar[1].str) } - case 134: + case 136: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:866 + //line ./go/vt/sqlparser/sql.y:875 { yyVAL.str = string(yyDollar[1].str) + ", " + string(yyDollar[3].str) } - case 135: + case 137: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:874 + //line ./go/vt/sqlparser/sql.y:883 { yyVAL.str = yyDollar[1].str } - case 136: + case 138: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:878 + //line ./go/vt/sqlparser/sql.y:887 { yyVAL.str = yyDollar[1].str + " " + yyDollar[2].str } - case 137: + case 139: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:882 + //line ./go/vt/sqlparser/sql.y:891 { yyVAL.str = yyDollar[1].str + "=" + yyDollar[3].str } - case 138: + case 140: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:888 + //line ./go/vt/sqlparser/sql.y:897 { yyVAL.str = yyDollar[1].colIdent.String() } - case 139: + case 141: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:892 + //line ./go/vt/sqlparser/sql.y:901 { yyVAL.str = "'" + string(yyDollar[1].bytes) + "'" } - case 140: + case 142: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:896 + //line ./go/vt/sqlparser/sql.y:905 { yyVAL.str = string(yyDollar[1].bytes) } - case 141: + case 143: yyDollar = yyS[yypt-6 : yypt+1] - //line sql.y:902 + //line ./go/vt/sqlparser/sql.y:911 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName, NewName: yyDollar[4].tableName} } - case 142: + case 144: yyDollar = yyS[yypt-7 : yypt+1] - //line sql.y:906 + //line ./go/vt/sqlparser/sql.y:915 { // Change this to a rename statement yyVAL.statement = &DDL{Action: RenameStr, Table: yyDollar[4].tableName, NewName: yyDollar[7].tableName} } - case 143: + case 145: yyDollar = yyS[yypt-7 : yypt+1] - //line sql.y:911 + //line ./go/vt/sqlparser/sql.y:920 { // Rename an index can just be an alter yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName, NewName: yyDollar[4].tableName} } - case 144: + case 146: yyDollar = yyS[yypt-4 : yypt+1] - //line sql.y:916 + //line ./go/vt/sqlparser/sql.y:925 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[3].tableName.ToViewName(), NewName: yyDollar[3].tableName.ToViewName()} } - case 145: + case 147: yyDollar = yyS[yypt-5 : yypt+1] - //line sql.y:920 + //line ./go/vt/sqlparser/sql.y:929 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName, PartitionSpec: yyDollar[5].partSpec} } - case 146: + case 148: yyDollar = yyS[yypt-7 : yypt+1] - //line sql.y:926 + //line ./go/vt/sqlparser/sql.y:935 { yyVAL.partSpec = &PartitionSpec{Action: ReorganizeStr, Name: yyDollar[3].colIdent, Definitions: yyDollar[6].partDefs} } - case 147: + case 149: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:932 + //line ./go/vt/sqlparser/sql.y:941 { yyVAL.partDefs = []*PartitionDefinition{yyDollar[1].partDef} } - case 148: + case 150: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:936 + //line ./go/vt/sqlparser/sql.y:945 { yyVAL.partDefs = append(yyDollar[1].partDefs, yyDollar[3].partDef) } - case 149: + case 151: yyDollar = yyS[yypt-8 : yypt+1] - //line sql.y:942 + //line ./go/vt/sqlparser/sql.y:951 { yyVAL.partDef = &PartitionDefinition{Name: yyDollar[2].colIdent, Limit: yyDollar[7].expr} } - case 150: + case 152: yyDollar = yyS[yypt-8 : yypt+1] - //line sql.y:946 + //line ./go/vt/sqlparser/sql.y:955 { yyVAL.partDef = &PartitionDefinition{Name: yyDollar[2].colIdent, Maxvalue: true} } - case 151: + case 153: yyDollar = yyS[yypt-5 : yypt+1] - //line sql.y:952 + //line ./go/vt/sqlparser/sql.y:961 { yyVAL.statement = &DDL{Action: RenameStr, Table: yyDollar[3].tableName, NewName: yyDollar[5].tableName} } - case 152: + case 154: yyDollar = yyS[yypt-4 : yypt+1] - //line sql.y:958 + //line ./go/vt/sqlparser/sql.y:967 { var exists bool if yyDollar[3].byt != 0 { @@ -2956,16 +2973,16 @@ yydefault: } yyVAL.statement = &DDL{Action: DropStr, Table: yyDollar[4].tableName, IfExists: exists} } - case 153: + case 155: yyDollar = yyS[yypt-5 : yypt+1] - //line sql.y:966 + //line ./go/vt/sqlparser/sql.y:975 { // Change this to an alter statement yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[5].tableName, NewName: yyDollar[5].tableName} } - case 154: + case 156: yyDollar = yyS[yypt-5 : yypt+1] - //line sql.y:971 + //line ./go/vt/sqlparser/sql.y:980 { var exists bool if yyDollar[3].byt != 0 { @@ -2973,21 +2990,21 @@ yydefault: } yyVAL.statement = &DDL{Action: DropStr, Table: yyDollar[4].tableName.ToViewName(), IfExists: exists} } - case 155: + case 157: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:981 + //line ./go/vt/sqlparser/sql.y:990 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[3].tableName, NewName: yyDollar[3].tableName} } - case 156: + case 158: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:987 + //line ./go/vt/sqlparser/sql.y:996 { yyVAL.str = ShowUnsupportedStr } - case 157: + case 159: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:991 + //line ./go/vt/sqlparser/sql.y:1000 { switch v := string(yyDollar[1].bytes); v { case ShowDatabasesStr, ShowTablesStr: @@ -2996,9 +3013,9 @@ yydefault: yyVAL.str = ShowUnsupportedStr } } - case 158: + case 160: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1000 + //line ./go/vt/sqlparser/sql.y:1009 { switch v := string(yyDollar[1].bytes); v { case ShowKeyspacesStr, ShowShardsStr, ShowVSchemaTablesStr: @@ -3007,376 +3024,376 @@ yydefault: yyVAL.str = ShowUnsupportedStr } } - case 159: + case 161: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1011 + //line ./go/vt/sqlparser/sql.y:1020 { yyVAL.statement = &Show{Type: yyDollar[2].str} } - case 160: + case 162: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1017 + //line ./go/vt/sqlparser/sql.y:1026 { yyVAL.statement = &Use{DBName: yyDollar[2].tableIdent} } - case 161: + case 163: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1023 + //line ./go/vt/sqlparser/sql.y:1032 { yyVAL.statement = &OtherRead{} } - case 162: + case 164: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1027 + //line ./go/vt/sqlparser/sql.y:1036 { yyVAL.statement = &OtherRead{} } - case 163: + case 165: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1031 + //line ./go/vt/sqlparser/sql.y:1040 { yyVAL.statement = &OtherRead{} } - case 164: + case 166: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1035 + //line ./go/vt/sqlparser/sql.y:1044 { yyVAL.statement = &OtherAdmin{} } - case 165: + case 167: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1039 + //line ./go/vt/sqlparser/sql.y:1048 { yyVAL.statement = &OtherAdmin{} } - case 166: + case 168: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1043 + //line ./go/vt/sqlparser/sql.y:1052 { yyVAL.statement = &OtherAdmin{} } - case 167: + case 169: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:1048 + //line ./go/vt/sqlparser/sql.y:1057 { setAllowComments(yylex, true) } - case 168: + case 170: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1052 + //line ./go/vt/sqlparser/sql.y:1061 { yyVAL.bytes2 = yyDollar[2].bytes2 setAllowComments(yylex, false) } - case 169: + case 171: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:1058 + //line ./go/vt/sqlparser/sql.y:1067 { yyVAL.bytes2 = nil } - case 170: + case 172: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1062 + //line ./go/vt/sqlparser/sql.y:1071 { yyVAL.bytes2 = append(yyDollar[1].bytes2, yyDollar[2].bytes) } - case 171: + case 173: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1068 + //line ./go/vt/sqlparser/sql.y:1077 { yyVAL.str = UnionStr } - case 172: + case 174: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1072 + //line ./go/vt/sqlparser/sql.y:1081 { yyVAL.str = UnionAllStr } - case 173: + case 175: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1076 + //line ./go/vt/sqlparser/sql.y:1085 { yyVAL.str = UnionDistinctStr } - case 174: + case 176: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:1081 + //line ./go/vt/sqlparser/sql.y:1090 { yyVAL.str = "" } - case 175: + case 177: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1085 + //line ./go/vt/sqlparser/sql.y:1094 { yyVAL.str = SQLNoCacheStr } - case 176: + case 178: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1089 + //line ./go/vt/sqlparser/sql.y:1098 { yyVAL.str = SQLCacheStr } - case 177: + case 179: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:1094 + //line ./go/vt/sqlparser/sql.y:1103 { yyVAL.str = "" } - case 178: + case 180: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1098 + //line ./go/vt/sqlparser/sql.y:1107 { yyVAL.str = DistinctStr } - case 179: + case 181: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:1103 + //line ./go/vt/sqlparser/sql.y:1112 { yyVAL.str = "" } - case 180: + case 182: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1107 + //line ./go/vt/sqlparser/sql.y:1116 { yyVAL.str = StraightJoinHint } - case 181: + case 183: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:1112 + //line ./go/vt/sqlparser/sql.y:1121 { yyVAL.selectExprs = nil } - case 182: + case 184: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1116 + //line ./go/vt/sqlparser/sql.y:1125 { yyVAL.selectExprs = yyDollar[1].selectExprs } - case 183: + case 185: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1122 + //line ./go/vt/sqlparser/sql.y:1131 { yyVAL.selectExprs = SelectExprs{yyDollar[1].selectExpr} } - case 184: + case 186: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1126 + //line ./go/vt/sqlparser/sql.y:1135 { yyVAL.selectExprs = append(yyVAL.selectExprs, yyDollar[3].selectExpr) } - case 185: + case 187: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1132 + //line ./go/vt/sqlparser/sql.y:1141 { yyVAL.selectExpr = &StarExpr{} } - case 186: + case 188: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1136 + //line ./go/vt/sqlparser/sql.y:1145 { yyVAL.selectExpr = &AliasedExpr{Expr: yyDollar[1].expr, As: yyDollar[2].colIdent} } - case 187: + case 189: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1140 + //line ./go/vt/sqlparser/sql.y:1149 { yyVAL.selectExpr = &StarExpr{TableName: TableName{Name: yyDollar[1].tableIdent}} } - case 188: + case 190: yyDollar = yyS[yypt-5 : yypt+1] - //line sql.y:1144 + //line ./go/vt/sqlparser/sql.y:1153 { yyVAL.selectExpr = &StarExpr{TableName: TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent}} } - case 189: + case 191: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:1149 + //line ./go/vt/sqlparser/sql.y:1158 { yyVAL.colIdent = ColIdent{} } - case 190: + case 192: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1153 + //line ./go/vt/sqlparser/sql.y:1162 { yyVAL.colIdent = yyDollar[1].colIdent } - case 191: + case 193: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1157 + //line ./go/vt/sqlparser/sql.y:1166 { yyVAL.colIdent = yyDollar[2].colIdent } - case 193: + case 195: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1164 + //line ./go/vt/sqlparser/sql.y:1173 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 194: + case 196: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:1169 + //line ./go/vt/sqlparser/sql.y:1178 { yyVAL.tableExprs = TableExprs{&AliasedTableExpr{Expr: TableName{Name: NewTableIdent("dual")}}} } - case 195: + case 197: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1173 + //line ./go/vt/sqlparser/sql.y:1182 { yyVAL.tableExprs = yyDollar[2].tableExprs } - case 196: + case 198: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1179 + //line ./go/vt/sqlparser/sql.y:1188 { yyVAL.tableExprs = TableExprs{yyDollar[1].tableExpr} } - case 197: + case 199: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1183 + //line ./go/vt/sqlparser/sql.y:1192 { yyVAL.tableExprs = append(yyVAL.tableExprs, yyDollar[3].tableExpr) } - case 200: + case 202: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1193 + //line ./go/vt/sqlparser/sql.y:1202 { yyVAL.tableExpr = yyDollar[1].aliasedTableName } - case 201: + case 203: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1197 + //line ./go/vt/sqlparser/sql.y:1206 { yyVAL.tableExpr = &AliasedTableExpr{Expr: yyDollar[1].subquery, As: yyDollar[3].tableIdent} } - case 202: + case 204: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1201 + //line ./go/vt/sqlparser/sql.y:1210 { yyVAL.tableExpr = &ParenTableExpr{Exprs: yyDollar[2].tableExprs} } - case 203: + case 205: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1207 + //line ./go/vt/sqlparser/sql.y:1216 { yyVAL.aliasedTableName = &AliasedTableExpr{Expr: yyDollar[1].tableName, As: yyDollar[2].tableIdent, Hints: yyDollar[3].indexHints} } - case 204: + case 206: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1220 + //line ./go/vt/sqlparser/sql.y:1229 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr} } - case 205: + case 207: yyDollar = yyS[yypt-5 : yypt+1] - //line sql.y:1224 + //line ./go/vt/sqlparser/sql.y:1233 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr, On: yyDollar[5].expr} } - case 206: + case 208: yyDollar = yyS[yypt-5 : yypt+1] - //line sql.y:1228 + //line ./go/vt/sqlparser/sql.y:1237 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr, On: yyDollar[5].expr} } - case 207: + case 209: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1232 + //line ./go/vt/sqlparser/sql.y:1241 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr} } - case 208: + case 210: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:1237 + //line ./go/vt/sqlparser/sql.y:1246 { yyVAL.empty = struct{}{} } - case 209: + case 211: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1239 + //line ./go/vt/sqlparser/sql.y:1248 { yyVAL.empty = struct{}{} } - case 210: + case 212: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:1242 + //line ./go/vt/sqlparser/sql.y:1251 { yyVAL.tableIdent = NewTableIdent("") } - case 211: + case 213: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1246 + //line ./go/vt/sqlparser/sql.y:1255 { yyVAL.tableIdent = yyDollar[1].tableIdent } - case 212: + case 214: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1250 + //line ./go/vt/sqlparser/sql.y:1259 { yyVAL.tableIdent = yyDollar[2].tableIdent } - case 214: + case 216: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1257 + //line ./go/vt/sqlparser/sql.y:1266 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 215: + case 217: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1263 + //line ./go/vt/sqlparser/sql.y:1272 { yyVAL.str = JoinStr } - case 216: + case 218: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1267 + //line ./go/vt/sqlparser/sql.y:1276 { yyVAL.str = JoinStr } - case 217: + case 219: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1271 + //line ./go/vt/sqlparser/sql.y:1280 { yyVAL.str = JoinStr } - case 218: + case 220: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1275 + //line ./go/vt/sqlparser/sql.y:1284 { yyVAL.str = StraightJoinStr } - case 219: + case 221: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1281 + //line ./go/vt/sqlparser/sql.y:1290 { yyVAL.str = LeftJoinStr } - case 220: + case 222: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1285 + //line ./go/vt/sqlparser/sql.y:1294 { yyVAL.str = LeftJoinStr } - case 221: + case 223: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1289 + //line ./go/vt/sqlparser/sql.y:1298 { yyVAL.str = RightJoinStr } - case 222: + case 224: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1293 + //line ./go/vt/sqlparser/sql.y:1302 { yyVAL.str = RightJoinStr } - case 223: + case 225: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1299 + //line ./go/vt/sqlparser/sql.y:1308 { yyVAL.str = NaturalJoinStr } - case 224: + case 226: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1303 + //line ./go/vt/sqlparser/sql.y:1312 { if yyDollar[2].str == LeftJoinStr { yyVAL.str = NaturalLeftJoinStr @@ -3384,459 +3401,459 @@ yydefault: yyVAL.str = NaturalRightJoinStr } } - case 225: + case 227: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1313 + //line ./go/vt/sqlparser/sql.y:1322 { yyVAL.tableName = yyDollar[2].tableName } - case 226: + case 228: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1317 + //line ./go/vt/sqlparser/sql.y:1326 { yyVAL.tableName = yyDollar[1].tableName } - case 227: + case 229: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1323 + //line ./go/vt/sqlparser/sql.y:1332 { yyVAL.tableName = TableName{Name: yyDollar[1].tableIdent} } - case 228: + case 230: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1327 + //line ./go/vt/sqlparser/sql.y:1336 { yyVAL.tableName = TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent} } - case 229: + case 231: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:1332 + //line ./go/vt/sqlparser/sql.y:1341 { yyVAL.indexHints = nil } - case 230: + case 232: yyDollar = yyS[yypt-5 : yypt+1] - //line sql.y:1336 + //line ./go/vt/sqlparser/sql.y:1345 { yyVAL.indexHints = &IndexHints{Type: UseStr, Indexes: yyDollar[4].colIdents} } - case 231: + case 233: yyDollar = yyS[yypt-5 : yypt+1] - //line sql.y:1340 + //line ./go/vt/sqlparser/sql.y:1349 { yyVAL.indexHints = &IndexHints{Type: IgnoreStr, Indexes: yyDollar[4].colIdents} } - case 232: + case 234: yyDollar = yyS[yypt-5 : yypt+1] - //line sql.y:1344 + //line ./go/vt/sqlparser/sql.y:1353 { yyVAL.indexHints = &IndexHints{Type: ForceStr, Indexes: yyDollar[4].colIdents} } - case 233: + case 235: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1350 + //line ./go/vt/sqlparser/sql.y:1359 { yyVAL.colIdents = []ColIdent{yyDollar[1].colIdent} } - case 234: + case 236: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1354 + //line ./go/vt/sqlparser/sql.y:1363 { yyVAL.colIdents = append(yyDollar[1].colIdents, yyDollar[3].colIdent) } - case 235: + case 237: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:1359 + //line ./go/vt/sqlparser/sql.y:1368 { yyVAL.expr = nil } - case 236: + case 238: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1363 + //line ./go/vt/sqlparser/sql.y:1372 { yyVAL.expr = yyDollar[2].expr } - case 237: + case 239: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1369 + //line ./go/vt/sqlparser/sql.y:1378 { yyVAL.expr = yyDollar[1].expr } - case 238: + case 240: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1373 + //line ./go/vt/sqlparser/sql.y:1382 { yyVAL.expr = &AndExpr{Left: yyDollar[1].expr, Right: yyDollar[3].expr} } - case 239: + case 241: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1377 + //line ./go/vt/sqlparser/sql.y:1386 { yyVAL.expr = &OrExpr{Left: yyDollar[1].expr, Right: yyDollar[3].expr} } - case 240: + case 242: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1381 + //line ./go/vt/sqlparser/sql.y:1390 { yyVAL.expr = &NotExpr{Expr: yyDollar[2].expr} } - case 241: + case 243: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1385 + //line ./go/vt/sqlparser/sql.y:1394 { yyVAL.expr = &IsExpr{Operator: yyDollar[3].str, Expr: yyDollar[1].expr} } - case 242: + case 244: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1389 + //line ./go/vt/sqlparser/sql.y:1398 { yyVAL.expr = yyDollar[1].expr } - case 243: + case 245: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1393 + //line ./go/vt/sqlparser/sql.y:1402 { yyVAL.expr = &Default{ColName: yyDollar[2].str} } - case 244: + case 246: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:1399 + //line ./go/vt/sqlparser/sql.y:1408 { yyVAL.str = "" } - case 245: + case 247: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1403 + //line ./go/vt/sqlparser/sql.y:1412 { yyVAL.str = string(yyDollar[2].bytes) } - case 246: + case 248: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1409 + //line ./go/vt/sqlparser/sql.y:1418 { yyVAL.boolVal = BoolVal(true) } - case 247: + case 249: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1413 + //line ./go/vt/sqlparser/sql.y:1422 { yyVAL.boolVal = BoolVal(false) } - case 248: + case 250: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1419 + //line ./go/vt/sqlparser/sql.y:1428 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: yyDollar[2].str, Right: yyDollar[3].expr} } - case 249: + case 251: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1423 + //line ./go/vt/sqlparser/sql.y:1432 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: InStr, Right: yyDollar[3].colTuple} } - case 250: + case 252: yyDollar = yyS[yypt-4 : yypt+1] - //line sql.y:1427 + //line ./go/vt/sqlparser/sql.y:1436 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotInStr, Right: yyDollar[4].colTuple} } - case 251: + case 253: yyDollar = yyS[yypt-4 : yypt+1] - //line sql.y:1431 + //line ./go/vt/sqlparser/sql.y:1440 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: LikeStr, Right: yyDollar[3].expr, Escape: yyDollar[4].expr} } - case 252: + case 254: yyDollar = yyS[yypt-5 : yypt+1] - //line sql.y:1435 + //line ./go/vt/sqlparser/sql.y:1444 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotLikeStr, Right: yyDollar[4].expr, Escape: yyDollar[5].expr} } - case 253: + case 255: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1439 + //line ./go/vt/sqlparser/sql.y:1448 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: RegexpStr, Right: yyDollar[3].expr} } - case 254: + case 256: yyDollar = yyS[yypt-4 : yypt+1] - //line sql.y:1443 + //line ./go/vt/sqlparser/sql.y:1452 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotRegexpStr, Right: yyDollar[4].expr} } - case 255: + case 257: yyDollar = yyS[yypt-5 : yypt+1] - //line sql.y:1447 + //line ./go/vt/sqlparser/sql.y:1456 { yyVAL.expr = &RangeCond{Left: yyDollar[1].expr, Operator: BetweenStr, From: yyDollar[3].expr, To: yyDollar[5].expr} } - case 256: + case 258: yyDollar = yyS[yypt-6 : yypt+1] - //line sql.y:1451 + //line ./go/vt/sqlparser/sql.y:1460 { yyVAL.expr = &RangeCond{Left: yyDollar[1].expr, Operator: NotBetweenStr, From: yyDollar[4].expr, To: yyDollar[6].expr} } - case 257: + case 259: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1455 + //line ./go/vt/sqlparser/sql.y:1464 { yyVAL.expr = &ExistsExpr{Subquery: yyDollar[2].subquery} } - case 258: + case 260: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1461 + //line ./go/vt/sqlparser/sql.y:1470 { yyVAL.str = IsNullStr } - case 259: + case 261: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1465 + //line ./go/vt/sqlparser/sql.y:1474 { yyVAL.str = IsNotNullStr } - case 260: + case 262: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1469 + //line ./go/vt/sqlparser/sql.y:1478 { yyVAL.str = IsTrueStr } - case 261: + case 263: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1473 + //line ./go/vt/sqlparser/sql.y:1482 { yyVAL.str = IsNotTrueStr } - case 262: + case 264: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1477 + //line ./go/vt/sqlparser/sql.y:1486 { yyVAL.str = IsFalseStr } - case 263: + case 265: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1481 + //line ./go/vt/sqlparser/sql.y:1490 { yyVAL.str = IsNotFalseStr } - case 264: + case 266: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1487 + //line ./go/vt/sqlparser/sql.y:1496 { yyVAL.str = EqualStr } - case 265: + case 267: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1491 + //line ./go/vt/sqlparser/sql.y:1500 { yyVAL.str = LessThanStr } - case 266: + case 268: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1495 + //line ./go/vt/sqlparser/sql.y:1504 { yyVAL.str = GreaterThanStr } - case 267: + case 269: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1499 + //line ./go/vt/sqlparser/sql.y:1508 { yyVAL.str = LessEqualStr } - case 268: + case 270: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1503 + //line ./go/vt/sqlparser/sql.y:1512 { yyVAL.str = GreaterEqualStr } - case 269: + case 271: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1507 + //line ./go/vt/sqlparser/sql.y:1516 { yyVAL.str = NotEqualStr } - case 270: + case 272: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1511 + //line ./go/vt/sqlparser/sql.y:1520 { yyVAL.str = NullSafeEqualStr } - case 271: + case 273: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:1516 + //line ./go/vt/sqlparser/sql.y:1525 { yyVAL.expr = nil } - case 272: + case 274: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1520 + //line ./go/vt/sqlparser/sql.y:1529 { yyVAL.expr = yyDollar[2].expr } - case 273: + case 275: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1526 + //line ./go/vt/sqlparser/sql.y:1535 { yyVAL.colTuple = yyDollar[1].valTuple } - case 274: + case 276: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1530 + //line ./go/vt/sqlparser/sql.y:1539 { yyVAL.colTuple = yyDollar[1].subquery } - case 275: + case 277: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1534 + //line ./go/vt/sqlparser/sql.y:1543 { yyVAL.colTuple = ListArg(yyDollar[1].bytes) } - case 276: + case 278: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1540 + //line ./go/vt/sqlparser/sql.y:1549 { yyVAL.subquery = &Subquery{yyDollar[2].selStmt} } - case 277: + case 279: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1546 + //line ./go/vt/sqlparser/sql.y:1555 { yyVAL.exprs = Exprs{yyDollar[1].expr} } - case 278: + case 280: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1550 + //line ./go/vt/sqlparser/sql.y:1559 { yyVAL.exprs = append(yyDollar[1].exprs, yyDollar[3].expr) } - case 279: + case 281: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1556 + //line ./go/vt/sqlparser/sql.y:1565 { yyVAL.expr = yyDollar[1].expr } - case 280: + case 282: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1560 + //line ./go/vt/sqlparser/sql.y:1569 { yyVAL.expr = yyDollar[1].boolVal } - case 281: + case 283: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1564 + //line ./go/vt/sqlparser/sql.y:1573 { yyVAL.expr = yyDollar[1].colName } - case 282: + case 284: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1568 + //line ./go/vt/sqlparser/sql.y:1577 { yyVAL.expr = yyDollar[1].expr } - case 283: + case 285: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1572 + //line ./go/vt/sqlparser/sql.y:1581 { yyVAL.expr = yyDollar[1].subquery } - case 284: + case 286: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1576 + //line ./go/vt/sqlparser/sql.y:1585 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitAndStr, Right: yyDollar[3].expr} } - case 285: + case 287: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1580 + //line ./go/vt/sqlparser/sql.y:1589 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitOrStr, Right: yyDollar[3].expr} } - case 286: + case 288: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1584 + //line ./go/vt/sqlparser/sql.y:1593 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitXorStr, Right: yyDollar[3].expr} } - case 287: + case 289: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1588 + //line ./go/vt/sqlparser/sql.y:1597 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: PlusStr, Right: yyDollar[3].expr} } - case 288: + case 290: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1592 + //line ./go/vt/sqlparser/sql.y:1601 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: MinusStr, Right: yyDollar[3].expr} } - case 289: + case 291: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1596 + //line ./go/vt/sqlparser/sql.y:1605 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: MultStr, Right: yyDollar[3].expr} } - case 290: + case 292: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1600 + //line ./go/vt/sqlparser/sql.y:1609 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: DivStr, Right: yyDollar[3].expr} } - case 291: + case 293: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1604 + //line ./go/vt/sqlparser/sql.y:1613 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: IntDivStr, Right: yyDollar[3].expr} } - case 292: + case 294: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1608 + //line ./go/vt/sqlparser/sql.y:1617 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ModStr, Right: yyDollar[3].expr} } - case 293: + case 295: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1612 + //line ./go/vt/sqlparser/sql.y:1621 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ModStr, Right: yyDollar[3].expr} } - case 294: + case 296: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1616 + //line ./go/vt/sqlparser/sql.y:1625 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ShiftLeftStr, Right: yyDollar[3].expr} } - case 295: + case 297: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1620 + //line ./go/vt/sqlparser/sql.y:1629 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ShiftRightStr, Right: yyDollar[3].expr} } - case 296: + case 298: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1624 + //line ./go/vt/sqlparser/sql.y:1633 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].colName, Operator: JSONExtractOp, Right: yyDollar[3].expr} } - case 297: + case 299: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1628 + //line ./go/vt/sqlparser/sql.y:1637 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].colName, Operator: JSONUnquoteExtractOp, Right: yyDollar[3].expr} } - case 298: + case 300: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1632 + //line ./go/vt/sqlparser/sql.y:1641 { yyVAL.expr = &CollateExpr{Expr: yyDollar[1].expr, Charset: yyDollar[3].str} } - case 299: + case 301: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1636 + //line ./go/vt/sqlparser/sql.y:1645 { yyVAL.expr = &UnaryExpr{Operator: BinaryStr, Expr: yyDollar[2].expr} } - case 300: + case 302: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1640 + //line ./go/vt/sqlparser/sql.y:1649 { if num, ok := yyDollar[2].expr.(*SQLVal); ok && num.Type == IntVal { yyVAL.expr = num @@ -3844,9 +3861,9 @@ yydefault: yyVAL.expr = &UnaryExpr{Operator: UPlusStr, Expr: yyDollar[2].expr} } } - case 301: + case 303: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1648 + //line ./go/vt/sqlparser/sql.y:1657 { if num, ok := yyDollar[2].expr.(*SQLVal); ok && num.Type == IntVal { // Handle double negative @@ -3860,21 +3877,21 @@ yydefault: yyVAL.expr = &UnaryExpr{Operator: UMinusStr, Expr: yyDollar[2].expr} } } - case 302: + case 304: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1662 + //line ./go/vt/sqlparser/sql.y:1671 { yyVAL.expr = &UnaryExpr{Operator: TildaStr, Expr: yyDollar[2].expr} } - case 303: + case 305: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1666 + //line ./go/vt/sqlparser/sql.y:1675 { yyVAL.expr = &UnaryExpr{Operator: BangStr, Expr: yyDollar[2].expr} } - case 304: + case 306: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1670 + //line ./go/vt/sqlparser/sql.y:1679 { // This rule prevents the usage of INTERVAL // as a function. If support is needed for that, @@ -3882,395 +3899,395 @@ yydefault: // will be non-trivial because of grammar conflicts. yyVAL.expr = &IntervalExpr{Expr: yyDollar[2].expr, Unit: yyDollar[3].colIdent} } - case 309: + case 311: yyDollar = yyS[yypt-4 : yypt+1] - //line sql.y:1688 + //line ./go/vt/sqlparser/sql.y:1697 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Exprs: yyDollar[3].selectExprs} } - case 310: + case 312: yyDollar = yyS[yypt-5 : yypt+1] - //line sql.y:1692 + //line ./go/vt/sqlparser/sql.y:1701 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Distinct: true, Exprs: yyDollar[4].selectExprs} } - case 311: + case 313: yyDollar = yyS[yypt-6 : yypt+1] - //line sql.y:1696 + //line ./go/vt/sqlparser/sql.y:1705 { yyVAL.expr = &FuncExpr{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].colIdent, Exprs: yyDollar[5].selectExprs} } - case 312: + case 314: yyDollar = yyS[yypt-4 : yypt+1] - //line sql.y:1706 + //line ./go/vt/sqlparser/sql.y:1715 { yyVAL.expr = &FuncExpr{Name: NewColIdent("left"), Exprs: yyDollar[3].selectExprs} } - case 313: + case 315: yyDollar = yyS[yypt-4 : yypt+1] - //line sql.y:1710 + //line ./go/vt/sqlparser/sql.y:1719 { yyVAL.expr = &FuncExpr{Name: NewColIdent("right"), Exprs: yyDollar[3].selectExprs} } - case 314: + case 316: yyDollar = yyS[yypt-6 : yypt+1] - //line sql.y:1714 + //line ./go/vt/sqlparser/sql.y:1723 { yyVAL.expr = &ConvertExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].convertType} } - case 315: + case 317: yyDollar = yyS[yypt-6 : yypt+1] - //line sql.y:1718 + //line ./go/vt/sqlparser/sql.y:1727 { yyVAL.expr = &ConvertExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].convertType} } - case 316: + case 318: yyDollar = yyS[yypt-6 : yypt+1] - //line sql.y:1722 + //line ./go/vt/sqlparser/sql.y:1731 { yyVAL.expr = &ConvertUsingExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].str} } - case 317: + case 319: yyDollar = yyS[yypt-9 : yypt+1] - //line sql.y:1726 + //line ./go/vt/sqlparser/sql.y:1735 { yyVAL.expr = &MatchExpr{Columns: yyDollar[3].selectExprs, Expr: yyDollar[7].expr, Option: yyDollar[8].str} } - case 318: + case 320: yyDollar = yyS[yypt-7 : yypt+1] - //line sql.y:1730 + //line ./go/vt/sqlparser/sql.y:1739 { yyVAL.expr = &GroupConcatExpr{Distinct: yyDollar[3].str, Exprs: yyDollar[4].selectExprs, OrderBy: yyDollar[5].orderBy, Separator: yyDollar[6].str} } - case 319: + case 321: yyDollar = yyS[yypt-5 : yypt+1] - //line sql.y:1734 + //line ./go/vt/sqlparser/sql.y:1743 { yyVAL.expr = &CaseExpr{Expr: yyDollar[2].expr, Whens: yyDollar[3].whens, Else: yyDollar[4].expr} } - case 320: + case 322: yyDollar = yyS[yypt-4 : yypt+1] - //line sql.y:1738 + //line ./go/vt/sqlparser/sql.y:1747 { yyVAL.expr = &ValuesFuncExpr{Name: yyDollar[3].colIdent} } - case 321: + case 323: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1748 + //line ./go/vt/sqlparser/sql.y:1757 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_timestamp")} } - case 322: + case 324: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1752 + //line ./go/vt/sqlparser/sql.y:1761 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_timestamp")} } - case 323: + case 325: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1756 + //line ./go/vt/sqlparser/sql.y:1765 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_time")} } - case 324: + case 326: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1760 + //line ./go/vt/sqlparser/sql.y:1769 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_date")} } - case 325: + case 327: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1765 + //line ./go/vt/sqlparser/sql.y:1774 { yyVAL.expr = &FuncExpr{Name: NewColIdent("localtime")} } - case 326: + case 328: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1770 + //line ./go/vt/sqlparser/sql.y:1779 { yyVAL.expr = &FuncExpr{Name: NewColIdent("localtimestamp")} } - case 327: + case 329: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1775 + //line ./go/vt/sqlparser/sql.y:1784 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_date")} } - case 328: + case 330: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1780 + //line ./go/vt/sqlparser/sql.y:1789 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_time")} } - case 331: + case 333: yyDollar = yyS[yypt-4 : yypt+1] - //line sql.y:1794 + //line ./go/vt/sqlparser/sql.y:1803 { yyVAL.expr = &FuncExpr{Name: NewColIdent("if"), Exprs: yyDollar[3].selectExprs} } - case 332: + case 334: yyDollar = yyS[yypt-4 : yypt+1] - //line sql.y:1798 + //line ./go/vt/sqlparser/sql.y:1807 { yyVAL.expr = &FuncExpr{Name: NewColIdent("database"), Exprs: yyDollar[3].selectExprs} } - case 333: + case 335: yyDollar = yyS[yypt-4 : yypt+1] - //line sql.y:1802 + //line ./go/vt/sqlparser/sql.y:1811 { yyVAL.expr = &FuncExpr{Name: NewColIdent("mod"), Exprs: yyDollar[3].selectExprs} } - case 334: + case 336: yyDollar = yyS[yypt-4 : yypt+1] - //line sql.y:1806 + //line ./go/vt/sqlparser/sql.y:1815 { yyVAL.expr = &FuncExpr{Name: NewColIdent("replace"), Exprs: yyDollar[3].selectExprs} } - case 335: + case 337: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:1812 + //line ./go/vt/sqlparser/sql.y:1821 { yyVAL.str = "" } - case 336: + case 338: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1816 + //line ./go/vt/sqlparser/sql.y:1825 { yyVAL.str = BooleanModeStr } - case 337: + case 339: yyDollar = yyS[yypt-4 : yypt+1] - //line sql.y:1820 + //line ./go/vt/sqlparser/sql.y:1829 { yyVAL.str = NaturalLanguageModeStr } - case 338: + case 340: yyDollar = yyS[yypt-7 : yypt+1] - //line sql.y:1824 + //line ./go/vt/sqlparser/sql.y:1833 { yyVAL.str = NaturalLanguageModeWithQueryExpansionStr } - case 339: + case 341: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1828 + //line ./go/vt/sqlparser/sql.y:1837 { yyVAL.str = QueryExpansionStr } - case 340: + case 342: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1834 + //line ./go/vt/sqlparser/sql.y:1843 { yyVAL.str = string(yyDollar[1].bytes) } - case 341: + case 343: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1838 + //line ./go/vt/sqlparser/sql.y:1847 { yyVAL.str = string(yyDollar[1].bytes) } - case 342: + case 344: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1844 + //line ./go/vt/sqlparser/sql.y:1853 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } - case 343: + case 345: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1848 + //line ./go/vt/sqlparser/sql.y:1857 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal, Charset: yyDollar[3].str, Operator: CharacterSetStr} } - case 344: + case 346: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1852 + //line ./go/vt/sqlparser/sql.y:1861 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal, Charset: string(yyDollar[3].bytes)} } - case 345: + case 347: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1856 + //line ./go/vt/sqlparser/sql.y:1865 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 346: + case 348: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1860 + //line ./go/vt/sqlparser/sql.y:1869 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } - case 347: + case 349: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1864 + //line ./go/vt/sqlparser/sql.y:1873 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} yyVAL.convertType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.convertType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 348: + case 350: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1870 + //line ./go/vt/sqlparser/sql.y:1879 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 349: + case 351: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1874 + //line ./go/vt/sqlparser/sql.y:1883 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } - case 350: + case 352: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1878 + //line ./go/vt/sqlparser/sql.y:1887 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 351: + case 353: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1882 + //line ./go/vt/sqlparser/sql.y:1891 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 352: + case 354: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1886 + //line ./go/vt/sqlparser/sql.y:1895 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } - case 353: + case 355: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1890 + //line ./go/vt/sqlparser/sql.y:1899 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 354: + case 356: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1894 + //line ./go/vt/sqlparser/sql.y:1903 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 355: + case 357: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:1899 + //line ./go/vt/sqlparser/sql.y:1908 { yyVAL.expr = nil } - case 356: + case 358: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1903 + //line ./go/vt/sqlparser/sql.y:1912 { yyVAL.expr = yyDollar[1].expr } - case 357: + case 359: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:1908 + //line ./go/vt/sqlparser/sql.y:1917 { yyVAL.str = string("") } - case 358: + case 360: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1912 + //line ./go/vt/sqlparser/sql.y:1921 { yyVAL.str = " separator '" + string(yyDollar[2].bytes) + "'" } - case 359: + case 361: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1918 + //line ./go/vt/sqlparser/sql.y:1927 { yyVAL.whens = []*When{yyDollar[1].when} } - case 360: + case 362: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1922 + //line ./go/vt/sqlparser/sql.y:1931 { yyVAL.whens = append(yyDollar[1].whens, yyDollar[2].when) } - case 361: + case 363: yyDollar = yyS[yypt-4 : yypt+1] - //line sql.y:1928 + //line ./go/vt/sqlparser/sql.y:1937 { yyVAL.when = &When{Cond: yyDollar[2].expr, Val: yyDollar[4].expr} } - case 362: + case 364: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:1933 + //line ./go/vt/sqlparser/sql.y:1942 { yyVAL.expr = nil } - case 363: + case 365: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:1937 + //line ./go/vt/sqlparser/sql.y:1946 { yyVAL.expr = yyDollar[2].expr } - case 364: + case 366: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1943 + //line ./go/vt/sqlparser/sql.y:1952 { yyVAL.colName = &ColName{Name: yyDollar[1].colIdent} } - case 365: + case 367: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:1947 + //line ./go/vt/sqlparser/sql.y:1956 { yyVAL.colName = &ColName{Qualifier: TableName{Name: yyDollar[1].tableIdent}, Name: yyDollar[3].colIdent} } - case 366: + case 368: yyDollar = yyS[yypt-5 : yypt+1] - //line sql.y:1951 + //line ./go/vt/sqlparser/sql.y:1960 { yyVAL.colName = &ColName{Qualifier: TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent}, Name: yyDollar[5].colIdent} } - case 367: + case 369: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1957 + //line ./go/vt/sqlparser/sql.y:1966 { yyVAL.expr = NewStrVal(yyDollar[1].bytes) } - case 368: + case 370: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1961 + //line ./go/vt/sqlparser/sql.y:1970 { yyVAL.expr = NewHexVal(yyDollar[1].bytes) } - case 369: + case 371: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1965 + //line ./go/vt/sqlparser/sql.y:1974 { yyVAL.expr = NewBitVal(yyDollar[1].bytes) } - case 370: + case 372: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1969 + //line ./go/vt/sqlparser/sql.y:1978 { yyVAL.expr = NewIntVal(yyDollar[1].bytes) } - case 371: + case 373: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1973 + //line ./go/vt/sqlparser/sql.y:1982 { yyVAL.expr = NewFloatVal(yyDollar[1].bytes) } - case 372: + case 374: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1977 + //line ./go/vt/sqlparser/sql.y:1986 { yyVAL.expr = NewHexNum(yyDollar[1].bytes) } - case 373: + case 375: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1981 + //line ./go/vt/sqlparser/sql.y:1990 { yyVAL.expr = NewValArg(yyDollar[1].bytes) } - case 374: + case 376: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1985 + //line ./go/vt/sqlparser/sql.y:1994 { yyVAL.expr = &NullVal{} } - case 375: + case 377: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:1991 + //line ./go/vt/sqlparser/sql.y:2000 { // TODO(sougou): Deprecate this construct. if yyDollar[1].colIdent.Lowered() != "value" { @@ -4279,239 +4296,239 @@ yydefault: } yyVAL.expr = NewIntVal([]byte("1")) } - case 376: + case 378: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:2000 + //line ./go/vt/sqlparser/sql.y:2009 { yyVAL.expr = NewIntVal(yyDollar[1].bytes) } - case 377: + case 379: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:2004 + //line ./go/vt/sqlparser/sql.y:2013 { yyVAL.expr = NewValArg(yyDollar[1].bytes) } - case 378: + case 380: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:2009 + //line ./go/vt/sqlparser/sql.y:2018 { yyVAL.exprs = nil } - case 379: + case 381: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:2013 + //line ./go/vt/sqlparser/sql.y:2022 { yyVAL.exprs = yyDollar[3].exprs } - case 380: + case 382: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:2018 + //line ./go/vt/sqlparser/sql.y:2027 { yyVAL.expr = nil } - case 381: + case 383: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:2022 + //line ./go/vt/sqlparser/sql.y:2031 { yyVAL.expr = yyDollar[2].expr } - case 382: + case 384: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:2027 + //line ./go/vt/sqlparser/sql.y:2036 { yyVAL.orderBy = nil } - case 383: + case 385: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:2031 + //line ./go/vt/sqlparser/sql.y:2040 { yyVAL.orderBy = yyDollar[3].orderBy } - case 384: + case 386: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2037 + //line ./go/vt/sqlparser/sql.y:2046 { yyVAL.orderBy = OrderBy{yyDollar[1].order} } - case 385: + case 387: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:2041 + //line ./go/vt/sqlparser/sql.y:2050 { yyVAL.orderBy = append(yyDollar[1].orderBy, yyDollar[3].order) } - case 386: + case 388: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:2047 + //line ./go/vt/sqlparser/sql.y:2056 { yyVAL.order = &Order{Expr: yyDollar[1].expr, Direction: yyDollar[2].str} } - case 387: + case 389: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:2052 + //line ./go/vt/sqlparser/sql.y:2061 { yyVAL.str = AscScr } - case 388: + case 390: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2056 + //line ./go/vt/sqlparser/sql.y:2065 { yyVAL.str = AscScr } - case 389: + case 391: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2060 + //line ./go/vt/sqlparser/sql.y:2069 { yyVAL.str = DescScr } - case 390: + case 392: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:2065 + //line ./go/vt/sqlparser/sql.y:2074 { yyVAL.limit = nil } - case 391: + case 393: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:2069 + //line ./go/vt/sqlparser/sql.y:2078 { yyVAL.limit = &Limit{Rowcount: yyDollar[2].expr} } - case 392: + case 394: yyDollar = yyS[yypt-4 : yypt+1] - //line sql.y:2073 + //line ./go/vt/sqlparser/sql.y:2082 { yyVAL.limit = &Limit{Offset: yyDollar[2].expr, Rowcount: yyDollar[4].expr} } - case 393: + case 395: yyDollar = yyS[yypt-4 : yypt+1] - //line sql.y:2077 + //line ./go/vt/sqlparser/sql.y:2086 { yyVAL.limit = &Limit{Offset: yyDollar[4].expr, Rowcount: yyDollar[2].expr} } - case 394: + case 396: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:2082 + //line ./go/vt/sqlparser/sql.y:2091 { yyVAL.str = "" } - case 395: + case 397: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:2086 + //line ./go/vt/sqlparser/sql.y:2095 { yyVAL.str = ForUpdateStr } - case 396: + case 398: yyDollar = yyS[yypt-4 : yypt+1] - //line sql.y:2090 + //line ./go/vt/sqlparser/sql.y:2099 { yyVAL.str = ShareModeStr } - case 397: + case 399: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:2103 + //line ./go/vt/sqlparser/sql.y:2112 { yyVAL.ins = &Insert{Rows: yyDollar[2].values} } - case 398: + case 400: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2107 + //line ./go/vt/sqlparser/sql.y:2116 { yyVAL.ins = &Insert{Rows: yyDollar[1].selStmt} } - case 399: + case 401: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:2111 + //line ./go/vt/sqlparser/sql.y:2120 { // Drop the redundant parenthesis. yyVAL.ins = &Insert{Rows: yyDollar[2].selStmt} } - case 400: + case 402: yyDollar = yyS[yypt-5 : yypt+1] - //line sql.y:2116 + //line ./go/vt/sqlparser/sql.y:2125 { yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[5].values} } - case 401: + case 403: yyDollar = yyS[yypt-4 : yypt+1] - //line sql.y:2120 + //line ./go/vt/sqlparser/sql.y:2129 { yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[4].selStmt} } - case 402: + case 404: yyDollar = yyS[yypt-6 : yypt+1] - //line sql.y:2124 + //line ./go/vt/sqlparser/sql.y:2133 { // Drop the redundant parenthesis. yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[5].selStmt} } - case 403: + case 405: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2131 + //line ./go/vt/sqlparser/sql.y:2140 { yyVAL.columns = Columns{yyDollar[1].colIdent} } - case 404: + case 406: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:2135 + //line ./go/vt/sqlparser/sql.y:2144 { yyVAL.columns = Columns{yyDollar[3].colIdent} } - case 405: + case 407: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:2139 + //line ./go/vt/sqlparser/sql.y:2148 { yyVAL.columns = append(yyVAL.columns, yyDollar[3].colIdent) } - case 406: + case 408: yyDollar = yyS[yypt-5 : yypt+1] - //line sql.y:2143 + //line ./go/vt/sqlparser/sql.y:2152 { yyVAL.columns = append(yyVAL.columns, yyDollar[5].colIdent) } - case 407: + case 409: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:2148 + //line ./go/vt/sqlparser/sql.y:2157 { yyVAL.updateExprs = nil } - case 408: + case 410: yyDollar = yyS[yypt-5 : yypt+1] - //line sql.y:2152 + //line ./go/vt/sqlparser/sql.y:2161 { yyVAL.updateExprs = yyDollar[5].updateExprs } - case 409: + case 411: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2158 + //line ./go/vt/sqlparser/sql.y:2167 { yyVAL.values = Values{yyDollar[1].valTuple} } - case 410: + case 412: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:2162 + //line ./go/vt/sqlparser/sql.y:2171 { yyVAL.values = append(yyDollar[1].values, yyDollar[3].valTuple) } - case 411: + case 413: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2168 + //line ./go/vt/sqlparser/sql.y:2177 { yyVAL.valTuple = yyDollar[1].valTuple } - case 412: + case 414: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:2172 + //line ./go/vt/sqlparser/sql.y:2181 { yyVAL.valTuple = ValTuple{} } - case 413: + case 415: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:2178 + //line ./go/vt/sqlparser/sql.y:2187 { yyVAL.valTuple = ValTuple(yyDollar[2].exprs) } - case 414: + case 416: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2184 + //line ./go/vt/sqlparser/sql.y:2193 { if len(yyDollar[1].valTuple) == 1 { yyVAL.expr = &ParenExpr{yyDollar[1].valTuple[0]} @@ -4519,258 +4536,258 @@ yydefault: yyVAL.expr = yyDollar[1].valTuple } } - case 415: + case 417: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2194 + //line ./go/vt/sqlparser/sql.y:2203 { yyVAL.updateExprs = UpdateExprs{yyDollar[1].updateExpr} } - case 416: + case 418: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:2198 + //line ./go/vt/sqlparser/sql.y:2207 { yyVAL.updateExprs = append(yyDollar[1].updateExprs, yyDollar[3].updateExpr) } - case 417: + case 419: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:2204 + //line ./go/vt/sqlparser/sql.y:2213 { yyVAL.updateExpr = &UpdateExpr{Name: yyDollar[1].colName, Expr: yyDollar[3].expr} } - case 420: + case 422: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:2213 + //line ./go/vt/sqlparser/sql.y:2222 { yyVAL.byt = 0 } - case 421: + case 423: yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:2215 + //line ./go/vt/sqlparser/sql.y:2224 { yyVAL.byt = 1 } - case 422: + case 424: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:2218 + //line ./go/vt/sqlparser/sql.y:2227 { yyVAL.empty = struct{}{} } - case 423: + case 425: yyDollar = yyS[yypt-3 : yypt+1] - //line sql.y:2220 + //line ./go/vt/sqlparser/sql.y:2229 { yyVAL.empty = struct{}{} } - case 424: + case 426: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:2223 + //line ./go/vt/sqlparser/sql.y:2232 { yyVAL.str = "" } - case 425: - yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2225 - { - yyVAL.str = IgnoreStr - } - case 426: - yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2229 - { - yyVAL.empty = struct{}{} - } case 427: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2231 + //line ./go/vt/sqlparser/sql.y:2234 { - yyVAL.empty = struct{}{} + yyVAL.str = IgnoreStr } case 428: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2233 + //line ./go/vt/sqlparser/sql.y:2238 { yyVAL.empty = struct{}{} } case 429: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2235 + //line ./go/vt/sqlparser/sql.y:2240 { yyVAL.empty = struct{}{} } case 430: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2237 + //line ./go/vt/sqlparser/sql.y:2242 { yyVAL.empty = struct{}{} } case 431: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2239 + //line ./go/vt/sqlparser/sql.y:2244 { yyVAL.empty = struct{}{} } case 432: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2241 + //line ./go/vt/sqlparser/sql.y:2246 { yyVAL.empty = struct{}{} } case 433: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2243 + //line ./go/vt/sqlparser/sql.y:2248 { yyVAL.empty = struct{}{} } case 434: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2245 + //line ./go/vt/sqlparser/sql.y:2250 { yyVAL.empty = struct{}{} } case 435: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2247 + //line ./go/vt/sqlparser/sql.y:2252 { yyVAL.empty = struct{}{} } case 436: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2249 + //line ./go/vt/sqlparser/sql.y:2254 { yyVAL.empty = struct{}{} } case 437: - yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:2252 + yyDollar = yyS[yypt-1 : yypt+1] + //line ./go/vt/sqlparser/sql.y:2256 { yyVAL.empty = struct{}{} } case 438: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2254 + //line ./go/vt/sqlparser/sql.y:2258 { yyVAL.empty = struct{}{} } case 439: - yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2256 + yyDollar = yyS[yypt-0 : yypt+1] + //line ./go/vt/sqlparser/sql.y:2261 { yyVAL.empty = struct{}{} } case 440: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2260 + //line ./go/vt/sqlparser/sql.y:2263 { yyVAL.empty = struct{}{} } case 441: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2262 + //line ./go/vt/sqlparser/sql.y:2265 { yyVAL.empty = struct{}{} } case 442: - yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:2265 + yyDollar = yyS[yypt-1 : yypt+1] + //line ./go/vt/sqlparser/sql.y:2269 { yyVAL.empty = struct{}{} } case 443: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2267 + //line ./go/vt/sqlparser/sql.y:2271 { yyVAL.empty = struct{}{} } case 444: - yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2269 + yyDollar = yyS[yypt-0 : yypt+1] + //line ./go/vt/sqlparser/sql.y:2274 { yyVAL.empty = struct{}{} } case 445: - yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:2272 + yyDollar = yyS[yypt-1 : yypt+1] + //line ./go/vt/sqlparser/sql.y:2276 { yyVAL.empty = struct{}{} } case 446: - yyDollar = yyS[yypt-2 : yypt+1] - //line sql.y:2274 + yyDollar = yyS[yypt-1 : yypt+1] + //line ./go/vt/sqlparser/sql.y:2278 { yyVAL.empty = struct{}{} } case 447: - yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2278 + yyDollar = yyS[yypt-0 : yypt+1] + //line ./go/vt/sqlparser/sql.y:2281 { - yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) + yyVAL.empty = struct{}{} } case 448: + yyDollar = yyS[yypt-2 : yypt+1] + //line ./go/vt/sqlparser/sql.y:2283 + { + yyVAL.empty = struct{}{} + } + case 449: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2282 + //line ./go/vt/sqlparser/sql.y:2287 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } case 450: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2289 + //line ./go/vt/sqlparser/sql.y:2291 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 451: + case 452: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2295 + //line ./go/vt/sqlparser/sql.y:2298 { - yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) + yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 452: + case 453: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2299 + //line ./go/vt/sqlparser/sql.y:2304 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } case 454: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2306 + //line ./go/vt/sqlparser/sql.y:2308 + { + yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) + } + case 456: + yyDollar = yyS[yypt-1 : yypt+1] + //line ./go/vt/sqlparser/sql.y:2315 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 605: + case 607: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2482 + //line ./go/vt/sqlparser/sql.y:2491 { if incNesting(yylex) { yylex.Error("max nesting level reached") return 1 } } - case 606: + case 608: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2491 + //line ./go/vt/sqlparser/sql.y:2500 { decNesting(yylex) } - case 607: + case 609: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:2496 + //line ./go/vt/sqlparser/sql.y:2505 { forceEOF(yylex) } - case 608: + case 610: yyDollar = yyS[yypt-0 : yypt+1] - //line sql.y:2501 + //line ./go/vt/sqlparser/sql.y:2510 { forceEOF(yylex) } - case 609: + case 611: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2505 + //line ./go/vt/sqlparser/sql.y:2514 { forceEOF(yylex) } - case 610: + case 612: yyDollar = yyS[yypt-1 : yypt+1] - //line sql.y:2509 + //line ./go/vt/sqlparser/sql.y:2518 { forceEOF(yylex) } diff --git a/go/vt/sqlparser/sql.y b/go/vt/sqlparser/sql.y index 1c0642d273a..801fb16016f 100644 --- a/go/vt/sqlparser/sql.y +++ b/go/vt/sqlparser/sql.y @@ -233,7 +233,7 @@ func forceEOF(yylex interface{}) { %type exists_opt %type not_exists_opt non_rename_operation to_opt index_opt constraint_opt using_opt %type reserved_keyword non_reserved_keyword -%type sql_id reserved_sql_id col_alias as_ci_opt +%type sql_id reserved_sql_id col_alias as_ci_opt charset_value %type table_id reserved_table_id table_alias as_opt_id %type as_opt %type force_eof ddl_force_eof @@ -403,7 +403,7 @@ table_name_list: } set_statement: - SET comment_opt charset_or_character_set reserved_sql_id force_eof + SET comment_opt charset_or_character_set charset_value force_eof { $$ = &Set{Comments: Comments($2), Charset: $4} } @@ -417,6 +417,15 @@ charset_or_character_set: | CHARACTER SET | NAMES +charset_value: + reserved_sql_id + { + $$ = $1 + } +| STRING + { + $$ = NewColIdent(string($1)) + } create_statement: create_table_prefix table_spec diff --git a/go/vt/vtgate/executor.go b/go/vt/vtgate/executor.go index 2f4822777d3..ef3f2945ba2 100644 --- a/go/vt/vtgate/executor.go +++ b/go/vt/vtgate/executor.go @@ -328,7 +328,7 @@ func (e *Executor) handleSet(ctx context.Context, session *vtgatepb.Session, sql default: return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "disallowed value for character_set_results: %v", v) } - case "net_write_timeout", "net_read_timeout": + case "net_write_timeout", "net_read_timeout", "lc_messages": log.Warningf("Ignored inapplicable SET %v = %v", k, v) warnings.Add("IgnoredSet", 1) default: diff --git a/go/vt/vttablet/endtoend/framework/testcase.go b/go/vt/vttablet/endtoend/framework/testcase.go index 37d09c6f19a..21dd13eacc7 100644 --- a/go/vt/vttablet/endtoend/framework/testcase.go +++ b/go/vt/vttablet/endtoend/framework/testcase.go @@ -142,7 +142,7 @@ func (tc *TestCase) Test(name string, client *QueryClient) error { got = append(got, str) } if !reflect.DeepEqual(got, tc.Rewritten) { - errs = append(errs, fmt.Sprintf("Rewritten mismatch:\n'%+v' does not match\n'%+v'", got, tc.Rewritten)) + errs = append(errs, fmt.Sprintf("Rewritten mismatch:\n'%q' does not match\n'%q'", got, tc.Rewritten)) } } if tc.Plan != "" { diff --git a/go/vt/vttablet/endtoend/main_test.go b/go/vt/vttablet/endtoend/main_test.go index b17935e443a..257578087a2 100644 --- a/go/vt/vttablet/endtoend/main_test.go +++ b/go/vt/vttablet/endtoend/main_test.go @@ -132,7 +132,7 @@ create table vitess_ints(tiny tinyint default 0, tinyu tinyint unsigned default create table vitess_fracts(id int default 0, deci decimal(5,2) default null, num numeric(5,2) default null, f float default null, d double default null, primary key(id)); create table vitess_strings(vb varbinary(16) default 'vb', c char(16) default null, vc varchar(16) default null, b binary(4) default null, tb tinyblob default null, bl blob default null, ttx tinytext default null, tx text default null, en enum('a','b') default null, s set('a','b') default null, primary key(vb)); create table vitess_misc(id int default 0, b bit(8) default null, d date default null, dt datetime default null, t time default null, g geometry default null, primary key(id)); -create table vitess_unsupported(id int default 0, pt point default null, primary key(id)); +create table vitess_bit_default(id bit(8) default b'101', primary key(id)); create table vitess_bool(auto int auto_increment, bval tinyint(1) default 0, sval varchar(16) default '', ival int default null, primary key (auto)); @@ -184,7 +184,7 @@ var tableACLConfig = `{ }, { "name": "vitess", - "table_names_or_prefixes": ["vitess_a", "vitess_b", "vitess_c", "dual", "vitess_d", "vitess_temp", "vitess_e", "vitess_f", "vitess_mixed_case", "upsert_test", "vitess_strings", "vitess_fracts", "vitess_ints", "vitess_misc", "vitess_big", "vitess_view", "vitess_json", "vitess_bool", "vitess_autoinc_seq"], + "table_names_or_prefixes": ["vitess_a", "vitess_b", "vitess_c", "dual", "vitess_d", "vitess_temp", "vitess_e", "vitess_f", "vitess_mixed_case", "upsert_test", "vitess_strings", "vitess_fracts", "vitess_ints", "vitess_misc", "vitess_bit_default", "vitess_big", "vitess_view", "vitess_json", "vitess_bool", "vitess_autoinc_seq"], "readers": ["dev"], "writers": ["dev"], "admins": ["dev"] diff --git a/go/vt/vttablet/endtoend/queries_test.go b/go/vt/vttablet/endtoend/queries_test.go index 8c72c225c01..fc9456b8bbd 100644 --- a/go/vt/vttablet/endtoend/queries_test.go +++ b/go/vt/vttablet/endtoend/queries_test.go @@ -20,8 +20,9 @@ import ( "testing" "github.com/youtube/vitess/go/sqltypes" - querypb "github.com/youtube/vitess/go/vt/proto/query" "github.com/youtube/vitess/go/vt/vttablet/endtoend/framework" + + querypb "github.com/youtube/vitess/go/vt/proto/query" ) var frameworkErrors = `fail failed: @@ -30,8 +31,8 @@ Result mismatch: '[[2 1] [1 2]]' RowsAffected mismatch: 2, want 1 Rewritten mismatch: -'[select eid, id from vitess_a where 1 != 1 union select eid, id from vitess_b where 1 != 1 select /* fail */ eid, id from vitess_a union select eid, id from vitess_b limit 10001]' does not match -'[select eid id from vitess_a where 1 != 1 union select eid, id from vitess_b where 1 != 1 select /* fail */ eid, id from vitess_a union select eid, id from vitess_b]' +'["select eid, id from vitess_a where 1 != 1 union select eid, id from vitess_b where 1 != 1" "select /* fail */ eid, id from vitess_a union select eid, id from vitess_b limit 10001"]' does not match +'["select eid id from vitess_a where 1 != 1 union select eid, id from vitess_b where 1 != 1" "select /* fail */ eid, id from vitess_a union select eid, id from vitess_b"]' Plan mismatch: PASS_SELECT, want aa` func TestTheFramework(t *testing.T) { @@ -58,7 +59,8 @@ func TestTheFramework(t *testing.T) { } } -func TestNocacheCases(t *testing.T) { +// TODO(sougou): break this up into smaller parts. +func TestQueries(t *testing.T) { client := framework.NewClient() testCases := []framework.Testable{ @@ -1794,3 +1796,36 @@ func TestNocacheCases(t *testing.T) { } } } + +func TestBitDefault(t *testing.T) { + client := framework.NewClient() + + testCases := []framework.Testable{ + &framework.MultiCase{ + Name: "bit default value", + Cases: []framework.Testable{ + framework.TestQuery("begin"), + &framework.TestCase{ + Query: "insert into vitess_bit_default values()", + Rewritten: []string{ + "insert into vitess_bit_default(id) values ('\x05') /* _stream vitess_bit_default (id ) ('BQ==' )", + }, + RowsAffected: 1, + }, + framework.TestQuery("commit"), + &framework.TestCase{ + Query: "select hex(id) from vitess_bit_default", + Result: [][]string{ + {"5"}, + }, + RowsAffected: 1, + }, + }, + }, + } + for _, tcase := range testCases { + if err := tcase.Test("", client); err != nil { + t.Error(err) + } + } +} diff --git a/go/vt/vttablet/tabletserver/planbuilder/dml.go b/go/vt/vttablet/tabletserver/planbuilder/dml.go index b34c91fe4f3..20e36df475f 100644 --- a/go/vt/vttablet/tabletserver/planbuilder/dml.go +++ b/go/vt/vttablet/tabletserver/planbuilder/dml.go @@ -17,13 +17,12 @@ limitations under the License. package planbuilder import ( - "errors" - "fmt" - log "github.com/golang/glog" "github.com/youtube/vitess/go/sqltypes" + vtrpcpb "github.com/youtube/vitess/go/vt/proto/vtrpc" "github.com/youtube/vitess/go/vt/sqlparser" + "github.com/youtube/vitess/go/vt/vterrors" "github.com/youtube/vitess/go/vt/vttablet/tabletserver/schema" ) @@ -186,7 +185,7 @@ func analyzeSelect(sel *sqlparser.Select, tables map[string]*schema.Table) (plan // Check if it's a NEXT VALUE statement. if nextVal, ok := sel.SelectExprs[0].(sqlparser.Nextval); ok { if table.Type != schema.Sequence { - return nil, fmt.Errorf("%s is not a sequence", tableName) + return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "%s is not a sequence", tableName) } plan.PlanID = PlanNextval v, err := sqlparser.NewPlanValue(nextVal.Expr) @@ -338,7 +337,7 @@ func analyzeInsertNoType(ins *sqlparser.Insert, plan *Plan, table *schema.Table) for _, col := range ins.Columns { colIndex := table.FindColumn(col) if colIndex == -1 { - return nil, fmt.Errorf("column %v not found in table %s", col, table.Name) + return nil, vterrors.Errorf(vtrpcpb.Code_NOT_FOUND, "column %v not found in table %s", col, table.Name) } plan.ColumnNumbers = append(plan.ColumnNumbers, colIndex) } @@ -348,9 +347,19 @@ func analyzeInsertNoType(ins *sqlparser.Insert, plan *Plan, table *schema.Table) // If it's not a sqlparser.SelectStatement, it's Values. rowList := ins.Rows.(sqlparser.Values) - for _, row := range rowList { - if len(row) != len(ins.Columns) { - return nil, errors.New("column count doesn't match value count") + for i := range rowList { + if len(rowList[i]) == 0 { + for _, col := range table.Columns { + expr, err := sqlparser.ExprFromValue(col.Default) + if err != nil { + return nil, vterrors.Wrap(err, "could not create default row for insert without row values") + } + rowList[i] = append(rowList[i], expr) + } + continue + } + if len(rowList[i]) != len(ins.Columns) { + return nil, vterrors.New(vtrpcpb.Code_INVALID_ARGUMENT, "column count doesn't match value count") } } plan.PKValues = getInsertPKValues(pkColumnNumbers, rowList, table) @@ -406,7 +415,7 @@ func analyzeInsertNoType(ins *sqlparser.Insert, plan *Plan, table *schema.Table) if node, ok := node.(*sqlparser.ValuesFuncExpr); ok { colnum := ins.Columns.FindColumn(node.Name) if colnum == -1 { - formatErr = fmt.Errorf("could not find column %v", node.Name) + formatErr = vterrors.Errorf(vtrpcpb.Code_NOT_FOUND, "could not find column %v", node.Name) return } buf.Myprintf("(%v)", rowList[0][colnum]) @@ -422,20 +431,20 @@ func analyzeInsertNoType(ins *sqlparser.Insert, plan *Plan, table *schema.Table) func analyzeInsertMessage(ins *sqlparser.Insert, plan *Plan, table *schema.Table) (*Plan, error) { if _, ok := ins.Rows.(sqlparser.SelectStatement); ok { - return nil, fmt.Errorf("subquery not allowed for message table: %s", table.Name.String()) + return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "subquery not allowed for message table: %s", table.Name.String()) } if ins.OnDup != nil { - return nil, fmt.Errorf("'on duplicate key' construct not allowed for message table: %s", table.Name.String()) + return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "'on duplicate key' construct not allowed for message table: %s", table.Name.String()) } if len(ins.Columns) == 0 { - return nil, fmt.Errorf("column list must be specified for message table insert: %s", table.Name.String()) + return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "column list must be specified for message table insert: %s", table.Name.String()) } // Sanity check first so we don't have to repeat this. rowList := ins.Rows.(sqlparser.Values) for _, row := range rowList { if len(row) != len(ins.Columns) { - return nil, errors.New("column count doesn't match value count") + return nil, vterrors.New(vtrpcpb.Code_INVALID_ARGUMENT, "column count doesn't match value count") } } @@ -453,34 +462,35 @@ func analyzeInsertMessage(ins *sqlparser.Insert, plan *Plan, table *schema.Table col = sqlparser.NewColIdent("time_next") num := ins.Columns.FindColumn(col) if num != -1 { - return nil, fmt.Errorf("%s must not be specified for message insert", col.String()) + return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "%s must not be specified for message insert", col.String()) } _ = copyVal(ins, col, scheduleIndex) // time_created should always be now. col = sqlparser.NewColIdent("time_created") if num := ins.Columns.FindColumn(col); num >= 0 { - return nil, fmt.Errorf("%s must not be specified for message insert", col.String()) + + return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "%s must not be specified for message insert", col.String()) } _ = addVal(ins, col, timeNow) // epoch should always be 0. col = sqlparser.NewColIdent("epoch") if num := ins.Columns.FindColumn(col); num >= 0 { - return nil, fmt.Errorf("%s must not be specified for message insert", col.String()) + return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "%s must not be specified for message insert", col.String()) } _ = addVal(ins, col, sqlparser.NewIntVal([]byte("0"))) // time_acked should must not be specified. col = sqlparser.NewColIdent("time_acked") if num := ins.Columns.FindColumn(col); num >= 0 { - return nil, fmt.Errorf("%s must not be specified for message insert", col.String()) + return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "%s must not be specified for message insert", col.String()) } col = sqlparser.NewColIdent("id") num = ins.Columns.FindColumn(col) if num < 0 { - return nil, fmt.Errorf("%s must be specified for message insert", col.String()) + return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "%s must be specified for message insert", col.String()) } pkColumnNumbers := getInsertPKColumns(ins.Columns, table) diff --git a/go/vt/vttablet/tabletserver/planbuilder/plan_test.go b/go/vt/vttablet/tabletserver/planbuilder/plan_test.go index 6afe4ddfc4e..211cd3fed1f 100644 --- a/go/vt/vttablet/tabletserver/planbuilder/plan_test.go +++ b/go/vt/vttablet/tabletserver/planbuilder/plan_test.go @@ -219,7 +219,7 @@ func loadSchema(name string) map[string]*schema.Table { if err != nil { panic(err) } - tables := make([]*schema.Table, 0, 8) + tables := make([]*schema.Table, 0, 10) err = json.Unmarshal(b, &tables) if err != nil { panic(err) diff --git a/go/vt/vttablet/tabletserver/schema/load_table.go b/go/vt/vttablet/tabletserver/schema/load_table.go index 48a2e27ce4d..b0624280b6a 100644 --- a/go/vt/vttablet/tabletserver/schema/load_table.go +++ b/go/vt/vttablet/tabletserver/schema/load_table.go @@ -73,9 +73,26 @@ func fetchColumns(ta *Table, conn *connpool.DBConn, sqlTableName string) error { name := row[0].ToString() columnType, ok := fieldTypes[name] if !ok { + // This code is unreachable. log.Warningf("Table: %s, column %s not found in select list, skipping.", ta.Name, name) continue } + // BIT data type default value representation differs from how + // it's returned. It's represented as b'101', but returned in + // its binary form. Extract the binary form. + if columnType == querypb.Type_BIT && row[4].ToString() != "" { + query := fmt.Sprintf("select %s", row[4].ToString()) + r, err := conn.Exec(tabletenv.LocalContext(), query, 10000, false) + if err != nil { + return err + } + if len(r.Rows) != 1 || len(r.Rows[0]) != 1 { + // This code is unreachable. + return fmt.Errorf("Invalid rows returned from %s: %v", query, r.Rows) + } + // overwrite the original value with the new one. + row[4] = r.Rows[0][0] + } ta.AddColumn(name, columnType, row[4], row[5].ToString()) } return nil diff --git a/go/vt/vttablet/tabletserver/schema/load_table_test.go b/go/vt/vttablet/tabletserver/schema/load_table_test.go index 0d18d562f85..701739abc98 100644 --- a/go/vt/vttablet/tabletserver/schema/load_table_test.go +++ b/go/vt/vttablet/tabletserver/schema/load_table_test.go @@ -200,6 +200,22 @@ func TestLoadTableMessage(t *testing.T) { } } +func TestLoadTableWithBitColumn(t *testing.T) { + db := fakesqldb.New(t) + defer db.Close() + for query, result := range getTestLoadTableWithBitColumnQueries() { + db.AddQuery(query, result) + } + table, err := newTestLoadTable("USER_TABLE", "test table", db) + if err != nil { + t.Fatal(err) + } + wantValue := sqltypes.MakeTrusted(sqltypes.Bit, []byte{1, 0, 1}) + if got, want := table.Columns[1].Default, wantValue; !reflect.DeepEqual(got, want) { + t.Errorf("Default bit value: %v, want %v", got, want) + } +} + func newTestLoadTable(tableType string, comment string, db *fakesqldb.DB) (*Table, error) { ctx := context.Background() appParams := db.ConnParams() @@ -303,3 +319,39 @@ func getMessageTableQueries() map[string]*sqltypes.Result { }, } } + +func getTestLoadTableWithBitColumnQueries() map[string]*sqltypes.Result { + return map[string]*sqltypes.Result{ + "select * from test_table where 1 != 1": { + Fields: []*querypb.Field{{ + Name: "pk", + Type: sqltypes.Int32, + }, { + Name: "flags", + Type: sqltypes.Bit, + }}, + }, + "describe test_table": { + Fields: mysql.DescribeTableFields, + RowsAffected: 2, + Rows: [][]sqltypes.Value{ + mysql.DescribeTableRow("pk", "int(11)", false, "PRI", "0"), + mysql.DescribeTableRow("flags", "int(11)", false, "", "b'101'"), + }, + }, + "show index from test_table": { + Fields: mysql.ShowIndexFromTableFields, + RowsAffected: 1, + Rows: [][]sqltypes.Value{ + mysql.ShowIndexFromTableRow("test_table", true, "PRIMARY", 1, "pk", false), + }, + }, + "select b'101'": { + Fields: sqltypes.MakeTestFields("", "varbinary"), + RowsAffected: 1, + Rows: [][]sqltypes.Value{ + {sqltypes.MakeTrusted(sqltypes.VarBinary, []byte{1, 0, 1})}, + }, + }, + } +}