diff --git a/go/vt/sqlparser/analyzer.go b/go/vt/sqlparser/analyzer.go index 7aa2fecb7be..54dd0a1366e 100644 --- a/go/vt/sqlparser/analyzer.go +++ b/go/vt/sqlparser/analyzer.go @@ -94,8 +94,6 @@ func ASTToStatementType(stmt Statement) StatementType { return StmtSRollback case *Release: return StmtRelease - case *ShowTableStatus: - return StmtShow default: return StmtUnknown } diff --git a/go/vt/sqlparser/ast.go b/go/vt/sqlparser/ast.go index 46bdf48c60d..28ca6e3e4fc 100644 --- a/go/vt/sqlparser/ast.go +++ b/go/vt/sqlparser/ast.go @@ -242,6 +242,7 @@ type ( // DDLAction is an enum for DDL.Action DDLAction int8 + // Load is for s3 statement Load struct { InfileS3 string } @@ -253,19 +254,7 @@ type ( // Show represents a show statement. Show struct { - Extended string - Type string - OnTable TableName - Table TableName - ShowTablesOpt *ShowTablesOpt - Scope Scope - ShowCollationFilterOpt Expr - } - - // ShowTableStatus is a struct for SHOW TABLE STATUS queries. - ShowTableStatus struct { - DatabaseName string - Filter *ShowFilter + Internal ShowInternal } // Use represents a use statement. @@ -344,13 +333,47 @@ func (*Select) iSelectStatement() {} func (*Union) iSelectStatement() {} func (*ParenSelect) iSelectStatement() {} func (*Load) iStatement() {} -func (*ShowTableStatus) iStatement() {} // ParenSelect can actually not be a top level statement, // but we have to allow it because it's a requirement // of SelectStatement. func (*ParenSelect) iStatement() {} +//ShowInternal will represent all the show statement types. +type ShowInternal interface { + isShowInternal() + SQLNode +} + +//ShowLegacy is of ShowInternal type, holds the legacy show ast struct. +type ShowLegacy struct { + Extended string + Type string + OnTable TableName + Table TableName + ShowTablesOpt *ShowTablesOpt + Scope Scope + ShowCollationFilterOpt Expr +} + +//ShowColumns is of ShowInternal type, holds the show columns statement. +type ShowColumns struct { + Full string + Table TableName + DbName string + Filter *ShowFilter +} + +// ShowTableStatus is of ShowInternal type, holds SHOW TABLE STATUS queries. +type ShowTableStatus struct { + DatabaseName string + Filter *ShowFilter +} + +func (*ShowLegacy) isShowInternal() {} +func (*ShowColumns) isShowInternal() {} +func (*ShowTableStatus) isShowInternal() {} + // InsertRows represents the rows for an INSERT statement. type InsertRows interface { iInsertRows() @@ -1401,6 +1424,22 @@ func (f *ForeignKeyDefinition) Format(buf *TrackedBuffer) { // Format formats the node. func (node *Show) Format(buf *TrackedBuffer) { + buf.astPrintf(node, "%v", node.Internal) +} + +// Format formats the node. +func (node *ShowColumns) Format(buf *TrackedBuffer) { + buf.astPrintf(node, "show %s", node.Full) + buf.astPrintf(node, "columns from %v", node.Table) + + buf.printIf(node.DbName != "", " from "+node.DbName) + if node.Filter != nil { + buf.astPrintf(node, "%v", node.Filter) + } +} + +// Format formats the node. +func (node *ShowLegacy) Format(buf *TrackedBuffer) { nodeType := strings.ToLower(node.Type) if (nodeType == "tables" || nodeType == "columns" || nodeType == "fields" || nodeType == "index" || nodeType == "keys" || nodeType == "indexes" || nodeType == "databases" || nodeType == "keyspaces" || nodeType == "vitess_keyspaces" || nodeType == "vitess_shards" || nodeType == "vitess_tablets") && node.ShowTablesOpt != nil { diff --git a/go/vt/sqlparser/ast_funcs.go b/go/vt/sqlparser/ast_funcs.go index e04eef8cc81..f1206959f72 100644 --- a/go/vt/sqlparser/ast_funcs.go +++ b/go/vt/sqlparser/ast_funcs.go @@ -314,13 +314,13 @@ var _ ConstraintInfo = &ForeignKeyDefinition{} func (f *ForeignKeyDefinition) iConstraintInfo() {} // HasOnTable returns true if the show statement has an "on" clause -func (node *Show) HasOnTable() bool { +func (node *ShowLegacy) HasOnTable() bool { return node.OnTable.Name.v != "" } // HasTable returns true if the show statement has a parsed table name. // Not all show statements parse table names. -func (node *Show) HasTable() bool { +func (node *ShowLegacy) HasTable() bool { return node.Table.Name.v != "" } diff --git a/go/vt/sqlparser/like_filter_test.go b/go/vt/sqlparser/like_filter_test.go index fa7d3d46929..3b400231d5a 100644 --- a/go/vt/sqlparser/like_filter_test.go +++ b/go/vt/sqlparser/like_filter_test.go @@ -36,7 +36,7 @@ func TestLikePrefixRegexp(t *testing.T) { } want := "^key.*$" - got := LikeToRegexp(show.(*Show).ShowTablesOpt.Filter.Like).String() + got := LikeToRegexp(show.(*Show).Internal.(*ShowLegacy).ShowTablesOpt.Filter.Like).String() assert.Equal(t, want, got) } @@ -48,7 +48,7 @@ func TestLikeAnyCharsRegexp(t *testing.T) { } want := "^.*val1.*val2.*$" - got := LikeToRegexp(show.(*Show).ShowTablesOpt.Filter.Like).String() + got := LikeToRegexp(show.(*Show).Internal.(*ShowLegacy).ShowTablesOpt.Filter.Like).String() assert.Equal(t, want, got) } @@ -60,7 +60,7 @@ func TestSingleAndMultipleCharsRegexp(t *testing.T) { } want := "^.val1.val2.*$" - got := LikeToRegexp(show.(*Show).ShowTablesOpt.Filter.Like).String() + got := LikeToRegexp(show.(*Show).Internal.(*ShowLegacy).ShowTablesOpt.Filter.Like).String() assert.Equal(t, want, got) } @@ -72,7 +72,7 @@ func TestSpecialCharactersRegexp(t *testing.T) { } want := "^\\?\\.\\*\\?$" - got := LikeToRegexp(show.(*Show).ShowTablesOpt.Filter.Like).String() + got := LikeToRegexp(show.(*Show).Internal.(*ShowLegacy).ShowTablesOpt.Filter.Like).String() assert.Equal(t, want, got) } @@ -84,7 +84,7 @@ func TestQuoteLikeSpecialCharacters(t *testing.T) { } want := "^part1.part2%part3.part4_part5.*$" - got := LikeToRegexp(show.(*Show).ShowTablesOpt.Filter.Like).String() + got := LikeToRegexp(show.(*Show).Internal.(*ShowLegacy).ShowTablesOpt.Filter.Like).String() assert.Equal(t, want, got) } diff --git a/go/vt/sqlparser/parse_test.go b/go/vt/sqlparser/parse_test.go index c2433d673b9..a24fe8cf96d 100644 --- a/go/vt/sqlparser/parse_test.go +++ b/go/vt/sqlparser/parse_test.go @@ -1376,13 +1376,16 @@ var ( }, { input: "show full tables where 1 = 0", }, { - input: "show full columns from a like '%'", + input: "show full columns in a in b like '%'", + output: "show full columns from a from b like '%'", }, { input: "show full columns from messages from test_keyspace like '%'", }, { - input: "show full fields from a like '%'", + input: "show full fields from a like '%'", + output: "show full columns from a like '%'", }, { - input: "show fields from a like '%'", + input: "show fields from a where 1 = 1", + output: "show columns from a where 1 = 1", }, { input: "show triggers", output: "show triggers", diff --git a/go/vt/sqlparser/rewriter.go b/go/vt/sqlparser/rewriter.go index ddc237a5627..ef95eadb050 100644 --- a/go/vt/sqlparser/rewriter.go +++ b/go/vt/sqlparser/rewriter.go @@ -593,22 +593,34 @@ func replaceSetTransactionComments(newNode, parent SQLNode) { parent.(*SetTransaction).Comments = newNode.(Comments) } -func replaceShowOnTable(newNode, parent SQLNode) { - parent.(*Show).OnTable = newNode.(TableName) +func replaceShowInternal(newNode, parent SQLNode) { + parent.(*Show).Internal = newNode.(ShowInternal) } -func replaceShowShowCollationFilterOpt(newNode, parent SQLNode) { - parent.(*Show).ShowCollationFilterOpt = newNode.(Expr) +func replaceShowColumnsFilter(newNode, parent SQLNode) { + parent.(*ShowColumns).Filter = newNode.(*ShowFilter) } -func replaceShowTable(newNode, parent SQLNode) { - parent.(*Show).Table = newNode.(TableName) +func replaceShowColumnsTable(newNode, parent SQLNode) { + parent.(*ShowColumns).Table = newNode.(TableName) } func replaceShowFilterFilter(newNode, parent SQLNode) { parent.(*ShowFilter).Filter = newNode.(Expr) } +func replaceShowLegacyOnTable(newNode, parent SQLNode) { + parent.(*ShowLegacy).OnTable = newNode.(TableName) +} + +func replaceShowLegacyShowCollationFilterOpt(newNode, parent SQLNode) { + parent.(*ShowLegacy).ShowCollationFilterOpt = newNode.(Expr) +} + +func replaceShowLegacyTable(newNode, parent SQLNode) { + parent.(*ShowLegacy).Table = newNode.(TableName) +} + func replaceShowTableStatusFilter(newNode, parent SQLNode) { parent.(*ShowTableStatus).Filter = newNode.(*ShowFilter) } @@ -1244,13 +1256,20 @@ func (a *application) apply(parent, node SQLNode, replacer replacerFunc) { a.apply(node, n.Comments, replaceSetTransactionComments) case *Show: - a.apply(node, n.OnTable, replaceShowOnTable) - a.apply(node, n.ShowCollationFilterOpt, replaceShowShowCollationFilterOpt) - a.apply(node, n.Table, replaceShowTable) + a.apply(node, n.Internal, replaceShowInternal) + + case *ShowColumns: + a.apply(node, n.Filter, replaceShowColumnsFilter) + a.apply(node, n.Table, replaceShowColumnsTable) case *ShowFilter: a.apply(node, n.Filter, replaceShowFilterFilter) + case *ShowLegacy: + a.apply(node, n.OnTable, replaceShowLegacyOnTable) + a.apply(node, n.ShowCollationFilterOpt, replaceShowLegacyShowCollationFilterOpt) + a.apply(node, n.Table, replaceShowLegacyTable) + case *ShowTableStatus: a.apply(node, n.Filter, replaceShowTableStatusFilter) diff --git a/go/vt/sqlparser/sql.go b/go/vt/sqlparser/sql.go index daedd447800..15687e17302 100644 --- a/go/vt/sqlparser/sql.go +++ b/go/vt/sqlparser/sql.go @@ -928,138 +928,138 @@ var yyAct = [...]int{ 94, 335, 895, 942, 295, 949, 318, 295, 447, 71, 1298, 1078, 94, 622, 295, 789, 782, 1016, 1039, 423, 1023, 771, 754, 749, 975, 351, 919, 1088, 573, 408, - 1104, 73, 3, 29, 414, 788, 1045, 69, 614, 74, - 340, 772, 94, 761, 905, 94, 295, 786, 295, 68, - 444, 8, 431, 7, 718, 1636, 347, 336, 6, 1620, - 339, 779, 717, 31, 32, 33, 62, 35, 36, 594, - 1631, 1608, 76, 77, 78, 79, 80, 81, 283, 1628, - 1441, 281, 1619, 66, 1607, 1357, 1470, 578, 37, 56, - 57, 1407, 59, 1408, 1409, 1127, 1055, 60, 1260, 429, - 433, 1259, 31, 409, 1261, 62, 35, 36, 338, 1126, - 1056, 1057, 341, 337, 790, 46, 791, 1280, 390, 61, - 396, 397, 394, 395, 393, 392, 391, 1087, 344, 441, - 291, 287, 288, 289, 398, 399, 632, 1505, 637, 1323, - 633, 630, 631, 1095, 96, 97, 98, 96, 97, 98, - 1461, 96, 97, 98, 1459, 1125, 328, 904, 61, 330, - 326, 864, 635, 952, 1575, 666, 665, 675, 676, 668, - 669, 670, 671, 672, 673, 674, 667, 625, 626, 677, - 284, 627, 863, 1325, 1341, 39, 40, 42, 41, 44, - 861, 58, 1630, 1593, 1627, 1324, 1601, 906, 907, 908, - 636, 1320, 865, 1017, 1647, 1416, 282, 595, 1122, 1119, - 1120, 1550, 1118, 1651, 45, 65, 64, 1558, 862, 54, - 55, 43, 611, 620, 613, 1343, 1552, 285, 1244, 1246, - 580, 435, 1326, 869, 640, 47, 48, 852, 49, 50, - 51, 52, 295, 585, 586, 1129, 1132, 295, 1081, 596, - 1400, 1399, 1398, 295, 576, 1317, 610, 612, 290, 295, - 603, 1319, 1345, 609, 1349, 583, 1344, 1081, 1342, 298, - 94, 286, 1139, 1347, 1582, 1138, 1256, 689, 690, 94, - 590, 1484, 1346, 1406, 1215, 1124, 1188, 1178, 1095, 1175, - 1167, 94, 94, 1051, 765, 1348, 1350, 1551, 667, 702, - 601, 677, 638, 96, 97, 98, 995, 1123, 1062, 1606, - 1245, 666, 665, 675, 676, 668, 669, 670, 671, 672, - 673, 674, 667, 677, 1645, 677, 619, 1646, 63, 1644, - 1559, 1557, 639, 96, 97, 98, 654, 822, 621, 651, - 652, 615, 896, 616, 617, 1576, 607, 891, 587, 608, - 588, 1128, 657, 589, 84, 657, 1080, 656, 654, 597, - 598, 599, 1591, 1567, 646, 1387, 1130, 63, 1160, 1318, - 1359, 1316, 687, 792, 657, 1080, 1174, 670, 671, 672, - 673, 674, 667, 650, 649, 677, 647, 1427, 741, 976, - 854, 648, 94, 85, 1596, 295, 658, 295, 295, 1278, - 94, 689, 690, 689, 690, 976, 94, 1185, 444, 787, + 1104, 73, 3, 29, 414, 788, 1045, 69, 614, 890, + 340, 772, 94, 761, 74, 94, 295, 786, 295, 905, + 444, 68, 431, 717, 8, 594, 347, 336, 7, 1636, + 339, 779, 718, 1620, 283, 1631, 6, 281, 1608, 1628, + 1441, 1619, 1607, 1357, 1470, 578, 1407, 76, 77, 78, + 79, 80, 81, 1575, 666, 665, 675, 676, 668, 669, + 670, 671, 672, 673, 674, 667, 1408, 1409, 677, 429, + 433, 1055, 31, 409, 1127, 62, 35, 36, 637, 96, + 97, 98, 341, 291, 287, 288, 289, 390, 1126, 396, + 397, 394, 395, 393, 392, 391, 1056, 1057, 344, 441, + 338, 337, 1260, 398, 399, 1259, 632, 790, 1261, 791, + 633, 630, 631, 1280, 1087, 1323, 1505, 96, 97, 98, + 1095, 1461, 1459, 96, 97, 98, 328, 904, 61, 330, + 635, 326, 627, 952, 1125, 1630, 284, 625, 626, 1325, + 636, 864, 861, 1627, 1601, 863, 1320, 1017, 1593, 1416, + 611, 1647, 613, 1651, 1244, 1246, 595, 1341, 580, 435, + 620, 1326, 282, 869, 640, 1081, 1558, 852, 1400, 1399, + 1398, 1324, 906, 907, 908, 31, 32, 33, 62, 35, + 36, 862, 865, 285, 610, 612, 576, 1122, 1119, 1120, + 1317, 1118, 1550, 583, 1582, 66, 1319, 298, 1343, 286, + 37, 56, 57, 1139, 59, 1178, 1138, 1552, 1484, 60, + 1175, 290, 295, 585, 586, 1081, 1406, 295, 1215, 596, + 590, 689, 690, 295, 1129, 1132, 1188, 46, 1167, 295, + 603, 61, 1051, 609, 1576, 1345, 1245, 1349, 765, 1344, + 94, 1342, 702, 601, 667, 1062, 1347, 677, 677, 94, + 1256, 96, 97, 98, 995, 1346, 607, 615, 1095, 657, + 1359, 94, 94, 619, 1124, 1591, 1567, 1606, 1348, 1350, + 1387, 1645, 638, 1080, 1646, 621, 1644, 608, 1551, 1559, + 1557, 96, 97, 98, 896, 792, 1123, 650, 587, 976, + 588, 656, 654, 589, 655, 656, 654, 39, 40, 42, + 41, 44, 639, 58, 1318, 891, 1316, 822, 657, 651, + 652, 854, 657, 616, 617, 597, 598, 599, 579, 689, + 690, 1174, 654, 1080, 689, 690, 45, 65, 64, 1084, + 1128, 54, 55, 43, 646, 1427, 1085, 63, 657, 976, + 926, 1185, 687, 1278, 606, 1130, 1596, 47, 48, 787, + 49, 50, 51, 52, 924, 925, 923, 649, 741, 1652, + 758, 647, 94, 418, 84, 295, 658, 295, 295, 648, + 94, 1611, 914, 916, 917, 897, 94, 1511, 444, 915, 655, 656, 654, 705, 665, 675, 676, 668, 669, 670, - 671, 672, 673, 674, 667, 810, 758, 677, 657, 1611, - 1652, 770, 341, 897, 606, 655, 656, 654, 892, 1511, - 1510, 715, 742, 755, 579, 1293, 721, 723, 926, 727, - 729, 743, 732, 657, 720, 722, 724, 726, 728, 730, - 731, 1292, 924, 925, 923, 1281, 823, 61, 747, 750, - 668, 669, 670, 671, 672, 673, 674, 667, 1653, 922, - 677, 691, 692, 693, 694, 695, 696, 697, 698, 699, - 700, 439, 836, 839, 840, 841, 842, 843, 844, 1613, + 671, 672, 673, 674, 667, 810, 892, 677, 657, 1564, + 1510, 770, 341, 85, 1152, 1153, 1154, 1653, 1293, 581, + 582, 715, 742, 755, 1292, 720, 722, 724, 726, 728, + 730, 731, 61, 1281, 721, 723, 743, 727, 729, 1563, + 732, 439, 1613, 1592, 922, 1528, 823, 1508, 747, 750, + 63, 670, 671, 672, 673, 674, 667, 1000, 1001, 677, + 1474, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 1290, 836, 839, 840, 841, 842, 843, 844, 1197, 845, 846, 847, 848, 849, 824, 825, 826, 827, 808, - 809, 837, 1592, 811, 1528, 812, 813, 814, 815, 816, + 809, 837, 889, 811, 434, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 828, 829, 830, 831, 832, - 833, 834, 835, 295, 1084, 581, 582, 850, 94, 997, - 853, 1085, 855, 295, 295, 94, 94, 94, 1152, 1153, - 1154, 295, 1508, 434, 1173, 295, 1172, 1474, 295, 874, - 875, 1290, 295, 1197, 94, 96, 97, 98, 889, 94, - 94, 94, 295, 94, 94, 655, 656, 654, 1000, 1001, - 881, 867, 591, 996, 753, 418, 94, 94, 838, 880, - 1564, 851, 1563, 657, 914, 916, 917, 1423, 858, 859, - 860, 915, 655, 656, 654, 1555, 1629, 655, 656, 654, - 878, 1019, 96, 97, 98, 1361, 944, 879, 1615, 418, - 657, 1082, 883, 884, 885, 657, 887, 888, 1555, 1604, - 1555, 418, 899, 436, 437, 655, 656, 654, 943, 893, - 894, 70, 920, 1020, 96, 97, 98, 945, 1263, 1555, - 1583, 1555, 1554, 657, 1500, 1499, 870, 1486, 418, 1375, - 882, 94, 1386, 367, 366, 369, 370, 371, 372, 1483, - 418, 953, 368, 373, 901, 1433, 1432, 31, 964, 967, - 1429, 1430, 1429, 1428, 977, 959, 921, 900, 1008, 418, - 1020, 418, 653, 418, 94, 94, 799, 798, 1386, 1211, - 418, 954, 1218, 1047, 72, 1211, 909, 910, 911, 912, - 1480, 955, 1219, 94, 1047, 31, 1250, 1009, 1046, 653, - 295, 1566, 705, 94, 1431, 1020, 1264, 295, 1054, 295, - 1191, 1190, 1008, 61, 953, 1046, 998, 295, 295, 295, - 868, 956, 985, 986, 784, 94, 946, 947, 94, 1020, - 1535, 1008, 1048, 444, 1050, 1386, 444, 61, 1621, 94, - 94, 962, 963, 1048, 1014, 1046, 1517, 1066, 1008, 1089, - 1491, 61, 1109, 1419, 955, 1010, 990, 1025, 1028, 1029, - 1030, 1026, 1267, 1027, 1031, 411, 1002, 31, 918, 1390, - 1391, 927, 928, 929, 930, 931, 932, 933, 934, 935, - 936, 937, 938, 939, 940, 941, 1012, 1105, 1035, 1096, - 1097, 1098, 1100, 295, 94, 1099, 94, 1049, 1131, 1322, - 1518, 1053, 295, 295, 295, 295, 295, 1112, 1069, 295, - 295, 1638, 1052, 295, 94, 1110, 1090, 1091, 1092, 1093, - 1044, 61, 1396, 61, 1634, 1060, 1421, 1393, 981, 1375, - 1294, 295, 1101, 1102, 1103, 902, 872, 295, 295, 295, - 1235, 1395, 1232, 295, 94, 1236, 418, 1114, 980, 1116, - 960, 961, 1231, 1625, 966, 969, 970, 1106, 1107, 1237, - 1145, 1029, 1030, 1618, 1149, 1367, 406, 1143, 675, 676, - 668, 669, 670, 671, 672, 673, 674, 667, 1200, 984, - 677, 752, 987, 988, 1623, 920, 666, 665, 675, 676, - 668, 669, 670, 671, 672, 673, 674, 667, 1233, 1209, - 677, 1208, 407, 1234, 1366, 989, 95, 1199, 1285, 972, - 296, 1331, 745, 296, 797, 604, 1277, 1598, 95, 1597, - 296, 1478, 417, 973, 746, 1533, 1275, 1269, 1513, 921, + 833, 834, 835, 295, 655, 656, 654, 850, 94, 997, + 853, 881, 855, 295, 295, 94, 94, 94, 655, 656, + 654, 295, 657, 867, 591, 295, 1361, 1423, 295, 874, + 875, 72, 295, 1250, 94, 1046, 657, 1555, 1629, 94, + 94, 94, 295, 94, 94, 668, 669, 670, 671, 672, + 673, 674, 667, 996, 753, 677, 94, 94, 838, 880, + 1173, 851, 1172, 1386, 436, 437, 1615, 418, 858, 859, + 860, 1082, 655, 656, 654, 96, 97, 98, 1008, 944, + 878, 655, 656, 654, 96, 97, 98, 879, 1263, 1480, + 657, 70, 883, 884, 885, 1375, 887, 888, 1386, 657, + 1555, 1604, 899, 96, 97, 98, 1555, 418, 943, 893, + 894, 1047, 920, 1211, 1555, 1583, 653, 945, 367, 366, + 369, 370, 371, 372, 1555, 1554, 870, 368, 373, 1019, + 882, 94, 1500, 1499, 1486, 418, 1483, 418, 898, 1433, + 1432, 953, 1429, 1430, 901, 1429, 1428, 31, 964, 967, + 418, 1008, 418, 1566, 977, 959, 921, 900, 1020, 418, + 1048, 1020, 1050, 1020, 94, 94, 653, 418, 799, 798, + 1047, 954, 1218, 1431, 1211, 1020, 909, 910, 911, 912, + 1264, 955, 1219, 94, 1009, 31, 1054, 1191, 1190, 1008, + 295, 1046, 705, 94, 998, 868, 411, 295, 784, 295, + 61, 31, 1621, 61, 953, 1517, 1089, 295, 295, 295, + 1491, 956, 985, 986, 1109, 94, 946, 947, 94, 1048, + 1535, 1046, 1419, 444, 1386, 1267, 444, 1390, 1391, 94, + 94, 962, 963, 1105, 1014, 1008, 1100, 1066, 1099, 1322, + 1638, 61, 1518, 1112, 955, 1010, 990, 1025, 1028, 1029, + 1030, 1026, 61, 1027, 1031, 1396, 1002, 61, 918, 1634, + 1421, 927, 928, 929, 930, 931, 932, 933, 934, 935, + 936, 937, 938, 939, 940, 941, 1012, 1393, 1035, 1096, + 1097, 1098, 1375, 295, 94, 1294, 94, 1049, 1131, 902, + 872, 1053, 295, 295, 295, 295, 295, 1395, 1069, 295, + 295, 1232, 1052, 295, 94, 1110, 1090, 1091, 1092, 1093, + 1044, 1235, 1233, 1231, 1625, 1060, 1236, 1234, 981, 1618, + 1367, 295, 1101, 1102, 1103, 1200, 752, 295, 295, 295, + 1623, 1209, 1208, 295, 94, 407, 1366, 1114, 980, 1116, + 960, 961, 989, 1199, 966, 969, 970, 1106, 1107, 1237, + 1145, 1029, 1030, 1285, 1149, 797, 406, 1143, 675, 676, + 668, 669, 670, 671, 672, 673, 674, 667, 604, 984, + 677, 1277, 987, 988, 1598, 920, 666, 665, 675, 676, + 668, 669, 670, 671, 672, 673, 674, 667, 424, 1597, + 677, 972, 745, 1533, 1275, 1478, 95, 1269, 1513, 1115, + 296, 1331, 425, 296, 746, 973, 993, 871, 95, 1033, + 296, 415, 417, 756, 757, 427, 1477, 426, 416, 921, 1155, 666, 665, 675, 676, 668, 669, 670, 671, 672, - 673, 674, 667, 993, 1115, 677, 871, 1198, 95, 1033, - 295, 95, 296, 415, 296, 412, 413, 1477, 416, 1204, - 72, 295, 295, 295, 295, 295, 1168, 1225, 424, 1476, - 409, 1370, 1207, 295, 1169, 1211, 634, 295, 1179, 1184, - 1206, 295, 425, 1176, 1213, 1216, 295, 295, 1640, 1639, - 295, 295, 295, 756, 757, 427, 898, 426, 766, 759, - 740, 1640, 1203, 1262, 1580, 94, 1506, 994, 411, 1186, - 1214, 1212, 70, 1066, 1268, 1265, 75, 67, 1273, 1273, - 1251, 1, 1226, 317, 1253, 1229, 1632, 1442, 1220, 1201, - 1202, 750, 1238, 1156, 1157, 1158, 1514, 1121, 1599, 1248, - 878, 1249, 1548, 1227, 1228, 1274, 1230, 1254, 1242, 1412, - 1257, 1072, 1063, 94, 94, 83, 571, 82, 1284, 1590, - 1286, 1287, 1288, 890, 618, 1071, 1282, 1283, 1270, 1271, - 1070, 1025, 1028, 1029, 1030, 1026, 424, 1027, 1031, 1556, - 1291, 1390, 1391, 94, 1279, 1086, 1504, 1420, 1276, 1595, - 425, 805, 803, 804, 1164, 1165, 802, 807, 806, 1297, - 801, 421, 422, 427, 310, 426, 903, 1296, 94, 327, - 1313, 1032, 793, 1111, 943, 1182, 1337, 760, 86, 1315, - 1314, 1117, 1083, 307, 628, 629, 1339, 1328, 1338, 312, - 280, 1329, 685, 1205, 1330, 1308, 1327, 1362, 1258, 445, - 438, 1381, 1358, 992, 999, 748, 295, 1475, 296, 1369, - 1183, 1352, 1336, 296, 714, 974, 94, 1351, 775, 296, - 350, 913, 94, 94, 1337, 296, 1225, 954, 1376, 365, - 362, 1304, 1305, 1306, 363, 1003, 95, 955, 1217, 1365, - 659, 1379, 348, 342, 774, 95, 767, 1024, 94, 1022, - 1021, 295, 780, 1385, 1392, 1388, 773, 95, 95, 1007, - 420, 971, 1574, 1394, 1469, 94, 419, 94, 94, 53, - 34, 1273, 1273, 1066, 332, 1066, 642, 1411, 1360, 1402, - 1401, 1404, 428, 1405, 28, 1403, 1426, 23, 22, 21, - 20, 1373, 19, 1410, 25, 295, 18, 1417, 1418, 1415, - 17, 16, 592, 1307, 1371, 38, 1424, 1425, 1312, 1309, - 1300, 1310, 1303, 27, 1299, 295, 26, 15, 1301, 1302, - 14, 94, 13, 1443, 94, 94, 94, 295, 12, 1332, - 1333, 11, 1311, 1473, 10, 9, 5, 4, 645, 24, - 1435, 703, 2, 0, 1353, 1354, 0, 1355, 1356, 0, + 673, 674, 667, 1160, 72, 677, 1476, 1198, 95, 1207, + 295, 95, 296, 1370, 296, 412, 413, 1206, 1211, 1204, + 634, 295, 295, 295, 295, 295, 1168, 1225, 424, 1179, + 409, 1640, 1639, 295, 1169, 1176, 766, 295, 759, 1184, + 740, 295, 425, 1640, 1213, 1216, 295, 295, 1580, 1506, + 295, 295, 295, 421, 422, 427, 994, 426, 411, 70, + 75, 67, 1203, 1262, 1, 94, 317, 1632, 1442, 1186, + 1214, 1212, 1514, 1066, 1268, 1265, 1121, 1599, 1273, 1273, + 1251, 1548, 1226, 1412, 1253, 1229, 1072, 1063, 1220, 1201, + 1202, 750, 1238, 1156, 1157, 1158, 83, 571, 82, 1248, + 878, 1249, 1590, 1227, 1228, 1274, 1230, 1254, 1242, 618, + 1257, 1071, 1070, 94, 94, 1556, 1279, 1086, 1284, 1504, + 1286, 1287, 1288, 1420, 1276, 1595, 1282, 1283, 1270, 1271, + 805, 1025, 1028, 1029, 1030, 1026, 803, 1027, 1031, 804, + 1291, 1390, 1391, 94, 802, 807, 806, 801, 310, 903, + 327, 1032, 793, 1111, 1164, 1165, 760, 86, 1315, 1297, + 1314, 1117, 1083, 307, 628, 629, 312, 1296, 94, 280, + 1313, 685, 1205, 1258, 943, 1182, 1337, 445, 438, 1381, + 992, 999, 748, 1475, 1369, 1183, 1339, 1328, 1338, 714, + 974, 1329, 775, 350, 1330, 1308, 1327, 1362, 913, 365, + 362, 363, 1358, 1003, 1217, 659, 295, 348, 296, 342, + 774, 1352, 1336, 296, 767, 1024, 94, 1351, 1022, 296, + 1021, 780, 94, 94, 1337, 296, 1225, 954, 1376, 1392, + 1388, 1304, 1305, 1306, 773, 1007, 95, 955, 420, 1365, + 971, 1379, 1574, 1469, 419, 95, 53, 34, 94, 332, + 642, 295, 428, 1385, 28, 23, 22, 95, 95, 21, + 20, 19, 25, 1394, 18, 94, 17, 94, 94, 16, + 592, 1273, 1273, 1066, 38, 1066, 27, 1411, 1360, 1402, + 1401, 1404, 26, 1405, 15, 1403, 1426, 14, 13, 12, + 11, 1373, 10, 1410, 9, 295, 5, 1417, 1418, 1415, + 4, 645, 24, 1307, 1371, 703, 1424, 1425, 1312, 1309, + 1300, 1310, 1303, 2, 1299, 295, 0, 0, 1301, 1302, + 0, 94, 0, 1443, 94, 94, 94, 295, 0, 1332, + 1333, 0, 1311, 418, 0, 0, 0, 0, 0, 0, + 1435, 0, 0, 0, 1353, 1354, 0, 1355, 1356, 0, 0, 0, 0, 1448, 1449, 1436, 0, 1438, 95, 1363, 1364, 296, 0, 296, 296, 0, 95, 0, 0, 0, - 0, 1457, 95, 0, 666, 665, 675, 676, 668, 669, - 670, 671, 672, 673, 674, 667, 0, 0, 677, 0, + 0, 1457, 95, 666, 665, 675, 676, 668, 669, 670, + 671, 672, 673, 674, 667, 0, 0, 677, 0, 0, 0, 0, 0, 0, 1225, 1479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1487, 0, 0, 0, 1454, 1455, 94, 1456, 1452, 1488, 1458, 0, 1460, 0, 1066, @@ -1083,19 +1083,19 @@ var yyAct = [...]int{ 1609, 96, 97, 98, 295, 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 1617, 0, 0, 0, 957, 958, 0, 0, 0, 0, 0, 1624, - 1622, 0, 94, 1472, 0, 0, 0, 95, 0, 0, + 1622, 0, 94, 1473, 0, 0, 0, 95, 0, 0, 0, 0, 0, 1522, 1523, 1524, 1525, 1526, 1637, 0, - 0, 1529, 1530, 1648, 0, 299, 0, 0, 0, 1467, + 0, 1529, 1530, 1648, 0, 299, 0, 0, 0, 0, 0, 991, 0, 1626, 302, 0, 0, 0, 0, 0, 95, 95, 311, 0, 666, 665, 675, 676, 668, 669, 670, 671, 672, 673, 674, 667, 0, 0, 677, 95, 0, 0, 0, 0, 0, 0, 296, 0, 0, 95, - 0, 0, 0, 296, 0, 296, 309, 0, 0, 0, + 0, 0, 1472, 296, 0, 296, 309, 0, 0, 0, 0, 0, 316, 296, 296, 296, 0, 0, 0, 0, 0, 95, 0, 0, 95, 379, 30, 0, 0, 0, - 0, 1466, 0, 0, 0, 95, 95, 0, 0, 0, + 0, 1467, 0, 0, 0, 95, 95, 0, 0, 0, 0, 0, 300, 666, 665, 675, 676, 668, 669, 670, - 671, 672, 673, 674, 667, 0, 30, 677, 1465, 0, + 671, 672, 673, 674, 667, 0, 30, 677, 1466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 303, 0, 314, 315, 322, 0, 0, 0, 306, 308, 319, 304, 305, 324, 323, 0, 301, 321, 320, 296, @@ -1113,17 +1113,17 @@ var yyAct = [...]int{ 1189, 0, 0, 1192, 1193, 1194, 1195, 1196, 0, 0, 0, 0, 0, 0, 0, 661, 0, 664, 0, 0, 0, 0, 376, 678, 679, 680, 681, 682, 683, 684, - 1464, 662, 663, 660, 666, 665, 675, 676, 668, 669, + 1465, 662, 663, 660, 666, 665, 675, 676, 668, 669, 670, 671, 672, 673, 674, 667, 296, 0, 677, 0, 0, 0, 0, 1240, 1241, 0, 0, 296, 296, 296, 296, 296, 93, 0, 0, 0, 0, 0, 0, 296, - 0, 0, 0, 296, 329, 0, 0, 296, 0, 0, + 0, 0, 0, 296, 329, 1464, 0, 296, 0, 0, 0, 0, 296, 296, 0, 0, 296, 296, 296, 666, 665, 675, 676, 668, 669, 670, 671, 672, 673, 674, 667, 95, 0, 677, 446, 0, 0, 574, 0, 0, 0, 0, 0, 0, 666, 665, 675, 676, 668, 669, 670, 671, 672, 673, 674, 667, 0, 0, 677, 0, - 0, 0, 0, 0, 0, 623, 0, 0, 0, 1161, + 0, 0, 0, 0, 0, 623, 0, 0, 0, 0, 0, 0, 0, 0, 623, 0, 0, 0, 0, 95, 95, 0, 0, 0, 0, 0, 0, 0, 30, 666, 665, 675, 676, 668, 669, 670, 671, 672, 673, 674, @@ -1134,10 +1134,10 @@ var yyAct = [...]int{ 710, 711, 712, 713, 0, 716, 719, 719, 719, 725, 719, 719, 725, 719, 733, 734, 735, 736, 737, 738, 739, 0, 0, 0, 0, 0, 30, 0, 0, 0, - 0, 0, 296, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 296, 1161, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 95, 95, - 0, 1397, 776, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1397, 776, 666, 665, 675, 676, 668, 669, 670, + 671, 672, 673, 674, 667, 0, 0, 677, 0, 0, 0, 0, 0, 0, 95, 0, 0, 296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 95, 95, 0, 0, 0, 0, 0, @@ -2809,16 +2809,16 @@ var yyAct = [...]int{ } var yyPact = [...]int{ - 97, -1000, -284, 1067, -1000, -1000, -1000, -1000, -1000, -1000, + 239, -1000, -282, 1054, -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, 1004, - 821, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 332, 12449, - -17, 175, 35, 18117, 173, 1526, 18470, -1000, 20, -1000, - 11, 18470, 16, 17764, -1000, -1000, -82, -87, -1000, 10331, - 923, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 819, - 994, 995, 1001, 676, 1114, -1000, 8906, 8906, 131, 131, - 131, 7494, -1000, -1000, 17411, 18470, 157, 18470, -144, 129, - 129, 129, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 988, + 765, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 372, 12449, + -31, 133, 18, 18117, 131, 1526, 18470, -1000, 21, -1000, + 11, 18470, 16, 17764, -1000, -1000, -64, -65, -1000, 10331, + 866, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 760, + 994, 963, 971, 656, 1006, -1000, 8906, 8906, 89, 89, + 89, 7494, -1000, -1000, 17411, 18470, 119, 18470, -156, 87, + 87, 87, -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, @@ -2837,23 +2837,23 @@ 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, - 169, 18470, 540, 540, 260, 553, 18470, 106, 540, 106, - 106, 106, 18470, -1000, 215, -1000, -1000, -1000, 18470, 540, - 944, 373, 126, 280, 280, 280, -1000, 229, -1000, 4925, - 43, 47, -59, 1023, 27, 5, -1000, 373, 4925, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 135, -1000, -1000, - 18470, 17058, 136, 330, -1000, -1000, -1000, -1000, -1000, -1000, - 696, 368, -1000, 10331, 1820, 735, 735, -1000, -1000, 191, + 127, 18470, 608, 608, 230, 525, 18470, 85, 608, 85, + 85, 85, 18470, -1000, 188, -1000, -1000, -1000, 18470, 608, + 907, 313, 84, 226, 226, 226, -1000, 196, -1000, 4925, + 33, 28, -59, 1007, 25, -25, -1000, 313, 4925, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 95, -1000, -1000, + 18470, 17058, 136, 264, -1000, -1000, -1000, -1000, -1000, -1000, + 623, 282, -1000, 10331, 1820, 708, 708, -1000, -1000, 165, -1000, -1000, 11390, 11390, 11390, 11390, 11390, 11390, 11390, 11390, 11390, 11390, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 735, 214, -1000, 9978, - 735, 735, 735, 735, 735, 735, 735, 735, 10331, 735, - 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, - 735, 735, 735, 735, 735, -1000, -1000, 1048, 1004, -1000, - 821, -1000, -1000, -1000, 952, 10331, 10331, 1004, -1000, 898, - 8906, -1000, -1000, 1006, -1000, -1000, -1000, -1000, 391, 1047, - -1000, 12096, 209, 1046, 16705, -1000, 15286, 16352, 721, 7127, - -99, -1000, -1000, -1000, 320, 14580, -1000, -1000, -1000, 943, + -1000, -1000, -1000, -1000, -1000, -1000, 708, 187, -1000, 9978, + 708, 708, 708, 708, 708, 708, 708, 708, 10331, 708, + 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, + 708, 708, 708, 708, 708, -1000, -1000, 1028, 988, -1000, + 765, -1000, -1000, -1000, 942, 10331, 10331, 988, -1000, 853, + 8906, -1000, -1000, 936, -1000, -1000, -1000, -1000, 355, 1026, + -1000, 12096, 183, 1024, 16705, -1000, 15286, 16352, 705, 7127, + -76, -1000, -1000, -1000, 262, 14580, -1000, -1000, -1000, 894, -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, @@ -2866,140 +2866,140 @@ 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, 673, 18470, -1000, 346, -1000, 540, 4925, 139, 540, - 345, 540, 18470, 18470, 4925, 4925, 4925, 58, 86, 65, - 18470, 552, 717, 134, 18470, 982, 836, 18470, 540, 540, - -1000, 6393, -1000, 4925, 373, -1000, 551, 10331, 4925, 4925, - 4925, 18470, 4925, 4925, -1000, 539, -1000, -1000, 375, -1000, - -1000, -1000, -1000, -1000, -1000, 4925, 4925, 370, 1044, 370, - -1000, -1000, -1000, -1000, 10331, 280, -1000, 835, -1000, -1000, - 14, -1000, -1000, -1000, -1000, -1000, 1067, -1000, -1000, -1000, - -133, -1000, -1000, 10331, 10331, 10331, 10331, 556, 295, 11390, - 445, 401, 11390, 11390, 11390, 11390, 11390, 11390, 11390, 11390, - 11390, 11390, 11390, 11390, 11390, 11390, 11390, 587, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 540, -1000, 1062, 635, - 635, 245, 245, 245, 245, 245, 245, 245, 245, 245, - 11743, 7847, 6393, 676, 669, 1004, 8906, 8906, 10331, 10331, - 9612, 9259, 8906, 947, 340, 368, 18470, -1000, -1000, 11037, - -1000, -1000, -1000, -1000, -1000, 561, -1000, -1000, -1000, -1000, + -1000, 675, 18470, -1000, 346, -1000, 608, 4925, 99, 608, + 296, 608, 18470, 18470, 4925, 4925, 4925, 40, 79, 75, + 18470, 524, 702, 94, 18470, 953, 800, 18470, 608, 608, + -1000, 6393, -1000, 4925, 313, -1000, 512, 10331, 4925, 4925, + 4925, 18470, 4925, 4925, -1000, 483, -1000, -1000, 363, -1000, + -1000, -1000, -1000, -1000, -1000, 4925, 4925, 342, 363, 342, + -1000, -1000, -1000, -1000, 10331, 226, -1000, 799, -1000, -1000, + 14, -1000, -1000, -1000, -1000, -1000, 1054, -1000, -1000, -1000, + -128, -1000, -1000, 10331, 10331, 10331, 10331, 364, 229, 11390, + 430, 323, 11390, 11390, 11390, 11390, 11390, 11390, 11390, 11390, + 11390, 11390, 11390, 11390, 11390, 11390, 11390, 580, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 608, -1000, 1052, 620, + 620, 200, 200, 200, 200, 200, 200, 200, 200, 200, + 11743, 7847, 6393, 656, 673, 988, 8906, 8906, 10331, 10331, + 9612, 9259, 8906, 939, 270, 282, 18470, -1000, -1000, 11037, + -1000, -1000, -1000, -1000, -1000, 369, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 18470, 18470, 8906, 8906, 8906, 8906, 8906, - 927, 995, 676, 1006, 976, 1057, 243, 560, 713, -1000, - 593, 995, 14227, 745, -1000, 1006, -1000, -1000, -1000, 18470, - -1000, -1000, 15992, -1000, -1000, 6026, 18470, 77, 18470, -1000, - 620, 767, -1000, -1000, -1000, 986, 13521, 13874, 18470, 742, - 731, -1000, -1000, 208, 6760, -99, -1000, 6760, 705, -1000, - -118, -106, 8200, 230, -1000, -1000, -1000, -1000, 4558, 12802, - 597, 496, -64, -1000, -1000, -1000, 747, -1000, 747, 747, - 747, 747, -23, -23, -23, -23, -1000, -1000, -1000, -1000, - -1000, 793, 790, -1000, 747, 747, 747, -1000, -1000, -1000, + 874, 963, 656, 936, 949, 1046, 221, 560, 701, -1000, + 492, 963, 14227, 742, -1000, 936, -1000, -1000, -1000, 18470, + -1000, -1000, 15992, -1000, -1000, 6026, 18470, 51, 18470, -1000, + 668, 767, -1000, -1000, -1000, 956, 13521, 13874, 18470, 728, + 669, -1000, -1000, 177, 6760, -76, -1000, 6760, 693, -1000, + -113, -90, 8200, 197, -1000, -1000, -1000, -1000, 4558, 12802, + 577, 321, -47, -1000, -1000, -1000, 714, -1000, 714, 714, + 714, 714, -16, -16, -16, -16, -1000, -1000, -1000, -1000, + -1000, 746, 744, -1000, 714, 714, 714, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 785, 785, 785, 750, 750, - 806, -1000, 18470, 4925, 980, 4925, -1000, 119, -1000, -1000, - -1000, 18470, 18470, 18470, 18470, 18470, 182, -1000, 18470, 18470, - 712, -1000, 18470, 4925, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 368, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 18470, -1000, -1000, -1000, -1000, 373, 18470, 18470, 18470, 373, - 368, -1000, 18470, 18470, -1000, -1000, -1000, -1000, -1000, 368, - 295, 314, 292, -1000, -1000, 510, -1000, -1000, 1875, -1000, - -1000, -1000, -1000, 445, 11390, 11390, 11390, 247, 1875, 1945, - 822, 349, 245, 307, 307, 223, 223, 223, 223, 223, - 402, 402, -1000, -1000, -1000, 561, -1000, -1000, -1000, 561, - 8906, 8906, 709, 735, 205, -1000, 819, -1000, -1000, 995, - 665, 665, 533, 393, 317, 1031, 665, 315, 1026, 665, - 665, 8906, -1000, -1000, 356, -1000, 10331, 561, -1000, 201, - -1000, 842, 708, 707, 665, 561, 561, 665, 665, 534, - 952, -1000, -1000, 930, -1000, 893, 10331, 10331, 10331, -1000, - -1000, -1000, 952, 1020, -1000, 920, 918, 1022, 8906, 15286, - 1006, -1000, -1000, -1000, 199, 1022, 711, 735, -1000, 18470, - 15286, 15286, 15286, 15286, 15286, -1000, 862, 852, -1000, 908, - 850, 869, 18470, -1000, 667, 676, 13521, 210, 735, -1000, - 15639, -1000, -1000, 77, 695, 15286, 18470, -1000, -1000, 15286, - 18470, 5659, -1000, 705, -99, -117, -1000, -1000, -1000, -1000, - 368, -1000, 619, 703, 4191, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 760, 540, -1000, 958, 259, 278, 540, 957, - -1000, -1000, -1000, 946, -1000, 361, -75, -1000, -1000, 435, - -23, -23, -1000, -1000, 230, 937, 230, 230, 230, 532, - 532, -1000, -1000, -1000, -1000, 431, -1000, -1000, -1000, 415, - -1000, 830, 18470, 4925, -1000, -1000, -1000, -1000, 1166, 1166, - 272, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 75, 798, -1000, -1000, -1000, -1000, 7, 51, - 133, -1000, 4925, -1000, 370, -1000, -1000, -1000, 370, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 247, 1875, 887, -1000, - 11390, 11390, -1000, -1000, 665, 665, 8906, 6393, 1004, 952, - -1000, -1000, 105, 587, 105, 11390, 11390, -1000, 11390, 11390, - -1000, -156, 728, 318, -1000, 10331, 565, -1000, 6393, -1000, - 11390, 11390, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 926, - 879, 368, 368, -1000, -1000, 18470, -1000, -1000, -1000, -1000, - 1017, 10331, -1000, 702, -1000, 5292, 995, 829, 18470, 735, - 1067, 13521, 18470, 732, -1000, 312, 767, 769, 827, 1081, - -1000, -1000, -1000, -1000, 851, -1000, 832, -1000, -1000, -1000, - -1000, -1000, 676, -1000, 155, 154, 153, 18470, -1000, 1022, - 15286, 726, -1000, 726, -1000, 198, -1000, -1000, -1000, -124, - -126, -1000, -1000, -1000, 4558, -1000, 4558, 18470, 92, -1000, - 540, 540, -1000, -1000, -1000, 751, 826, 11390, -1000, -1000, - -1000, 573, 230, 230, -1000, 308, -1000, -1000, -1000, 659, - -1000, 657, 701, 652, 18470, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 741, 741, 741, 722, 722, + 752, -1000, 18470, 4925, 945, 4925, -1000, 128, -1000, -1000, + -1000, 18470, 18470, 18470, 18470, 18470, 143, -1000, 18470, 18470, + 698, -1000, 18470, 4925, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 282, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 18470, -1000, -1000, -1000, -1000, 313, 18470, 18470, 18470, 313, + 282, -1000, 18470, 18470, -1000, -1000, -1000, -1000, -1000, 282, + 229, 278, 308, -1000, -1000, 396, -1000, -1000, 1875, -1000, + -1000, -1000, -1000, 430, 11390, 11390, 11390, 842, 1875, 2049, + 822, 349, 200, 401, 401, 199, 199, 199, 199, 199, + 507, 507, -1000, -1000, -1000, 369, -1000, -1000, -1000, 369, + 8906, 8906, 696, 708, 173, -1000, 760, -1000, -1000, 963, + 658, 658, 569, 368, 268, 1023, 658, 263, 1017, 658, + 658, 8906, -1000, -1000, 320, -1000, 10331, 369, -1000, 171, + -1000, 1269, 695, 694, 658, 369, 369, 658, 658, 470, + 942, -1000, -1000, 876, -1000, 850, 10331, 10331, 10331, -1000, + -1000, -1000, 942, 997, -1000, 861, 860, 1005, 8906, 15286, + 936, -1000, -1000, -1000, 163, 1005, 711, 708, -1000, 18470, + 15286, 15286, 15286, 15286, 15286, -1000, 833, 821, -1000, 832, + 831, 869, 18470, -1000, 665, 656, 13521, 166, 708, -1000, + 15639, -1000, -1000, 51, 542, 15286, 18470, -1000, -1000, 15286, + 18470, 5659, -1000, 693, -76, -83, -1000, -1000, -1000, -1000, + 282, -1000, 589, 687, 4191, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 733, 608, -1000, 938, 206, 256, 608, 935, + -1000, -1000, -1000, 911, -1000, 335, -49, -1000, -1000, 423, + -16, -16, -1000, -1000, 197, 892, 197, 197, 197, 462, + 462, -1000, -1000, -1000, -1000, 414, -1000, -1000, -1000, 408, + -1000, 795, 18470, 4925, -1000, -1000, -1000, -1000, 1166, 1166, + 237, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 50, 748, -1000, -1000, -1000, -1000, 13, 37, + 92, -1000, 4925, -1000, 342, -1000, -1000, -1000, 342, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 842, 1875, 887, -1000, + 11390, 11390, -1000, -1000, 658, 658, 8906, 6393, 988, 942, + -1000, -1000, 108, 580, 108, 11390, 11390, -1000, 11390, 11390, + -1000, -168, 585, 238, -1000, 10331, 506, -1000, 6393, -1000, + 11390, 11390, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 868, + 844, 282, 282, -1000, -1000, 18470, -1000, -1000, -1000, -1000, + 999, 10331, -1000, 682, -1000, 5292, 963, 792, 18470, 708, + 1054, 13521, 18470, 731, -1000, 247, 767, 737, 787, 1081, + -1000, -1000, -1000, -1000, 817, -1000, 775, -1000, -1000, -1000, + -1000, -1000, 656, -1000, 103, 102, 101, 18470, -1000, 1005, + 15286, 670, -1000, 670, -1000, 161, -1000, -1000, -1000, -139, + -123, -1000, -1000, -1000, 4558, -1000, 4558, 18470, 66, -1000, + 608, 608, -1000, -1000, -1000, 730, 770, 11390, -1000, -1000, + -1000, 533, 197, 197, -1000, 286, -1000, -1000, -1000, 652, + -1000, 649, 680, 646, 18470, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 18470, -1000, -1000, -1000, -1000, -1000, - 18470, -164, 540, 18470, 18470, 18470, 18470, -1000, 373, 373, - -1000, 11390, 1875, 1875, -1000, -1000, 561, -1000, 995, -1000, - 561, 747, 747, -1000, 747, 750, -1000, 747, 3, 747, - -1, 561, 561, 1900, 1728, 1701, 1629, 735, -151, -1000, - 368, 10331, -1000, 1560, 1270, -1000, 528, -1000, -1000, 1014, - 1000, 368, -1000, -1000, -1000, 953, 639, 687, -1000, -1000, - 8553, 646, 196, 634, -1000, 1004, 18470, 10331, -1000, -1000, - 10331, 748, -1000, 10331, -1000, -1000, -1000, 1004, 735, 735, - 735, 634, 1004, 726, -1000, -1000, 206, -1000, -1000, -1000, - 4191, -1000, 631, -1000, 747, -1000, 957, -1000, -1000, 18470, - -51, 1056, 1875, -1000, -1000, -1000, -1000, -1000, -23, 523, - -23, 410, -1000, 409, 4925, -1000, -1000, -1000, -1000, 961, - -1000, 6393, -1000, -1000, 744, 799, -1000, -1000, -1000, -1000, - 1875, -1000, 952, -1000, -1000, 122, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 11390, 11390, 11390, 11390, 11390, 995, - 485, 368, 11390, 11390, -1000, -1000, 10331, 10331, 956, -1000, - 735, -1000, 749, 18470, 18470, -1000, 18470, 995, -1000, 368, - 368, 18470, 368, 14933, 18470, 18470, 13155, 995, -1000, 190, - 18470, -1000, 628, -1000, 228, -1000, -104, 230, -1000, 230, - 568, 566, -1000, 735, 698, -1000, 310, 18470, 18470, -1000, - -1000, -1000, 842, 842, 842, 842, 101, 561, -1000, 842, - 842, 368, 696, 1054, -1000, 735, 1067, 189, -1000, -1000, - -1000, 626, 607, -1000, 607, 607, 210, -1000, 190, -1000, - 540, 309, 483, -1000, 78, 18470, 358, 950, -1000, 948, - -1000, -1000, -1000, -1000, -1000, 70, 6393, 4558, 605, -1000, - -1000, -1000, -1000, -1000, 561, 67, -174, -1000, -1000, -1000, - 18470, 687, 18470, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 399, -1000, -1000, 18470, -1000, -1000, 470, -1000, -1000, 595, - -1000, 18470, -1000, -1000, 798, -1000, 877, -161, -187, 675, - -1000, -1000, 736, -1000, -1000, 70, 903, -164, -1000, 867, - -1000, 18470, -1000, 66, -1000, -165, 582, 63, -175, 824, - 735, -191, 811, -1000, 1038, 10684, -1000, -1000, 1051, 213, - 213, 842, 561, -1000, -1000, -1000, 103, 440, -1000, -1000, + 18470, -174, 608, 18470, 18470, 18470, 18470, -1000, 313, 313, + -1000, 11390, 1875, 1875, -1000, -1000, 369, -1000, 963, -1000, + 369, 714, 714, -1000, 714, 722, -1000, 714, 1, 714, + 0, 369, 369, 1945, 1900, 1728, 1701, 708, -163, -1000, + 282, 10331, -1000, 1629, 1560, -1000, 451, -1000, -1000, 991, + 969, 282, -1000, -1000, -1000, 937, 605, 596, -1000, -1000, + 8553, 643, 153, 641, -1000, 988, 18470, 10331, -1000, -1000, + 10331, 718, -1000, 10331, -1000, -1000, -1000, 988, 708, 708, + 708, 641, 988, 670, -1000, -1000, 210, -1000, -1000, -1000, + 4191, -1000, 639, -1000, 714, -1000, 935, -1000, -1000, 18470, + -42, 1039, 1875, -1000, -1000, -1000, -1000, -1000, -16, 438, + -16, 400, -1000, 377, 4925, -1000, -1000, -1000, -1000, 941, + -1000, 6393, -1000, -1000, 713, 751, -1000, -1000, -1000, -1000, + 1875, -1000, 942, -1000, -1000, 122, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 11390, 11390, 11390, 11390, 11390, 963, + 436, 282, 11390, 11390, -1000, -1000, 10331, 10331, 934, -1000, + 708, -1000, 749, 18470, 18470, -1000, 18470, 963, -1000, 282, + 282, 18470, 282, 14933, 18470, 18470, 13155, 963, -1000, 201, + 18470, -1000, 631, -1000, 207, -1000, -105, 197, -1000, 197, + 435, 405, -1000, 708, 660, -1000, 243, 18470, 18470, -1000, + -1000, -1000, 1269, 1269, 1269, 1269, 20, 369, -1000, 1269, + 1269, 282, 623, 1038, -1000, 708, 1054, 139, -1000, -1000, + -1000, 621, 613, -1000, 613, 613, 166, -1000, 201, -1000, + 608, 242, 434, -1000, 63, 18470, 340, 930, -1000, 915, + -1000, -1000, -1000, -1000, -1000, 48, 6393, 4558, 607, -1000, + -1000, -1000, -1000, -1000, 369, 55, -177, -1000, -1000, -1000, + 18470, 596, 18470, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 371, -1000, -1000, 18470, -1000, -1000, 433, -1000, -1000, 573, + -1000, 18470, -1000, -1000, 748, -1000, 843, -172, -183, 570, + -1000, -1000, 710, -1000, -1000, 48, 859, -174, -1000, 838, + -1000, 18470, -1000, 45, -1000, -175, 544, 36, -180, 769, + 708, -187, 750, -1000, 1021, 10684, -1000, -1000, 1033, 190, + 190, 1269, 369, -1000, -1000, -1000, 73, 399, -1000, -1000, -1000, -1000, -1000, -1000, } var yyPgo = [...]int{ - 0, 1342, 1341, 71, 73, 69, 1339, 1338, 1337, 1336, - 98, 93, 91, 1335, 1334, 1331, 1328, 1322, 1320, 1317, - 1316, 1313, 1305, 1302, 1301, 1300, 1296, 1294, 1292, 1290, - 1289, 1288, 1287, 1284, 79, 1282, 1276, 1274, 1270, 77, - 1269, 1266, 1264, 1262, 1261, 37, 203, 45, 62, 1260, - 59, 92, 1259, 34, 61, 81, 1256, 33, 1255, 1254, - 101, 1252, 1250, 60, 1249, 1247, 2782, 1246, 56, 1244, - 12, 29, 1243, 1242, 1240, 1238, 96, 168, 1235, 1234, - 13, 1230, 1229, 94, 1221, 66, 20, 14, 21, 22, - 1220, 65, 1218, 7, 1215, 64, 1214, 1210, 1209, 1207, - 19, 1205, 63, 1204, 74, 1203, 16, 1201, 31, 57, - 32, 18, 9, 1200, 1199, 27, 87, 55, 75, 1198, - 1193, 1192, 593, 1190, 1189, 42, 1185, 1184, 1183, 24, - 78, 109, 484, 1182, 1181, 1180, 1179, 1178, 48, 926, - 1912, 8, 83, 1177, 1173, 1172, 2573, 38, 58, 17, - 1171, 1169, 1166, 41, 53, 43, 449, 1164, 36, 1160, - 1158, 1157, 1156, 1153, 1152, 1151, 67, 1149, 1148, 1147, - 35, 23, 70, 25, 1146, 1145, 1144, 1139, 39, 68, - 1130, 1125, 51, 1124, 1123, 26, 1119, 1117, 1116, 1115, - 1112, 28, 10, 1111, 15, 1109, 11, 1102, 30, 1098, - 4, 1097, 6, 1096, 1, 0, 1087, 3, 50, 2, - 1086, 5, 1083, 1081, 1077, 1715, 908, 76, 1076, 102, + 0, 1313, 1305, 71, 73, 69, 1302, 1301, 1300, 1296, + 106, 98, 94, 1294, 1292, 1290, 1289, 1288, 1287, 1284, + 1282, 1276, 1274, 1270, 1269, 1266, 1264, 1262, 1261, 1260, + 1259, 1256, 1255, 1254, 84, 1252, 1250, 1249, 1247, 77, + 1246, 1244, 1243, 1242, 1240, 37, 203, 45, 62, 1238, + 59, 92, 1235, 34, 61, 81, 1234, 33, 1230, 1229, + 101, 1221, 1220, 60, 1218, 1215, 2782, 1214, 56, 1210, + 12, 29, 1209, 1207, 1205, 1204, 96, 168, 1203, 1201, + 13, 1200, 1199, 102, 1198, 66, 20, 14, 21, 22, + 1193, 65, 1192, 7, 1190, 64, 1189, 1185, 1184, 1183, + 19, 1182, 63, 1181, 74, 1180, 16, 1179, 31, 57, + 32, 18, 9, 1178, 1177, 27, 87, 55, 75, 1173, + 1172, 1171, 554, 1169, 1166, 42, 1165, 1164, 1163, 24, + 78, 95, 388, 1162, 1161, 1160, 1158, 1157, 48, 926, + 1912, 8, 83, 1156, 1153, 1152, 2573, 38, 58, 17, + 1151, 1150, 1149, 41, 53, 43, 419, 1148, 36, 1147, + 1146, 1145, 1144, 1139, 1136, 1130, 67, 1125, 1124, 1123, + 35, 23, 70, 25, 1119, 1117, 1116, 1115, 39, 68, + 1112, 1111, 51, 1109, 79, 26, 1102, 1098, 1097, 1096, + 1087, 28, 10, 1086, 15, 1083, 11, 1081, 30, 1077, + 4, 1076, 6, 1072, 1, 0, 1068, 3, 50, 2, + 1067, 5, 1066, 1064, 1061, 1715, 908, 76, 1060, 93, } var yyR1 = [...]int{ @@ -3304,7 +3304,7 @@ var yyChk = [...]int{ -154, 172, 172, 136, 136, 177, -66, 69, 63, 139, -60, 24, 60, -66, -205, -205, -147, -146, -138, -154, -129, 69, -51, -154, -154, -154, -66, -154, -154, 69, - -184, 12, 103, -154, -154, -125, 12, 103, 12, -125, + -184, 12, 103, -154, -154, -125, 12, 103, -184, -125, -51, -130, 60, -152, 183, 217, 370, 371, 372, -51, -51, -51, -51, -84, 78, 85, 79, 80, -77, -85, -88, -91, 74, 103, 101, 102, 87, -77, -77, -77, @@ -5480,995 +5480,994 @@ yydefault: yyDollar = yyS[yypt-4 : yypt+1] //line sql.y:1621 { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].colIdent.String()), Scope: ImplicitScope} + yyVAL.statement = &Show{&ShowLegacy{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].colIdent.String()), Scope: ImplicitScope}} } case 281: yyDollar = yyS[yypt-4 : yypt+1] //line sql.y:1626 { showTablesOpt := &ShowTablesOpt{Filter: yyDollar[4].showFilter} - yyVAL.statement = &Show{Type: CharsetStr, ShowTablesOpt: showTablesOpt, Scope: ImplicitScope} + yyVAL.statement = &Show{&ShowLegacy{Type: CharsetStr, ShowTablesOpt: showTablesOpt, Scope: ImplicitScope}} } case 282: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:1631 { showTablesOpt := &ShowTablesOpt{Filter: yyDollar[3].showFilter} - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes), ShowTablesOpt: showTablesOpt, Scope: ImplicitScope} + yyVAL.statement = &Show{&ShowLegacy{Type: string(yyDollar[2].bytes), ShowTablesOpt: showTablesOpt, Scope: ImplicitScope}} } case 283: yyDollar = yyS[yypt-4 : yypt+1] //line sql.y:1636 { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes), Scope: ImplicitScope} + yyVAL.statement = &Show{&ShowLegacy{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes), Scope: ImplicitScope}} } case 284: yyDollar = yyS[yypt-4 : yypt+1] //line sql.y:1641 { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].colIdent.String()), Scope: ImplicitScope} + yyVAL.statement = &Show{&ShowLegacy{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].colIdent.String()), Scope: ImplicitScope}} } case 285: yyDollar = yyS[yypt-4 : yypt+1] //line sql.y:1645 { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes), Scope: ImplicitScope} + yyVAL.statement = &Show{&ShowLegacy{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes), Scope: ImplicitScope}} } case 286: yyDollar = yyS[yypt-4 : yypt+1] //line sql.y:1649 { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes), Table: yyDollar[4].tableName, Scope: ImplicitScope} + yyVAL.statement = &Show{&ShowLegacy{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes), Table: yyDollar[4].tableName, Scope: ImplicitScope}} } case 287: yyDollar = yyS[yypt-4 : yypt+1] //line sql.y:1653 { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes), Scope: ImplicitScope} + yyVAL.statement = &Show{&ShowLegacy{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes), Scope: ImplicitScope}} } case 288: yyDollar = yyS[yypt-4 : yypt+1] //line sql.y:1657 { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes), Scope: ImplicitScope} + yyVAL.statement = &Show{&ShowLegacy{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes), Scope: ImplicitScope}} } case 289: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:1661 { showTablesOpt := &ShowTablesOpt{Filter: yyDollar[3].showFilter} - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes), ShowTablesOpt: showTablesOpt, Scope: ImplicitScope} + yyVAL.statement = &Show{&ShowLegacy{Type: string(yyDollar[2].bytes), ShowTablesOpt: showTablesOpt, Scope: ImplicitScope}} } case 290: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:1666 { showTablesOpt := &ShowTablesOpt{Filter: yyDollar[3].showFilter} - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes), ShowTablesOpt: showTablesOpt, Scope: ImplicitScope} + yyVAL.statement = &Show{&ShowLegacy{Type: string(yyDollar[2].bytes), ShowTablesOpt: showTablesOpt, Scope: ImplicitScope}} } case 291: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:1671 { showTablesOpt := &ShowTablesOpt{Filter: yyDollar[3].showFilter} - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes), ShowTablesOpt: showTablesOpt, Scope: ImplicitScope} + yyVAL.statement = &Show{&ShowLegacy{Type: string(yyDollar[2].bytes), ShowTablesOpt: showTablesOpt, Scope: ImplicitScope}} } case 292: yyDollar = yyS[yypt-2 : yypt+1] //line sql.y:1676 { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes), Scope: ImplicitScope} + yyVAL.statement = &Show{&ShowLegacy{Type: string(yyDollar[2].bytes), Scope: ImplicitScope}} } case 293: yyDollar = yyS[yypt-7 : yypt+1] //line sql.y:1680 { showTablesOpt := &ShowTablesOpt{DbName: yyDollar[6].str, Filter: yyDollar[7].showFilter} - yyVAL.statement = &Show{Extended: string(yyDollar[2].str), Type: string(yyDollar[3].str), ShowTablesOpt: showTablesOpt, OnTable: yyDollar[5].tableName, Scope: ImplicitScope} + yyVAL.statement = &Show{&ShowLegacy{Extended: string(yyDollar[2].str), Type: string(yyDollar[3].str), ShowTablesOpt: showTablesOpt, OnTable: yyDollar[5].tableName, Scope: ImplicitScope}} } case 294: yyDollar = yyS[yypt-2 : yypt+1] //line sql.y:1685 { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes), Scope: ImplicitScope} + yyVAL.statement = &Show{&ShowLegacy{Type: string(yyDollar[2].bytes), Scope: ImplicitScope}} } case 295: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:1689 { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes), Scope: ImplicitScope} + yyVAL.statement = &Show{&ShowLegacy{Type: string(yyDollar[2].bytes), Scope: ImplicitScope}} } case 296: yyDollar = yyS[yypt-4 : yypt+1] //line sql.y:1693 { - yyVAL.statement = &Show{Scope: yyDollar[2].scope, Type: string(yyDollar[3].bytes)} + yyVAL.statement = &Show{&ShowLegacy{Scope: yyDollar[2].scope, Type: string(yyDollar[3].bytes)}} } case 297: yyDollar = yyS[yypt-5 : yypt+1] //line sql.y:1697 { - yyVAL.statement = &ShowTableStatus{DatabaseName: yyDollar[4].str, Filter: yyDollar[5].showFilter} + yyVAL.statement = &Show{&ShowTableStatus{DatabaseName: yyDollar[4].str, Filter: yyDollar[5].showFilter}} } case 298: yyDollar = yyS[yypt-7 : yypt+1] //line sql.y:1701 { - showTablesOpt := &ShowTablesOpt{Full: yyDollar[2].str, DbName: yyDollar[6].str, Filter: yyDollar[7].showFilter} - yyVAL.statement = &Show{Type: string(yyDollar[3].str), ShowTablesOpt: showTablesOpt, OnTable: yyDollar[5].tableName, Scope: ImplicitScope} + yyVAL.statement = &Show{&ShowColumns{Full: yyDollar[2].str, Table: yyDollar[5].tableName, DbName: yyDollar[6].str, Filter: yyDollar[7].showFilter}} } case 299: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1706 +//line sql.y:1705 { // this is ugly, but I couldn't find a better way for now if yyDollar[3].str == "processlist" { - yyVAL.statement = &Show{Type: yyDollar[3].str, Scope: ImplicitScope} + yyVAL.statement = &Show{&ShowLegacy{Type: yyDollar[3].str, Scope: ImplicitScope}} } else { showTablesOpt := &ShowTablesOpt{Full: yyDollar[2].str, DbName: yyDollar[4].str, Filter: yyDollar[5].showFilter} - yyVAL.statement = &Show{Type: yyDollar[3].str, ShowTablesOpt: showTablesOpt, Scope: ImplicitScope} + yyVAL.statement = &Show{&ShowLegacy{Type: yyDollar[3].str, ShowTablesOpt: showTablesOpt, Scope: ImplicitScope}} } } case 300: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1716 +//line sql.y:1715 { - yyVAL.statement = &Show{Scope: yyDollar[2].scope, Type: string(yyDollar[3].bytes)} + yyVAL.statement = &Show{&ShowLegacy{Scope: yyDollar[2].scope, Type: string(yyDollar[3].bytes)}} } case 301: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1720 +//line sql.y:1719 { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes), Scope: ImplicitScope} + yyVAL.statement = &Show{&ShowLegacy{Type: string(yyDollar[2].bytes), Scope: ImplicitScope}} } case 302: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1724 +//line sql.y:1723 { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes), ShowCollationFilterOpt: yyDollar[4].expr, Scope: ImplicitScope} + yyVAL.statement = &Show{&ShowLegacy{Type: string(yyDollar[2].bytes), ShowCollationFilterOpt: yyDollar[4].expr, Scope: ImplicitScope}} } case 303: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1728 +//line sql.y:1727 { showTablesOpt := &ShowTablesOpt{Filter: yyDollar[4].showFilter} - yyVAL.statement = &Show{Scope: VitessMetadataScope, Type: string(yyDollar[3].bytes), ShowTablesOpt: showTablesOpt} + yyVAL.statement = &Show{&ShowLegacy{Scope: VitessMetadataScope, Type: string(yyDollar[3].bytes), ShowTablesOpt: showTablesOpt}} } case 304: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1733 +//line sql.y:1732 { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes), Scope: ImplicitScope} + yyVAL.statement = &Show{&ShowLegacy{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes), Scope: ImplicitScope}} } case 305: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1737 +//line sql.y:1736 { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes), Scope: ImplicitScope} + yyVAL.statement = &Show{&ShowLegacy{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes), Scope: ImplicitScope}} } case 306: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1741 +//line sql.y:1740 { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes), OnTable: yyDollar[5].tableName, Scope: ImplicitScope} + yyVAL.statement = &Show{&ShowLegacy{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes), OnTable: yyDollar[5].tableName, Scope: ImplicitScope}} } case 307: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1745 +//line sql.y:1744 { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes), Scope: ImplicitScope} + yyVAL.statement = &Show{&ShowLegacy{Type: string(yyDollar[2].bytes), Scope: ImplicitScope}} } case 308: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1750 +//line sql.y:1749 { // This should probably be a different type (ShowVitessTopoOpt), but // just getting the thing working for now showTablesOpt := &ShowTablesOpt{Filter: yyDollar[3].showFilter} - yyVAL.statement = &Show{Type: yyDollar[2].str, ShowTablesOpt: showTablesOpt} + yyVAL.statement = &Show{&ShowLegacy{Type: yyDollar[2].str, ShowTablesOpt: showTablesOpt}} } case 309: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1764 +//line sql.y:1763 { - yyVAL.statement = &Show{Type: string(yyDollar[2].colIdent.String()), Scope: ImplicitScope} + yyVAL.statement = &Show{&ShowLegacy{Type: string(yyDollar[2].colIdent.String()), Scope: ImplicitScope}} } case 310: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1770 +//line sql.y:1769 { yyVAL.str = string(yyDollar[1].bytes) } case 311: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1774 +//line sql.y:1773 { yyVAL.str = string(yyDollar[1].bytes) } case 312: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1780 +//line sql.y:1779 { yyVAL.str = string(yyDollar[1].bytes) } case 313: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1784 +//line sql.y:1783 { yyVAL.str = string(yyDollar[1].bytes) } case 314: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1790 +//line sql.y:1789 { yyVAL.str = "" } case 315: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1794 +//line sql.y:1793 { yyVAL.str = "extended " } case 316: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1800 +//line sql.y:1799 { yyVAL.str = "" } case 317: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1804 +//line sql.y:1803 { yyVAL.str = "full " } case 318: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1810 +//line sql.y:1809 { yyVAL.str = string(yyDollar[1].bytes) } case 319: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1814 +//line sql.y:1813 { yyVAL.str = string(yyDollar[1].bytes) } case 320: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1820 +//line sql.y:1819 { yyVAL.str = "" } case 321: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1824 +//line sql.y:1823 { yyVAL.str = yyDollar[2].tableIdent.v } case 322: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1828 +//line sql.y:1827 { yyVAL.str = yyDollar[2].tableIdent.v } case 323: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1834 +//line sql.y:1833 { yyVAL.showFilter = nil } case 324: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1838 +//line sql.y:1837 { yyVAL.showFilter = &ShowFilter{Like: string(yyDollar[2].bytes)} } case 325: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1842 +//line sql.y:1841 { yyVAL.showFilter = &ShowFilter{Filter: yyDollar[2].expr} } case 326: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1848 +//line sql.y:1847 { yyVAL.showFilter = nil } case 327: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1852 +//line sql.y:1851 { yyVAL.showFilter = &ShowFilter{Like: string(yyDollar[2].bytes)} } case 328: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1858 +//line sql.y:1857 { yyVAL.scope = ImplicitScope } case 329: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1862 +//line sql.y:1861 { yyVAL.scope = SessionScope } case 330: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1866 +//line sql.y:1865 { yyVAL.scope = GlobalScope } case 331: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1872 +//line sql.y:1871 { yyVAL.statement = &Use{DBName: yyDollar[2].tableIdent} } case 332: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1876 +//line sql.y:1875 { yyVAL.statement = &Use{DBName: TableIdent{v: ""}} } case 333: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1882 +//line sql.y:1881 { yyVAL.statement = &Begin{} } case 334: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1886 +//line sql.y:1885 { yyVAL.statement = &Begin{} } case 335: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1892 +//line sql.y:1891 { yyVAL.statement = &Commit{} } case 336: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1898 +//line sql.y:1897 { yyVAL.statement = &Rollback{} } case 337: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1902 +//line sql.y:1901 { yyVAL.statement = &SRollback{Name: yyDollar[5].colIdent} } case 338: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1907 +//line sql.y:1906 { yyVAL.empty = struct{}{} } case 339: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1909 +//line sql.y:1908 { yyVAL.empty = struct{}{} } case 340: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1912 +//line sql.y:1911 { yyVAL.empty = struct{}{} } case 341: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1914 +//line sql.y:1913 { yyVAL.empty = struct{}{} } case 342: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1919 +//line sql.y:1918 { yyVAL.statement = &Savepoint{Name: yyDollar[2].colIdent} } case 343: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1925 +//line sql.y:1924 { yyVAL.statement = &Release{Name: yyDollar[3].colIdent} } case 344: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1930 +//line sql.y:1929 { yyVAL.explainType = EmptyType } case 345: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1934 +//line sql.y:1933 { yyVAL.explainType = JSONType } case 346: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1938 +//line sql.y:1937 { yyVAL.explainType = TreeType } case 347: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1942 +//line sql.y:1941 { yyVAL.explainType = VitessType } case 348: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1946 +//line sql.y:1945 { yyVAL.explainType = TraditionalType } case 349: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1950 +//line sql.y:1949 { yyVAL.explainType = AnalyzeType } case 350: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1956 +//line sql.y:1955 { yyVAL.bytes = yyDollar[1].bytes } case 351: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1960 +//line sql.y:1959 { yyVAL.bytes = yyDollar[1].bytes } case 352: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1964 +//line sql.y:1963 { yyVAL.bytes = yyDollar[1].bytes } case 353: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1970 +//line sql.y:1969 { yyVAL.statement = yyDollar[1].selStmt } case 354: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1974 +//line sql.y:1973 { yyVAL.statement = yyDollar[1].statement } case 355: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1978 +//line sql.y:1977 { yyVAL.statement = yyDollar[1].statement } case 356: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1982 +//line sql.y:1981 { yyVAL.statement = yyDollar[1].statement } case 357: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1987 +//line sql.y:1986 { yyVAL.str = "" } case 358: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1991 +//line sql.y:1990 { yyVAL.str = "" } case 359: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1995 +//line sql.y:1994 { yyVAL.str = "" } case 360: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2001 +//line sql.y:2000 { yyVAL.statement = &OtherRead{} } case 361: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2005 +//line sql.y:2004 { yyVAL.statement = &Explain{Type: yyDollar[2].explainType, Statement: yyDollar[3].statement} } case 362: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2011 +//line sql.y:2010 { yyVAL.statement = &OtherAdmin{} } case 363: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2015 +//line sql.y:2014 { yyVAL.statement = &OtherAdmin{} } case 364: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2019 +//line sql.y:2018 { yyVAL.statement = &OtherAdmin{} } case 365: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2023 +//line sql.y:2022 { yyVAL.statement = &OtherAdmin{} } case 366: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2029 +//line sql.y:2028 { yyVAL.statement = &DDL{Action: FlushDDLAction} } case 367: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2033 +//line sql.y:2032 { setAllowComments(yylex, true) } case 368: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2037 +//line sql.y:2036 { yyVAL.bytes2 = yyDollar[2].bytes2 setAllowComments(yylex, false) } case 369: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2043 +//line sql.y:2042 { yyVAL.bytes2 = nil } case 370: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2047 +//line sql.y:2046 { yyVAL.bytes2 = append(yyDollar[1].bytes2, yyDollar[2].bytes) } case 371: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2053 +//line sql.y:2052 { yyVAL.unionType = UnionBasic } case 372: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2057 +//line sql.y:2056 { yyVAL.unionType = UnionAll } case 373: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2061 +//line sql.y:2060 { yyVAL.unionType = UnionDistinct } case 374: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2066 +//line sql.y:2065 { yyVAL.str = "" } case 375: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2070 +//line sql.y:2069 { yyVAL.str = SQLNoCacheStr } case 376: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2074 +//line sql.y:2073 { yyVAL.str = SQLCacheStr } case 377: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2079 +//line sql.y:2078 { yyVAL.boolean = false } case 378: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2083 +//line sql.y:2082 { yyVAL.boolean = true } case 379: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2087 +//line sql.y:2086 { yyVAL.boolean = true } case 380: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2092 +//line sql.y:2091 { yyVAL.selectExprs = nil } case 381: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2096 +//line sql.y:2095 { yyVAL.selectExprs = yyDollar[1].selectExprs } case 382: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2101 +//line sql.y:2100 { yyVAL.strs = nil } case 383: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2105 +//line sql.y:2104 { yyVAL.strs = []string{yyDollar[1].str} } case 384: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2109 +//line sql.y:2108 { // TODO: This is a hack since I couldn't get it to work in a nicer way. I got 'conflicts: 8 shift/reduce' yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str} } case 385: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2113 +//line sql.y:2112 { yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str, yyDollar[3].str} } case 386: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2117 +//line sql.y:2116 { yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str, yyDollar[3].str, yyDollar[4].str} } case 387: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2123 +//line sql.y:2122 { yyVAL.str = SQLNoCacheStr } case 388: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2127 +//line sql.y:2126 { yyVAL.str = SQLCacheStr } case 389: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2131 +//line sql.y:2130 { yyVAL.str = DistinctStr } case 390: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2135 +//line sql.y:2134 { yyVAL.str = DistinctStr } case 391: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2139 +//line sql.y:2138 { yyVAL.str = StraightJoinHint } case 392: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2143 +//line sql.y:2142 { yyVAL.str = SQLCalcFoundRowsStr } case 393: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2149 +//line sql.y:2148 { yyVAL.selectExprs = SelectExprs{yyDollar[1].selectExpr} } case 394: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2153 +//line sql.y:2152 { yyVAL.selectExprs = append(yyVAL.selectExprs, yyDollar[3].selectExpr) } case 395: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2159 +//line sql.y:2158 { yyVAL.selectExpr = &StarExpr{} } case 396: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2163 +//line sql.y:2162 { yyVAL.selectExpr = &AliasedExpr{Expr: yyDollar[1].expr, As: yyDollar[2].colIdent} } case 397: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2167 +//line sql.y:2166 { yyVAL.selectExpr = &StarExpr{TableName: TableName{Name: yyDollar[1].tableIdent}} } case 398: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2171 +//line sql.y:2170 { yyVAL.selectExpr = &StarExpr{TableName: TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent}} } case 399: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2176 +//line sql.y:2175 { yyVAL.colIdent = ColIdent{} } case 400: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2180 +//line sql.y:2179 { yyVAL.colIdent = yyDollar[1].colIdent } case 401: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2184 +//line sql.y:2183 { yyVAL.colIdent = yyDollar[2].colIdent } case 403: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2191 +//line sql.y:2190 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } case 404: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2196 +//line sql.y:2195 { yyVAL.tableExprs = TableExprs{&AliasedTableExpr{Expr: TableName{Name: NewTableIdent("dual")}}} } case 405: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2200 +//line sql.y:2199 { yyVAL.tableExprs = yyDollar[2].tableExprs } case 406: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2206 +//line sql.y:2205 { yyVAL.tableExprs = TableExprs{yyDollar[1].tableExpr} } case 407: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2210 +//line sql.y:2209 { yyVAL.tableExprs = append(yyVAL.tableExprs, yyDollar[3].tableExpr) } case 410: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2220 +//line sql.y:2219 { yyVAL.tableExpr = yyDollar[1].aliasedTableName } case 411: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2224 +//line sql.y:2223 { yyVAL.tableExpr = &AliasedTableExpr{Expr: yyDollar[1].subquery, As: yyDollar[3].tableIdent} } case 412: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2228 +//line sql.y:2227 { yyVAL.tableExpr = &ParenTableExpr{Exprs: yyDollar[2].tableExprs} } case 413: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2234 +//line sql.y:2233 { yyVAL.subquery = &Subquery{yyDollar[2].selStmt} } case 414: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2240 +//line sql.y:2239 { yyVAL.aliasedTableName = &AliasedTableExpr{Expr: yyDollar[1].tableName, As: yyDollar[2].tableIdent, Hints: yyDollar[3].indexHints} } case 415: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:2244 +//line sql.y:2243 { yyVAL.aliasedTableName = &AliasedTableExpr{Expr: yyDollar[1].tableName, Partitions: yyDollar[4].partitions, As: yyDollar[6].tableIdent, Hints: yyDollar[7].indexHints} } case 416: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2250 +//line sql.y:2249 { yyVAL.columns = Columns{yyDollar[1].colIdent} } case 417: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2254 +//line sql.y:2253 { yyVAL.columns = append(yyVAL.columns, yyDollar[3].colIdent) } case 418: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2260 +//line sql.y:2259 { yyVAL.partitions = Partitions{yyDollar[1].colIdent} } case 419: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2264 +//line sql.y:2263 { yyVAL.partitions = append(yyVAL.partitions, yyDollar[3].colIdent) } case 420: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2277 +//line sql.y:2276 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].joinType, RightExpr: yyDollar[3].tableExpr, Condition: yyDollar[4].joinCondition} } case 421: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2281 +//line sql.y:2280 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].joinType, RightExpr: yyDollar[3].tableExpr, Condition: yyDollar[4].joinCondition} } case 422: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2285 +//line sql.y:2284 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].joinType, RightExpr: yyDollar[3].tableExpr, Condition: yyDollar[4].joinCondition} } case 423: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2289 +//line sql.y:2288 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].joinType, RightExpr: yyDollar[3].tableExpr} } case 424: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2295 +//line sql.y:2294 { yyVAL.joinCondition = JoinCondition{On: yyDollar[2].expr} } case 425: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2297 +//line sql.y:2296 { yyVAL.joinCondition = JoinCondition{Using: yyDollar[3].columns} } case 426: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2301 +//line sql.y:2300 { yyVAL.joinCondition = JoinCondition{} } case 427: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2303 +//line sql.y:2302 { yyVAL.joinCondition = yyDollar[1].joinCondition } case 428: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2307 +//line sql.y:2306 { yyVAL.joinCondition = JoinCondition{} } case 429: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2309 +//line sql.y:2308 { yyVAL.joinCondition = JoinCondition{On: yyDollar[2].expr} } case 430: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2312 +//line sql.y:2311 { yyVAL.empty = struct{}{} } case 431: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2314 +//line sql.y:2313 { yyVAL.empty = struct{}{} } case 432: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2317 +//line sql.y:2316 { yyVAL.tableIdent = NewTableIdent("") } case 433: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2321 +//line sql.y:2320 { yyVAL.tableIdent = yyDollar[1].tableIdent } case 434: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2325 +//line sql.y:2324 { yyVAL.tableIdent = yyDollar[2].tableIdent } case 436: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2332 +//line sql.y:2331 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } case 437: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2338 +//line sql.y:2337 { yyVAL.joinType = NormalJoinType } case 438: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2342 +//line sql.y:2341 { yyVAL.joinType = NormalJoinType } case 439: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2346 +//line sql.y:2345 { yyVAL.joinType = NormalJoinType } case 440: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2352 +//line sql.y:2351 { yyVAL.joinType = StraightJoinType } case 441: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2358 +//line sql.y:2357 { yyVAL.joinType = LeftJoinType } case 442: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2362 +//line sql.y:2361 { yyVAL.joinType = LeftJoinType } case 443: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2366 +//line sql.y:2365 { yyVAL.joinType = RightJoinType } case 444: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2370 +//line sql.y:2369 { yyVAL.joinType = RightJoinType } case 445: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2376 +//line sql.y:2375 { yyVAL.joinType = NaturalJoinType } case 446: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2380 +//line sql.y:2379 { if yyDollar[2].joinType == LeftJoinType { yyVAL.joinType = NaturalLeftJoinType @@ -6478,487 +6477,487 @@ yydefault: } case 447: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2390 +//line sql.y:2389 { yyVAL.tableName = yyDollar[2].tableName } case 448: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2394 +//line sql.y:2393 { yyVAL.tableName = yyDollar[1].tableName } case 449: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2400 +//line sql.y:2399 { yyVAL.tableName = TableName{Name: yyDollar[1].tableIdent} } case 450: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2404 +//line sql.y:2403 { yyVAL.tableName = TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent} } case 451: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2410 +//line sql.y:2409 { yyVAL.tableName = TableName{Name: yyDollar[1].tableIdent} } case 452: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2415 +//line sql.y:2414 { yyVAL.indexHints = nil } case 453: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2419 +//line sql.y:2418 { yyVAL.indexHints = &IndexHints{Type: UseOp, Indexes: yyDollar[4].columns} } case 454: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2423 +//line sql.y:2422 { yyVAL.indexHints = &IndexHints{Type: UseOp} } case 455: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2427 +//line sql.y:2426 { yyVAL.indexHints = &IndexHints{Type: IgnoreOp, Indexes: yyDollar[4].columns} } case 456: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2431 +//line sql.y:2430 { yyVAL.indexHints = &IndexHints{Type: ForceOp, Indexes: yyDollar[4].columns} } case 457: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2436 +//line sql.y:2435 { yyVAL.expr = nil } case 458: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2440 +//line sql.y:2439 { yyVAL.expr = yyDollar[2].expr } case 459: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2446 +//line sql.y:2445 { yyVAL.expr = yyDollar[1].expr } case 460: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2450 +//line sql.y:2449 { yyVAL.expr = &AndExpr{Left: yyDollar[1].expr, Right: yyDollar[3].expr} } case 461: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2454 +//line sql.y:2453 { yyVAL.expr = &OrExpr{Left: yyDollar[1].expr, Right: yyDollar[3].expr} } case 462: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2458 +//line sql.y:2457 { yyVAL.expr = &XorExpr{Left: yyDollar[1].expr, Right: yyDollar[3].expr} } case 463: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2462 +//line sql.y:2461 { yyVAL.expr = &NotExpr{Expr: yyDollar[2].expr} } case 464: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2466 +//line sql.y:2465 { yyVAL.expr = &IsExpr{Operator: yyDollar[3].isExprOperator, Expr: yyDollar[1].expr} } case 465: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2470 +//line sql.y:2469 { yyVAL.expr = yyDollar[1].expr } case 466: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2474 +//line sql.y:2473 { yyVAL.expr = &Default{ColName: yyDollar[2].str} } case 467: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2480 +//line sql.y:2479 { yyVAL.str = "" } case 468: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2484 +//line sql.y:2483 { yyVAL.str = string(yyDollar[2].colIdent.String()) } case 469: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2490 +//line sql.y:2489 { yyVAL.boolVal = BoolVal(true) } case 470: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2494 +//line sql.y:2493 { yyVAL.boolVal = BoolVal(false) } case 471: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2500 +//line sql.y:2499 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: yyDollar[2].comparisonExprOperator, Right: yyDollar[3].expr} } case 472: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2504 +//line sql.y:2503 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: InOp, Right: yyDollar[3].colTuple} } case 473: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2508 +//line sql.y:2507 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotInOp, Right: yyDollar[4].colTuple} } case 474: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2512 +//line sql.y:2511 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: LikeOp, Right: yyDollar[3].expr, Escape: yyDollar[4].expr} } case 475: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2516 +//line sql.y:2515 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotLikeOp, Right: yyDollar[4].expr, Escape: yyDollar[5].expr} } case 476: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2520 +//line sql.y:2519 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: RegexpOp, Right: yyDollar[3].expr} } case 477: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2524 +//line sql.y:2523 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotRegexpOp, Right: yyDollar[4].expr} } case 478: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2528 +//line sql.y:2527 { yyVAL.expr = &RangeCond{Left: yyDollar[1].expr, Operator: BetweenOp, From: yyDollar[3].expr, To: yyDollar[5].expr} } case 479: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2532 +//line sql.y:2531 { yyVAL.expr = &RangeCond{Left: yyDollar[1].expr, Operator: NotBetweenOp, From: yyDollar[4].expr, To: yyDollar[6].expr} } case 480: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2536 +//line sql.y:2535 { yyVAL.expr = &ExistsExpr{Subquery: yyDollar[2].subquery} } case 481: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2542 +//line sql.y:2541 { yyVAL.isExprOperator = IsNullOp } case 482: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2546 +//line sql.y:2545 { yyVAL.isExprOperator = IsNotNullOp } case 483: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2550 +//line sql.y:2549 { yyVAL.isExprOperator = IsTrueOp } case 484: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2554 +//line sql.y:2553 { yyVAL.isExprOperator = IsNotTrueOp } case 485: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2558 +//line sql.y:2557 { yyVAL.isExprOperator = IsFalseOp } case 486: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2562 +//line sql.y:2561 { yyVAL.isExprOperator = IsNotFalseOp } case 487: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2568 +//line sql.y:2567 { yyVAL.comparisonExprOperator = EqualOp } case 488: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2572 +//line sql.y:2571 { yyVAL.comparisonExprOperator = LessThanOp } case 489: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2576 +//line sql.y:2575 { yyVAL.comparisonExprOperator = GreaterThanOp } case 490: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2580 +//line sql.y:2579 { yyVAL.comparisonExprOperator = LessEqualOp } case 491: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2584 +//line sql.y:2583 { yyVAL.comparisonExprOperator = GreaterEqualOp } case 492: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2588 +//line sql.y:2587 { yyVAL.comparisonExprOperator = NotEqualOp } case 493: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2592 +//line sql.y:2591 { yyVAL.comparisonExprOperator = NullSafeEqualOp } case 494: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2597 +//line sql.y:2596 { yyVAL.expr = nil } case 495: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2601 +//line sql.y:2600 { yyVAL.expr = yyDollar[2].expr } case 496: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2607 +//line sql.y:2606 { yyVAL.colTuple = yyDollar[1].valTuple } case 497: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2611 +//line sql.y:2610 { yyVAL.colTuple = yyDollar[1].subquery } case 498: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2615 +//line sql.y:2614 { yyVAL.colTuple = ListArg(yyDollar[1].bytes) } case 499: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2621 +//line sql.y:2620 { yyVAL.subquery = &Subquery{yyDollar[2].selStmt} } case 500: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2627 +//line sql.y:2626 { yyVAL.exprs = Exprs{yyDollar[1].expr} } case 501: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2631 +//line sql.y:2630 { yyVAL.exprs = append(yyDollar[1].exprs, yyDollar[3].expr) } case 502: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2637 +//line sql.y:2636 { yyVAL.expr = yyDollar[1].expr } case 503: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2641 +//line sql.y:2640 { yyVAL.expr = yyDollar[1].boolVal } case 504: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2645 +//line sql.y:2644 { yyVAL.expr = yyDollar[1].colName } case 505: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2649 +//line sql.y:2648 { yyVAL.expr = yyDollar[1].expr } case 506: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2653 +//line sql.y:2652 { yyVAL.expr = yyDollar[1].subquery } case 507: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2657 +//line sql.y:2656 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitAndOp, Right: yyDollar[3].expr} } case 508: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2661 +//line sql.y:2660 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitOrOp, Right: yyDollar[3].expr} } case 509: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2665 +//line sql.y:2664 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitXorOp, Right: yyDollar[3].expr} } case 510: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2669 +//line sql.y:2668 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: PlusOp, Right: yyDollar[3].expr} } case 511: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2673 +//line sql.y:2672 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: MinusOp, Right: yyDollar[3].expr} } case 512: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2677 +//line sql.y:2676 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: MultOp, Right: yyDollar[3].expr} } case 513: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2681 +//line sql.y:2680 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: DivOp, Right: yyDollar[3].expr} } case 514: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2685 +//line sql.y:2684 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: IntDivOp, Right: yyDollar[3].expr} } case 515: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2689 +//line sql.y:2688 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ModOp, Right: yyDollar[3].expr} } case 516: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2693 +//line sql.y:2692 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ModOp, Right: yyDollar[3].expr} } case 517: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2697 +//line sql.y:2696 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ShiftLeftOp, Right: yyDollar[3].expr} } case 518: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2701 +//line sql.y:2700 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ShiftRightOp, Right: yyDollar[3].expr} } case 519: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2705 +//line sql.y:2704 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].colName, Operator: JSONExtractOp, Right: yyDollar[3].expr} } case 520: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2709 +//line sql.y:2708 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].colName, Operator: JSONUnquoteExtractOp, Right: yyDollar[3].expr} } case 521: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2713 +//line sql.y:2712 { yyVAL.expr = &CollateExpr{Expr: yyDollar[1].expr, Charset: yyDollar[3].str} } case 522: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2717 +//line sql.y:2716 { yyVAL.expr = &UnaryExpr{Operator: BinaryOp, Expr: yyDollar[2].expr} } case 523: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2721 +//line sql.y:2720 { yyVAL.expr = &UnaryExpr{Operator: UBinaryOp, Expr: yyDollar[2].expr} } case 524: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2725 +//line sql.y:2724 { yyVAL.expr = &UnaryExpr{Operator: Utf8Op, Expr: yyDollar[2].expr} } case 525: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2729 +//line sql.y:2728 { yyVAL.expr = &UnaryExpr{Operator: Utf8mb4Op, Expr: yyDollar[2].expr} } case 526: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2733 +//line sql.y:2732 { yyVAL.expr = &UnaryExpr{Operator: Latin1Op, Expr: yyDollar[2].expr} } case 527: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2737 +//line sql.y:2736 { if num, ok := yyDollar[2].expr.(*Literal); ok && num.Type == IntVal { yyVAL.expr = num @@ -6968,7 +6967,7 @@ yydefault: } case 528: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2745 +//line sql.y:2744 { if num, ok := yyDollar[2].expr.(*Literal); ok && num.Type == IntVal { // Handle double negative @@ -6984,19 +6983,19 @@ yydefault: } case 529: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2759 +//line sql.y:2758 { yyVAL.expr = &UnaryExpr{Operator: TildaOp, Expr: yyDollar[2].expr} } case 530: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2763 +//line sql.y:2762 { yyVAL.expr = &UnaryExpr{Operator: BangOp, Expr: yyDollar[2].expr} } case 531: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2767 +//line sql.y:2766 { // This rule prevents the usage of INTERVAL // as a function. If support is needed for that, @@ -7006,325 +7005,325 @@ yydefault: } case 536: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2785 +//line sql.y:2784 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Exprs: yyDollar[3].selectExprs} } case 537: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2789 +//line sql.y:2788 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Distinct: true, Exprs: yyDollar[4].selectExprs} } case 538: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2793 +//line sql.y:2792 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Distinct: true, Exprs: yyDollar[4].selectExprs} } case 539: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2797 +//line sql.y:2796 { yyVAL.expr = &FuncExpr{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].colIdent, Exprs: yyDollar[5].selectExprs} } case 540: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2807 +//line sql.y:2806 { yyVAL.expr = &FuncExpr{Name: NewColIdent("left"), Exprs: yyDollar[3].selectExprs} } case 541: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2811 +//line sql.y:2810 { yyVAL.expr = &FuncExpr{Name: NewColIdent("right"), Exprs: yyDollar[3].selectExprs} } case 542: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2815 +//line sql.y:2814 { yyVAL.expr = &ConvertExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].convertType} } case 543: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2819 +//line sql.y:2818 { yyVAL.expr = &ConvertExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].convertType} } case 544: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2823 +//line sql.y:2822 { yyVAL.expr = &ConvertUsingExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].str} } case 545: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2827 +//line sql.y:2826 { yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: yyDollar[7].expr} } case 546: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2831 +//line sql.y:2830 { yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: yyDollar[7].expr} } case 547: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2835 +//line sql.y:2834 { yyVAL.expr = &SubstrExpr{StrVal: NewStrLiteral(yyDollar[3].bytes), From: yyDollar[5].expr, To: yyDollar[7].expr} } case 548: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2839 +//line sql.y:2838 { yyVAL.expr = &SubstrExpr{StrVal: NewStrLiteral(yyDollar[3].bytes), From: yyDollar[5].expr, To: yyDollar[7].expr} } case 549: yyDollar = yyS[yypt-9 : yypt+1] -//line sql.y:2843 +//line sql.y:2842 { yyVAL.expr = &MatchExpr{Columns: yyDollar[3].selectExprs, Expr: yyDollar[7].expr, Option: yyDollar[8].matchExprOption} } case 550: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2847 +//line sql.y:2846 { yyVAL.expr = &GroupConcatExpr{Distinct: yyDollar[3].boolean, Exprs: yyDollar[4].selectExprs, OrderBy: yyDollar[5].orderBy, Separator: yyDollar[6].str, Limit: yyDollar[7].limit} } case 551: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2851 +//line sql.y:2850 { yyVAL.expr = &CaseExpr{Expr: yyDollar[2].expr, Whens: yyDollar[3].whens, Else: yyDollar[4].expr} } case 552: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2855 +//line sql.y:2854 { yyVAL.expr = &ValuesFuncExpr{Name: yyDollar[3].colName} } case 553: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2865 +//line sql.y:2864 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_timestamp")} } case 554: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2869 +//line sql.y:2868 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_timestamp")} } case 555: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2873 +//line sql.y:2872 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_time")} } case 556: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2878 +//line sql.y:2877 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_date")} } case 557: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2883 +//line sql.y:2882 { yyVAL.expr = &FuncExpr{Name: NewColIdent("localtime")} } case 558: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2888 +//line sql.y:2887 { yyVAL.expr = &FuncExpr{Name: NewColIdent("localtimestamp")} } case 559: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2894 +//line sql.y:2893 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_date")} } case 560: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2899 +//line sql.y:2898 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_time")} } case 561: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2904 +//line sql.y:2903 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("current_timestamp"), Fsp: yyDollar[2].expr} } case 562: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2908 +//line sql.y:2907 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("utc_timestamp"), Fsp: yyDollar[2].expr} } case 563: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2912 +//line sql.y:2911 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("utc_time"), Fsp: yyDollar[2].expr} } case 564: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2917 +//line sql.y:2916 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("localtime"), Fsp: yyDollar[2].expr} } case 565: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2922 +//line sql.y:2921 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("localtimestamp"), Fsp: yyDollar[2].expr} } case 566: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2927 +//line sql.y:2926 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("current_time"), Fsp: yyDollar[2].expr} } case 567: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2931 +//line sql.y:2930 { yyVAL.expr = &TimestampFuncExpr{Name: string("timestampadd"), Unit: yyDollar[3].colIdent.String(), Expr1: yyDollar[5].expr, Expr2: yyDollar[7].expr} } case 568: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2935 +//line sql.y:2934 { yyVAL.expr = &TimestampFuncExpr{Name: string("timestampdiff"), Unit: yyDollar[3].colIdent.String(), Expr1: yyDollar[5].expr, Expr2: yyDollar[7].expr} } case 571: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2945 +//line sql.y:2944 { yyVAL.expr = yyDollar[2].expr } case 572: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2955 +//line sql.y:2954 { yyVAL.expr = &FuncExpr{Name: NewColIdent("if"), Exprs: yyDollar[3].selectExprs} } case 573: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2959 +//line sql.y:2958 { yyVAL.expr = &FuncExpr{Name: NewColIdent("database"), Exprs: yyDollar[3].selectExprs} } case 574: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2963 +//line sql.y:2962 { yyVAL.expr = &FuncExpr{Name: NewColIdent("schema"), Exprs: yyDollar[3].selectExprs} } case 575: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2967 +//line sql.y:2966 { yyVAL.expr = &FuncExpr{Name: NewColIdent("mod"), Exprs: yyDollar[3].selectExprs} } case 576: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2971 +//line sql.y:2970 { yyVAL.expr = &FuncExpr{Name: NewColIdent("replace"), Exprs: yyDollar[3].selectExprs} } case 577: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2975 +//line sql.y:2974 { yyVAL.expr = &FuncExpr{Name: NewColIdent("substr"), Exprs: yyDollar[3].selectExprs} } case 578: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2979 +//line sql.y:2978 { yyVAL.expr = &FuncExpr{Name: NewColIdent("substr"), Exprs: yyDollar[3].selectExprs} } case 579: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2985 +//line sql.y:2984 { yyVAL.matchExprOption = NoOption } case 580: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2989 +//line sql.y:2988 { yyVAL.matchExprOption = BooleanModeOpt } case 581: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2993 +//line sql.y:2992 { yyVAL.matchExprOption = NaturalLanguageModeOpt } case 582: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:2997 +//line sql.y:2996 { yyVAL.matchExprOption = NaturalLanguageModeWithQueryExpansionOpt } case 583: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3001 +//line sql.y:3000 { yyVAL.matchExprOption = QueryExpansionOpt } case 584: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3007 +//line sql.y:3006 { yyVAL.str = string(yyDollar[1].colIdent.String()) } case 585: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3011 +//line sql.y:3010 { yyVAL.str = string(yyDollar[1].bytes) } case 586: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3017 +//line sql.y:3016 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].literal} } case 587: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3021 +//line sql.y:3020 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].literal, Charset: yyDollar[3].str, Operator: CharacterSetOp} } case 588: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3025 +//line sql.y:3024 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].literal, Charset: string(yyDollar[3].colIdent.String())} } case 589: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3029 +//line sql.y:3028 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } case 590: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3033 +//line sql.y:3032 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].literal} } case 591: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3037 +//line sql.y:3036 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} yyVAL.convertType.Length = yyDollar[2].LengthScaleOption.Length @@ -7332,169 +7331,169 @@ yydefault: } case 592: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3043 +//line sql.y:3042 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } case 593: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3047 +//line sql.y:3046 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].literal} } case 594: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3051 +//line sql.y:3050 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } case 595: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3055 +//line sql.y:3054 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } case 596: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3059 +//line sql.y:3058 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].literal} } case 597: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3063 +//line sql.y:3062 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } case 598: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3067 +//line sql.y:3066 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } case 599: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3072 +//line sql.y:3071 { yyVAL.expr = nil } case 600: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3076 +//line sql.y:3075 { yyVAL.expr = yyDollar[1].expr } case 601: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3081 +//line sql.y:3080 { yyVAL.str = string("") } case 602: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3085 +//line sql.y:3084 { yyVAL.str = " separator '" + string(yyDollar[2].bytes) + "'" } case 603: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3091 +//line sql.y:3090 { yyVAL.whens = []*When{yyDollar[1].when} } case 604: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3095 +//line sql.y:3094 { yyVAL.whens = append(yyDollar[1].whens, yyDollar[2].when) } case 605: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3101 +//line sql.y:3100 { yyVAL.when = &When{Cond: yyDollar[2].expr, Val: yyDollar[4].expr} } case 606: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3106 +//line sql.y:3105 { yyVAL.expr = nil } case 607: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3110 +//line sql.y:3109 { yyVAL.expr = yyDollar[2].expr } case 608: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3116 +//line sql.y:3115 { yyVAL.colName = &ColName{Name: yyDollar[1].colIdent} } case 609: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3120 +//line sql.y:3119 { yyVAL.colName = &ColName{Qualifier: TableName{Name: yyDollar[1].tableIdent}, Name: yyDollar[3].colIdent} } case 610: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3124 +//line sql.y:3123 { yyVAL.colName = &ColName{Qualifier: TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent}, Name: yyDollar[5].colIdent} } case 611: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3130 +//line sql.y:3129 { yyVAL.expr = NewStrLiteral(yyDollar[1].bytes) } case 612: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3134 +//line sql.y:3133 { yyVAL.expr = NewHexLiteral(yyDollar[1].bytes) } case 613: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3138 +//line sql.y:3137 { yyVAL.expr = NewBitLiteral(yyDollar[1].bytes) } case 614: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3142 +//line sql.y:3141 { yyVAL.expr = NewIntLiteral(yyDollar[1].bytes) } case 615: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3146 +//line sql.y:3145 { yyVAL.expr = NewFloatLiteral(yyDollar[1].bytes) } case 616: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3150 +//line sql.y:3149 { yyVAL.expr = NewHexNumLiteral(yyDollar[1].bytes) } case 617: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3154 +//line sql.y:3153 { yyVAL.expr = NewArgument(yyDollar[1].bytes) } case 618: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3158 +//line sql.y:3157 { yyVAL.expr = &NullVal{} } case 619: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3164 +//line sql.y:3163 { // TODO(sougou): Deprecate this construct. if yyDollar[1].colIdent.Lowered() != "value" { @@ -7505,235 +7504,235 @@ yydefault: } case 620: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3173 +//line sql.y:3172 { yyVAL.expr = NewIntLiteral(yyDollar[1].bytes) } case 621: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3177 +//line sql.y:3176 { yyVAL.expr = NewArgument(yyDollar[1].bytes) } case 622: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3182 +//line sql.y:3181 { yyVAL.exprs = nil } case 623: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3186 +//line sql.y:3185 { yyVAL.exprs = yyDollar[3].exprs } case 624: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3191 +//line sql.y:3190 { yyVAL.expr = nil } case 625: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3195 +//line sql.y:3194 { yyVAL.expr = yyDollar[2].expr } case 626: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3200 +//line sql.y:3199 { yyVAL.orderBy = nil } case 627: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3204 +//line sql.y:3203 { yyVAL.orderBy = yyDollar[3].orderBy } case 628: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3210 +//line sql.y:3209 { yyVAL.orderBy = OrderBy{yyDollar[1].order} } case 629: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3214 +//line sql.y:3213 { yyVAL.orderBy = append(yyDollar[1].orderBy, yyDollar[3].order) } case 630: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3220 +//line sql.y:3219 { yyVAL.order = &Order{Expr: yyDollar[1].expr, Direction: yyDollar[2].orderDirection} } case 631: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3225 +//line sql.y:3224 { yyVAL.orderDirection = AscOrder } case 632: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3229 +//line sql.y:3228 { yyVAL.orderDirection = AscOrder } case 633: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3233 +//line sql.y:3232 { yyVAL.orderDirection = DescOrder } case 634: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3238 +//line sql.y:3237 { yyVAL.limit = nil } case 635: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3242 +//line sql.y:3241 { yyVAL.limit = &Limit{Rowcount: yyDollar[2].expr} } case 636: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3246 +//line sql.y:3245 { yyVAL.limit = &Limit{Offset: yyDollar[2].expr, Rowcount: yyDollar[4].expr} } case 637: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3250 +//line sql.y:3249 { yyVAL.limit = &Limit{Offset: yyDollar[4].expr, Rowcount: yyDollar[2].expr} } case 638: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3255 +//line sql.y:3254 { yyVAL.lock = NoLock } case 639: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3259 +//line sql.y:3258 { yyVAL.lock = ForUpdateLock } case 640: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3263 +//line sql.y:3262 { yyVAL.lock = ShareModeLock } case 641: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3268 +//line sql.y:3267 { yyVAL.str = "" } case 642: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3272 +//line sql.y:3271 { yyVAL.str = string(yyDollar[4].bytes) } case 643: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3285 +//line sql.y:3284 { yyVAL.ins = &Insert{Rows: yyDollar[2].values} } case 644: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3289 +//line sql.y:3288 { yyVAL.ins = &Insert{Rows: yyDollar[1].selStmt} } case 645: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3293 +//line sql.y:3292 { yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[5].values} } case 646: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3297 +//line sql.y:3296 { yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[4].selStmt} } case 647: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3303 +//line sql.y:3302 { yyVAL.columns = Columns{yyDollar[1].colIdent} } case 648: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3307 +//line sql.y:3306 { yyVAL.columns = Columns{yyDollar[3].colIdent} } case 649: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3311 +//line sql.y:3310 { yyVAL.columns = append(yyVAL.columns, yyDollar[3].colIdent) } case 650: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3315 +//line sql.y:3314 { yyVAL.columns = append(yyVAL.columns, yyDollar[5].colIdent) } case 651: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3320 +//line sql.y:3319 { yyVAL.updateExprs = nil } case 652: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3324 +//line sql.y:3323 { yyVAL.updateExprs = yyDollar[5].updateExprs } case 653: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3330 +//line sql.y:3329 { yyVAL.values = Values{yyDollar[1].valTuple} } case 654: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3334 +//line sql.y:3333 { yyVAL.values = append(yyDollar[1].values, yyDollar[3].valTuple) } case 655: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3340 +//line sql.y:3339 { yyVAL.valTuple = yyDollar[1].valTuple } case 656: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3344 +//line sql.y:3343 { yyVAL.valTuple = ValTuple{} } case 657: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3350 +//line sql.y:3349 { yyVAL.valTuple = ValTuple(yyDollar[2].exprs) } case 658: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3356 +//line sql.y:3355 { if len(yyDollar[1].valTuple) == 1 { yyVAL.expr = yyDollar[1].valTuple[0] @@ -7743,194 +7742,194 @@ yydefault: } case 659: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3366 +//line sql.y:3365 { yyVAL.updateExprs = UpdateExprs{yyDollar[1].updateExpr} } case 660: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3370 +//line sql.y:3369 { yyVAL.updateExprs = append(yyDollar[1].updateExprs, yyDollar[3].updateExpr) } case 661: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3376 +//line sql.y:3375 { yyVAL.updateExpr = &UpdateExpr{Name: yyDollar[1].colName, Expr: yyDollar[3].expr} } case 662: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3382 +//line sql.y:3381 { yyVAL.setExprs = SetExprs{yyDollar[1].setExpr} } case 663: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3386 +//line sql.y:3385 { yyVAL.setExprs = append(yyDollar[1].setExprs, yyDollar[3].setExpr) } case 664: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3392 +//line sql.y:3391 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Scope: ImplicitScope, Expr: NewStrLiteral([]byte("on"))} } case 665: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3396 +//line sql.y:3395 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Scope: ImplicitScope, Expr: NewStrLiteral([]byte("off"))} } case 666: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3400 +//line sql.y:3399 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Scope: ImplicitScope, Expr: yyDollar[3].expr} } case 667: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3404 +//line sql.y:3403 { yyVAL.setExpr = &SetExpr{Name: NewColIdent(string(yyDollar[1].bytes)), Scope: ImplicitScope, Expr: yyDollar[2].expr} } case 668: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3408 +//line sql.y:3407 { yyDollar[2].setExpr.Scope = yyDollar[1].scope yyVAL.setExpr = yyDollar[2].setExpr } case 670: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3416 +//line sql.y:3415 { yyVAL.bytes = []byte("charset") } case 672: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3423 +//line sql.y:3422 { yyVAL.expr = NewStrLiteral([]byte(yyDollar[1].colIdent.String())) } case 673: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3427 +//line sql.y:3426 { yyVAL.expr = NewStrLiteral(yyDollar[1].bytes) } case 674: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3431 +//line sql.y:3430 { yyVAL.expr = &Default{} } case 677: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3440 +//line sql.y:3439 { yyVAL.boolean = false } case 678: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3442 +//line sql.y:3441 { yyVAL.boolean = true } case 679: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3445 +//line sql.y:3444 { yyVAL.boolean = false } case 680: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3447 +//line sql.y:3446 { yyVAL.boolean = true } case 681: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3450 +//line sql.y:3449 { yyVAL.ignore = false } case 682: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3452 +//line sql.y:3451 { yyVAL.ignore = true } case 683: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3456 +//line sql.y:3455 { yyVAL.empty = struct{}{} } case 684: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3458 +//line sql.y:3457 { yyVAL.empty = struct{}{} } case 685: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3460 +//line sql.y:3459 { yyVAL.empty = struct{}{} } case 686: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3462 +//line sql.y:3461 { yyVAL.empty = struct{}{} } case 687: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3464 +//line sql.y:3463 { yyVAL.empty = struct{}{} } case 688: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3466 +//line sql.y:3465 { yyVAL.empty = struct{}{} } case 689: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3468 +//line sql.y:3467 { yyVAL.empty = struct{}{} } case 690: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3470 +//line sql.y:3469 { yyVAL.empty = struct{}{} } case 691: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3472 +//line sql.y:3471 { yyVAL.empty = struct{}{} } case 692: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3474 +//line sql.y:3473 { yyVAL.empty = struct{}{} } case 693: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3478 +//line sql.y:3477 { yyVAL.OnlineDDLHint = &OnlineDDLHint{} } case 694: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3482 +//line sql.y:3481 { yyVAL.OnlineDDLHint = &OnlineDDLHint{ Strategy: DDLStrategy(yyDollar[2].bytes), @@ -7938,7 +7937,7 @@ yydefault: } case 695: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3488 +//line sql.y:3487 { yyVAL.OnlineDDLHint = &OnlineDDLHint{ Strategy: DDLStrategy(yyDollar[2].bytes), @@ -7947,103 +7946,103 @@ yydefault: } case 696: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3496 +//line sql.y:3495 { yyVAL.empty = struct{}{} } case 697: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3498 +//line sql.y:3497 { yyVAL.empty = struct{}{} } case 698: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3500 +//line sql.y:3499 { yyVAL.empty = struct{}{} } case 699: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3504 +//line sql.y:3503 { yyVAL.empty = struct{}{} } case 700: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3506 +//line sql.y:3505 { yyVAL.empty = struct{}{} } case 701: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3509 +//line sql.y:3508 { yyVAL.empty = struct{}{} } case 702: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3511 +//line sql.y:3510 { yyVAL.empty = struct{}{} } case 703: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3513 +//line sql.y:3512 { yyVAL.empty = struct{}{} } case 704: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3516 +//line sql.y:3515 { yyVAL.colIdent = ColIdent{} } case 705: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3518 +//line sql.y:3517 { yyVAL.colIdent = yyDollar[2].colIdent } case 706: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3522 +//line sql.y:3521 { yyVAL.colIdent = yyDollar[1].colIdent } case 707: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3526 +//line sql.y:3525 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } case 709: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3533 +//line sql.y:3532 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } case 710: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3539 +//line sql.y:3538 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].colIdent.String())) } case 711: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3543 +//line sql.y:3542 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } case 713: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3550 +//line sql.y:3549 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } case 1016: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3878 +//line sql.y:3877 { if incNesting(yylex) { yylex.Error("max nesting level reached") @@ -8052,31 +8051,31 @@ yydefault: } case 1017: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3887 +//line sql.y:3886 { decNesting(yylex) } case 1018: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3892 +//line sql.y:3891 { skipToEnd(yylex) } case 1019: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3897 +//line sql.y:3896 { skipToEnd(yylex) } case 1020: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3901 +//line sql.y:3900 { skipToEnd(yylex) } case 1021: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3905 +//line sql.y:3904 { skipToEnd(yylex) } diff --git a/go/vt/sqlparser/sql.y b/go/vt/sqlparser/sql.y index 07376a85669..4cea3700085 100644 --- a/go/vt/sqlparser/sql.y +++ b/go/vt/sqlparser/sql.y @@ -1619,131 +1619,130 @@ analyze_statement: show_statement: SHOW BINARY id_or_var ddl_skip_to_end /* SHOW BINARY LOGS */ { - $$ = &Show{Type: string($2) + " " + string($3.String()), Scope: ImplicitScope} + $$ = &Show{&ShowLegacy{Type: string($2) + " " + string($3.String()), Scope: ImplicitScope}} } /* SHOW CHARACTER SET and SHOW CHARSET are equivalent */ | SHOW CHARACTER SET like_or_where_opt { showTablesOpt := &ShowTablesOpt{Filter: $4} - $$ = &Show{Type: CharsetStr, ShowTablesOpt: showTablesOpt, Scope: ImplicitScope} + $$ = &Show{&ShowLegacy{Type: CharsetStr, ShowTablesOpt: showTablesOpt, Scope: ImplicitScope}} } | SHOW CHARSET like_or_where_opt { showTablesOpt := &ShowTablesOpt{Filter: $3} - $$ = &Show{Type: string($2), ShowTablesOpt: showTablesOpt, Scope: ImplicitScope} + $$ = &Show{&ShowLegacy{Type: string($2), ShowTablesOpt: showTablesOpt, Scope: ImplicitScope}} } | SHOW CREATE DATABASE ddl_skip_to_end { - $$ = &Show{Type: string($2) + " " + string($3), Scope: ImplicitScope} + $$ = &Show{&ShowLegacy{Type: string($2) + " " + string($3), Scope: ImplicitScope}} } /* Rule to handle SHOW CREATE EVENT, SHOW CREATE FUNCTION, etc. */ | SHOW CREATE id_or_var ddl_skip_to_end { - $$ = &Show{Type: string($2) + " " + string($3.String()), Scope: ImplicitScope} + $$ = &Show{&ShowLegacy{Type: string($2) + " " + string($3.String()), Scope: ImplicitScope}} } | SHOW CREATE PROCEDURE ddl_skip_to_end { - $$ = &Show{Type: string($2) + " " + string($3), Scope: ImplicitScope} + $$ = &Show{&ShowLegacy{Type: string($2) + " " + string($3), Scope: ImplicitScope}} } | SHOW CREATE TABLE table_name { - $$ = &Show{Type: string($2) + " " + string($3), Table: $4, Scope: ImplicitScope} + $$ = &Show{&ShowLegacy{Type: string($2) + " " + string($3), Table: $4, Scope: ImplicitScope}} } | SHOW CREATE TRIGGER ddl_skip_to_end { - $$ = &Show{Type: string($2) + " " + string($3), Scope: ImplicitScope} + $$ = &Show{&ShowLegacy{Type: string($2) + " " + string($3), Scope: ImplicitScope}} } | SHOW CREATE VIEW ddl_skip_to_end { - $$ = &Show{Type: string($2) + " " + string($3), Scope: ImplicitScope} + $$ = &Show{&ShowLegacy{Type: string($2) + " " + string($3), Scope: ImplicitScope}} } | SHOW DATABASES like_opt { showTablesOpt := &ShowTablesOpt{Filter: $3} - $$ = &Show{Type: string($2), ShowTablesOpt: showTablesOpt, Scope: ImplicitScope} + $$ = &Show{&ShowLegacy{Type: string($2), ShowTablesOpt: showTablesOpt, Scope: ImplicitScope}} } | SHOW KEYSPACES like_opt { showTablesOpt := &ShowTablesOpt{Filter: $3} - $$ = &Show{Type: string($2), ShowTablesOpt: showTablesOpt, Scope: ImplicitScope} + $$ = &Show{&ShowLegacy{Type: string($2), ShowTablesOpt: showTablesOpt, Scope: ImplicitScope}} } | SHOW VITESS_KEYSPACES like_opt { showTablesOpt := &ShowTablesOpt{Filter: $3} - $$ = &Show{Type: string($2), ShowTablesOpt: showTablesOpt, Scope: ImplicitScope} + $$ = &Show{&ShowLegacy{Type: string($2), ShowTablesOpt: showTablesOpt, Scope: ImplicitScope}} } | SHOW ENGINES { - $$ = &Show{Type: string($2), Scope: ImplicitScope} + $$ = &Show{&ShowLegacy{Type: string($2), Scope: ImplicitScope}} } | SHOW extended_opt index_symbols from_or_in table_name from_database_opt like_or_where_opt { showTablesOpt := &ShowTablesOpt{DbName:$6, Filter:$7} - $$ = &Show{Extended: string($2), Type: string($3), ShowTablesOpt: showTablesOpt, OnTable: $5, Scope: ImplicitScope} + $$ = &Show{&ShowLegacy{Extended: string($2), Type: string($3), ShowTablesOpt: showTablesOpt, OnTable: $5, Scope: ImplicitScope}} } | SHOW PLUGINS { - $$ = &Show{Type: string($2), Scope: ImplicitScope} + $$ = &Show{&ShowLegacy{Type: string($2), Scope: ImplicitScope}} } | SHOW PROCEDURE ddl_skip_to_end { - $$ = &Show{Type: string($2), Scope: ImplicitScope} + $$ = &Show{&ShowLegacy{Type: string($2), Scope: ImplicitScope}} } | SHOW show_session_or_global STATUS ddl_skip_to_end { - $$ = &Show{Scope: $2, Type: string($3)} + $$ = &Show{&ShowLegacy{Scope: $2, Type: string($3)}} } | SHOW TABLE STATUS from_database_opt like_or_where_opt { - $$ = &ShowTableStatus{DatabaseName:$4, Filter:$5} + $$ = &Show{&ShowTableStatus{DatabaseName:$4, Filter:$5}} } -| SHOW full_opt columns_or_fields FROM table_name from_database_opt like_or_where_opt +| SHOW full_opt columns_or_fields from_or_in table_name from_database_opt like_or_where_opt { - showTablesOpt := &ShowTablesOpt{Full:$2, DbName:$6, Filter:$7} - $$ = &Show{Type: string($3), ShowTablesOpt: showTablesOpt, OnTable: $5, Scope: ImplicitScope} + $$ = &Show{&ShowColumns{Full: $2, Table: $5, DbName: $6, Filter: $7}} } | SHOW full_opt tables_or_processlist from_database_opt like_or_where_opt { // this is ugly, but I couldn't find a better way for now if $3 == "processlist" { - $$ = &Show{Type: $3, Scope: ImplicitScope} + $$ = &Show{&ShowLegacy{Type: $3, Scope: ImplicitScope}} } else { showTablesOpt := &ShowTablesOpt{Full:$2, DbName:$4, Filter:$5} - $$ = &Show{Type: $3, ShowTablesOpt: showTablesOpt, Scope: ImplicitScope} + $$ = &Show{&ShowLegacy{Type: $3, ShowTablesOpt: showTablesOpt, Scope: ImplicitScope}} } } | SHOW show_session_or_global VARIABLES ddl_skip_to_end { - $$ = &Show{Scope: $2, Type: string($3)} + $$ = &Show{&ShowLegacy{Scope: $2, Type: string($3)}} } | SHOW COLLATION { - $$ = &Show{Type: string($2), Scope: ImplicitScope} + $$ = &Show{&ShowLegacy{Type: string($2), Scope: ImplicitScope}} } | SHOW COLLATION WHERE expression { - $$ = &Show{Type: string($2), ShowCollationFilterOpt: $4, Scope: ImplicitScope} + $$ = &Show{&ShowLegacy{Type: string($2), ShowCollationFilterOpt: $4, Scope: ImplicitScope}} } | SHOW VITESS_METADATA VARIABLES like_opt { showTablesOpt := &ShowTablesOpt{Filter: $4} - $$ = &Show{Scope: VitessMetadataScope, Type: string($3), ShowTablesOpt: showTablesOpt} + $$ = &Show{&ShowLegacy{Scope: VitessMetadataScope, Type: string($3), ShowTablesOpt: showTablesOpt}} } | SHOW VSCHEMA TABLES { - $$ = &Show{Type: string($2) + " " + string($3), Scope: ImplicitScope} + $$ = &Show{&ShowLegacy{Type: string($2) + " " + string($3), Scope: ImplicitScope}} } | SHOW VSCHEMA VINDEXES { - $$ = &Show{Type: string($2) + " " + string($3), Scope: ImplicitScope} + $$ = &Show{&ShowLegacy{Type: string($2) + " " + string($3), Scope: ImplicitScope}} } | SHOW VSCHEMA VINDEXES ON table_name { - $$ = &Show{Type: string($2) + " " + string($3), OnTable: $5, Scope: ImplicitScope} + $$ = &Show{&ShowLegacy{Type: string($2) + " " + string($3), OnTable: $5, Scope: ImplicitScope}} } | SHOW WARNINGS { - $$ = &Show{Type: string($2), Scope: ImplicitScope} + $$ = &Show{&ShowLegacy{Type: string($2), Scope: ImplicitScope}} } /* vitess_topo supports SHOW VITESS_SHARDS / SHOW VITESS_TABLETS */ | SHOW vitess_topo like_or_where_opt @@ -1751,7 +1750,7 @@ show_statement: // This should probably be a different type (ShowVitessTopoOpt), but // just getting the thing working for now showTablesOpt := &ShowTablesOpt{Filter: $3} - $$ = &Show{Type: $2, ShowTablesOpt: showTablesOpt} + $$ = &Show{&ShowLegacy{Type: $2, ShowTablesOpt: showTablesOpt}} } /* * Catch-all for show statements without vitess keywords: @@ -1762,7 +1761,7 @@ show_statement: */ | SHOW id_or_var ddl_skip_to_end { - $$ = &Show{Type: string($2.String()), Scope: ImplicitScope} + $$ = &Show{&ShowLegacy{Type: string($2.String()), Scope: ImplicitScope}} } tables_or_processlist: diff --git a/go/vt/vtgate/executor.go b/go/vt/vtgate/executor.go index 8627377ec76..72fe0fdebfa 100644 --- a/go/vt/vtgate/executor.go +++ b/go/vt/vtgate/executor.go @@ -555,11 +555,15 @@ func (e *Executor) handleShow(ctx context.Context, safeSession *SafeSession, sql if err != nil { return nil, err } - show, ok := stmt.(*sqlparser.Show) + showOuter, ok := stmt.(*sqlparser.Show) if !ok { // This code is unreachable. return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "unrecognized SHOW statement: %v", sql) } + show, ok := showOuter.Internal.(*sqlparser.ShowLegacy) + if !ok { + return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "BUG: This should only be SHOW Legacy statement type: %v", sql) + } ignoreMaxMemoryRows := sqlparser.IgnoreMaxMaxMemoryRowsDirective(stmt) execStart := time.Now() defer func() { logStats.ExecuteTime = time.Since(execStart) }() @@ -714,7 +718,7 @@ func (e *Executor) handleShow(ctx context.Context, safeSession *SafeSession, sql RowsAffected: uint64(len(rows)), }, nil case sqlparser.KeywordString(sqlparser.VITESS_SHARDS): - showVitessShardsFilters := func(show *sqlparser.Show) ([]func(string) bool, []func(string, *topodatapb.ShardReference) bool) { + showVitessShardsFilters := func(show *sqlparser.ShowLegacy) ([]func(string) bool, []func(string, *topodatapb.ShardReference) bool) { keyspaceFilters := []func(string) bool{} shardFilters := []func(string, *topodatapb.ShardReference) bool{} @@ -943,8 +947,8 @@ func (e *Executor) handleShow(ctx context.Context, safeSession *SafeSession, sql // (tablet, servingState, mtst) -> bool type tabletFilter func(*topodatapb.Tablet, string, int64) bool -func (e *Executor) showTablets(show *sqlparser.Show) (*sqltypes.Result, error) { - getTabletFilters := func(show *sqlparser.Show) []tabletFilter { +func (e *Executor) showTablets(show *sqlparser.ShowLegacy) (*sqltypes.Result, error) { + getTabletFilters := func(show *sqlparser.ShowLegacy) []tabletFilter { filters := []tabletFilter{} if show.ShowTablesOpt == nil || show.ShowTablesOpt.Filter == nil { diff --git a/go/vt/vtgate/executor_test.go b/go/vt/vtgate/executor_test.go index aa0ec565906..bdf0bc4dea1 100644 --- a/go/vt/vtgate/executor_test.go +++ b/go/vt/vtgate/executor_test.go @@ -1867,7 +1867,7 @@ func TestGenerateCharsetRows(t *testing.T) { t.Run(tc.input, func(t *testing.T) { stmt, err := sqlparser.Parse(tc.input) require.NoError(t, err) - match := stmt.(*sqlparser.Show) + match := stmt.(*sqlparser.Show).Internal.(*sqlparser.ShowLegacy) filter := match.ShowTablesOpt.Filter actual, err := generateCharsetRows(filter, charsets) require.NoError(t, err) diff --git a/go/vt/vtgate/planbuilder/builder.go b/go/vt/vtgate/planbuilder/builder.go index 2f9073625a3..c892a9b03a3 100644 --- a/go/vt/vtgate/planbuilder/builder.go +++ b/go/vt/vtgate/planbuilder/builder.go @@ -341,35 +341,14 @@ func createInstructionFor(query string, stmt sqlparser.Statement, vschema Contex return buildPlanForBypassUsingQuery(query, vschema) case *sqlparser.DBDDL: return nil, vterrors.Errorf(vtrpcpb.Code_UNIMPLEMENTED, "unsupported: Database DDL %v", sqlparser.String(stmt)) - case *sqlparser.Show, *sqlparser.SetTransaction: + case *sqlparser.SetTransaction: return nil, ErrPlanNotSupported case *sqlparser.Begin, *sqlparser.Commit, *sqlparser.Rollback, *sqlparser.Savepoint, *sqlparser.SRollback, *sqlparser.Release: // Empty by design. Not executed by a plan return nil, nil - case *sqlparser.ShowTableStatus: - return buildShowTableStatusPlan(stmt, vschema) + case *sqlparser.Show: + return buildShowPlan(stmt, vschema) } return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "BUG: unexpected statement type: %T", stmt) } - -func buildShowTableStatusPlan(stmt *sqlparser.ShowTableStatus, vschema ContextVSchema) (engine.Primitive, error) { - destination, keyspace, _, err := vschema.TargetDestination(stmt.DatabaseName) - if err != nil { - return nil, err - } - if destination == nil { - destination = key.DestinationAnyShard{} - } - - // Remove Database Name from the query. - stmt.DatabaseName = "" - - return &engine.Send{ - Keyspace: keyspace, - TargetDestination: destination, - Query: sqlparser.String(stmt), - IsDML: false, - SingleShardOnly: true, - }, nil -} diff --git a/go/vt/vtgate/planbuilder/show.go b/go/vt/vtgate/planbuilder/show.go new file mode 100644 index 00000000000..ad805894186 --- /dev/null +++ b/go/vt/vtgate/planbuilder/show.go @@ -0,0 +1,88 @@ +/* +Copyright 2020 The Vitess Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package planbuilder + +import ( + "vitess.io/vitess/go/vt/key" + "vitess.io/vitess/go/vt/proto/vtrpc" + "vitess.io/vitess/go/vt/sqlparser" + "vitess.io/vitess/go/vt/vterrors" + "vitess.io/vitess/go/vt/vtgate/engine" +) + +func buildShowPlan(stmt *sqlparser.Show, vschema ContextVSchema) (engine.Primitive, error) { + switch show := stmt.Internal.(type) { + case *sqlparser.ShowColumns: + return buildShowColumnsPlan(show, vschema) + case *sqlparser.ShowTableStatus: + return buildShowTableStatusPlan(show, vschema) + default: + return nil, ErrPlanNotSupported + } +} + +func buildShowColumnsPlan(show *sqlparser.ShowColumns, vschema ContextVSchema) (engine.Primitive, error) { + if show.DbName != "" { + show.Table.Qualifier = sqlparser.NewTableIdent(show.DbName) + } + table, _, _, _, destination, err := vschema.FindTableOrVindex(show.Table) + if err != nil { + return nil, err + } + if table == nil { + return nil, vterrors.Errorf(vtrpc.Code_INVALID_ARGUMENT, "table does not exists: %s", show.Table.Name.String()) + } + if destination == nil { + destination = key.DestinationAnyShard{} + } + + // Remove Database Name from the query. + show.DbName = "" + show.Table.Qualifier = sqlparser.NewTableIdent("") + show.Table.Name = table.Name + + return &engine.Send{ + Keyspace: table.Keyspace, + TargetDestination: destination, + Query: sqlparser.String(show), + IsDML: false, + SingleShardOnly: true, + }, nil + +} + +func buildShowTableStatusPlan(show *sqlparser.ShowTableStatus, vschema ContextVSchema) (engine.Primitive, error) { + destination, keyspace, _, err := vschema.TargetDestination(show.DatabaseName) + if err != nil { + return nil, err + } + if destination == nil { + destination = key.DestinationAnyShard{} + } + + // Remove Database Name from the query. + show.DatabaseName = "" + + return &engine.Send{ + Keyspace: keyspace, + TargetDestination: destination, + Query: sqlparser.String(show), + IsDML: false, + SingleShardOnly: true, + }, nil + +} diff --git a/go/vt/vtgate/planbuilder/testdata/show_cases.txt b/go/vt/vtgate/planbuilder/testdata/show_cases.txt index e740fc40290..06de3723339 100644 --- a/go/vt/vtgate/planbuilder/testdata/show_cases.txt +++ b/go/vt/vtgate/planbuilder/testdata/show_cases.txt @@ -1,5 +1,3 @@ -# Test cases in this file are for SHOW commands. -# # Show table status without database name or conditions. "SHOW table StatUs" { @@ -17,6 +15,7 @@ "SingleShardOnly": true } } + # Show Table status with a keyspace name "SHOW table StatUs from main" { @@ -34,6 +33,7 @@ "SingleShardOnly": true } } + # Show Table status with a keyspace name using IN "SHOW table StatUs In main" { @@ -51,6 +51,7 @@ "SingleShardOnly": true } } + # Show Table status with a keyspace name with a condition "SHOW table StatUs In user WHERE Rows > 70" { @@ -68,6 +69,7 @@ "SingleShardOnly": true } } + # Show Table status with a Like condition "SHOW table StatUs LIKe '%a'" { @@ -85,3 +87,83 @@ "SingleShardOnly": true } } + +# show columns from routed table +"show full fields from `route1`" +{ + "QueryType": "SHOW", + "Original": "show full fields from `route1`", + "Instructions": { + "OperatorType": "Send", + "Keyspace": { + "Name": "user", + "Sharded": true + }, + "TargetDestination": "AnyShard()", + "IsDML": false, + "Query": "show full columns from user", + "SingleShardOnly": true + } +} + +# show columns from user keyspace +"show full columns from user_extra" +{ + "QueryType": "SHOW", + "Original": "show full columns from user_extra", + "Instructions": { + "OperatorType": "Send", + "Keyspace": { + "Name": "user", + "Sharded": true + }, + "TargetDestination": "AnyShard()", + "IsDML": false, + "Query": "show full columns from user_extra", + "SingleShardOnly": true + } +} + +# show columns from main keyspace +"show full columns from unsharded" +{ + "QueryType": "SHOW", + "Original": "show full columns from unsharded", + "Instructions": { + "OperatorType": "Send", + "Keyspace": { + "Name": "main", + "Sharded": false + }, + "TargetDestination": "AnyShard()", + "IsDML": false, + "Query": "show full columns from unsharded", + "SingleShardOnly": true + } +} + +# show columns pass as dbname in from clause supersedes the qualifier +"show full columns from user.unsharded from main" +{ + "QueryType": "SHOW", + "Original": "show full columns from user.unsharded from main", + "Instructions": { + "OperatorType": "Send", + "Keyspace": { + "Name": "main", + "Sharded": false + }, + "TargetDestination": "AnyShard()", + "IsDML": false, + "Query": "show full columns from unsharded", + "SingleShardOnly": true + } +} + +# show columns fails as table does not exists in user keyspace +"show full columns from unsharded from user" +"table unsharded not found" + +# show columns fails as table does not exists in user keyspace +"show full columns from user.unsharded" +"table unsharded not found" diff --git a/go/vt/vttablet/tabletserver/planbuilder/builder.go b/go/vt/vttablet/tabletserver/planbuilder/builder.go index d40b93422d7..f2bdbec76ab 100644 --- a/go/vt/vttablet/tabletserver/planbuilder/builder.go +++ b/go/vt/vttablet/tabletserver/planbuilder/builder.go @@ -127,23 +127,33 @@ func analyzeInsert(ins *sqlparser.Insert, tables map[string]*schema.Table) (plan return plan, nil } -func analyzeShowTables(show *sqlparser.Show, dbName string) { - // rewrite WHERE clause if it exists - // `where Tables_in_Keyspace` => `where Tables_in_DbName` - if show.ShowTablesOpt != nil && show.ShowTablesOpt.Filter != nil { - filter := show.ShowTablesOpt.Filter.Filter - if filter != nil { - sqlparser.Rewrite(filter, func(cursor *sqlparser.Cursor) bool { - switch n := cursor.Node().(type) { - case *sqlparser.ColName: - if n.Qualifier.IsEmpty() && strings.HasPrefix(n.Name.Lowered(), "tables_in_") { - cursor.Replace(sqlparser.NewColName("Tables_in_" + dbName)) - } +func analyzeShow(show *sqlparser.Show, dbName string) (plan *Plan, err error) { + switch showInternal := show.Internal.(type) { + case *sqlparser.ShowLegacy: + if showInternal.Type == sqlparser.KeywordString(sqlparser.TABLES) { + // rewrite WHERE clause if it exists + // `where Tables_in_Keyspace` => `where Tables_in_DbName` + if showInternal.ShowTablesOpt != nil && showInternal.ShowTablesOpt.Filter != nil { + filter := showInternal.ShowTablesOpt.Filter.Filter + if filter != nil { + sqlparser.Rewrite(filter, func(cursor *sqlparser.Cursor) bool { + switch n := cursor.Node().(type) { + case *sqlparser.ColName: + if n.Qualifier.IsEmpty() && strings.HasPrefix(n.Name.Lowered(), "tables_in_") { + cursor.Replace(sqlparser.NewColName("Tables_in_" + dbName)) + } + } + return true + }, nil) } - return true - }, nil) + } + return &Plan{ + PlanID: PlanShowTables, + FullQuery: GenerateFullQuery(show), + }, nil } } + return &Plan{PlanID: PlanOtherRead}, nil } func analyzeSet(set *sqlparser.Set) (plan *Plan) { diff --git a/go/vt/vttablet/tabletserver/planbuilder/permission.go b/go/vt/vttablet/tabletserver/planbuilder/permission.go index b5df376ea75..3bf2789650b 100644 --- a/go/vt/vttablet/tabletserver/planbuilder/permission.go +++ b/go/vt/vttablet/tabletserver/planbuilder/permission.go @@ -47,7 +47,7 @@ func BuildPermissions(stmt sqlparser.Statement) []Permission { case *sqlparser.Delete: permissions = buildTableExprsPermissions(node.TableExprs, tableacl.WRITER, permissions) permissions = buildSubqueryPermissions(node, tableacl.READER, permissions) - case *sqlparser.Set, *sqlparser.Show, *sqlparser.OtherRead, *sqlparser.Explain, *sqlparser.ShowTableStatus: + case *sqlparser.Set, *sqlparser.Show, *sqlparser.OtherRead, *sqlparser.Explain: // no-op case *sqlparser.DDL: for _, t := range node.AffectedTables() { diff --git a/go/vt/vttablet/tabletserver/planbuilder/plan.go b/go/vt/vttablet/tabletserver/planbuilder/plan.go index c033006f32d..4fd0cefaccb 100644 --- a/go/vt/vttablet/tabletserver/planbuilder/plan.go +++ b/go/vt/vttablet/tabletserver/planbuilder/plan.go @@ -183,15 +183,7 @@ func Build(statement sqlparser.Statement, tables map[string]*schema.Table, isRes // We have to use the original query at the time of execution. plan = &Plan{PlanID: PlanDDL} case *sqlparser.Show: - if stmt.Type == sqlparser.KeywordString(sqlparser.TABLES) { - analyzeShowTables(stmt, dbName) - plan = &Plan{ - PlanID: PlanShowTables, - FullQuery: GenerateFullQuery(stmt), - } - } else { - plan, err = &Plan{PlanID: PlanOtherRead}, nil - } + plan, err = analyzeShow(stmt, dbName) case *sqlparser.OtherRead, *sqlparser.Explain: plan, err = &Plan{PlanID: PlanOtherRead}, nil case *sqlparser.OtherAdmin: @@ -202,11 +194,6 @@ func Build(statement sqlparser.Statement, tables map[string]*schema.Table, isRes plan, err = &Plan{PlanID: PlanRelease}, nil case *sqlparser.SRollback: plan, err = &Plan{PlanID: PlanSRollback}, nil - case *sqlparser.ShowTableStatus: - plan = &Plan{ - PlanID: PlanShowTables, - FullQuery: GenerateFullQuery(stmt), - } default: return nil, vterrors.New(vtrpcpb.Code_INVALID_ARGUMENT, "invalid SQL") } @@ -243,7 +230,7 @@ func BuildStreaming(sql string, tables map[string]*schema.Table, isReservedConn return nil, vterrors.New(vtrpcpb.Code_FAILED_PRECONDITION, "select with lock not allowed for streaming") } plan.Table = lookupTable(stmt.From, tables) - case *sqlparser.OtherRead, *sqlparser.Show, *sqlparser.Union, *sqlparser.ShowTableStatus: + case *sqlparser.OtherRead, *sqlparser.Show, *sqlparser.Union: // pass default: return nil, vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "'%v' not allowed for streaming", sqlparser.String(stmt)) diff --git a/go/vt/vttablet/tabletserver/planbuilder/testdata/exec_cases.txt b/go/vt/vttablet/tabletserver/planbuilder/testdata/exec_cases.txt index 9fb831f32ac..44d4eea589e 100644 --- a/go/vt/vttablet/tabletserver/planbuilder/testdata/exec_cases.txt +++ b/go/vt/vttablet/tabletserver/planbuilder/testdata/exec_cases.txt @@ -807,15 +807,13 @@ options:PassthroughDMLs # show table status #1 "show table status like 'key%'" { - "PlanID": "ShowTables", - "TableName":"", - "FullQuery": "show table status like 'key%'" + "PlanID": "OtherRead", + "TableName": "" } # show table status #2 "show table status where Name='apa'" { - "PlanID": "ShowTables", - "TableName":"", - "FullQuery": "show table status where Name = 'apa'" + "PlanID": "OtherRead", + "TableName": "" }