diff --git a/src/parser/bison_parser.cpp b/src/parser/bison_parser.cpp index 9b2a3964..e403ac37 100644 --- a/src/parser/bison_parser.cpp +++ b/src/parser/bison_parser.cpp @@ -64,20 +64,19 @@ #define YYPULL 1 /* Substitute the type names. */ -#define YYSTYPE HSQL_STYPE -#define YYLTYPE HSQL_LTYPE +#define YYSTYPE HSQL_STYPE +#define YYLTYPE HSQL_LTYPE /* Substitute the variable and function names. */ -#define yyparse hsql_parse -#define yylex hsql_lex -#define yyerror hsql_error -#define yydebug hsql_debug -#define yynerrs hsql_nerrs +#define yyparse hsql_parse +#define yylex hsql_lex +#define yyerror hsql_error +#define yydebug hsql_debug +#define yynerrs hsql_nerrs /* First part of user prologue. */ #line 2 "bison_parser.y" - // clang-format on - /** +/** * bison_parser.y * defines bison_parser.h * outputs bison_parser.c @@ -85,26 +84,27 @@ * Grammar File Spec: http://dinosaur.compilertools.net/bison/bison_6.html * */ - /********************************* +/********************************* ** Section 1: C Declarations *********************************/ +// clang-format on #include "bison_parser.h" #include "flex_lexer.h" #include #include - using namespace hsql; +using namespace hsql; - int yyerror(YYLTYPE * llocp, SQLParserResult * result, yyscan_t scanner, const char* msg) { - result->setIsValid(false); - result->setErrorDetails(strdup(msg), llocp->first_line, llocp->first_column); - return 0; - } - // clang-format off +int yyerror(YYLTYPE* llocp, SQLParserResult* result, yyscan_t scanner, const char* msg) { + result->setIsValid(false); + result->setErrorDetails(strdup(msg), llocp->first_line, llocp->first_column); + return 0; +} +// clang-format off -#line 108 "bison_parser.cpp" +#line 109 "bison_parser.cpp" # ifndef YY_CAST # ifdef __cplusplus @@ -788,7 +788,7 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 69 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 872 +#define YYLAST 888 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 196 @@ -797,7 +797,7 @@ union yyalloc /* YYNRULES -- Number of rules. */ #define YYNRULES 335 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 605 +#define YYNSTATES 604 /* YYMAXUTOK -- Last valid token kind. */ #define YYMAXUTOK 433 @@ -864,40 +864,40 @@ static const yytype_uint8 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { - 0, 322, 322, 341, 347, 354, 358, 362, 363, 364, - 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, - 381, 382, 384, 388, 393, 397, 407, 408, 409, 411, - 411, 417, 423, 425, 429, 440, 446, 454, 469, 474, - 475, 481, 487, 498, 499, 504, 515, 528, 540, 547, - 554, 563, 564, 566, 570, 575, 576, 578, 585, 586, - 587, 588, 589, 590, 591, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 607, 608, 610, 611, - 612, 614, 615, 617, 621, 626, 627, 628, 629, 631, - 632, 640, 646, 652, 658, 664, 665, 672, 678, 680, - 690, 697, 708, 715, 723, 724, 731, 738, 742, 747, - 757, 761, 765, 777, 777, 779, 780, 789, 790, 792, - 806, 818, 823, 827, 831, 836, 837, 839, 849, 850, - 852, 854, 855, 857, 859, 860, 862, 867, 869, 870, - 872, 873, 875, 879, 884, 886, 887, 888, 892, 893, - 895, 896, 897, 898, 899, 900, 905, 909, 914, 915, - 917, 921, 926, 934, 934, 934, 934, 934, 936, 937, - 937, 937, 937, 937, 937, 937, 937, 938, 938, 942, - 942, 944, 945, 946, 947, 948, 950, 950, 951, 952, - 953, 954, 955, 956, 957, 958, 959, 961, 962, 964, - 965, 966, 967, 971, 972, 973, 974, 976, 977, 979, - 980, 982, 983, 984, 985, 986, 987, 988, 992, 993, - 997, 998, 1000, 1001, 1006, 1007, 1008, 1012, 1013, 1014, - 1016, 1017, 1018, 1019, 1020, 1022, 1024, 1026, 1027, 1028, - 1029, 1030, 1031, 1033, 1034, 1035, 1036, 1037, 1038, 1040, - 1040, 1042, 1044, 1046, 1048, 1049, 1050, 1051, 1053, 1053, - 1053, 1053, 1053, 1053, 1053, 1055, 1057, 1058, 1060, 1061, - 1063, 1065, 1067, 1078, 1082, 1093, 1125, 1134, 1134, 1141, - 1141, 1143, 1143, 1150, 1154, 1159, 1167, 1173, 1177, 1182, - 1183, 1185, 1185, 1187, 1187, 1189, 1190, 1192, 1192, 1198, - 1199, 1201, 1205, 1210, 1216, 1223, 1224, 1225, 1226, 1228, - 1229, 1230, 1236, 1236, 1238, 1240, 1244, 1249, 1259, 1266, - 1274, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, - 1307, 1309, 1315, 1315, 1318, 1322 + 0, 325, 325, 344, 350, 357, 361, 365, 366, 367, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 384, 385, 387, 391, 396, 400, 410, 411, 412, 414, + 414, 420, 426, 428, 432, 443, 449, 457, 472, 477, + 478, 484, 490, 501, 502, 507, 518, 531, 543, 550, + 557, 566, 567, 569, 573, 578, 579, 581, 588, 589, + 590, 591, 592, 593, 594, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 610, 611, 613, 614, + 615, 617, 618, 620, 624, 629, 630, 631, 632, 634, + 635, 643, 649, 655, 661, 667, 668, 675, 681, 683, + 693, 700, 711, 718, 726, 727, 734, 741, 745, 750, + 760, 764, 768, 780, 780, 782, 783, 792, 793, 795, + 809, 821, 826, 830, 834, 839, 840, 842, 852, 853, + 855, 857, 858, 860, 862, 863, 865, 870, 872, 873, + 875, 876, 878, 882, 887, 889, 890, 891, 895, 896, + 898, 899, 900, 901, 902, 903, 908, 912, 917, 918, + 920, 924, 929, 937, 937, 937, 937, 937, 939, 940, + 940, 940, 940, 940, 940, 940, 940, 941, 941, 945, + 945, 947, 948, 949, 950, 951, 953, 953, 954, 955, + 956, 957, 958, 959, 960, 961, 962, 964, 965, 967, + 968, 969, 970, 974, 975, 976, 977, 979, 980, 982, + 983, 985, 986, 987, 988, 989, 990, 991, 995, 996, + 1000, 1001, 1003, 1004, 1009, 1010, 1011, 1015, 1016, 1017, + 1019, 1020, 1021, 1022, 1023, 1025, 1027, 1029, 1030, 1031, + 1032, 1033, 1034, 1036, 1037, 1038, 1039, 1040, 1041, 1043, + 1043, 1045, 1047, 1049, 1051, 1052, 1053, 1054, 1056, 1056, + 1056, 1056, 1056, 1056, 1056, 1058, 1060, 1061, 1063, 1064, + 1066, 1068, 1070, 1081, 1085, 1096, 1128, 1137, 1137, 1144, + 1144, 1146, 1146, 1153, 1157, 1162, 1170, 1176, 1180, 1185, + 1186, 1188, 1188, 1190, 1190, 1192, 1193, 1195, 1195, 1201, + 1202, 1204, 1208, 1213, 1219, 1226, 1227, 1228, 1229, 1231, + 1232, 1233, 1239, 1239, 1241, 1243, 1247, 1252, 1262, 1269, + 1277, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, + 1295, 1297, 1303, 1303, 1306, 1310 }; #endif @@ -984,7 +984,7 @@ yysymbol_name (yysymbol_kind_t yysymbol) } #endif -#define YYPACT_NINF (-527) +#define YYPACT_NINF (-526) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) @@ -998,67 +998,67 @@ yysymbol_name (yysymbol_kind_t yysymbol) STATE-NUM. */ static const yytype_int16 yypact[] = { - 577, 63, 101, 112, 195, 101, 188, -39, 108, 67, - 101, 142, 23, 211, 31, 213, 72, 72, 72, 238, - 49, -527, 130, -527, 130, -527, -527, -527, -527, -527, - -527, -527, -527, -527, -527, -527, -527, -23, -527, 252, - 84, -527, 88, 215, -527, 177, 177, 177, 101, 309, - 101, 197, -527, 220, -23, 181, -50, 220, 220, 220, - 101, -527, 193, 143, -527, -527, -527, -527, -527, -527, - 582, -527, 246, -527, -527, 243, 69, -527, 150, -527, - 361, 57, 367, 256, 380, 101, 101, 302, -527, 294, - 203, 402, 374, 101, 232, 236, 424, 424, 424, 426, - 101, 101, -527, 240, 213, -527, 244, 430, 425, -527, - -527, -527, -23, 325, 314, -23, 25, -527, -527, -527, - -527, 441, -527, 442, -527, -527, -527, 266, 265, -527, - -527, -527, -527, 509, -527, -527, -527, -527, -527, -527, - 404, -527, 329, -48, 203, 261, -527, 424, 460, 179, - 293, -46, -527, -527, 373, -527, -527, 353, -527, 353, - 353, -527, -527, -527, -527, -527, 465, -527, -527, 261, - 392, -527, -527, 69, -527, -527, 261, 392, 261, 131, - 350, -527, 259, -527, 57, -527, -527, -527, -527, -527, - -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, - -527, 101, 470, 362, 157, 348, -2, 290, 295, 297, - 135, 349, 296, 369, -527, 257, 40, 395, -527, -527, - -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, - -527, -527, -527, -527, 384, -527, -125, 298, -527, 261, - 402, -527, 450, -527, -527, 444, -527, 302, -527, 300, - 107, -527, 396, 304, -527, 37, 25, -23, 310, -527, - -47, 25, 40, 439, 35, 90, -527, 350, -527, -527, - -527, 306, 411, -527, 668, 385, 318, 133, -527, -527, - -527, 362, 9, 19, 451, 259, 261, 261, -59, 106, - 320, 369, 622, 261, 173, 321, -58, 261, 261, 369, - -527, 369, -28, 323, 71, 369, 369, 369, 369, 369, - 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, - 430, 101, -527, 508, 57, 40, -527, 220, 309, -527, - 57, -527, 465, 24, 302, -527, 261, -527, 511, -527, - -527, -527, -527, 261, -527, -527, -527, 350, 261, 261, - -527, 352, 394, -527, -51, -527, 460, 424, -527, -527, - 327, -527, 330, -527, -527, 334, -527, -527, 337, -527, - -527, -527, -527, 338, -527, -527, 45, 339, 460, -527, - 157, -527, 452, 261, -527, -527, 328, 440, 163, 53, - 180, 261, 261, -527, 451, 434, -3, -527, -527, -527, - 420, 544, 660, 369, 351, 257, -527, 433, 354, 660, - 660, 660, 660, 684, 684, 684, 684, 173, 173, 47, - 47, 47, -89, 356, -527, -527, 138, 537, -527, 140, - -527, 362, -527, 381, -527, 355, -527, 38, -527, 473, - -527, -527, -527, -527, 40, 40, -527, 483, 460, -527, - 386, -527, 147, -527, 541, 547, -527, 548, 549, 550, - -527, 428, -527, -527, 453, -527, 45, -527, 460, 148, - -527, 370, -527, 154, -527, 261, 668, 261, 261, -527, - 122, 185, 366, -527, 369, 660, 257, 371, 169, -527, - -527, -527, -527, -527, 372, 461, -527, -527, -527, 486, - 492, 493, 485, 24, 583, -527, -527, -527, 459, -527, - -527, -108, -527, -527, 397, 174, 400, 403, 405, -527, - -527, -527, 176, -527, 484, 452, -33, 409, 40, 160, - -527, 261, -527, 622, 410, 187, -527, -527, 38, 24, - -527, -527, -527, 24, 399, 412, 261, -527, -527, -527, - 589, -527, -527, -527, -527, 477, 392, -527, -527, -527, - -527, 40, -527, -527, -527, -527, 687, 460, -22, 415, - 261, 226, 417, 261, 191, 261, -527, -527, 304, -527, - -527, -527, 418, 22, 21, 40, -527, -527, 40, -527, - 208, 26, 239, -527, -527, 419, 421, -527, -527, 496, - -527, -527, -527, 26, -527 + 598, 72, 146, 157, 180, 146, 123, -42, 38, 54, + 146, 81, 19, 147, 138, 184, 17, 17, 17, 202, + 39, -526, 172, -526, 172, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -31, -526, 258, + 90, -526, 83, 195, -526, 165, 165, 165, 146, 296, + 146, 176, -526, 177, -31, 190, -49, 177, 177, 177, + 146, -526, 210, 152, -526, -526, -526, -526, -526, -526, + 593, -526, 252, -526, -526, 206, 20, -526, 69, -526, + 365, 85, 369, 251, 372, 146, 146, 302, -526, 300, + 200, 401, 363, 146, 219, 225, 420, 420, 420, 436, + 146, 146, -526, 266, 184, -526, 267, 456, 430, -526, + -526, -526, -31, 347, 338, -31, 130, -526, -526, -526, + -526, 471, -526, 472, -526, -526, -526, 286, 284, -526, + -526, -526, -526, 304, -526, -526, -526, -526, -526, -526, + 433, -526, 348, -48, 200, 306, -526, 420, 479, 94, + 314, -53, -526, -526, 391, -526, -526, 373, -526, 373, + 373, -526, -526, -526, -526, -526, 483, -526, -526, 306, + 415, -526, -526, 20, -526, -526, 306, 415, 306, 131, + 370, -526, 329, -526, 85, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, 146, 490, 380, 49, 376, -105, 307, 309, 310, + 166, 375, 316, 379, -526, 218, 110, 413, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, 406, -526, 111, 317, -526, 306, + 401, -526, 467, -526, -526, 459, -526, 302, -526, 319, + 133, -526, 416, 323, -526, 48, 130, -31, 324, -526, + -46, 130, 110, 455, 108, 18, -526, 370, -526, -526, + -526, 330, 419, -526, 684, 392, 331, 140, -526, -526, + -526, 380, 9, 27, 461, 329, 306, 306, 82, -39, + 332, 379, 638, 306, 159, 333, -76, 306, 306, 379, + -526, 379, 89, 335, 135, 379, 379, 379, 379, 379, + 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, + 456, 146, -526, 520, 85, 110, -526, 177, 296, -526, + 85, -526, 483, 21, 302, -526, 306, -526, 523, -526, + -526, -526, -526, 306, -526, -526, -526, 370, 306, 306, + -526, 367, 417, -526, 73, -526, 479, 420, -526, -526, + 345, -526, 350, -526, -526, 351, -526, -526, 355, -526, + -526, -526, -526, 356, -526, -526, 43, 357, 479, -526, + 49, -526, 460, 306, -526, -526, 364, 453, 161, -35, + 150, 306, 306, -526, 461, 452, 78, -526, -526, -526, + 439, 560, 676, 379, 374, 218, -526, 454, 384, 676, + 676, 676, 676, 700, 700, 700, 700, 159, 159, 0, + 0, 0, -82, 371, -526, -526, 168, 564, -526, 169, + -526, 380, -526, 297, -526, 381, -526, 37, -526, 493, + -526, -526, -526, -526, 110, 110, -526, 505, 479, -526, + 411, -526, 197, -526, 570, 571, -526, 572, 573, 574, + -526, 468, -526, -526, 476, -526, 43, -526, 479, 205, + -526, 393, -526, 211, -526, 306, 684, 306, 306, -526, + 174, 143, 398, -526, 379, 676, 218, 418, 212, -526, + -526, -526, -526, -526, 421, 482, -526, -526, -526, 525, + 527, 528, 502, 21, 607, -526, -526, -526, 488, -526, + -526, -111, -526, -526, 426, 223, 427, 431, 432, -526, + -526, -526, 224, -526, 515, 460, 50, 434, 110, 181, + -526, 306, -526, 638, 435, 234, -526, -526, 37, 21, + -526, -526, -526, 21, 340, 437, 306, -526, -526, -526, + 605, -526, -526, -526, -526, 500, 415, -526, -526, -526, + -526, 110, -526, -526, -526, -526, 470, 479, -18, 438, + 306, -103, 441, 306, 243, 306, -526, -526, 323, -526, + -526, -526, 445, 22, 479, 110, -526, -526, 110, -526, + 148, 26, 170, -526, -526, 244, -526, -526, 524, -526, + -526, -526, 26, -526 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1125,26 +1125,26 @@ static const yytype_int16 yydefact[] = 204, 208, 202, 200, 282, 318, 330, 0, 139, 0, 0, 226, 0, 0, 0, 0, 136, 78, 222, 227, 228, 229, 0, 0, 0, 331, 319, 292, 138, 220, - 0, 0, 0, 234, 224, 254, 0, 233, 231, 0, - 232, 230, 320, 0, 225 + 0, 0, 0, 234, 224, 0, 233, 231, 0, 232, + 230, 320, 0, 225 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -527, -527, -527, 540, -527, 591, -527, 284, -527, 401, - -527, -527, -527, -527, 292, -87, 262, -527, -527, -527, - 379, -527, 241, -527, 149, -527, -527, -527, -527, 158, - -527, -527, -52, -527, -527, -527, -527, -527, -527, 482, - -527, -527, 387, -185, -84, -527, 168, -54, -30, -527, - -527, -82, 346, -527, -527, -527, -100, -527, -527, -169, - -527, 288, -527, -527, 30, -289, -527, -242, 301, -142, - -188, -527, -527, -527, -527, -527, -527, 344, -527, -527, - -527, 111, -527, -527, -527, -526, -527, -527, -136, -527, - -527, -527, -527, -527, 54, -79, -83, -527, -527, -91, - -527, -527, -527, -527, -527, -460, 94, -527, -527, -527, - 7, -527, -527, 103, 389, -527, 315, -527, 375, -527, - 128, -527, -527, -527, 543, -527, -527, -527, -527, -336 + -526, -526, -526, 562, -526, 613, -526, 308, -526, 312, + -526, -526, -526, -526, 315, -87, 198, -526, -526, -526, + 320, -526, 262, -526, 171, -526, -526, -526, -526, 178, + -526, -526, -52, -526, -526, -526, -526, -526, -526, 504, + -526, -526, 409, -185, -89, -526, 47, -54, -30, -526, + -526, -77, 378, -526, -526, -526, -108, -526, -526, -169, + -526, 311, -526, -526, 31, -289, -526, -68, 321, -142, + -188, -526, -526, -526, -526, -526, -526, 377, -526, -526, + -526, 127, -526, -526, -526, -525, -526, -526, -138, -526, + -526, -526, -526, -526, -526, -79, -83, -526, -526, -91, + -526, -526, -526, -526, -526, -434, 114, -526, -526, -526, + 7, -526, -526, 117, 403, -526, 322, -526, 396, -526, + 155, -526, -526, -526, 563, -526, -526, -526, -526, -336 }; /* YYDEFGOTO[NTERM-NUM]. */ @@ -1172,184 +1172,186 @@ static const yytype_int16 yytable[] = { 95, 256, 129, 216, 396, 99, 100, 101, 261, 41, 159, 160, 44, 158, 158, 158, 167, 52, 273, 56, - 452, 168, 384, 292, 595, 294, 40, 40, 590, 575, - 173, 177, 590, 173, 260, 75, 262, 264, 145, 591, - 337, 337, 469, 544, 344, 97, 269, 202, 115, 305, - 60, 241, 449, 450, 287, 87, 48, 90, 297, 297, - 234, 118, 119, 120, 158, 599, 322, 102, 288, 323, - 297, 345, 461, 296, 403, 298, 298, 604, 109, 203, - 178, 448, 426, 566, 297, 98, 323, 298, 429, 39, - 349, 61, 143, 144, 473, 238, 381, 325, 179, 320, - 154, 298, 404, 292, 40, 270, 462, 162, 163, 449, - 450, 401, 511, 402, 110, 42, 488, 408, 409, 410, + 452, 168, 40, 292, 40, 294, 177, 75, 590, 109, + 384, 145, 590, 575, 260, 173, 262, 264, 173, 591, + 337, 297, 469, 241, 269, 344, 97, 202, 115, 449, + 450, 337, 274, 48, 391, 87, 305, 90, 298, 55, + 234, 579, 580, 581, 158, 110, 598, 102, 288, 544, + 461, 297, 345, 296, 392, 477, 275, 603, 109, 203, + 393, 350, 297, 323, 76, 282, 98, 283, 298, 118, + 119, 120, 143, 144, 473, 238, 381, 325, 39, 298, + 154, 94, 111, 292, 462, 270, 320, 162, 163, 566, + 276, 401, 511, 402, 110, 398, 488, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, 422, 522, 398, 206, 118, 119, 120, 206, 118, - 119, 120, 204, 257, 388, 389, 121, 329, 240, 387, - 463, 111, 297, 350, 297, 399, 400, 297, 558, 109, - 274, 295, 122, 477, 338, 504, 50, 54, 464, 298, - 297, 298, 336, 342, 298, 173, 406, 207, 208, 209, - 55, 207, 208, 209, 275, 305, 483, 298, 282, 592, - 283, 336, 593, 592, 407, 110, 593, 535, 43, 391, - 382, 260, 385, 49, 214, 76, 444, 445, 271, 123, - 124, 125, 351, 54, 431, 485, 62, 210, 276, 392, - 121, 210, 94, 53, 121, 393, 352, 114, 65, 423, - 386, 574, 111, 319, 439, 320, 122, 75, 69, 297, - 122, 530, 70, 237, 72, 129, 494, 263, 287, 480, - 481, 129, 126, 353, 211, 79, 298, 568, 211, 45, - 206, 118, 119, 120, 206, 118, 119, 120, 212, 46, - 453, 164, 212, 478, 158, 427, 80, 297, 81, 560, - 297, 578, 57, 123, 124, 125, 341, 123, 124, 125, - 476, 347, 58, 392, 298, 531, 533, 298, 331, 479, - 47, 332, 297, 207, 208, 209, 83, 207, 208, 209, - 82, 305, 88, 213, 214, 75, 96, 213, 214, 298, - 103, 215, 91, 59, 379, 215, 126, 380, 424, 491, - 126, 493, 184, 526, 184, 528, 529, 104, 513, 523, - 482, 323, 323, 210, 106, 525, 121, 210, 336, 92, - 121, 487, 206, 118, 119, 120, 316, 317, 318, 319, - 537, 320, 122, 336, 117, 549, 122, 554, 550, 107, - 323, 138, 206, 118, 119, 120, 597, 598, 563, 140, - 211, 336, 587, 141, 211, 323, 145, 571, 147, 561, - 579, 580, 581, 148, 212, 290, 208, 209, 212, 185, - 186, 187, 188, 189, 190, 150, 495, 600, 601, 123, - 124, 125, 299, 123, 124, 125, 208, 209, 67, 68, - 153, 247, 248, 155, 495, 85, 86, 156, 118, 161, - 54, 585, 534, 588, 166, 210, 120, 168, 121, 213, - 214, 174, 176, 213, 214, 181, 182, 215, 496, 300, - 200, 215, 126, 497, 122, 210, 126, 183, 121, 184, - 498, 499, 201, 235, 239, 242, 496, 245, 249, 114, - 265, 497, 291, 272, 122, 281, 15, 500, 498, 499, - 284, -330, 501, 321, 293, 285, 212, 286, 324, 327, - 330, 333, 291, 328, 348, 500, 356, 301, 336, -330, - 501, 123, 124, 125, 343, 357, 212, 377, 378, 75, - 394, 425, 397, 405, 441, 446, 447, 454, 302, 474, - 455, 123, 124, 125, 457, 303, 304, 458, 459, 468, - 471, 213, 214, 305, 306, 475, 403, 297, 489, 215, - 492, 486, 320, 508, 126, 490, 510, 514, 512, 503, - 519, 213, 214, 515, 516, 517, 518, 532, 520, 215, - 524, 539, 536, 538, 126, 540, 307, 308, 309, 310, - 311, 541, 542, 312, 313, -283, 314, 315, 316, 317, - 318, 319, -332, 320, 1, 543, 545, 546, 548, 1, - 555, 551, 2, -284, 552, 569, 553, 2, 300, 3, - 559, 562, 567, 4, 3, 570, 577, 584, 4, 589, - 105, 283, 602, 603, 5, 74, 430, 6, 7, 5, - 428, 470, 6, 7, 521, 527, 205, 326, 383, 8, - 9, 442, 390, 565, 8, 9, 557, 440, 596, 547, - 10, 564, 355, 11, 339, 10, 301, 165, 11, 185, - 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, - 196, 484, 443, 0, 0, 12, 0, 395, 0, 13, - 12, 0, 0, 0, 13, 304, 300, 0, 0, 358, - 0, 0, 305, 306, 0, 14, 0, 0, 0, 0, - 14, 15, 359, 0, 0, 0, 15, 360, 361, 362, - 363, 364, 0, 365, 0, 0, 0, 0, 0, 0, - 0, 366, 495, 0, 300, 307, 308, 309, 310, 311, - 0, 0, 312, 313, 301, 314, 315, 316, 317, 318, - 319, 0, 320, 0, 16, 17, 18, 367, 300, 16, - 17, 18, 0, 0, 0, 395, 0, 0, 0, 0, - 0, 0, 0, 304, 496, 368, 0, 369, 370, 497, - 305, 306, -333, 0, 0, 0, 498, 499, 0, 0, - 572, 0, 371, 0, 0, 0, 0, 372, 0, 373, - 0, 0, 0, 500, 0, 0, 0, 0, 501, 374, - 0, 304, 0, 307, 308, 309, 310, 311, 305, -333, - 312, 313, 0, 314, 315, 316, 317, 318, 319, 0, - 320, 0, 0, 0, 0, 304, 0, 0, 0, 0, - 573, 0, 305, 375, 0, 0, 0, 0, 0, 0, - 0, -333, -333, -333, 310, 311, 0, 0, 312, 313, - 0, 314, 315, 316, 317, 318, 319, 0, 320, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -333, -333, - 0, 0, -333, -333, 0, 314, 315, 316, 317, 318, - 319, 0, 320 + 421, 422, 522, 49, 206, 118, 119, 120, 305, 329, + 351, 240, 204, 257, 388, 389, 114, 387, 463, 40, + 164, 111, 75, 50, 352, 399, 400, 60, 237, 54, + 42, 295, 53, 349, 504, 297, 464, 297, 342, 206, + 118, 119, 120, 65, 121, 338, 336, 207, 208, 209, + 173, 353, 298, 43, 298, 178, 319, 62, 320, 592, + 122, 403, 593, 592, 45, 287, 593, 535, 61, 297, + 382, 260, 69, 179, 46, 448, 444, 445, 271, 54, + 385, 431, 207, 208, 209, 485, 298, 210, 57, 404, + 121, 206, 118, 119, 120, 297, 439, 297, 58, 423, + 386, 574, 70, 449, 450, 47, 122, 123, 124, 125, + 406, 558, 298, 478, 298, 129, 494, 263, 595, 480, + 481, 129, 210, 531, 211, 121, 426, 568, 407, 59, + 297, 79, 429, 392, 207, 208, 209, 483, 212, 479, + 453, 122, 336, 81, 158, 427, 75, 298, 297, 287, + 126, 578, 80, 123, 124, 125, 72, 341, 476, 211, + 82, 297, 347, 530, 83, 298, 533, 305, 297, 88, + 560, 91, 322, 212, 210, 323, 92, 121, 298, 206, + 118, 119, 120, 213, 214, 298, 596, 597, 123, 124, + 125, 215, 495, 122, 331, 96, 126, 332, 424, 67, + 68, 379, 107, 526, 380, 528, 529, 103, 599, 600, + 482, 211, 316, 317, 318, 319, 104, 320, 213, 214, + 106, 487, 207, 208, 209, 212, 215, 247, 248, 491, + 493, 126, 184, 184, 496, 495, 85, 86, 117, 497, + 123, 124, 125, 138, 140, 141, 498, 499, 206, 118, + 119, 120, 206, 118, 119, 120, 145, 571, 513, 561, + 148, 323, 210, 500, 147, 121, 523, -330, 501, 323, + 213, 214, 525, 537, 150, 336, 336, 496, 215, 153, + 155, 122, 497, 126, 549, 554, 156, 550, 323, 498, + 499, 290, 208, 209, 118, 563, 208, 209, 336, 211, + 299, 585, 534, 588, 587, 601, 500, 323, 323, 161, + -330, 501, 168, 212, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 54, 166, 123, 124, + 125, 210, 120, 174, 121, 210, 176, 300, 121, 185, + 186, 187, 188, 189, 190, 181, 182, 183, 184, 200, + 122, 201, 235, 242, 122, 239, 249, 245, 213, 214, + 265, -283, 114, 272, 15, 495, 215, 284, 291, 285, + 286, 126, 291, 281, 293, 321, 327, 324, 328, 330, + 348, 333, 212, 357, 377, 301, 212, 336, 343, 75, + 356, 378, 394, 425, 397, 405, 441, 123, 124, 125, + 446, 123, 124, 125, -284, 454, 302, 496, 471, 447, + 455, 457, 497, 303, 304, 458, 459, 468, 475, 498, + 499, 305, 306, 572, 403, 474, 297, 213, 214, 489, + 490, 213, 214, 508, 486, 215, 500, 492, 510, 215, + 126, 501, 320, 512, 126, 503, 514, 515, 516, 517, + 518, 520, 539, 524, 307, 308, 309, 310, 311, 532, + 519, 312, 313, -332, 314, 315, 316, 317, 318, 319, + 1, 320, 543, 573, 540, 1, 541, 542, 2, 536, + 545, 569, 538, 2, 300, 3, 546, 548, 551, 4, + 3, 555, 552, 553, 4, 559, 562, 567, 570, 577, + 5, 584, 105, 6, 7, 5, 589, 74, 6, 7, + 430, 602, 470, 428, 521, 8, 9, 527, 205, 326, + 8, 9, 557, 565, 442, 564, 10, 440, 339, 11, + 383, 10, 301, 355, 11, 390, 547, 165, 0, 443, + 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, + 0, 12, 0, 395, 0, 13, 12, 0, 0, 0, + 13, 304, 300, 0, 0, 358, 0, 0, 305, 306, + 0, 14, 0, 0, 0, 0, 14, 15, 359, 0, + 0, 0, 15, 360, 361, 362, 363, 364, 0, 365, + 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, + 300, 307, 308, 309, 310, 311, 0, 0, 312, 313, + 301, 314, 315, 316, 317, 318, 319, 0, 320, 0, + 16, 17, 18, 367, 300, 16, 17, 18, 0, 0, + 0, 395, 0, 0, 0, 0, 0, 0, 0, 304, + 0, 368, 0, 369, 370, 0, 305, 306, -333, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, + 0, 0, 0, 372, 0, 373, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 374, 0, 304, 0, 307, + 308, 309, 310, 311, 305, -333, 312, 313, 0, 314, + 315, 316, 317, 318, 319, 0, 320, 0, 0, 0, + 0, 304, 0, 0, 0, 0, 0, 0, 305, 375, + 0, 0, 0, 0, 0, 0, 0, -333, -333, -333, + 310, 311, 0, 0, 312, 313, 0, 314, 315, 316, + 317, 318, 319, 0, 320, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -333, -333, 0, 0, -333, -333, + 0, 314, 315, 316, 317, 318, 319, 0, 320 }; static const yytype_int16 yycheck[] = { 54, 170, 81, 145, 293, 57, 58, 59, 177, 2, 97, 98, 5, 96, 97, 98, 107, 10, 203, 12, - 356, 12, 3, 211, 3, 213, 3, 3, 6, 51, - 112, 115, 6, 115, 176, 58, 178, 179, 84, 17, - 3, 3, 378, 503, 91, 95, 182, 95, 78, 138, - 19, 151, 160, 161, 113, 48, 95, 50, 117, 117, - 147, 4, 5, 6, 147, 591, 191, 60, 210, 194, - 117, 118, 27, 215, 102, 134, 134, 603, 9, 127, - 55, 132, 324, 543, 117, 135, 194, 134, 330, 26, - 55, 60, 85, 86, 383, 149, 281, 239, 73, 188, - 93, 134, 130, 291, 3, 184, 61, 100, 101, 160, - 161, 299, 448, 301, 45, 3, 405, 305, 306, 307, + 356, 12, 3, 211, 3, 213, 115, 58, 6, 9, + 3, 84, 6, 51, 176, 112, 178, 179, 115, 17, + 3, 117, 378, 151, 182, 91, 95, 95, 78, 160, + 161, 3, 3, 95, 93, 48, 138, 50, 134, 12, + 147, 164, 165, 166, 147, 45, 591, 60, 210, 503, + 27, 117, 118, 215, 113, 110, 27, 602, 9, 127, + 119, 63, 117, 194, 37, 190, 135, 192, 134, 4, + 5, 6, 85, 86, 383, 149, 281, 239, 26, 134, + 93, 54, 82, 291, 61, 184, 188, 100, 101, 543, + 61, 299, 448, 301, 45, 191, 405, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 468, 191, 3, 4, 5, 6, 3, 4, - 5, 6, 190, 173, 286, 287, 89, 247, 194, 285, - 105, 82, 117, 63, 117, 297, 298, 117, 191, 9, - 3, 215, 105, 110, 127, 127, 99, 190, 123, 134, - 117, 134, 194, 257, 134, 257, 105, 46, 47, 48, - 12, 46, 47, 48, 27, 138, 189, 134, 190, 167, - 192, 194, 170, 167, 123, 45, 170, 486, 3, 93, - 191, 343, 183, 95, 183, 37, 348, 349, 201, 152, - 153, 154, 122, 190, 190, 403, 3, 86, 61, 113, - 89, 86, 54, 81, 89, 119, 136, 77, 156, 320, - 284, 567, 82, 186, 334, 188, 105, 58, 0, 117, - 105, 119, 193, 64, 114, 324, 431, 116, 113, 391, - 392, 330, 195, 163, 123, 3, 134, 546, 123, 71, - 3, 4, 5, 6, 3, 4, 5, 6, 137, 81, - 357, 103, 137, 93, 357, 327, 192, 117, 190, 119, - 117, 570, 71, 152, 153, 154, 256, 152, 153, 154, - 127, 261, 81, 113, 134, 110, 484, 134, 191, 119, - 112, 194, 117, 46, 47, 48, 129, 46, 47, 48, - 95, 138, 3, 182, 183, 58, 135, 182, 183, 134, - 127, 190, 125, 112, 191, 190, 195, 194, 321, 191, - 195, 191, 194, 475, 194, 477, 478, 194, 191, 191, - 394, 194, 194, 86, 98, 191, 89, 86, 194, 129, - 89, 405, 3, 4, 5, 6, 183, 184, 185, 186, - 191, 188, 105, 194, 3, 191, 105, 191, 194, 126, - 194, 4, 3, 4, 5, 6, 168, 169, 191, 123, - 123, 194, 191, 3, 123, 194, 84, 556, 94, 531, - 164, 165, 166, 190, 137, 46, 47, 48, 137, 140, - 141, 142, 143, 144, 145, 3, 25, 168, 169, 152, - 153, 154, 17, 152, 153, 154, 47, 48, 17, 18, - 46, 159, 160, 191, 25, 46, 47, 191, 4, 3, - 190, 573, 486, 575, 190, 86, 6, 12, 89, 182, - 183, 116, 128, 182, 183, 4, 4, 190, 67, 54, - 46, 190, 195, 72, 105, 86, 195, 191, 89, 194, - 79, 80, 133, 3, 171, 92, 67, 114, 3, 77, - 120, 72, 123, 3, 105, 127, 114, 96, 79, 80, - 190, 100, 101, 99, 188, 190, 137, 190, 190, 39, - 190, 95, 123, 49, 55, 96, 190, 102, 194, 100, - 101, 152, 153, 154, 194, 94, 137, 122, 190, 58, - 190, 3, 191, 190, 3, 163, 122, 190, 123, 191, - 190, 152, 153, 154, 190, 130, 131, 190, 190, 190, - 78, 182, 183, 138, 139, 95, 102, 117, 105, 190, - 3, 190, 188, 70, 195, 189, 63, 6, 162, 194, - 122, 182, 183, 6, 6, 6, 6, 191, 105, 190, - 190, 100, 191, 191, 195, 79, 171, 172, 173, 174, - 175, 79, 79, 178, 179, 194, 181, 182, 183, 184, - 185, 186, 0, 188, 7, 100, 3, 128, 191, 7, - 106, 191, 15, 194, 191, 6, 191, 15, 54, 22, - 191, 191, 190, 26, 22, 128, 191, 190, 26, 191, - 70, 192, 191, 117, 37, 24, 332, 40, 41, 37, - 328, 380, 40, 41, 466, 476, 144, 240, 282, 52, - 53, 343, 288, 539, 52, 53, 525, 336, 584, 511, - 63, 538, 267, 66, 255, 63, 102, 104, 66, 140, - 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, - 151, 117, 347, -1, -1, 88, -1, 123, -1, 92, - 88, -1, -1, -1, 92, 131, 54, -1, -1, 11, - -1, -1, 138, 139, -1, 108, -1, -1, -1, -1, - 108, 114, 24, -1, -1, -1, 114, 29, 30, 31, - 32, 33, -1, 35, -1, -1, -1, -1, -1, -1, - -1, 43, 25, -1, 54, 171, 172, 173, 174, 175, - -1, -1, 178, 179, 102, 181, 182, 183, 184, 185, - 186, -1, 188, -1, 157, 158, 159, 69, 54, 157, - 158, 159, -1, -1, -1, 123, -1, -1, -1, -1, - -1, -1, -1, 131, 67, 87, -1, 89, 90, 72, - 138, 139, 102, -1, -1, -1, 79, 80, -1, -1, - 83, -1, 104, -1, -1, -1, -1, 109, -1, 111, - -1, -1, -1, 96, -1, -1, -1, -1, 101, 121, - -1, 131, -1, 171, 172, 173, 174, 175, 138, 139, - 178, 179, -1, 181, 182, 183, 184, 185, 186, -1, - 188, -1, -1, -1, -1, 131, -1, -1, -1, -1, - 133, -1, 138, 155, -1, -1, -1, -1, -1, -1, - -1, 171, 172, 173, 174, 175, -1, -1, 178, 179, - -1, 181, 182, 183, 184, 185, 186, -1, 188, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 174, 175, - -1, -1, 178, 179, -1, 181, 182, 183, 184, 185, - 186, -1, 188 + 318, 319, 468, 95, 3, 4, 5, 6, 138, 247, + 122, 194, 190, 173, 286, 287, 77, 285, 105, 3, + 103, 82, 58, 99, 136, 297, 298, 19, 64, 190, + 3, 215, 81, 55, 127, 117, 123, 117, 257, 3, + 4, 5, 6, 156, 89, 127, 194, 46, 47, 48, + 257, 163, 134, 3, 134, 55, 186, 3, 188, 167, + 105, 102, 170, 167, 71, 113, 170, 486, 60, 117, + 191, 343, 0, 73, 81, 132, 348, 349, 201, 190, + 183, 190, 46, 47, 48, 403, 134, 86, 71, 130, + 89, 3, 4, 5, 6, 117, 334, 117, 81, 320, + 284, 567, 193, 160, 161, 112, 105, 152, 153, 154, + 105, 191, 134, 93, 134, 324, 431, 116, 584, 391, + 392, 330, 86, 110, 123, 89, 324, 546, 123, 112, + 117, 3, 330, 113, 46, 47, 48, 189, 137, 119, + 357, 105, 194, 190, 357, 327, 58, 134, 117, 113, + 195, 570, 192, 152, 153, 154, 114, 256, 127, 123, + 95, 117, 261, 119, 129, 134, 484, 138, 117, 3, + 119, 125, 191, 137, 86, 194, 129, 89, 134, 3, + 4, 5, 6, 182, 183, 134, 168, 169, 152, 153, + 154, 190, 25, 105, 191, 135, 195, 194, 321, 17, + 18, 191, 126, 475, 194, 477, 478, 127, 168, 169, + 394, 123, 183, 184, 185, 186, 194, 188, 182, 183, + 98, 405, 46, 47, 48, 137, 190, 159, 160, 191, + 191, 195, 194, 194, 67, 25, 46, 47, 3, 72, + 152, 153, 154, 4, 123, 3, 79, 80, 3, 4, + 5, 6, 3, 4, 5, 6, 84, 556, 191, 531, + 190, 194, 86, 96, 94, 89, 191, 100, 101, 194, + 182, 183, 191, 191, 3, 194, 194, 67, 190, 46, + 191, 105, 72, 195, 191, 191, 191, 194, 194, 79, + 80, 46, 47, 48, 4, 191, 47, 48, 194, 123, + 17, 573, 486, 575, 191, 191, 96, 194, 194, 3, + 100, 101, 12, 137, 140, 141, 142, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 190, 190, 152, 153, + 154, 86, 6, 116, 89, 86, 128, 54, 89, 140, + 141, 142, 143, 144, 145, 4, 4, 191, 194, 46, + 105, 133, 3, 92, 105, 171, 3, 114, 182, 183, + 120, 194, 77, 3, 114, 25, 190, 190, 123, 190, + 190, 195, 123, 127, 188, 99, 39, 190, 49, 190, + 55, 95, 137, 94, 122, 102, 137, 194, 194, 58, + 190, 190, 190, 3, 191, 190, 3, 152, 153, 154, + 163, 152, 153, 154, 194, 190, 123, 67, 78, 122, + 190, 190, 72, 130, 131, 190, 190, 190, 95, 79, + 80, 138, 139, 83, 102, 191, 117, 182, 183, 105, + 189, 182, 183, 70, 190, 190, 96, 3, 63, 190, + 195, 101, 188, 162, 195, 194, 6, 6, 6, 6, + 6, 105, 100, 190, 171, 172, 173, 174, 175, 191, + 122, 178, 179, 0, 181, 182, 183, 184, 185, 186, + 7, 188, 100, 133, 79, 7, 79, 79, 15, 191, + 3, 6, 191, 15, 54, 22, 128, 191, 191, 26, + 22, 106, 191, 191, 26, 191, 191, 190, 128, 191, + 37, 190, 70, 40, 41, 37, 191, 24, 40, 41, + 332, 117, 380, 328, 466, 52, 53, 476, 144, 240, + 52, 53, 525, 539, 343, 538, 63, 336, 255, 66, + 282, 63, 102, 267, 66, 288, 511, 104, -1, 347, + -1, -1, -1, -1, -1, -1, -1, 117, -1, -1, + -1, 88, -1, 123, -1, 92, 88, -1, -1, -1, + 92, 131, 54, -1, -1, 11, -1, -1, 138, 139, + -1, 108, -1, -1, -1, -1, 108, 114, 24, -1, + -1, -1, 114, 29, 30, 31, 32, 33, -1, 35, + -1, -1, -1, -1, -1, -1, -1, 43, -1, -1, + 54, 171, 172, 173, 174, 175, -1, -1, 178, 179, + 102, 181, 182, 183, 184, 185, 186, -1, 188, -1, + 157, 158, 159, 69, 54, 157, 158, 159, -1, -1, + -1, 123, -1, -1, -1, -1, -1, -1, -1, 131, + -1, 87, -1, 89, 90, -1, 138, 139, 102, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 104, -1, + -1, -1, -1, 109, -1, 111, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 121, -1, 131, -1, 171, + 172, 173, 174, 175, 138, 139, 178, 179, -1, 181, + 182, 183, 184, 185, 186, -1, 188, -1, -1, -1, + -1, 131, -1, -1, -1, -1, -1, -1, 138, 155, + -1, -1, -1, -1, -1, -1, -1, 171, 172, 173, + 174, 175, -1, -1, 178, 179, -1, 181, 182, 183, + 184, 185, 186, -1, 188, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 174, 175, -1, -1, 178, 179, + -1, 181, 182, 183, 184, 185, 186, -1, 188 }; /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of @@ -1415,8 +1417,8 @@ static const yytype_int16 yystos[] = 119, 265, 191, 191, 309, 302, 301, 190, 261, 6, 128, 255, 83, 133, 325, 51, 254, 191, 261, 164, 165, 166, 279, 280, 190, 265, 323, 191, 265, 191, - 6, 17, 167, 170, 281, 3, 290, 168, 169, 281, - 168, 169, 191, 117, 281 + 6, 17, 167, 170, 281, 325, 168, 169, 281, 168, + 169, 191, 117, 281 }; /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ @@ -2058,891 +2060,891 @@ yydestruct (const char *yymsg, switch (yykind) { case YYSYMBOL_IDENTIFIER: /* IDENTIFIER */ -#line 181 "bison_parser.y" - { free( (((*yyvaluep).sval)) ); } -#line 2064 "bison_parser.cpp" +#line 184 "bison_parser.y" + { free( (((*yyvaluep).sval)) ); } +#line 2067 "bison_parser.cpp" break; case YYSYMBOL_STRING: /* STRING */ -#line 181 "bison_parser.y" - { free( (((*yyvaluep).sval)) ); } -#line 2070 "bison_parser.cpp" +#line 184 "bison_parser.y" + { free( (((*yyvaluep).sval)) ); } +#line 2073 "bison_parser.cpp" break; case YYSYMBOL_FLOATVAL: /* FLOATVAL */ -#line 168 "bison_parser.y" - { } -#line 2076 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2079 "bison_parser.cpp" break; case YYSYMBOL_INTVAL: /* INTVAL */ -#line 168 "bison_parser.y" - { } -#line 2082 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2085 "bison_parser.cpp" break; case YYSYMBOL_statement_list: /* statement_list */ -#line 182 "bison_parser.y" - { - if (((*yyvaluep).stmt_vec)) { - for (auto ptr : *(((*yyvaluep).stmt_vec))) { - delete ptr; - } - } - delete (((*yyvaluep).stmt_vec)); +#line 185 "bison_parser.y" + { + if (((*yyvaluep).stmt_vec)) { + for (auto ptr : *(((*yyvaluep).stmt_vec))) { + delete ptr; } -#line 2095 "bison_parser.cpp" + } + delete (((*yyvaluep).stmt_vec)); +} +#line 2098 "bison_parser.cpp" break; case YYSYMBOL_statement: /* statement */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).statement)); } -#line 2101 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).statement)); } +#line 2104 "bison_parser.cpp" break; case YYSYMBOL_preparable_statement: /* preparable_statement */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).statement)); } -#line 2107 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).statement)); } +#line 2110 "bison_parser.cpp" break; case YYSYMBOL_opt_hints: /* opt_hints */ -#line 182 "bison_parser.y" - { - if (((*yyvaluep).expr_vec)) { - for (auto ptr : *(((*yyvaluep).expr_vec))) { - delete ptr; - } - } - delete (((*yyvaluep).expr_vec)); +#line 185 "bison_parser.y" + { + if (((*yyvaluep).expr_vec)) { + for (auto ptr : *(((*yyvaluep).expr_vec))) { + delete ptr; } -#line 2120 "bison_parser.cpp" + } + delete (((*yyvaluep).expr_vec)); +} +#line 2123 "bison_parser.cpp" break; case YYSYMBOL_hint_list: /* hint_list */ -#line 182 "bison_parser.y" - { - if (((*yyvaluep).expr_vec)) { - for (auto ptr : *(((*yyvaluep).expr_vec))) { - delete ptr; - } - } - delete (((*yyvaluep).expr_vec)); +#line 185 "bison_parser.y" + { + if (((*yyvaluep).expr_vec)) { + for (auto ptr : *(((*yyvaluep).expr_vec))) { + delete ptr; } -#line 2133 "bison_parser.cpp" + } + delete (((*yyvaluep).expr_vec)); +} +#line 2136 "bison_parser.cpp" break; case YYSYMBOL_hint: /* hint */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2139 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2142 "bison_parser.cpp" break; case YYSYMBOL_transaction_statement: /* transaction_statement */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).transaction_stmt)); } -#line 2145 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).transaction_stmt)); } +#line 2148 "bison_parser.cpp" break; case YYSYMBOL_prepare_statement: /* prepare_statement */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).prep_stmt)); } -#line 2151 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).prep_stmt)); } +#line 2154 "bison_parser.cpp" break; case YYSYMBOL_prepare_target_query: /* prepare_target_query */ -#line 181 "bison_parser.y" - { free( (((*yyvaluep).sval)) ); } -#line 2157 "bison_parser.cpp" +#line 184 "bison_parser.y" + { free( (((*yyvaluep).sval)) ); } +#line 2160 "bison_parser.cpp" break; case YYSYMBOL_execute_statement: /* execute_statement */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).exec_stmt)); } -#line 2163 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).exec_stmt)); } +#line 2166 "bison_parser.cpp" break; case YYSYMBOL_import_statement: /* import_statement */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).import_stmt)); } -#line 2169 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).import_stmt)); } +#line 2172 "bison_parser.cpp" break; case YYSYMBOL_file_type: /* file_type */ -#line 168 "bison_parser.y" - { } -#line 2175 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2178 "bison_parser.cpp" break; case YYSYMBOL_file_path: /* file_path */ -#line 181 "bison_parser.y" - { free( (((*yyvaluep).sval)) ); } -#line 2181 "bison_parser.cpp" +#line 184 "bison_parser.y" + { free( (((*yyvaluep).sval)) ); } +#line 2184 "bison_parser.cpp" break; case YYSYMBOL_opt_file_type: /* opt_file_type */ -#line 168 "bison_parser.y" - { } -#line 2187 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2190 "bison_parser.cpp" break; case YYSYMBOL_export_statement: /* export_statement */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).export_stmt)); } -#line 2193 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).export_stmt)); } +#line 2196 "bison_parser.cpp" break; case YYSYMBOL_show_statement: /* show_statement */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).show_stmt)); } -#line 2199 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).show_stmt)); } +#line 2202 "bison_parser.cpp" break; case YYSYMBOL_create_statement: /* create_statement */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).create_stmt)); } -#line 2205 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).create_stmt)); } +#line 2208 "bison_parser.cpp" break; case YYSYMBOL_opt_not_exists: /* opt_not_exists */ -#line 168 "bison_parser.y" - { } -#line 2211 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2214 "bison_parser.cpp" break; case YYSYMBOL_table_elem_commalist: /* table_elem_commalist */ -#line 182 "bison_parser.y" - { - if (((*yyvaluep).table_element_vec)) { - for (auto ptr : *(((*yyvaluep).table_element_vec))) { - delete ptr; - } - } - delete (((*yyvaluep).table_element_vec)); +#line 185 "bison_parser.y" + { + if (((*yyvaluep).table_element_vec)) { + for (auto ptr : *(((*yyvaluep).table_element_vec))) { + delete ptr; } -#line 2224 "bison_parser.cpp" + } + delete (((*yyvaluep).table_element_vec)); +} +#line 2227 "bison_parser.cpp" break; case YYSYMBOL_table_elem: /* table_elem */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).table_element_t)); } -#line 2230 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).table_element_t)); } +#line 2233 "bison_parser.cpp" break; case YYSYMBOL_column_def: /* column_def */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).column_t)); } -#line 2236 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).column_t)); } +#line 2239 "bison_parser.cpp" break; case YYSYMBOL_column_type: /* column_type */ -#line 168 "bison_parser.y" - { } -#line 2242 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2245 "bison_parser.cpp" break; case YYSYMBOL_opt_time_precision: /* opt_time_precision */ -#line 168 "bison_parser.y" - { } -#line 2248 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2251 "bison_parser.cpp" break; case YYSYMBOL_opt_decimal_specification: /* opt_decimal_specification */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).ival_pair)); } -#line 2254 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).ival_pair)); } +#line 2257 "bison_parser.cpp" break; case YYSYMBOL_opt_column_constraints: /* opt_column_constraints */ -#line 168 "bison_parser.y" - { } -#line 2260 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2263 "bison_parser.cpp" break; case YYSYMBOL_column_constraint_set: /* column_constraint_set */ -#line 168 "bison_parser.y" - { } -#line 2266 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2269 "bison_parser.cpp" break; case YYSYMBOL_column_constraint: /* column_constraint */ -#line 168 "bison_parser.y" - { } -#line 2272 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2275 "bison_parser.cpp" break; case YYSYMBOL_table_constraint: /* table_constraint */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).table_constraint_t)); } -#line 2278 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).table_constraint_t)); } +#line 2281 "bison_parser.cpp" break; case YYSYMBOL_drop_statement: /* drop_statement */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).drop_stmt)); } -#line 2284 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).drop_stmt)); } +#line 2287 "bison_parser.cpp" break; case YYSYMBOL_opt_exists: /* opt_exists */ -#line 168 "bison_parser.y" - { } -#line 2290 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2293 "bison_parser.cpp" break; case YYSYMBOL_alter_statement: /* alter_statement */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).alter_stmt)); } -#line 2296 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).alter_stmt)); } +#line 2299 "bison_parser.cpp" break; case YYSYMBOL_alter_action: /* alter_action */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).alter_action_t)); } -#line 2302 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).alter_action_t)); } +#line 2305 "bison_parser.cpp" break; case YYSYMBOL_drop_action: /* drop_action */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).drop_action_t)); } -#line 2308 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).drop_action_t)); } +#line 2311 "bison_parser.cpp" break; case YYSYMBOL_delete_statement: /* delete_statement */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).delete_stmt)); } -#line 2314 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).delete_stmt)); } +#line 2317 "bison_parser.cpp" break; case YYSYMBOL_truncate_statement: /* truncate_statement */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).delete_stmt)); } -#line 2320 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).delete_stmt)); } +#line 2323 "bison_parser.cpp" break; case YYSYMBOL_insert_statement: /* insert_statement */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).insert_stmt)); } -#line 2326 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).insert_stmt)); } +#line 2329 "bison_parser.cpp" break; case YYSYMBOL_opt_column_list: /* opt_column_list */ -#line 173 "bison_parser.y" - { - if (((*yyvaluep).str_vec)) { - for (auto ptr : *(((*yyvaluep).str_vec))) { - free(ptr); - } - } - delete (((*yyvaluep).str_vec)); +#line 176 "bison_parser.y" + { + if (((*yyvaluep).str_vec)) { + for (auto ptr : *(((*yyvaluep).str_vec))) { + free(ptr); } -#line 2339 "bison_parser.cpp" + } + delete (((*yyvaluep).str_vec)); +} +#line 2342 "bison_parser.cpp" break; case YYSYMBOL_update_statement: /* update_statement */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).update_stmt)); } -#line 2345 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).update_stmt)); } +#line 2348 "bison_parser.cpp" break; case YYSYMBOL_update_clause_commalist: /* update_clause_commalist */ -#line 182 "bison_parser.y" - { - if (((*yyvaluep).update_vec)) { - for (auto ptr : *(((*yyvaluep).update_vec))) { - delete ptr; - } - } - delete (((*yyvaluep).update_vec)); +#line 185 "bison_parser.y" + { + if (((*yyvaluep).update_vec)) { + for (auto ptr : *(((*yyvaluep).update_vec))) { + delete ptr; } -#line 2358 "bison_parser.cpp" + } + delete (((*yyvaluep).update_vec)); +} +#line 2361 "bison_parser.cpp" break; case YYSYMBOL_update_clause: /* update_clause */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).update_t)); } -#line 2364 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).update_t)); } +#line 2367 "bison_parser.cpp" break; case YYSYMBOL_select_statement: /* select_statement */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).select_stmt)); } -#line 2370 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).select_stmt)); } +#line 2373 "bison_parser.cpp" break; case YYSYMBOL_select_within_set_operation: /* select_within_set_operation */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).select_stmt)); } -#line 2376 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).select_stmt)); } +#line 2379 "bison_parser.cpp" break; case YYSYMBOL_select_within_set_operation_no_parentheses: /* select_within_set_operation_no_parentheses */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).select_stmt)); } -#line 2382 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).select_stmt)); } +#line 2385 "bison_parser.cpp" break; case YYSYMBOL_select_with_paren: /* select_with_paren */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).select_stmt)); } -#line 2388 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).select_stmt)); } +#line 2391 "bison_parser.cpp" break; case YYSYMBOL_select_no_paren: /* select_no_paren */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).select_stmt)); } -#line 2394 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).select_stmt)); } +#line 2397 "bison_parser.cpp" break; case YYSYMBOL_set_operator: /* set_operator */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).set_operator_t)); } -#line 2400 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).set_operator_t)); } +#line 2403 "bison_parser.cpp" break; case YYSYMBOL_set_type: /* set_type */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).set_operator_t)); } -#line 2406 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).set_operator_t)); } +#line 2409 "bison_parser.cpp" break; case YYSYMBOL_opt_all: /* opt_all */ -#line 168 "bison_parser.y" - { } -#line 2412 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2415 "bison_parser.cpp" break; case YYSYMBOL_select_clause: /* select_clause */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).select_stmt)); } -#line 2418 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).select_stmt)); } +#line 2421 "bison_parser.cpp" break; case YYSYMBOL_opt_distinct: /* opt_distinct */ -#line 168 "bison_parser.y" - { } -#line 2424 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2427 "bison_parser.cpp" break; case YYSYMBOL_select_list: /* select_list */ -#line 182 "bison_parser.y" - { - if (((*yyvaluep).expr_vec)) { - for (auto ptr : *(((*yyvaluep).expr_vec))) { - delete ptr; - } - } - delete (((*yyvaluep).expr_vec)); +#line 185 "bison_parser.y" + { + if (((*yyvaluep).expr_vec)) { + for (auto ptr : *(((*yyvaluep).expr_vec))) { + delete ptr; } -#line 2437 "bison_parser.cpp" + } + delete (((*yyvaluep).expr_vec)); +} +#line 2440 "bison_parser.cpp" break; case YYSYMBOL_opt_from_clause: /* opt_from_clause */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).table)); } -#line 2443 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).table)); } +#line 2446 "bison_parser.cpp" break; case YYSYMBOL_from_clause: /* from_clause */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).table)); } -#line 2449 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).table)); } +#line 2452 "bison_parser.cpp" break; case YYSYMBOL_opt_where: /* opt_where */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2455 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2458 "bison_parser.cpp" break; case YYSYMBOL_opt_group: /* opt_group */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).group_t)); } -#line 2461 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).group_t)); } +#line 2464 "bison_parser.cpp" break; case YYSYMBOL_opt_having: /* opt_having */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2467 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2470 "bison_parser.cpp" break; case YYSYMBOL_opt_order: /* opt_order */ -#line 182 "bison_parser.y" - { - if (((*yyvaluep).order_vec)) { - for (auto ptr : *(((*yyvaluep).order_vec))) { - delete ptr; - } - } - delete (((*yyvaluep).order_vec)); +#line 185 "bison_parser.y" + { + if (((*yyvaluep).order_vec)) { + for (auto ptr : *(((*yyvaluep).order_vec))) { + delete ptr; } -#line 2480 "bison_parser.cpp" + } + delete (((*yyvaluep).order_vec)); +} +#line 2483 "bison_parser.cpp" break; case YYSYMBOL_order_list: /* order_list */ -#line 182 "bison_parser.y" - { - if (((*yyvaluep).order_vec)) { - for (auto ptr : *(((*yyvaluep).order_vec))) { - delete ptr; - } - } - delete (((*yyvaluep).order_vec)); +#line 185 "bison_parser.y" + { + if (((*yyvaluep).order_vec)) { + for (auto ptr : *(((*yyvaluep).order_vec))) { + delete ptr; } -#line 2493 "bison_parser.cpp" + } + delete (((*yyvaluep).order_vec)); +} +#line 2496 "bison_parser.cpp" break; case YYSYMBOL_order_desc: /* order_desc */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).order)); } -#line 2499 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).order)); } +#line 2502 "bison_parser.cpp" break; case YYSYMBOL_opt_order_type: /* opt_order_type */ -#line 168 "bison_parser.y" - { } -#line 2505 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2508 "bison_parser.cpp" break; case YYSYMBOL_opt_top: /* opt_top */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).limit)); } -#line 2511 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).limit)); } +#line 2514 "bison_parser.cpp" break; case YYSYMBOL_opt_limit: /* opt_limit */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).limit)); } -#line 2517 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).limit)); } +#line 2520 "bison_parser.cpp" break; case YYSYMBOL_expr_list: /* expr_list */ -#line 182 "bison_parser.y" - { - if (((*yyvaluep).expr_vec)) { - for (auto ptr : *(((*yyvaluep).expr_vec))) { - delete ptr; - } - } - delete (((*yyvaluep).expr_vec)); +#line 185 "bison_parser.y" + { + if (((*yyvaluep).expr_vec)) { + for (auto ptr : *(((*yyvaluep).expr_vec))) { + delete ptr; } -#line 2530 "bison_parser.cpp" + } + delete (((*yyvaluep).expr_vec)); +} +#line 2533 "bison_parser.cpp" break; case YYSYMBOL_opt_literal_list: /* opt_literal_list */ -#line 182 "bison_parser.y" - { - if (((*yyvaluep).expr_vec)) { - for (auto ptr : *(((*yyvaluep).expr_vec))) { - delete ptr; - } - } - delete (((*yyvaluep).expr_vec)); +#line 185 "bison_parser.y" + { + if (((*yyvaluep).expr_vec)) { + for (auto ptr : *(((*yyvaluep).expr_vec))) { + delete ptr; } -#line 2543 "bison_parser.cpp" + } + delete (((*yyvaluep).expr_vec)); +} +#line 2546 "bison_parser.cpp" break; case YYSYMBOL_literal_list: /* literal_list */ -#line 182 "bison_parser.y" - { - if (((*yyvaluep).expr_vec)) { - for (auto ptr : *(((*yyvaluep).expr_vec))) { - delete ptr; - } - } - delete (((*yyvaluep).expr_vec)); +#line 185 "bison_parser.y" + { + if (((*yyvaluep).expr_vec)) { + for (auto ptr : *(((*yyvaluep).expr_vec))) { + delete ptr; } -#line 2556 "bison_parser.cpp" + } + delete (((*yyvaluep).expr_vec)); +} +#line 2559 "bison_parser.cpp" break; case YYSYMBOL_expr_alias: /* expr_alias */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2562 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2565 "bison_parser.cpp" break; case YYSYMBOL_expr: /* expr */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2568 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2571 "bison_parser.cpp" break; case YYSYMBOL_operand: /* operand */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2574 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2577 "bison_parser.cpp" break; case YYSYMBOL_scalar_expr: /* scalar_expr */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2580 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2583 "bison_parser.cpp" break; case YYSYMBOL_unary_expr: /* unary_expr */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2586 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2589 "bison_parser.cpp" break; case YYSYMBOL_binary_expr: /* binary_expr */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2592 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2595 "bison_parser.cpp" break; case YYSYMBOL_logic_expr: /* logic_expr */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2598 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2601 "bison_parser.cpp" break; case YYSYMBOL_in_expr: /* in_expr */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2604 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2607 "bison_parser.cpp" break; case YYSYMBOL_case_expr: /* case_expr */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2610 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2613 "bison_parser.cpp" break; case YYSYMBOL_case_list: /* case_list */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2616 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2619 "bison_parser.cpp" break; case YYSYMBOL_exists_expr: /* exists_expr */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2622 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2625 "bison_parser.cpp" break; case YYSYMBOL_comp_expr: /* comp_expr */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2628 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2631 "bison_parser.cpp" break; case YYSYMBOL_function_expr: /* function_expr */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2634 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2637 "bison_parser.cpp" break; case YYSYMBOL_opt_window: /* opt_window */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).window_description)); } -#line 2640 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).window_description)); } +#line 2643 "bison_parser.cpp" break; case YYSYMBOL_opt_partition: /* opt_partition */ -#line 182 "bison_parser.y" - { - if (((*yyvaluep).expr_vec)) { - for (auto ptr : *(((*yyvaluep).expr_vec))) { - delete ptr; - } - } - delete (((*yyvaluep).expr_vec)); +#line 185 "bison_parser.y" + { + if (((*yyvaluep).expr_vec)) { + for (auto ptr : *(((*yyvaluep).expr_vec))) { + delete ptr; } -#line 2653 "bison_parser.cpp" + } + delete (((*yyvaluep).expr_vec)); +} +#line 2656 "bison_parser.cpp" break; case YYSYMBOL_opt_frame_clause: /* opt_frame_clause */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).frame_description)); } -#line 2659 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).frame_description)); } +#line 2662 "bison_parser.cpp" break; case YYSYMBOL_frame_type: /* frame_type */ -#line 168 "bison_parser.y" - { } -#line 2665 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2668 "bison_parser.cpp" break; case YYSYMBOL_frame_bound: /* frame_bound */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).frame_bound)); } -#line 2671 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).frame_bound)); } +#line 2674 "bison_parser.cpp" break; case YYSYMBOL_extract_expr: /* extract_expr */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2677 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2680 "bison_parser.cpp" break; case YYSYMBOL_cast_expr: /* cast_expr */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2683 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2686 "bison_parser.cpp" break; case YYSYMBOL_datetime_field: /* datetime_field */ -#line 168 "bison_parser.y" - { } -#line 2689 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2692 "bison_parser.cpp" break; case YYSYMBOL_datetime_field_plural: /* datetime_field_plural */ -#line 168 "bison_parser.y" - { } -#line 2695 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2698 "bison_parser.cpp" break; case YYSYMBOL_duration_field: /* duration_field */ -#line 168 "bison_parser.y" - { } -#line 2701 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2704 "bison_parser.cpp" break; case YYSYMBOL_array_expr: /* array_expr */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2707 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2710 "bison_parser.cpp" break; case YYSYMBOL_array_index: /* array_index */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2713 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2716 "bison_parser.cpp" break; case YYSYMBOL_between_expr: /* between_expr */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2719 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2722 "bison_parser.cpp" break; case YYSYMBOL_column_name: /* column_name */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2725 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2728 "bison_parser.cpp" break; case YYSYMBOL_literal: /* literal */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2731 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2734 "bison_parser.cpp" break; case YYSYMBOL_string_literal: /* string_literal */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2737 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2740 "bison_parser.cpp" break; case YYSYMBOL_bool_literal: /* bool_literal */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2743 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2746 "bison_parser.cpp" break; case YYSYMBOL_num_literal: /* num_literal */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2749 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2752 "bison_parser.cpp" break; case YYSYMBOL_int_literal: /* int_literal */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2755 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2758 "bison_parser.cpp" break; case YYSYMBOL_null_literal: /* null_literal */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2761 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2764 "bison_parser.cpp" break; case YYSYMBOL_date_literal: /* date_literal */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2767 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2770 "bison_parser.cpp" break; case YYSYMBOL_interval_literal: /* interval_literal */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2773 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2776 "bison_parser.cpp" break; case YYSYMBOL_param_expr: /* param_expr */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2779 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2782 "bison_parser.cpp" break; case YYSYMBOL_table_ref: /* table_ref */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).table)); } -#line 2785 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).table)); } +#line 2788 "bison_parser.cpp" break; case YYSYMBOL_table_ref_atomic: /* table_ref_atomic */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).table)); } -#line 2791 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).table)); } +#line 2794 "bison_parser.cpp" break; case YYSYMBOL_nonjoin_table_ref_atomic: /* nonjoin_table_ref_atomic */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).table)); } -#line 2797 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).table)); } +#line 2800 "bison_parser.cpp" break; case YYSYMBOL_table_ref_commalist: /* table_ref_commalist */ -#line 182 "bison_parser.y" - { - if (((*yyvaluep).table_vec)) { - for (auto ptr : *(((*yyvaluep).table_vec))) { - delete ptr; - } - } - delete (((*yyvaluep).table_vec)); +#line 185 "bison_parser.y" + { + if (((*yyvaluep).table_vec)) { + for (auto ptr : *(((*yyvaluep).table_vec))) { + delete ptr; } -#line 2810 "bison_parser.cpp" + } + delete (((*yyvaluep).table_vec)); +} +#line 2813 "bison_parser.cpp" break; case YYSYMBOL_table_ref_name: /* table_ref_name */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).table)); } -#line 2816 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).table)); } +#line 2819 "bison_parser.cpp" break; case YYSYMBOL_table_ref_name_no_alias: /* table_ref_name_no_alias */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).table)); } -#line 2822 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).table)); } +#line 2825 "bison_parser.cpp" break; case YYSYMBOL_table_name: /* table_name */ -#line 169 "bison_parser.y" - { - free( (((*yyvaluep).table_name).name) ); - free( (((*yyvaluep).table_name).schema) ); - } -#line 2831 "bison_parser.cpp" +#line 172 "bison_parser.y" + { + free( (((*yyvaluep).table_name).name) ); + free( (((*yyvaluep).table_name).schema) ); +} +#line 2834 "bison_parser.cpp" break; case YYSYMBOL_opt_index_name: /* opt_index_name */ -#line 181 "bison_parser.y" - { free( (((*yyvaluep).sval)) ); } -#line 2837 "bison_parser.cpp" +#line 184 "bison_parser.y" + { free( (((*yyvaluep).sval)) ); } +#line 2840 "bison_parser.cpp" break; case YYSYMBOL_table_alias: /* table_alias */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).alias_t)); } -#line 2843 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).alias_t)); } +#line 2846 "bison_parser.cpp" break; case YYSYMBOL_opt_table_alias: /* opt_table_alias */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).alias_t)); } -#line 2849 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).alias_t)); } +#line 2852 "bison_parser.cpp" break; case YYSYMBOL_alias: /* alias */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).alias_t)); } -#line 2855 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).alias_t)); } +#line 2858 "bison_parser.cpp" break; case YYSYMBOL_opt_alias: /* opt_alias */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).alias_t)); } -#line 2861 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).alias_t)); } +#line 2864 "bison_parser.cpp" break; case YYSYMBOL_opt_locking_clause: /* opt_locking_clause */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).locking_clause_vec)); } -#line 2867 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).locking_clause_vec)); } +#line 2870 "bison_parser.cpp" break; case YYSYMBOL_opt_locking_clause_list: /* opt_locking_clause_list */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).locking_clause_vec)); } -#line 2873 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).locking_clause_vec)); } +#line 2876 "bison_parser.cpp" break; case YYSYMBOL_locking_clause: /* locking_clause */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).locking_t)); } -#line 2879 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).locking_t)); } +#line 2882 "bison_parser.cpp" break; case YYSYMBOL_row_lock_mode: /* row_lock_mode */ -#line 168 "bison_parser.y" - { } -#line 2885 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2888 "bison_parser.cpp" break; case YYSYMBOL_opt_row_lock_policy: /* opt_row_lock_policy */ -#line 168 "bison_parser.y" - { } -#line 2891 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2894 "bison_parser.cpp" break; case YYSYMBOL_opt_with_clause: /* opt_with_clause */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).with_description_vec)); } -#line 2897 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).with_description_vec)); } +#line 2900 "bison_parser.cpp" break; case YYSYMBOL_with_clause: /* with_clause */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).with_description_vec)); } -#line 2903 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).with_description_vec)); } +#line 2906 "bison_parser.cpp" break; case YYSYMBOL_with_description_list: /* with_description_list */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).with_description_vec)); } -#line 2909 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).with_description_vec)); } +#line 2912 "bison_parser.cpp" break; case YYSYMBOL_with_description: /* with_description */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).with_description_t)); } -#line 2915 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).with_description_t)); } +#line 2918 "bison_parser.cpp" break; case YYSYMBOL_join_clause: /* join_clause */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).table)); } -#line 2921 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).table)); } +#line 2924 "bison_parser.cpp" break; case YYSYMBOL_opt_join_type: /* opt_join_type */ -#line 168 "bison_parser.y" - { } -#line 2927 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2930 "bison_parser.cpp" break; case YYSYMBOL_join_condition: /* join_condition */ -#line 190 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2933 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2936 "bison_parser.cpp" break; case YYSYMBOL_ident_commalist: /* ident_commalist */ -#line 173 "bison_parser.y" - { - if (((*yyvaluep).str_vec)) { - for (auto ptr : *(((*yyvaluep).str_vec))) { - free(ptr); - } - } - delete (((*yyvaluep).str_vec)); +#line 176 "bison_parser.y" + { + if (((*yyvaluep).str_vec)) { + for (auto ptr : *(((*yyvaluep).str_vec))) { + free(ptr); } -#line 2946 "bison_parser.cpp" + } + delete (((*yyvaluep).str_vec)); +} +#line 2949 "bison_parser.cpp" break; default: @@ -3039,7 +3041,7 @@ YYLTYPE yylloc = yyloc_default; /* User initialization code. */ -#line 75 "bison_parser.y" +#line 76 "bison_parser.y" { // Initialize yylloc.first_column = 0; @@ -3050,7 +3052,7 @@ YYLTYPE yylloc = yyloc_default; yylloc.string_length = 0; } -#line 3054 "bison_parser.cpp" +#line 3057 "bison_parser.cpp" yylsp[0] = yylloc; goto yysetstate; @@ -3261,7 +3263,7 @@ YYLTYPE yylloc = yyloc_default; switch (yyn) { case 2: /* input: statement_list opt_semicolon */ -#line 322 "bison_parser.y" +#line 325 "bison_parser.y" { for (SQLStatement* stmt : *(yyvsp[-1].stmt_vec)) { // Transfers ownership of the statement. @@ -3279,236 +3281,236 @@ YYLTYPE yylloc = yyloc_default; } delete (yyvsp[-1].stmt_vec); } -#line 3283 "bison_parser.cpp" +#line 3286 "bison_parser.cpp" break; case 3: /* statement_list: statement */ -#line 341 "bison_parser.y" +#line 344 "bison_parser.y" { (yyvsp[0].statement)->stringLength = yylloc.string_length; yylloc.string_length = 0; (yyval.stmt_vec) = new std::vector(); (yyval.stmt_vec)->push_back((yyvsp[0].statement)); } -#line 3294 "bison_parser.cpp" +#line 3297 "bison_parser.cpp" break; case 4: /* statement_list: statement_list ';' statement */ -#line 347 "bison_parser.y" +#line 350 "bison_parser.y" { (yyvsp[0].statement)->stringLength = yylloc.string_length; yylloc.string_length = 0; (yyvsp[-2].stmt_vec)->push_back((yyvsp[0].statement)); (yyval.stmt_vec) = (yyvsp[-2].stmt_vec); } -#line 3305 "bison_parser.cpp" +#line 3308 "bison_parser.cpp" break; case 5: /* statement: prepare_statement opt_hints */ -#line 354 "bison_parser.y" +#line 357 "bison_parser.y" { (yyval.statement) = (yyvsp[-1].prep_stmt); (yyval.statement)->hints = (yyvsp[0].expr_vec); } -#line 3314 "bison_parser.cpp" +#line 3317 "bison_parser.cpp" break; case 6: /* statement: preparable_statement opt_hints */ -#line 358 "bison_parser.y" +#line 361 "bison_parser.y" { (yyval.statement) = (yyvsp[-1].statement); (yyval.statement)->hints = (yyvsp[0].expr_vec); } -#line 3323 "bison_parser.cpp" +#line 3326 "bison_parser.cpp" break; case 7: /* statement: show_statement */ -#line 362 "bison_parser.y" +#line 365 "bison_parser.y" { (yyval.statement) = (yyvsp[0].show_stmt); } -#line 3329 "bison_parser.cpp" +#line 3332 "bison_parser.cpp" break; case 8: /* statement: import_statement */ -#line 363 "bison_parser.y" +#line 366 "bison_parser.y" { (yyval.statement) = (yyvsp[0].import_stmt); } -#line 3335 "bison_parser.cpp" +#line 3338 "bison_parser.cpp" break; case 9: /* statement: export_statement */ -#line 364 "bison_parser.y" +#line 367 "bison_parser.y" { (yyval.statement) = (yyvsp[0].export_stmt); } -#line 3341 "bison_parser.cpp" +#line 3344 "bison_parser.cpp" break; case 10: /* preparable_statement: select_statement */ -#line 366 "bison_parser.y" +#line 369 "bison_parser.y" { (yyval.statement) = (yyvsp[0].select_stmt); } -#line 3347 "bison_parser.cpp" +#line 3350 "bison_parser.cpp" break; case 11: /* preparable_statement: create_statement */ -#line 367 "bison_parser.y" +#line 370 "bison_parser.y" { (yyval.statement) = (yyvsp[0].create_stmt); } -#line 3353 "bison_parser.cpp" +#line 3356 "bison_parser.cpp" break; case 12: /* preparable_statement: insert_statement */ -#line 368 "bison_parser.y" +#line 371 "bison_parser.y" { (yyval.statement) = (yyvsp[0].insert_stmt); } -#line 3359 "bison_parser.cpp" +#line 3362 "bison_parser.cpp" break; case 13: /* preparable_statement: delete_statement */ -#line 369 "bison_parser.y" +#line 372 "bison_parser.y" { (yyval.statement) = (yyvsp[0].delete_stmt); } -#line 3365 "bison_parser.cpp" +#line 3368 "bison_parser.cpp" break; case 14: /* preparable_statement: truncate_statement */ -#line 370 "bison_parser.y" +#line 373 "bison_parser.y" { (yyval.statement) = (yyvsp[0].delete_stmt); } -#line 3371 "bison_parser.cpp" +#line 3374 "bison_parser.cpp" break; case 15: /* preparable_statement: update_statement */ -#line 371 "bison_parser.y" +#line 374 "bison_parser.y" { (yyval.statement) = (yyvsp[0].update_stmt); } -#line 3377 "bison_parser.cpp" +#line 3380 "bison_parser.cpp" break; case 16: /* preparable_statement: drop_statement */ -#line 372 "bison_parser.y" +#line 375 "bison_parser.y" { (yyval.statement) = (yyvsp[0].drop_stmt); } -#line 3383 "bison_parser.cpp" +#line 3386 "bison_parser.cpp" break; case 17: /* preparable_statement: alter_statement */ -#line 373 "bison_parser.y" +#line 376 "bison_parser.y" { (yyval.statement) = (yyvsp[0].alter_stmt); } -#line 3389 "bison_parser.cpp" +#line 3392 "bison_parser.cpp" break; case 18: /* preparable_statement: execute_statement */ -#line 374 "bison_parser.y" +#line 377 "bison_parser.y" { (yyval.statement) = (yyvsp[0].exec_stmt); } -#line 3395 "bison_parser.cpp" +#line 3398 "bison_parser.cpp" break; case 19: /* preparable_statement: transaction_statement */ -#line 375 "bison_parser.y" +#line 378 "bison_parser.y" { (yyval.statement) = (yyvsp[0].transaction_stmt); } -#line 3401 "bison_parser.cpp" +#line 3404 "bison_parser.cpp" break; case 20: /* opt_hints: WITH HINT '(' hint_list ')' */ -#line 381 "bison_parser.y" +#line 384 "bison_parser.y" { (yyval.expr_vec) = (yyvsp[-1].expr_vec); } -#line 3407 "bison_parser.cpp" +#line 3410 "bison_parser.cpp" break; case 21: /* opt_hints: %empty */ -#line 382 "bison_parser.y" +#line 385 "bison_parser.y" { (yyval.expr_vec) = nullptr; } -#line 3413 "bison_parser.cpp" +#line 3416 "bison_parser.cpp" break; case 22: /* hint_list: hint */ -#line 384 "bison_parser.y" +#line 387 "bison_parser.y" { (yyval.expr_vec) = new std::vector(); (yyval.expr_vec)->push_back((yyvsp[0].expr)); } -#line 3422 "bison_parser.cpp" +#line 3425 "bison_parser.cpp" break; case 23: /* hint_list: hint_list ',' hint */ -#line 388 "bison_parser.y" +#line 391 "bison_parser.y" { (yyvsp[-2].expr_vec)->push_back((yyvsp[0].expr)); (yyval.expr_vec) = (yyvsp[-2].expr_vec); } -#line 3431 "bison_parser.cpp" +#line 3434 "bison_parser.cpp" break; case 24: /* hint: IDENTIFIER */ -#line 393 "bison_parser.y" +#line 396 "bison_parser.y" { (yyval.expr) = Expr::make(kExprHint); (yyval.expr)->name = (yyvsp[0].sval); } -#line 3440 "bison_parser.cpp" +#line 3443 "bison_parser.cpp" break; case 25: /* hint: IDENTIFIER '(' literal_list ')' */ -#line 397 "bison_parser.y" +#line 400 "bison_parser.y" { (yyval.expr) = Expr::make(kExprHint); (yyval.expr)->name = (yyvsp[-3].sval); (yyval.expr)->exprList = (yyvsp[-1].expr_vec); } -#line 3450 "bison_parser.cpp" +#line 3453 "bison_parser.cpp" break; case 26: /* transaction_statement: BEGIN opt_transaction_keyword */ -#line 407 "bison_parser.y" +#line 410 "bison_parser.y" { (yyval.transaction_stmt) = new TransactionStatement(kBeginTransaction); } -#line 3456 "bison_parser.cpp" +#line 3459 "bison_parser.cpp" break; case 27: /* transaction_statement: ROLLBACK opt_transaction_keyword */ -#line 408 "bison_parser.y" +#line 411 "bison_parser.y" { (yyval.transaction_stmt) = new TransactionStatement(kRollbackTransaction); } -#line 3462 "bison_parser.cpp" +#line 3465 "bison_parser.cpp" break; case 28: /* transaction_statement: COMMIT opt_transaction_keyword */ -#line 409 "bison_parser.y" +#line 412 "bison_parser.y" { (yyval.transaction_stmt) = new TransactionStatement(kCommitTransaction); } -#line 3468 "bison_parser.cpp" +#line 3471 "bison_parser.cpp" break; case 31: /* prepare_statement: PREPARE IDENTIFIER FROM prepare_target_query */ -#line 417 "bison_parser.y" +#line 420 "bison_parser.y" { (yyval.prep_stmt) = new PrepareStatement(); (yyval.prep_stmt)->name = (yyvsp[-2].sval); (yyval.prep_stmt)->query = (yyvsp[0].sval); } -#line 3478 "bison_parser.cpp" +#line 3481 "bison_parser.cpp" break; case 33: /* execute_statement: EXECUTE IDENTIFIER */ -#line 425 "bison_parser.y" +#line 428 "bison_parser.y" { (yyval.exec_stmt) = new ExecuteStatement(); (yyval.exec_stmt)->name = (yyvsp[0].sval); } -#line 3487 "bison_parser.cpp" +#line 3490 "bison_parser.cpp" break; case 34: /* execute_statement: EXECUTE IDENTIFIER '(' opt_literal_list ')' */ -#line 429 "bison_parser.y" +#line 432 "bison_parser.y" { (yyval.exec_stmt) = new ExecuteStatement(); (yyval.exec_stmt)->name = (yyvsp[-3].sval); (yyval.exec_stmt)->parameters = (yyvsp[-1].expr_vec); } -#line 3497 "bison_parser.cpp" +#line 3500 "bison_parser.cpp" break; case 35: /* import_statement: IMPORT FROM file_type FILE file_path INTO table_name */ -#line 440 "bison_parser.y" +#line 443 "bison_parser.y" { (yyval.import_stmt) = new ImportStatement((yyvsp[-4].import_type_t)); (yyval.import_stmt)->filePath = (yyvsp[-2].sval); (yyval.import_stmt)->schema = (yyvsp[0].table_name).schema; (yyval.import_stmt)->tableName = (yyvsp[0].table_name).name; } -#line 3508 "bison_parser.cpp" +#line 3511 "bison_parser.cpp" break; case 36: /* import_statement: COPY table_name FROM file_path opt_file_type opt_where */ -#line 446 "bison_parser.y" +#line 449 "bison_parser.y" { (yyval.import_stmt) = new ImportStatement((yyvsp[-1].import_type_t)); (yyval.import_stmt)->filePath = (yyvsp[-2].sval); @@ -3516,11 +3518,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.import_stmt)->tableName = (yyvsp[-4].table_name).name; (yyval.import_stmt)->whereClause = (yyvsp[0].expr); } -#line 3520 "bison_parser.cpp" +#line 3523 "bison_parser.cpp" break; case 37: /* file_type: IDENTIFIER */ -#line 454 "bison_parser.y" +#line 457 "bison_parser.y" { if (strcasecmp((yyvsp[0].sval), "csv") == 0) { (yyval.import_type_t) = kImportCSV; @@ -3535,79 +3537,79 @@ YYLTYPE yylloc = yyloc_default; } free((yyvsp[0].sval)); } -#line 3539 "bison_parser.cpp" +#line 3542 "bison_parser.cpp" break; case 38: /* file_path: string_literal */ -#line 469 "bison_parser.y" +#line 472 "bison_parser.y" { (yyval.sval) = strdup((yyvsp[0].expr)->name); delete (yyvsp[0].expr); } -#line 3548 "bison_parser.cpp" +#line 3551 "bison_parser.cpp" break; case 39: /* opt_file_type: WITH FORMAT file_type */ -#line 474 "bison_parser.y" +#line 477 "bison_parser.y" { (yyval.import_type_t) = (yyvsp[0].import_type_t); } -#line 3554 "bison_parser.cpp" +#line 3557 "bison_parser.cpp" break; case 40: /* opt_file_type: %empty */ -#line 475 "bison_parser.y" +#line 478 "bison_parser.y" { (yyval.import_type_t) = kImportAuto; } -#line 3560 "bison_parser.cpp" +#line 3563 "bison_parser.cpp" break; case 41: /* export_statement: COPY table_name TO file_path opt_file_type */ -#line 481 "bison_parser.y" +#line 484 "bison_parser.y" { (yyval.export_stmt) = new ExportStatement((yyvsp[0].import_type_t)); (yyval.export_stmt)->filePath = (yyvsp[-1].sval); (yyval.export_stmt)->schema = (yyvsp[-3].table_name).schema; (yyval.export_stmt)->tableName = (yyvsp[-3].table_name).name; } -#line 3571 "bison_parser.cpp" +#line 3574 "bison_parser.cpp" break; case 42: /* export_statement: COPY select_with_paren TO file_path opt_file_type */ -#line 487 "bison_parser.y" +#line 490 "bison_parser.y" { (yyval.export_stmt) = new ExportStatement((yyvsp[0].import_type_t)); (yyval.export_stmt)->filePath = (yyvsp[-1].sval); (yyval.export_stmt)->select = (yyvsp[-3].select_stmt); } -#line 3581 "bison_parser.cpp" +#line 3584 "bison_parser.cpp" break; case 43: /* show_statement: SHOW TABLES */ -#line 498 "bison_parser.y" +#line 501 "bison_parser.y" { (yyval.show_stmt) = new ShowStatement(kShowTables); } -#line 3587 "bison_parser.cpp" +#line 3590 "bison_parser.cpp" break; case 44: /* show_statement: SHOW COLUMNS table_name */ -#line 499 "bison_parser.y" +#line 502 "bison_parser.y" { (yyval.show_stmt) = new ShowStatement(kShowColumns); (yyval.show_stmt)->schema = (yyvsp[0].table_name).schema; (yyval.show_stmt)->name = (yyvsp[0].table_name).name; } -#line 3597 "bison_parser.cpp" +#line 3600 "bison_parser.cpp" break; case 45: /* show_statement: DESCRIBE table_name */ -#line 504 "bison_parser.y" +#line 507 "bison_parser.y" { (yyval.show_stmt) = new ShowStatement(kShowColumns); (yyval.show_stmt)->schema = (yyvsp[0].table_name).schema; (yyval.show_stmt)->name = (yyvsp[0].table_name).name; } -#line 3607 "bison_parser.cpp" +#line 3610 "bison_parser.cpp" break; case 46: /* create_statement: CREATE TABLE opt_not_exists table_name FROM IDENTIFIER FILE file_path */ -#line 515 "bison_parser.y" +#line 518 "bison_parser.y" { (yyval.create_stmt) = new CreateStatement(kCreateTableFromTbl); (yyval.create_stmt)->ifNotExists = (yyvsp[-5].bval); @@ -3621,11 +3623,11 @@ YYLTYPE yylloc = yyloc_default; free((yyvsp[-2].sval)); (yyval.create_stmt)->filePath = (yyvsp[0].sval); } -#line 3625 "bison_parser.cpp" +#line 3628 "bison_parser.cpp" break; case 47: /* create_statement: CREATE TABLE opt_not_exists table_name '(' table_elem_commalist ')' */ -#line 528 "bison_parser.y" +#line 531 "bison_parser.y" { (yyval.create_stmt) = new CreateStatement(kCreateTable); (yyval.create_stmt)->ifNotExists = (yyvsp[-4].bval); @@ -3638,11 +3640,11 @@ YYLTYPE yylloc = yyloc_default; YYERROR; } } -#line 3642 "bison_parser.cpp" +#line 3645 "bison_parser.cpp" break; case 48: /* create_statement: CREATE TABLE opt_not_exists table_name AS select_statement */ -#line 540 "bison_parser.y" +#line 543 "bison_parser.y" { (yyval.create_stmt) = new CreateStatement(kCreateTable); (yyval.create_stmt)->ifNotExists = (yyvsp[-3].bval); @@ -3650,11 +3652,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.create_stmt)->tableName = (yyvsp[-2].table_name).name; (yyval.create_stmt)->select = (yyvsp[0].select_stmt); } -#line 3654 "bison_parser.cpp" +#line 3657 "bison_parser.cpp" break; case 49: /* create_statement: CREATE INDEX opt_not_exists opt_index_name ON table_name '(' ident_commalist ')' */ -#line 547 "bison_parser.y" +#line 550 "bison_parser.y" { (yyval.create_stmt) = new CreateStatement(kCreateIndex); (yyval.create_stmt)->indexName = (yyvsp[-5].sval); @@ -3662,11 +3664,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.create_stmt)->tableName = (yyvsp[-3].table_name).name; (yyval.create_stmt)->indexColumns = (yyvsp[-1].str_vec); } -#line 3666 "bison_parser.cpp" +#line 3669 "bison_parser.cpp" break; case 50: /* create_statement: CREATE VIEW opt_not_exists table_name opt_column_list AS select_statement */ -#line 554 "bison_parser.y" +#line 557 "bison_parser.y" { (yyval.create_stmt) = new CreateStatement(kCreateView); (yyval.create_stmt)->ifNotExists = (yyvsp[-4].bval); @@ -3675,371 +3677,371 @@ YYLTYPE yylloc = yyloc_default; (yyval.create_stmt)->viewColumns = (yyvsp[-2].str_vec); (yyval.create_stmt)->select = (yyvsp[0].select_stmt); } -#line 3679 "bison_parser.cpp" +#line 3682 "bison_parser.cpp" break; case 51: /* opt_not_exists: IF NOT EXISTS */ -#line 563 "bison_parser.y" +#line 566 "bison_parser.y" { (yyval.bval) = true; } -#line 3685 "bison_parser.cpp" +#line 3688 "bison_parser.cpp" break; case 52: /* opt_not_exists: %empty */ -#line 564 "bison_parser.y" +#line 567 "bison_parser.y" { (yyval.bval) = false; } -#line 3691 "bison_parser.cpp" +#line 3694 "bison_parser.cpp" break; case 53: /* table_elem_commalist: table_elem */ -#line 566 "bison_parser.y" +#line 569 "bison_parser.y" { (yyval.table_element_vec) = new std::vector(); (yyval.table_element_vec)->push_back((yyvsp[0].table_element_t)); } -#line 3700 "bison_parser.cpp" +#line 3703 "bison_parser.cpp" break; case 54: /* table_elem_commalist: table_elem_commalist ',' table_elem */ -#line 570 "bison_parser.y" +#line 573 "bison_parser.y" { (yyvsp[-2].table_element_vec)->push_back((yyvsp[0].table_element_t)); (yyval.table_element_vec) = (yyvsp[-2].table_element_vec); } -#line 3709 "bison_parser.cpp" +#line 3712 "bison_parser.cpp" break; case 55: /* table_elem: column_def */ -#line 575 "bison_parser.y" +#line 578 "bison_parser.y" { (yyval.table_element_t) = (yyvsp[0].column_t); } -#line 3715 "bison_parser.cpp" +#line 3718 "bison_parser.cpp" break; case 56: /* table_elem: table_constraint */ -#line 576 "bison_parser.y" +#line 579 "bison_parser.y" { (yyval.table_element_t) = (yyvsp[0].table_constraint_t); } -#line 3721 "bison_parser.cpp" +#line 3724 "bison_parser.cpp" break; case 57: /* column_def: IDENTIFIER column_type opt_column_constraints */ -#line 578 "bison_parser.y" +#line 581 "bison_parser.y" { (yyval.column_t) = new ColumnDefinition((yyvsp[-2].sval), (yyvsp[-1].column_type_t), (yyvsp[0].column_constraint_set)); if (!(yyval.column_t)->trySetNullableExplicit()) { yyerror(&yyloc, result, scanner, ("Conflicting nullability constraints for " + std::string{(yyvsp[-2].sval)}).c_str()); } } -#line 3732 "bison_parser.cpp" +#line 3735 "bison_parser.cpp" break; case 58: /* column_type: BIGINT */ -#line 585 "bison_parser.y" +#line 588 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::BIGINT}; } -#line 3738 "bison_parser.cpp" +#line 3741 "bison_parser.cpp" break; case 59: /* column_type: BOOLEAN */ -#line 586 "bison_parser.y" +#line 589 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::BOOLEAN}; } -#line 3744 "bison_parser.cpp" +#line 3747 "bison_parser.cpp" break; case 60: /* column_type: CHAR '(' INTVAL ')' */ -#line 587 "bison_parser.y" +#line 590 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::CHAR, (yyvsp[-1].ival)}; } -#line 3750 "bison_parser.cpp" +#line 3753 "bison_parser.cpp" break; case 61: /* column_type: CHARACTER_VARYING '(' INTVAL ')' */ -#line 588 "bison_parser.y" +#line 591 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::VARCHAR, (yyvsp[-1].ival)}; } -#line 3756 "bison_parser.cpp" +#line 3759 "bison_parser.cpp" break; case 62: /* column_type: DATE */ -#line 589 "bison_parser.y" +#line 592 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::DATE}; } -#line 3762 "bison_parser.cpp" +#line 3765 "bison_parser.cpp" break; case 63: /* column_type: DATETIME */ -#line 590 "bison_parser.y" +#line 593 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::DATETIME}; } -#line 3768 "bison_parser.cpp" +#line 3771 "bison_parser.cpp" break; case 64: /* column_type: DECIMAL opt_decimal_specification */ -#line 591 "bison_parser.y" +#line 594 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::DECIMAL, 0, (yyvsp[0].ival_pair)->first, (yyvsp[0].ival_pair)->second}; delete (yyvsp[0].ival_pair); } -#line 3777 "bison_parser.cpp" +#line 3780 "bison_parser.cpp" break; case 65: /* column_type: DOUBLE */ -#line 595 "bison_parser.y" +#line 598 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::DOUBLE}; } -#line 3783 "bison_parser.cpp" +#line 3786 "bison_parser.cpp" break; case 66: /* column_type: FLOAT */ -#line 596 "bison_parser.y" +#line 599 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::FLOAT}; } -#line 3789 "bison_parser.cpp" +#line 3792 "bison_parser.cpp" break; case 67: /* column_type: INT */ -#line 597 "bison_parser.y" +#line 600 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::INT}; } -#line 3795 "bison_parser.cpp" +#line 3798 "bison_parser.cpp" break; case 68: /* column_type: INTEGER */ -#line 598 "bison_parser.y" +#line 601 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::INT}; } -#line 3801 "bison_parser.cpp" +#line 3804 "bison_parser.cpp" break; case 69: /* column_type: LONG */ -#line 599 "bison_parser.y" +#line 602 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::LONG}; } -#line 3807 "bison_parser.cpp" +#line 3810 "bison_parser.cpp" break; case 70: /* column_type: REAL */ -#line 600 "bison_parser.y" +#line 603 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::REAL}; } -#line 3813 "bison_parser.cpp" +#line 3816 "bison_parser.cpp" break; case 71: /* column_type: SMALLINT */ -#line 601 "bison_parser.y" +#line 604 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::SMALLINT}; } -#line 3819 "bison_parser.cpp" +#line 3822 "bison_parser.cpp" break; case 72: /* column_type: TEXT */ -#line 602 "bison_parser.y" +#line 605 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::TEXT}; } -#line 3825 "bison_parser.cpp" +#line 3828 "bison_parser.cpp" break; case 73: /* column_type: TIME opt_time_precision */ -#line 603 "bison_parser.y" +#line 606 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::TIME, 0, (yyvsp[0].ival)}; } -#line 3831 "bison_parser.cpp" +#line 3834 "bison_parser.cpp" break; case 74: /* column_type: TIMESTAMP */ -#line 604 "bison_parser.y" +#line 607 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::DATETIME}; } -#line 3837 "bison_parser.cpp" +#line 3840 "bison_parser.cpp" break; case 75: /* column_type: VARCHAR '(' INTVAL ')' */ -#line 605 "bison_parser.y" +#line 608 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::VARCHAR, (yyvsp[-1].ival)}; } -#line 3843 "bison_parser.cpp" +#line 3846 "bison_parser.cpp" break; case 76: /* opt_time_precision: '(' INTVAL ')' */ -#line 607 "bison_parser.y" +#line 610 "bison_parser.y" { (yyval.ival) = (yyvsp[-1].ival); } -#line 3849 "bison_parser.cpp" +#line 3852 "bison_parser.cpp" break; case 77: /* opt_time_precision: %empty */ -#line 608 "bison_parser.y" +#line 611 "bison_parser.y" { (yyval.ival) = 0; } -#line 3855 "bison_parser.cpp" +#line 3858 "bison_parser.cpp" break; case 78: /* opt_decimal_specification: '(' INTVAL ',' INTVAL ')' */ -#line 610 "bison_parser.y" +#line 613 "bison_parser.y" { (yyval.ival_pair) = new std::pair{(yyvsp[-3].ival), (yyvsp[-1].ival)}; } -#line 3861 "bison_parser.cpp" +#line 3864 "bison_parser.cpp" break; case 79: /* opt_decimal_specification: '(' INTVAL ')' */ -#line 611 "bison_parser.y" +#line 614 "bison_parser.y" { (yyval.ival_pair) = new std::pair{(yyvsp[-1].ival), 0}; } -#line 3867 "bison_parser.cpp" +#line 3870 "bison_parser.cpp" break; case 80: /* opt_decimal_specification: %empty */ -#line 612 "bison_parser.y" +#line 615 "bison_parser.y" { (yyval.ival_pair) = new std::pair{0, 0}; } -#line 3873 "bison_parser.cpp" +#line 3876 "bison_parser.cpp" break; case 81: /* opt_column_constraints: column_constraint_set */ -#line 614 "bison_parser.y" +#line 617 "bison_parser.y" { (yyval.column_constraint_set) = (yyvsp[0].column_constraint_set); } -#line 3879 "bison_parser.cpp" +#line 3882 "bison_parser.cpp" break; case 82: /* opt_column_constraints: %empty */ -#line 615 "bison_parser.y" +#line 618 "bison_parser.y" { (yyval.column_constraint_set) = new std::unordered_set(); } -#line 3885 "bison_parser.cpp" +#line 3888 "bison_parser.cpp" break; case 83: /* column_constraint_set: column_constraint */ -#line 617 "bison_parser.y" +#line 620 "bison_parser.y" { (yyval.column_constraint_set) = new std::unordered_set(); (yyval.column_constraint_set)->insert((yyvsp[0].column_constraint_t)); } -#line 3894 "bison_parser.cpp" +#line 3897 "bison_parser.cpp" break; case 84: /* column_constraint_set: column_constraint_set column_constraint */ -#line 621 "bison_parser.y" +#line 624 "bison_parser.y" { (yyvsp[-1].column_constraint_set)->insert((yyvsp[0].column_constraint_t)); (yyval.column_constraint_set) = (yyvsp[-1].column_constraint_set); } -#line 3903 "bison_parser.cpp" +#line 3906 "bison_parser.cpp" break; case 85: /* column_constraint: PRIMARY KEY */ -#line 626 "bison_parser.y" +#line 629 "bison_parser.y" { (yyval.column_constraint_t) = ConstraintType::PrimaryKey; } -#line 3909 "bison_parser.cpp" +#line 3912 "bison_parser.cpp" break; case 86: /* column_constraint: UNIQUE */ -#line 627 "bison_parser.y" +#line 630 "bison_parser.y" { (yyval.column_constraint_t) = ConstraintType::Unique; } -#line 3915 "bison_parser.cpp" +#line 3918 "bison_parser.cpp" break; case 87: /* column_constraint: NULL */ -#line 628 "bison_parser.y" +#line 631 "bison_parser.y" { (yyval.column_constraint_t) = ConstraintType::Null; } -#line 3921 "bison_parser.cpp" +#line 3924 "bison_parser.cpp" break; case 88: /* column_constraint: NOT NULL */ -#line 629 "bison_parser.y" +#line 632 "bison_parser.y" { (yyval.column_constraint_t) = ConstraintType::NotNull; } -#line 3927 "bison_parser.cpp" +#line 3930 "bison_parser.cpp" break; case 89: /* table_constraint: PRIMARY KEY '(' ident_commalist ')' */ -#line 631 "bison_parser.y" +#line 634 "bison_parser.y" { (yyval.table_constraint_t) = new TableConstraint(ConstraintType::PrimaryKey, (yyvsp[-1].str_vec)); } -#line 3933 "bison_parser.cpp" +#line 3936 "bison_parser.cpp" break; case 90: /* table_constraint: UNIQUE '(' ident_commalist ')' */ -#line 632 "bison_parser.y" +#line 635 "bison_parser.y" { (yyval.table_constraint_t) = new TableConstraint(ConstraintType::Unique, (yyvsp[-1].str_vec)); } -#line 3939 "bison_parser.cpp" +#line 3942 "bison_parser.cpp" break; case 91: /* drop_statement: DROP TABLE opt_exists table_name */ -#line 640 "bison_parser.y" +#line 643 "bison_parser.y" { (yyval.drop_stmt) = new DropStatement(kDropTable); (yyval.drop_stmt)->ifExists = (yyvsp[-1].bval); (yyval.drop_stmt)->schema = (yyvsp[0].table_name).schema; (yyval.drop_stmt)->name = (yyvsp[0].table_name).name; } -#line 3950 "bison_parser.cpp" +#line 3953 "bison_parser.cpp" break; case 92: /* drop_statement: DROP VIEW opt_exists table_name */ -#line 646 "bison_parser.y" +#line 649 "bison_parser.y" { (yyval.drop_stmt) = new DropStatement(kDropView); (yyval.drop_stmt)->ifExists = (yyvsp[-1].bval); (yyval.drop_stmt)->schema = (yyvsp[0].table_name).schema; (yyval.drop_stmt)->name = (yyvsp[0].table_name).name; } -#line 3961 "bison_parser.cpp" +#line 3964 "bison_parser.cpp" break; case 93: /* drop_statement: DEALLOCATE PREPARE IDENTIFIER */ -#line 652 "bison_parser.y" +#line 655 "bison_parser.y" { (yyval.drop_stmt) = new DropStatement(kDropPreparedStatement); (yyval.drop_stmt)->ifExists = false; (yyval.drop_stmt)->name = (yyvsp[0].sval); } -#line 3971 "bison_parser.cpp" +#line 3974 "bison_parser.cpp" break; case 94: /* drop_statement: DROP INDEX opt_exists IDENTIFIER */ -#line 658 "bison_parser.y" +#line 661 "bison_parser.y" { (yyval.drop_stmt) = new DropStatement(kDropIndex); (yyval.drop_stmt)->ifExists = (yyvsp[-1].bval); (yyval.drop_stmt)->indexName = (yyvsp[0].sval); } -#line 3981 "bison_parser.cpp" +#line 3984 "bison_parser.cpp" break; case 95: /* opt_exists: IF EXISTS */ -#line 664 "bison_parser.y" +#line 667 "bison_parser.y" { (yyval.bval) = true; } -#line 3987 "bison_parser.cpp" +#line 3990 "bison_parser.cpp" break; case 96: /* opt_exists: %empty */ -#line 665 "bison_parser.y" +#line 668 "bison_parser.y" { (yyval.bval) = false; } -#line 3993 "bison_parser.cpp" +#line 3996 "bison_parser.cpp" break; case 97: /* alter_statement: ALTER TABLE opt_exists table_name alter_action */ -#line 672 "bison_parser.y" +#line 675 "bison_parser.y" { (yyval.alter_stmt) = new AlterStatement((yyvsp[-1].table_name).name, (yyvsp[0].alter_action_t)); (yyval.alter_stmt)->ifTableExists = (yyvsp[-2].bval); (yyval.alter_stmt)->schema = (yyvsp[-1].table_name).schema; } -#line 4003 "bison_parser.cpp" +#line 4006 "bison_parser.cpp" break; case 98: /* alter_action: drop_action */ -#line 678 "bison_parser.y" +#line 681 "bison_parser.y" { (yyval.alter_action_t) = (yyvsp[0].drop_action_t); } -#line 4009 "bison_parser.cpp" +#line 4012 "bison_parser.cpp" break; case 99: /* drop_action: DROP COLUMN opt_exists IDENTIFIER */ -#line 680 "bison_parser.y" +#line 683 "bison_parser.y" { (yyval.drop_action_t) = new DropColumnAction((yyvsp[0].sval)); (yyval.drop_action_t)->ifExists = (yyvsp[-1].bval); } -#line 4018 "bison_parser.cpp" +#line 4021 "bison_parser.cpp" break; case 100: /* delete_statement: DELETE FROM table_name opt_where */ -#line 690 "bison_parser.y" +#line 693 "bison_parser.y" { (yyval.delete_stmt) = new DeleteStatement(); (yyval.delete_stmt)->schema = (yyvsp[-1].table_name).schema; (yyval.delete_stmt)->tableName = (yyvsp[-1].table_name).name; (yyval.delete_stmt)->expr = (yyvsp[0].expr); } -#line 4029 "bison_parser.cpp" +#line 4032 "bison_parser.cpp" break; case 101: /* truncate_statement: TRUNCATE table_name */ -#line 697 "bison_parser.y" +#line 700 "bison_parser.y" { (yyval.delete_stmt) = new DeleteStatement(); (yyval.delete_stmt)->schema = (yyvsp[0].table_name).schema; (yyval.delete_stmt)->tableName = (yyvsp[0].table_name).name; } -#line 4039 "bison_parser.cpp" +#line 4042 "bison_parser.cpp" break; case 102: /* insert_statement: INSERT INTO table_name opt_column_list VALUES '(' literal_list ')' */ -#line 708 "bison_parser.y" +#line 711 "bison_parser.y" { (yyval.insert_stmt) = new InsertStatement(kInsertValues); (yyval.insert_stmt)->schema = (yyvsp[-5].table_name).schema; @@ -4047,11 +4049,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.insert_stmt)->columns = (yyvsp[-4].str_vec); (yyval.insert_stmt)->values = (yyvsp[-1].expr_vec); } -#line 4051 "bison_parser.cpp" +#line 4054 "bison_parser.cpp" break; case 103: /* insert_statement: INSERT INTO table_name opt_column_list select_no_paren */ -#line 715 "bison_parser.y" +#line 718 "bison_parser.y" { (yyval.insert_stmt) = new InsertStatement(kInsertSelect); (yyval.insert_stmt)->schema = (yyvsp[-2].table_name).schema; @@ -4059,80 +4061,80 @@ YYLTYPE yylloc = yyloc_default; (yyval.insert_stmt)->columns = (yyvsp[-1].str_vec); (yyval.insert_stmt)->select = (yyvsp[0].select_stmt); } -#line 4063 "bison_parser.cpp" +#line 4066 "bison_parser.cpp" break; case 104: /* opt_column_list: '(' ident_commalist ')' */ -#line 723 "bison_parser.y" +#line 726 "bison_parser.y" { (yyval.str_vec) = (yyvsp[-1].str_vec); } -#line 4069 "bison_parser.cpp" +#line 4072 "bison_parser.cpp" break; case 105: /* opt_column_list: %empty */ -#line 724 "bison_parser.y" +#line 727 "bison_parser.y" { (yyval.str_vec) = nullptr; } -#line 4075 "bison_parser.cpp" +#line 4078 "bison_parser.cpp" break; case 106: /* update_statement: UPDATE table_ref_name_no_alias SET update_clause_commalist opt_where */ -#line 731 "bison_parser.y" +#line 734 "bison_parser.y" { (yyval.update_stmt) = new UpdateStatement(); (yyval.update_stmt)->table = (yyvsp[-3].table); (yyval.update_stmt)->updates = (yyvsp[-1].update_vec); (yyval.update_stmt)->where = (yyvsp[0].expr); } -#line 4086 "bison_parser.cpp" +#line 4089 "bison_parser.cpp" break; case 107: /* update_clause_commalist: update_clause */ -#line 738 "bison_parser.y" +#line 741 "bison_parser.y" { (yyval.update_vec) = new std::vector(); (yyval.update_vec)->push_back((yyvsp[0].update_t)); } -#line 4095 "bison_parser.cpp" +#line 4098 "bison_parser.cpp" break; case 108: /* update_clause_commalist: update_clause_commalist ',' update_clause */ -#line 742 "bison_parser.y" +#line 745 "bison_parser.y" { (yyvsp[-2].update_vec)->push_back((yyvsp[0].update_t)); (yyval.update_vec) = (yyvsp[-2].update_vec); } -#line 4104 "bison_parser.cpp" +#line 4107 "bison_parser.cpp" break; case 109: /* update_clause: IDENTIFIER '=' expr */ -#line 747 "bison_parser.y" +#line 750 "bison_parser.y" { (yyval.update_t) = new UpdateClause(); (yyval.update_t)->column = (yyvsp[-2].sval); (yyval.update_t)->value = (yyvsp[0].expr); } -#line 4114 "bison_parser.cpp" +#line 4117 "bison_parser.cpp" break; case 110: /* select_statement: opt_with_clause select_with_paren */ -#line 757 "bison_parser.y" +#line 760 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[0].select_stmt); (yyval.select_stmt)->withDescriptions = (yyvsp[-1].with_description_vec); } -#line 4123 "bison_parser.cpp" +#line 4126 "bison_parser.cpp" break; case 111: /* select_statement: opt_with_clause select_no_paren */ -#line 761 "bison_parser.y" +#line 764 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[0].select_stmt); (yyval.select_stmt)->withDescriptions = (yyvsp[-1].with_description_vec); } -#line 4132 "bison_parser.cpp" +#line 4135 "bison_parser.cpp" break; case 112: /* select_statement: opt_with_clause select_with_paren set_operator select_within_set_operation opt_order opt_limit */ -#line 765 "bison_parser.y" +#line 768 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-4].select_stmt); if ((yyval.select_stmt)->setOperations == nullptr) { @@ -4144,17 +4146,17 @@ YYLTYPE yylloc = yyloc_default; (yyval.select_stmt)->setOperations->back()->resultLimit = (yyvsp[0].limit); (yyval.select_stmt)->withDescriptions = (yyvsp[-5].with_description_vec); } -#line 4148 "bison_parser.cpp" +#line 4151 "bison_parser.cpp" break; case 115: /* select_within_set_operation_no_parentheses: select_clause */ -#line 779 "bison_parser.y" +#line 782 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[0].select_stmt); } -#line 4154 "bison_parser.cpp" +#line 4157 "bison_parser.cpp" break; case 116: /* select_within_set_operation_no_parentheses: select_clause set_operator select_within_set_operation */ -#line 780 "bison_parser.y" +#line 783 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-2].select_stmt); if ((yyval.select_stmt)->setOperations == nullptr) { @@ -4163,23 +4165,23 @@ YYLTYPE yylloc = yyloc_default; (yyval.select_stmt)->setOperations->push_back((yyvsp[-1].set_operator_t)); (yyval.select_stmt)->setOperations->back()->nestedSelectStatement = (yyvsp[0].select_stmt); } -#line 4167 "bison_parser.cpp" +#line 4170 "bison_parser.cpp" break; case 117: /* select_with_paren: '(' select_no_paren ')' */ -#line 789 "bison_parser.y" +#line 792 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-1].select_stmt); } -#line 4173 "bison_parser.cpp" +#line 4176 "bison_parser.cpp" break; case 118: /* select_with_paren: '(' select_with_paren ')' */ -#line 790 "bison_parser.y" +#line 793 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-1].select_stmt); } -#line 4179 "bison_parser.cpp" +#line 4182 "bison_parser.cpp" break; case 119: /* select_no_paren: select_clause opt_order opt_limit opt_locking_clause */ -#line 792 "bison_parser.y" +#line 795 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-3].select_stmt); (yyval.select_stmt)->order = (yyvsp[-2].order_vec); @@ -4194,11 +4196,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.select_stmt)->lockings = (yyvsp[0].locking_clause_vec); } } -#line 4198 "bison_parser.cpp" +#line 4201 "bison_parser.cpp" break; case 120: /* select_no_paren: select_clause set_operator select_within_set_operation opt_order opt_limit opt_locking_clause */ -#line 806 "bison_parser.y" +#line 809 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-5].select_stmt); if ((yyval.select_stmt)->setOperations == nullptr) { @@ -4210,59 +4212,59 @@ YYLTYPE yylloc = yyloc_default; (yyval.select_stmt)->setOperations->back()->resultLimit = (yyvsp[-1].limit); (yyval.select_stmt)->lockings = (yyvsp[0].locking_clause_vec); } -#line 4214 "bison_parser.cpp" +#line 4217 "bison_parser.cpp" break; case 121: /* set_operator: set_type opt_all */ -#line 818 "bison_parser.y" +#line 821 "bison_parser.y" { (yyval.set_operator_t) = (yyvsp[-1].set_operator_t); (yyval.set_operator_t)->isAll = (yyvsp[0].bval); } -#line 4223 "bison_parser.cpp" +#line 4226 "bison_parser.cpp" break; case 122: /* set_type: UNION */ -#line 823 "bison_parser.y" +#line 826 "bison_parser.y" { (yyval.set_operator_t) = new SetOperation(); (yyval.set_operator_t)->setType = SetType::kSetUnion; } -#line 4232 "bison_parser.cpp" +#line 4235 "bison_parser.cpp" break; case 123: /* set_type: INTERSECT */ -#line 827 "bison_parser.y" +#line 830 "bison_parser.y" { (yyval.set_operator_t) = new SetOperation(); (yyval.set_operator_t)->setType = SetType::kSetIntersect; } -#line 4241 "bison_parser.cpp" +#line 4244 "bison_parser.cpp" break; case 124: /* set_type: EXCEPT */ -#line 831 "bison_parser.y" +#line 834 "bison_parser.y" { (yyval.set_operator_t) = new SetOperation(); (yyval.set_operator_t)->setType = SetType::kSetExcept; } -#line 4250 "bison_parser.cpp" +#line 4253 "bison_parser.cpp" break; case 125: /* opt_all: ALL */ -#line 836 "bison_parser.y" +#line 839 "bison_parser.y" { (yyval.bval) = true; } -#line 4256 "bison_parser.cpp" +#line 4259 "bison_parser.cpp" break; case 126: /* opt_all: %empty */ -#line 837 "bison_parser.y" +#line 840 "bison_parser.y" { (yyval.bval) = false; } -#line 4262 "bison_parser.cpp" +#line 4265 "bison_parser.cpp" break; case 127: /* select_clause: SELECT opt_top opt_distinct select_list opt_from_clause opt_where opt_group */ -#line 839 "bison_parser.y" +#line 842 "bison_parser.y" { (yyval.select_stmt) = new SelectStatement(); (yyval.select_stmt)->limit = (yyvsp[-5].limit); @@ -4272,231 +4274,231 @@ YYLTYPE yylloc = yyloc_default; (yyval.select_stmt)->whereClause = (yyvsp[-1].expr); (yyval.select_stmt)->groupBy = (yyvsp[0].group_t); } -#line 4276 "bison_parser.cpp" +#line 4279 "bison_parser.cpp" break; case 128: /* opt_distinct: DISTINCT */ -#line 849 "bison_parser.y" +#line 852 "bison_parser.y" { (yyval.bval) = true; } -#line 4282 "bison_parser.cpp" +#line 4285 "bison_parser.cpp" break; case 129: /* opt_distinct: %empty */ -#line 850 "bison_parser.y" +#line 853 "bison_parser.y" { (yyval.bval) = false; } -#line 4288 "bison_parser.cpp" +#line 4291 "bison_parser.cpp" break; case 131: /* opt_from_clause: from_clause */ -#line 854 "bison_parser.y" +#line 857 "bison_parser.y" { (yyval.table) = (yyvsp[0].table); } -#line 4294 "bison_parser.cpp" +#line 4297 "bison_parser.cpp" break; case 132: /* opt_from_clause: %empty */ -#line 855 "bison_parser.y" +#line 858 "bison_parser.y" { (yyval.table) = nullptr; } -#line 4300 "bison_parser.cpp" +#line 4303 "bison_parser.cpp" break; case 133: /* from_clause: FROM table_ref */ -#line 857 "bison_parser.y" +#line 860 "bison_parser.y" { (yyval.table) = (yyvsp[0].table); } -#line 4306 "bison_parser.cpp" +#line 4309 "bison_parser.cpp" break; case 134: /* opt_where: WHERE expr */ -#line 859 "bison_parser.y" +#line 862 "bison_parser.y" { (yyval.expr) = (yyvsp[0].expr); } -#line 4312 "bison_parser.cpp" +#line 4315 "bison_parser.cpp" break; case 135: /* opt_where: %empty */ -#line 860 "bison_parser.y" +#line 863 "bison_parser.y" { (yyval.expr) = nullptr; } -#line 4318 "bison_parser.cpp" +#line 4321 "bison_parser.cpp" break; case 136: /* opt_group: GROUP BY expr_list opt_having */ -#line 862 "bison_parser.y" +#line 865 "bison_parser.y" { (yyval.group_t) = new GroupByDescription(); (yyval.group_t)->columns = (yyvsp[-1].expr_vec); (yyval.group_t)->having = (yyvsp[0].expr); } -#line 4328 "bison_parser.cpp" +#line 4331 "bison_parser.cpp" break; case 137: /* opt_group: %empty */ -#line 867 "bison_parser.y" +#line 870 "bison_parser.y" { (yyval.group_t) = nullptr; } -#line 4334 "bison_parser.cpp" +#line 4337 "bison_parser.cpp" break; case 138: /* opt_having: HAVING expr */ -#line 869 "bison_parser.y" +#line 872 "bison_parser.y" { (yyval.expr) = (yyvsp[0].expr); } -#line 4340 "bison_parser.cpp" +#line 4343 "bison_parser.cpp" break; case 139: /* opt_having: %empty */ -#line 870 "bison_parser.y" +#line 873 "bison_parser.y" { (yyval.expr) = nullptr; } -#line 4346 "bison_parser.cpp" +#line 4349 "bison_parser.cpp" break; case 140: /* opt_order: ORDER BY order_list */ -#line 872 "bison_parser.y" +#line 875 "bison_parser.y" { (yyval.order_vec) = (yyvsp[0].order_vec); } -#line 4352 "bison_parser.cpp" +#line 4355 "bison_parser.cpp" break; case 141: /* opt_order: %empty */ -#line 873 "bison_parser.y" +#line 876 "bison_parser.y" { (yyval.order_vec) = nullptr; } -#line 4358 "bison_parser.cpp" +#line 4361 "bison_parser.cpp" break; case 142: /* order_list: order_desc */ -#line 875 "bison_parser.y" +#line 878 "bison_parser.y" { (yyval.order_vec) = new std::vector(); (yyval.order_vec)->push_back((yyvsp[0].order)); } -#line 4367 "bison_parser.cpp" +#line 4370 "bison_parser.cpp" break; case 143: /* order_list: order_list ',' order_desc */ -#line 879 "bison_parser.y" +#line 882 "bison_parser.y" { (yyvsp[-2].order_vec)->push_back((yyvsp[0].order)); (yyval.order_vec) = (yyvsp[-2].order_vec); } -#line 4376 "bison_parser.cpp" +#line 4379 "bison_parser.cpp" break; case 144: /* order_desc: expr opt_order_type */ -#line 884 "bison_parser.y" +#line 887 "bison_parser.y" { (yyval.order) = new OrderDescription((yyvsp[0].order_type), (yyvsp[-1].expr)); } -#line 4382 "bison_parser.cpp" +#line 4385 "bison_parser.cpp" break; case 145: /* opt_order_type: ASC */ -#line 886 "bison_parser.y" +#line 889 "bison_parser.y" { (yyval.order_type) = kOrderAsc; } -#line 4388 "bison_parser.cpp" +#line 4391 "bison_parser.cpp" break; case 146: /* opt_order_type: DESC */ -#line 887 "bison_parser.y" +#line 890 "bison_parser.y" { (yyval.order_type) = kOrderDesc; } -#line 4394 "bison_parser.cpp" +#line 4397 "bison_parser.cpp" break; case 147: /* opt_order_type: %empty */ -#line 888 "bison_parser.y" +#line 891 "bison_parser.y" { (yyval.order_type) = kOrderAsc; } -#line 4400 "bison_parser.cpp" +#line 4403 "bison_parser.cpp" break; case 148: /* opt_top: TOP int_literal */ -#line 892 "bison_parser.y" +#line 895 "bison_parser.y" { (yyval.limit) = new LimitDescription((yyvsp[0].expr), nullptr); } -#line 4406 "bison_parser.cpp" +#line 4409 "bison_parser.cpp" break; case 149: /* opt_top: %empty */ -#line 893 "bison_parser.y" +#line 896 "bison_parser.y" { (yyval.limit) = nullptr; } -#line 4412 "bison_parser.cpp" +#line 4415 "bison_parser.cpp" break; case 150: /* opt_limit: LIMIT expr */ -#line 895 "bison_parser.y" +#line 898 "bison_parser.y" { (yyval.limit) = new LimitDescription((yyvsp[0].expr), nullptr); } -#line 4418 "bison_parser.cpp" +#line 4421 "bison_parser.cpp" break; case 151: /* opt_limit: OFFSET expr */ -#line 896 "bison_parser.y" +#line 899 "bison_parser.y" { (yyval.limit) = new LimitDescription(nullptr, (yyvsp[0].expr)); } -#line 4424 "bison_parser.cpp" +#line 4427 "bison_parser.cpp" break; case 152: /* opt_limit: LIMIT expr OFFSET expr */ -#line 897 "bison_parser.y" +#line 900 "bison_parser.y" { (yyval.limit) = new LimitDescription((yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 4430 "bison_parser.cpp" +#line 4433 "bison_parser.cpp" break; case 153: /* opt_limit: LIMIT ALL */ -#line 898 "bison_parser.y" +#line 901 "bison_parser.y" { (yyval.limit) = new LimitDescription(nullptr, nullptr); } -#line 4436 "bison_parser.cpp" +#line 4439 "bison_parser.cpp" break; case 154: /* opt_limit: LIMIT ALL OFFSET expr */ -#line 899 "bison_parser.y" +#line 902 "bison_parser.y" { (yyval.limit) = new LimitDescription(nullptr, (yyvsp[0].expr)); } -#line 4442 "bison_parser.cpp" +#line 4445 "bison_parser.cpp" break; case 155: /* opt_limit: %empty */ -#line 900 "bison_parser.y" +#line 903 "bison_parser.y" { (yyval.limit) = nullptr; } -#line 4448 "bison_parser.cpp" +#line 4451 "bison_parser.cpp" break; case 156: /* expr_list: expr_alias */ -#line 905 "bison_parser.y" +#line 908 "bison_parser.y" { (yyval.expr_vec) = new std::vector(); (yyval.expr_vec)->push_back((yyvsp[0].expr)); } -#line 4457 "bison_parser.cpp" +#line 4460 "bison_parser.cpp" break; case 157: /* expr_list: expr_list ',' expr_alias */ -#line 909 "bison_parser.y" +#line 912 "bison_parser.y" { (yyvsp[-2].expr_vec)->push_back((yyvsp[0].expr)); (yyval.expr_vec) = (yyvsp[-2].expr_vec); } -#line 4466 "bison_parser.cpp" +#line 4469 "bison_parser.cpp" break; case 158: /* opt_literal_list: literal_list */ -#line 914 "bison_parser.y" +#line 917 "bison_parser.y" { (yyval.expr_vec) = (yyvsp[0].expr_vec); } -#line 4472 "bison_parser.cpp" +#line 4475 "bison_parser.cpp" break; case 159: /* opt_literal_list: %empty */ -#line 915 "bison_parser.y" +#line 918 "bison_parser.y" { (yyval.expr_vec) = nullptr; } -#line 4478 "bison_parser.cpp" +#line 4481 "bison_parser.cpp" break; case 160: /* literal_list: literal */ -#line 917 "bison_parser.y" +#line 920 "bison_parser.y" { (yyval.expr_vec) = new std::vector(); (yyval.expr_vec)->push_back((yyvsp[0].expr)); } -#line 4487 "bison_parser.cpp" +#line 4490 "bison_parser.cpp" break; case 161: /* literal_list: literal_list ',' literal */ -#line 921 "bison_parser.y" +#line 924 "bison_parser.y" { (yyvsp[-2].expr_vec)->push_back((yyvsp[0].expr)); (yyval.expr_vec) = (yyvsp[-2].expr_vec); } -#line 4496 "bison_parser.cpp" +#line 4499 "bison_parser.cpp" break; case 162: /* expr_alias: expr opt_alias */ -#line 926 "bison_parser.y" +#line 929 "bison_parser.y" { (yyval.expr) = (yyvsp[-1].expr); if ((yyvsp[0].alias_t)) { @@ -4504,507 +4506,507 @@ YYLTYPE yylloc = yyloc_default; delete (yyvsp[0].alias_t); } } -#line 4508 "bison_parser.cpp" +#line 4511 "bison_parser.cpp" break; case 168: /* operand: '(' expr ')' */ -#line 936 "bison_parser.y" +#line 939 "bison_parser.y" { (yyval.expr) = (yyvsp[-1].expr); } -#line 4514 "bison_parser.cpp" +#line 4517 "bison_parser.cpp" break; case 178: /* operand: '(' select_no_paren ')' */ -#line 938 "bison_parser.y" +#line 941 "bison_parser.y" { (yyval.expr) = Expr::makeSelect((yyvsp[-1].select_stmt)); } -#line 4522 "bison_parser.cpp" +#line 4525 "bison_parser.cpp" break; case 181: /* unary_expr: '-' operand */ -#line 944 "bison_parser.y" +#line 947 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpUnaryMinus, (yyvsp[0].expr)); } -#line 4528 "bison_parser.cpp" +#line 4531 "bison_parser.cpp" break; case 182: /* unary_expr: NOT operand */ -#line 945 "bison_parser.y" +#line 948 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, (yyvsp[0].expr)); } -#line 4534 "bison_parser.cpp" +#line 4537 "bison_parser.cpp" break; case 183: /* unary_expr: operand ISNULL */ -#line 946 "bison_parser.y" +#line 949 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpIsNull, (yyvsp[-1].expr)); } -#line 4540 "bison_parser.cpp" +#line 4543 "bison_parser.cpp" break; case 184: /* unary_expr: operand IS NULL */ -#line 947 "bison_parser.y" +#line 950 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpIsNull, (yyvsp[-2].expr)); } -#line 4546 "bison_parser.cpp" +#line 4549 "bison_parser.cpp" break; case 185: /* unary_expr: operand IS NOT NULL */ -#line 948 "bison_parser.y" +#line 951 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeOpUnary(kOpIsNull, (yyvsp[-3].expr))); } -#line 4552 "bison_parser.cpp" +#line 4555 "bison_parser.cpp" break; case 187: /* binary_expr: operand '-' operand */ -#line 950 "bison_parser.y" +#line 953 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpMinus, (yyvsp[0].expr)); } -#line 4558 "bison_parser.cpp" +#line 4561 "bison_parser.cpp" break; case 188: /* binary_expr: operand '+' operand */ -#line 951 "bison_parser.y" +#line 954 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpPlus, (yyvsp[0].expr)); } -#line 4564 "bison_parser.cpp" +#line 4567 "bison_parser.cpp" break; case 189: /* binary_expr: operand '/' operand */ -#line 952 "bison_parser.y" +#line 955 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpSlash, (yyvsp[0].expr)); } -#line 4570 "bison_parser.cpp" +#line 4573 "bison_parser.cpp" break; case 190: /* binary_expr: operand '*' operand */ -#line 953 "bison_parser.y" +#line 956 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpAsterisk, (yyvsp[0].expr)); } -#line 4576 "bison_parser.cpp" +#line 4579 "bison_parser.cpp" break; case 191: /* binary_expr: operand '%' operand */ -#line 954 "bison_parser.y" +#line 957 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpPercentage, (yyvsp[0].expr)); } -#line 4582 "bison_parser.cpp" +#line 4585 "bison_parser.cpp" break; case 192: /* binary_expr: operand '^' operand */ -#line 955 "bison_parser.y" +#line 958 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpCaret, (yyvsp[0].expr)); } -#line 4588 "bison_parser.cpp" +#line 4591 "bison_parser.cpp" break; case 193: /* binary_expr: operand LIKE operand */ -#line 956 "bison_parser.y" +#line 959 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpLike, (yyvsp[0].expr)); } -#line 4594 "bison_parser.cpp" +#line 4597 "bison_parser.cpp" break; case 194: /* binary_expr: operand NOT LIKE operand */ -#line 957 "bison_parser.y" +#line 960 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-3].expr), kOpNotLike, (yyvsp[0].expr)); } -#line 4600 "bison_parser.cpp" +#line 4603 "bison_parser.cpp" break; case 195: /* binary_expr: operand ILIKE operand */ -#line 958 "bison_parser.y" +#line 961 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpILike, (yyvsp[0].expr)); } -#line 4606 "bison_parser.cpp" +#line 4609 "bison_parser.cpp" break; case 196: /* binary_expr: operand CONCAT operand */ -#line 959 "bison_parser.y" +#line 962 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpConcat, (yyvsp[0].expr)); } -#line 4612 "bison_parser.cpp" +#line 4615 "bison_parser.cpp" break; case 197: /* logic_expr: expr AND expr */ -#line 961 "bison_parser.y" +#line 964 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpAnd, (yyvsp[0].expr)); } -#line 4618 "bison_parser.cpp" +#line 4621 "bison_parser.cpp" break; case 198: /* logic_expr: expr OR expr */ -#line 962 "bison_parser.y" +#line 965 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpOr, (yyvsp[0].expr)); } -#line 4624 "bison_parser.cpp" +#line 4627 "bison_parser.cpp" break; case 199: /* in_expr: operand IN '(' expr_list ')' */ -#line 964 "bison_parser.y" +#line 967 "bison_parser.y" { (yyval.expr) = Expr::makeInOperator((yyvsp[-4].expr), (yyvsp[-1].expr_vec)); } -#line 4630 "bison_parser.cpp" +#line 4633 "bison_parser.cpp" break; case 200: /* in_expr: operand NOT IN '(' expr_list ')' */ -#line 965 "bison_parser.y" +#line 968 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeInOperator((yyvsp[-5].expr), (yyvsp[-1].expr_vec))); } -#line 4636 "bison_parser.cpp" +#line 4639 "bison_parser.cpp" break; case 201: /* in_expr: operand IN '(' select_no_paren ')' */ -#line 966 "bison_parser.y" +#line 969 "bison_parser.y" { (yyval.expr) = Expr::makeInOperator((yyvsp[-4].expr), (yyvsp[-1].select_stmt)); } -#line 4642 "bison_parser.cpp" +#line 4645 "bison_parser.cpp" break; case 202: /* in_expr: operand NOT IN '(' select_no_paren ')' */ -#line 967 "bison_parser.y" +#line 970 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeInOperator((yyvsp[-5].expr), (yyvsp[-1].select_stmt))); } -#line 4648 "bison_parser.cpp" +#line 4651 "bison_parser.cpp" break; case 203: /* case_expr: CASE expr case_list END */ -#line 971 "bison_parser.y" +#line 974 "bison_parser.y" { (yyval.expr) = Expr::makeCase((yyvsp[-2].expr), (yyvsp[-1].expr), nullptr); } -#line 4654 "bison_parser.cpp" +#line 4657 "bison_parser.cpp" break; case 204: /* case_expr: CASE expr case_list ELSE expr END */ -#line 972 "bison_parser.y" +#line 975 "bison_parser.y" { (yyval.expr) = Expr::makeCase((yyvsp[-4].expr), (yyvsp[-3].expr), (yyvsp[-1].expr)); } -#line 4660 "bison_parser.cpp" +#line 4663 "bison_parser.cpp" break; case 205: /* case_expr: CASE case_list END */ -#line 973 "bison_parser.y" +#line 976 "bison_parser.y" { (yyval.expr) = Expr::makeCase(nullptr, (yyvsp[-1].expr), nullptr); } -#line 4666 "bison_parser.cpp" +#line 4669 "bison_parser.cpp" break; case 206: /* case_expr: CASE case_list ELSE expr END */ -#line 974 "bison_parser.y" +#line 977 "bison_parser.y" { (yyval.expr) = Expr::makeCase(nullptr, (yyvsp[-3].expr), (yyvsp[-1].expr)); } -#line 4672 "bison_parser.cpp" +#line 4675 "bison_parser.cpp" break; case 207: /* case_list: WHEN expr THEN expr */ -#line 976 "bison_parser.y" +#line 979 "bison_parser.y" { (yyval.expr) = Expr::makeCaseList(Expr::makeCaseListElement((yyvsp[-2].expr), (yyvsp[0].expr))); } -#line 4678 "bison_parser.cpp" +#line 4681 "bison_parser.cpp" break; case 208: /* case_list: case_list WHEN expr THEN expr */ -#line 977 "bison_parser.y" +#line 980 "bison_parser.y" { (yyval.expr) = Expr::caseListAppend((yyvsp[-4].expr), Expr::makeCaseListElement((yyvsp[-2].expr), (yyvsp[0].expr))); } -#line 4684 "bison_parser.cpp" +#line 4687 "bison_parser.cpp" break; case 209: /* exists_expr: EXISTS '(' select_no_paren ')' */ -#line 979 "bison_parser.y" +#line 982 "bison_parser.y" { (yyval.expr) = Expr::makeExists((yyvsp[-1].select_stmt)); } -#line 4690 "bison_parser.cpp" +#line 4693 "bison_parser.cpp" break; case 210: /* exists_expr: NOT EXISTS '(' select_no_paren ')' */ -#line 980 "bison_parser.y" +#line 983 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeExists((yyvsp[-1].select_stmt))); } -#line 4696 "bison_parser.cpp" +#line 4699 "bison_parser.cpp" break; case 211: /* comp_expr: operand '=' operand */ -#line 982 "bison_parser.y" +#line 985 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpEquals, (yyvsp[0].expr)); } -#line 4702 "bison_parser.cpp" +#line 4705 "bison_parser.cpp" break; case 212: /* comp_expr: operand EQUALS operand */ -#line 983 "bison_parser.y" +#line 986 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpEquals, (yyvsp[0].expr)); } -#line 4708 "bison_parser.cpp" +#line 4711 "bison_parser.cpp" break; case 213: /* comp_expr: operand NOTEQUALS operand */ -#line 984 "bison_parser.y" +#line 987 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpNotEquals, (yyvsp[0].expr)); } -#line 4714 "bison_parser.cpp" +#line 4717 "bison_parser.cpp" break; case 214: /* comp_expr: operand '<' operand */ -#line 985 "bison_parser.y" +#line 988 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpLess, (yyvsp[0].expr)); } -#line 4720 "bison_parser.cpp" +#line 4723 "bison_parser.cpp" break; case 215: /* comp_expr: operand '>' operand */ -#line 986 "bison_parser.y" +#line 989 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpGreater, (yyvsp[0].expr)); } -#line 4726 "bison_parser.cpp" +#line 4729 "bison_parser.cpp" break; case 216: /* comp_expr: operand LESSEQ operand */ -#line 987 "bison_parser.y" +#line 990 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpLessEq, (yyvsp[0].expr)); } -#line 4732 "bison_parser.cpp" +#line 4735 "bison_parser.cpp" break; case 217: /* comp_expr: operand GREATEREQ operand */ -#line 988 "bison_parser.y" +#line 991 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpGreaterEq, (yyvsp[0].expr)); } -#line 4738 "bison_parser.cpp" +#line 4741 "bison_parser.cpp" break; case 218: /* function_expr: IDENTIFIER '(' ')' opt_window */ -#line 992 "bison_parser.y" +#line 995 "bison_parser.y" { (yyval.expr) = Expr::makeFunctionRef((yyvsp[-3].sval), new std::vector(), false, (yyvsp[0].window_description)); } -#line 4744 "bison_parser.cpp" +#line 4747 "bison_parser.cpp" break; case 219: /* function_expr: IDENTIFIER '(' opt_distinct expr_list ')' opt_window */ -#line 993 "bison_parser.y" +#line 996 "bison_parser.y" { (yyval.expr) = Expr::makeFunctionRef((yyvsp[-5].sval), (yyvsp[-2].expr_vec), (yyvsp[-3].bval), (yyvsp[0].window_description)); } -#line 4750 "bison_parser.cpp" +#line 4753 "bison_parser.cpp" break; case 220: /* opt_window: OVER '(' opt_partition opt_order opt_frame_clause ')' */ -#line 997 "bison_parser.y" +#line 1000 "bison_parser.y" { (yyval.window_description) = new WindowDescription((yyvsp[-3].expr_vec), (yyvsp[-2].order_vec), (yyvsp[-1].frame_description)); } -#line 4756 "bison_parser.cpp" +#line 4759 "bison_parser.cpp" break; case 221: /* opt_window: %empty */ -#line 998 "bison_parser.y" +#line 1001 "bison_parser.y" { (yyval.window_description) = nullptr; } -#line 4762 "bison_parser.cpp" +#line 4765 "bison_parser.cpp" break; case 222: /* opt_partition: PARTITION BY expr_list */ -#line 1000 "bison_parser.y" +#line 1003 "bison_parser.y" { (yyval.expr_vec) = (yyvsp[0].expr_vec); } -#line 4768 "bison_parser.cpp" +#line 4771 "bison_parser.cpp" break; case 223: /* opt_partition: %empty */ -#line 1001 "bison_parser.y" +#line 1004 "bison_parser.y" { (yyval.expr_vec) = nullptr; } -#line 4774 "bison_parser.cpp" +#line 4777 "bison_parser.cpp" break; case 224: /* opt_frame_clause: frame_type frame_bound */ -#line 1006 "bison_parser.y" +#line 1009 "bison_parser.y" { (yyval.frame_description) = new FrameDescription{(yyvsp[-1].frame_type), (yyvsp[0].frame_bound), new FrameBound{0, kCurrentRow, false}}; } -#line 4780 "bison_parser.cpp" +#line 4783 "bison_parser.cpp" break; case 225: /* opt_frame_clause: frame_type BETWEEN frame_bound AND frame_bound */ -#line 1007 "bison_parser.y" +#line 1010 "bison_parser.y" { (yyval.frame_description) = new FrameDescription{(yyvsp[-4].frame_type), (yyvsp[-2].frame_bound), (yyvsp[0].frame_bound)}; } -#line 4786 "bison_parser.cpp" +#line 4789 "bison_parser.cpp" break; case 226: /* opt_frame_clause: %empty */ -#line 1008 "bison_parser.y" +#line 1011 "bison_parser.y" { (yyval.frame_description) = new FrameDescription{kRange, new FrameBound{0, kPreceding, true}, new FrameBound{0, kCurrentRow, false}}; } -#line 4794 "bison_parser.cpp" +#line 4797 "bison_parser.cpp" break; case 227: /* frame_type: RANGE */ -#line 1012 "bison_parser.y" +#line 1015 "bison_parser.y" { (yyval.frame_type) = kRange; } -#line 4800 "bison_parser.cpp" +#line 4803 "bison_parser.cpp" break; case 228: /* frame_type: ROWS */ -#line 1013 "bison_parser.y" +#line 1016 "bison_parser.y" { (yyval.frame_type) = kRows; } -#line 4806 "bison_parser.cpp" +#line 4809 "bison_parser.cpp" break; case 229: /* frame_type: GROUPS */ -#line 1014 "bison_parser.y" +#line 1017 "bison_parser.y" { (yyval.frame_type) = kGroups; } -#line 4812 "bison_parser.cpp" +#line 4815 "bison_parser.cpp" break; case 230: /* frame_bound: UNBOUNDED PRECEDING */ -#line 1016 "bison_parser.y" +#line 1019 "bison_parser.y" { (yyval.frame_bound) = new FrameBound{0, kPreceding, true}; } -#line 4818 "bison_parser.cpp" +#line 4821 "bison_parser.cpp" break; case 231: /* frame_bound: INTVAL PRECEDING */ -#line 1017 "bison_parser.y" +#line 1020 "bison_parser.y" { (yyval.frame_bound) = new FrameBound{(yyvsp[-1].ival), kPreceding, false}; } -#line 4824 "bison_parser.cpp" +#line 4827 "bison_parser.cpp" break; case 232: /* frame_bound: UNBOUNDED FOLLOWING */ -#line 1018 "bison_parser.y" +#line 1021 "bison_parser.y" { (yyval.frame_bound) = new FrameBound{0, kFollowing, true}; } -#line 4830 "bison_parser.cpp" +#line 4833 "bison_parser.cpp" break; case 233: /* frame_bound: INTVAL FOLLOWING */ -#line 1019 "bison_parser.y" +#line 1022 "bison_parser.y" { (yyval.frame_bound) = new FrameBound{(yyvsp[-1].ival), kFollowing, false}; } -#line 4836 "bison_parser.cpp" +#line 4839 "bison_parser.cpp" break; case 234: /* frame_bound: CURRENT_ROW */ -#line 1020 "bison_parser.y" +#line 1023 "bison_parser.y" { (yyval.frame_bound) = new FrameBound{0, kCurrentRow, false}; } -#line 4842 "bison_parser.cpp" +#line 4845 "bison_parser.cpp" break; case 235: /* extract_expr: EXTRACT '(' datetime_field FROM expr ')' */ -#line 1022 "bison_parser.y" +#line 1025 "bison_parser.y" { (yyval.expr) = Expr::makeExtract((yyvsp[-3].datetime_field), (yyvsp[-1].expr)); } -#line 4848 "bison_parser.cpp" +#line 4851 "bison_parser.cpp" break; case 236: /* cast_expr: CAST '(' expr AS column_type ')' */ -#line 1024 "bison_parser.y" +#line 1027 "bison_parser.y" { (yyval.expr) = Expr::makeCast((yyvsp[-3].expr), (yyvsp[-1].column_type_t)); } -#line 4854 "bison_parser.cpp" +#line 4857 "bison_parser.cpp" break; case 237: /* datetime_field: SECOND */ -#line 1026 "bison_parser.y" +#line 1029 "bison_parser.y" { (yyval.datetime_field) = kDatetimeSecond; } -#line 4860 "bison_parser.cpp" +#line 4863 "bison_parser.cpp" break; case 238: /* datetime_field: MINUTE */ -#line 1027 "bison_parser.y" +#line 1030 "bison_parser.y" { (yyval.datetime_field) = kDatetimeMinute; } -#line 4866 "bison_parser.cpp" +#line 4869 "bison_parser.cpp" break; case 239: /* datetime_field: HOUR */ -#line 1028 "bison_parser.y" +#line 1031 "bison_parser.y" { (yyval.datetime_field) = kDatetimeHour; } -#line 4872 "bison_parser.cpp" +#line 4875 "bison_parser.cpp" break; case 240: /* datetime_field: DAY */ -#line 1029 "bison_parser.y" +#line 1032 "bison_parser.y" { (yyval.datetime_field) = kDatetimeDay; } -#line 4878 "bison_parser.cpp" +#line 4881 "bison_parser.cpp" break; case 241: /* datetime_field: MONTH */ -#line 1030 "bison_parser.y" +#line 1033 "bison_parser.y" { (yyval.datetime_field) = kDatetimeMonth; } -#line 4884 "bison_parser.cpp" +#line 4887 "bison_parser.cpp" break; case 242: /* datetime_field: YEAR */ -#line 1031 "bison_parser.y" +#line 1034 "bison_parser.y" { (yyval.datetime_field) = kDatetimeYear; } -#line 4890 "bison_parser.cpp" +#line 4893 "bison_parser.cpp" break; case 243: /* datetime_field_plural: SECONDS */ -#line 1033 "bison_parser.y" +#line 1036 "bison_parser.y" { (yyval.datetime_field) = kDatetimeSecond; } -#line 4896 "bison_parser.cpp" +#line 4899 "bison_parser.cpp" break; case 244: /* datetime_field_plural: MINUTES */ -#line 1034 "bison_parser.y" +#line 1037 "bison_parser.y" { (yyval.datetime_field) = kDatetimeMinute; } -#line 4902 "bison_parser.cpp" +#line 4905 "bison_parser.cpp" break; case 245: /* datetime_field_plural: HOURS */ -#line 1035 "bison_parser.y" +#line 1038 "bison_parser.y" { (yyval.datetime_field) = kDatetimeHour; } -#line 4908 "bison_parser.cpp" +#line 4911 "bison_parser.cpp" break; case 246: /* datetime_field_plural: DAYS */ -#line 1036 "bison_parser.y" +#line 1039 "bison_parser.y" { (yyval.datetime_field) = kDatetimeDay; } -#line 4914 "bison_parser.cpp" +#line 4917 "bison_parser.cpp" break; case 247: /* datetime_field_plural: MONTHS */ -#line 1037 "bison_parser.y" +#line 1040 "bison_parser.y" { (yyval.datetime_field) = kDatetimeMonth; } -#line 4920 "bison_parser.cpp" +#line 4923 "bison_parser.cpp" break; case 248: /* datetime_field_plural: YEARS */ -#line 1038 "bison_parser.y" +#line 1041 "bison_parser.y" { (yyval.datetime_field) = kDatetimeYear; } -#line 4926 "bison_parser.cpp" +#line 4929 "bison_parser.cpp" break; case 251: /* array_expr: ARRAY '[' expr_list ']' */ -#line 1042 "bison_parser.y" +#line 1045 "bison_parser.y" { (yyval.expr) = Expr::makeArray((yyvsp[-1].expr_vec)); } -#line 4932 "bison_parser.cpp" +#line 4935 "bison_parser.cpp" break; case 252: /* array_index: operand '[' int_literal ']' */ -#line 1044 "bison_parser.y" +#line 1047 "bison_parser.y" { (yyval.expr) = Expr::makeArrayIndex((yyvsp[-3].expr), (yyvsp[-1].expr)->ival); } -#line 4938 "bison_parser.cpp" +#line 4941 "bison_parser.cpp" break; case 253: /* between_expr: operand BETWEEN operand AND operand */ -#line 1046 "bison_parser.y" +#line 1049 "bison_parser.y" { (yyval.expr) = Expr::makeBetween((yyvsp[-4].expr), (yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 4944 "bison_parser.cpp" +#line 4947 "bison_parser.cpp" break; case 254: /* column_name: IDENTIFIER */ -#line 1048 "bison_parser.y" +#line 1051 "bison_parser.y" { (yyval.expr) = Expr::makeColumnRef((yyvsp[0].sval)); } -#line 4950 "bison_parser.cpp" +#line 4953 "bison_parser.cpp" break; case 255: /* column_name: IDENTIFIER '.' IDENTIFIER */ -#line 1049 "bison_parser.y" +#line 1052 "bison_parser.y" { (yyval.expr) = Expr::makeColumnRef((yyvsp[-2].sval), (yyvsp[0].sval)); } -#line 4956 "bison_parser.cpp" +#line 4959 "bison_parser.cpp" break; case 256: /* column_name: '*' */ -#line 1050 "bison_parser.y" +#line 1053 "bison_parser.y" { (yyval.expr) = Expr::makeStar(); } -#line 4962 "bison_parser.cpp" +#line 4965 "bison_parser.cpp" break; case 257: /* column_name: IDENTIFIER '.' '*' */ -#line 1051 "bison_parser.y" +#line 1054 "bison_parser.y" { (yyval.expr) = Expr::makeStar((yyvsp[-2].sval)); } -#line 4968 "bison_parser.cpp" +#line 4971 "bison_parser.cpp" break; case 265: /* string_literal: STRING */ -#line 1055 "bison_parser.y" +#line 1058 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral((yyvsp[0].sval)); } -#line 4974 "bison_parser.cpp" +#line 4977 "bison_parser.cpp" break; case 266: /* bool_literal: TRUE */ -#line 1057 "bison_parser.y" +#line 1060 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral(true); } -#line 4980 "bison_parser.cpp" +#line 4983 "bison_parser.cpp" break; case 267: /* bool_literal: FALSE */ -#line 1058 "bison_parser.y" +#line 1061 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral(false); } -#line 4986 "bison_parser.cpp" +#line 4989 "bison_parser.cpp" break; case 268: /* num_literal: FLOATVAL */ -#line 1060 "bison_parser.y" +#line 1063 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral((yyvsp[0].fval)); } -#line 4992 "bison_parser.cpp" +#line 4995 "bison_parser.cpp" break; case 270: /* int_literal: INTVAL */ -#line 1063 "bison_parser.y" +#line 1066 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral((yyvsp[0].ival)); } -#line 4998 "bison_parser.cpp" +#line 5001 "bison_parser.cpp" break; case 271: /* null_literal: NULL */ -#line 1065 "bison_parser.y" +#line 1068 "bison_parser.y" { (yyval.expr) = Expr::makeNullLiteral(); } -#line 5004 "bison_parser.cpp" +#line 5007 "bison_parser.cpp" break; case 272: /* date_literal: DATE STRING */ -#line 1067 "bison_parser.y" +#line 1070 "bison_parser.y" { int day{0}, month{0}, year{0}, chars_parsed{0}; // If the whole string is parsed, chars_parsed points to the terminating null byte after the last character @@ -5015,20 +5017,20 @@ YYLTYPE yylloc = yyloc_default; } (yyval.expr) = Expr::makeDateLiteral((yyvsp[0].sval)); } -#line 5019 "bison_parser.cpp" +#line 5022 "bison_parser.cpp" break; case 273: /* interval_literal: int_literal duration_field */ -#line 1078 "bison_parser.y" +#line 1081 "bison_parser.y" { (yyval.expr) = Expr::makeIntervalLiteral((yyvsp[-1].expr)->ival, (yyvsp[0].datetime_field)); delete (yyvsp[-1].expr); } -#line 5028 "bison_parser.cpp" +#line 5031 "bison_parser.cpp" break; case 274: /* interval_literal: INTERVAL STRING datetime_field */ -#line 1082 "bison_parser.y" +#line 1085 "bison_parser.y" { int duration{0}, chars_parsed{0}; // If the whole string is parsed, chars_parsed points to the terminating null byte after the last character @@ -5040,11 +5042,11 @@ YYLTYPE yylloc = yyloc_default; free((yyvsp[-1].sval)); (yyval.expr) = Expr::makeIntervalLiteral(duration, (yyvsp[0].datetime_field)); } -#line 5044 "bison_parser.cpp" +#line 5047 "bison_parser.cpp" break; case 275: /* interval_literal: INTERVAL STRING */ -#line 1093 "bison_parser.y" +#line 1096 "bison_parser.y" { int duration{0}, chars_parsed{0}; // 'seconds' and 'minutes' are the longest accepted interval qualifiers (7 chars) + null byte @@ -5076,61 +5078,61 @@ YYLTYPE yylloc = yyloc_default; } (yyval.expr) = Expr::makeIntervalLiteral(duration, unit); } -#line 5080 "bison_parser.cpp" +#line 5083 "bison_parser.cpp" break; case 276: /* param_expr: '?' */ -#line 1125 "bison_parser.y" +#line 1128 "bison_parser.y" { (yyval.expr) = Expr::makeParameter(yylloc.total_column); (yyval.expr)->ival2 = yyloc.param_list.size(); yyloc.param_list.push_back((yyval.expr)); } -#line 5090 "bison_parser.cpp" +#line 5093 "bison_parser.cpp" break; case 278: /* table_ref: table_ref_commalist ',' table_ref_atomic */ -#line 1134 "bison_parser.y" +#line 1137 "bison_parser.y" { (yyvsp[-2].table_vec)->push_back((yyvsp[0].table)); auto tbl = new TableRef(kTableCrossProduct); tbl->list = (yyvsp[-2].table_vec); (yyval.table) = tbl; } -#line 5101 "bison_parser.cpp" +#line 5104 "bison_parser.cpp" break; case 282: /* nonjoin_table_ref_atomic: '(' select_statement ')' opt_table_alias */ -#line 1143 "bison_parser.y" +#line 1146 "bison_parser.y" { auto tbl = new TableRef(kTableSelect); tbl->select = (yyvsp[-2].select_stmt); tbl->alias = (yyvsp[0].alias_t); (yyval.table) = tbl; } -#line 5112 "bison_parser.cpp" +#line 5115 "bison_parser.cpp" break; case 283: /* table_ref_commalist: table_ref_atomic */ -#line 1150 "bison_parser.y" +#line 1153 "bison_parser.y" { (yyval.table_vec) = new std::vector(); (yyval.table_vec)->push_back((yyvsp[0].table)); } -#line 5121 "bison_parser.cpp" +#line 5124 "bison_parser.cpp" break; case 284: /* table_ref_commalist: table_ref_commalist ',' table_ref_atomic */ -#line 1154 "bison_parser.y" +#line 1157 "bison_parser.y" { (yyvsp[-2].table_vec)->push_back((yyvsp[0].table)); (yyval.table_vec) = (yyvsp[-2].table_vec); } -#line 5130 "bison_parser.cpp" +#line 5133 "bison_parser.cpp" break; case 285: /* table_ref_name: table_name opt_table_alias */ -#line 1159 "bison_parser.y" +#line 1162 "bison_parser.y" { auto tbl = new TableRef(kTableName); tbl->schema = (yyvsp[-1].table_name).schema; @@ -5138,215 +5140,215 @@ YYLTYPE yylloc = yyloc_default; tbl->alias = (yyvsp[0].alias_t); (yyval.table) = tbl; } -#line 5142 "bison_parser.cpp" +#line 5145 "bison_parser.cpp" break; case 286: /* table_ref_name_no_alias: table_name */ -#line 1167 "bison_parser.y" +#line 1170 "bison_parser.y" { (yyval.table) = new TableRef(kTableName); (yyval.table)->schema = (yyvsp[0].table_name).schema; (yyval.table)->name = (yyvsp[0].table_name).name; } -#line 5152 "bison_parser.cpp" +#line 5155 "bison_parser.cpp" break; case 287: /* table_name: IDENTIFIER */ -#line 1173 "bison_parser.y" +#line 1176 "bison_parser.y" { (yyval.table_name).schema = nullptr; (yyval.table_name).name = (yyvsp[0].sval); } -#line 5161 "bison_parser.cpp" +#line 5164 "bison_parser.cpp" break; case 288: /* table_name: IDENTIFIER '.' IDENTIFIER */ -#line 1177 "bison_parser.y" +#line 1180 "bison_parser.y" { (yyval.table_name).schema = (yyvsp[-2].sval); (yyval.table_name).name = (yyvsp[0].sval); } -#line 5170 "bison_parser.cpp" +#line 5173 "bison_parser.cpp" break; case 289: /* opt_index_name: IDENTIFIER */ -#line 1182 "bison_parser.y" +#line 1185 "bison_parser.y" { (yyval.sval) = (yyvsp[0].sval); } -#line 5176 "bison_parser.cpp" +#line 5179 "bison_parser.cpp" break; case 290: /* opt_index_name: %empty */ -#line 1183 "bison_parser.y" +#line 1186 "bison_parser.y" { (yyval.sval) = nullptr; } -#line 5182 "bison_parser.cpp" +#line 5185 "bison_parser.cpp" break; case 292: /* table_alias: AS IDENTIFIER '(' ident_commalist ')' */ -#line 1185 "bison_parser.y" +#line 1188 "bison_parser.y" { (yyval.alias_t) = new Alias((yyvsp[-3].sval), (yyvsp[-1].str_vec)); } -#line 5188 "bison_parser.cpp" +#line 5191 "bison_parser.cpp" break; case 294: /* opt_table_alias: %empty */ -#line 1187 "bison_parser.y" +#line 1190 "bison_parser.y" { (yyval.alias_t) = nullptr; } -#line 5194 "bison_parser.cpp" +#line 5197 "bison_parser.cpp" break; case 295: /* alias: AS IDENTIFIER */ -#line 1189 "bison_parser.y" +#line 1192 "bison_parser.y" { (yyval.alias_t) = new Alias((yyvsp[0].sval)); } -#line 5200 "bison_parser.cpp" +#line 5203 "bison_parser.cpp" break; case 296: /* alias: IDENTIFIER */ -#line 1190 "bison_parser.y" +#line 1193 "bison_parser.y" { (yyval.alias_t) = new Alias((yyvsp[0].sval)); } -#line 5206 "bison_parser.cpp" +#line 5209 "bison_parser.cpp" break; case 298: /* opt_alias: %empty */ -#line 1192 "bison_parser.y" +#line 1195 "bison_parser.y" { (yyval.alias_t) = nullptr; } -#line 5212 "bison_parser.cpp" +#line 5215 "bison_parser.cpp" break; case 299: /* opt_locking_clause: opt_locking_clause_list */ -#line 1198 "bison_parser.y" +#line 1201 "bison_parser.y" { (yyval.locking_clause_vec) = (yyvsp[0].locking_clause_vec); } -#line 5218 "bison_parser.cpp" +#line 5221 "bison_parser.cpp" break; case 300: /* opt_locking_clause: %empty */ -#line 1199 "bison_parser.y" +#line 1202 "bison_parser.y" { (yyval.locking_clause_vec) = nullptr; } -#line 5224 "bison_parser.cpp" +#line 5227 "bison_parser.cpp" break; case 301: /* opt_locking_clause_list: locking_clause */ -#line 1201 "bison_parser.y" +#line 1204 "bison_parser.y" { (yyval.locking_clause_vec) = new std::vector(); (yyval.locking_clause_vec)->push_back((yyvsp[0].locking_t)); } -#line 5233 "bison_parser.cpp" +#line 5236 "bison_parser.cpp" break; case 302: /* opt_locking_clause_list: opt_locking_clause_list locking_clause */ -#line 1205 "bison_parser.y" +#line 1208 "bison_parser.y" { (yyvsp[-1].locking_clause_vec)->push_back((yyvsp[0].locking_t)); (yyval.locking_clause_vec) = (yyvsp[-1].locking_clause_vec); } -#line 5242 "bison_parser.cpp" +#line 5245 "bison_parser.cpp" break; case 303: /* locking_clause: FOR row_lock_mode opt_row_lock_policy */ -#line 1210 "bison_parser.y" +#line 1213 "bison_parser.y" { (yyval.locking_t) = new LockingClause(); (yyval.locking_t)->rowLockMode = (yyvsp[-1].lock_mode_t); (yyval.locking_t)->rowLockWaitPolicy = (yyvsp[0].lock_wait_policy_t); (yyval.locking_t)->tables = nullptr; } -#line 5253 "bison_parser.cpp" +#line 5256 "bison_parser.cpp" break; case 304: /* locking_clause: FOR row_lock_mode OF ident_commalist opt_row_lock_policy */ -#line 1216 "bison_parser.y" +#line 1219 "bison_parser.y" { (yyval.locking_t) = new LockingClause(); (yyval.locking_t)->rowLockMode = (yyvsp[-3].lock_mode_t); (yyval.locking_t)->tables = (yyvsp[-1].str_vec); (yyval.locking_t)->rowLockWaitPolicy = (yyvsp[0].lock_wait_policy_t); } -#line 5264 "bison_parser.cpp" +#line 5267 "bison_parser.cpp" break; case 305: /* row_lock_mode: UPDATE */ -#line 1223 "bison_parser.y" +#line 1226 "bison_parser.y" { (yyval.lock_mode_t) = RowLockMode::ForUpdate; } -#line 5270 "bison_parser.cpp" +#line 5273 "bison_parser.cpp" break; case 306: /* row_lock_mode: NO KEY UPDATE */ -#line 1224 "bison_parser.y" +#line 1227 "bison_parser.y" { (yyval.lock_mode_t) = RowLockMode::ForNoKeyUpdate; } -#line 5276 "bison_parser.cpp" +#line 5279 "bison_parser.cpp" break; case 307: /* row_lock_mode: SHARE */ -#line 1225 "bison_parser.y" +#line 1228 "bison_parser.y" { (yyval.lock_mode_t) = RowLockMode::ForShare; } -#line 5282 "bison_parser.cpp" +#line 5285 "bison_parser.cpp" break; case 308: /* row_lock_mode: KEY SHARE */ -#line 1226 "bison_parser.y" +#line 1229 "bison_parser.y" { (yyval.lock_mode_t) = RowLockMode::ForKeyShare; } -#line 5288 "bison_parser.cpp" +#line 5291 "bison_parser.cpp" break; case 309: /* opt_row_lock_policy: SKIP LOCKED */ -#line 1228 "bison_parser.y" +#line 1231 "bison_parser.y" { (yyval.lock_wait_policy_t) = RowLockWaitPolicy::SkipLocked; } -#line 5294 "bison_parser.cpp" +#line 5297 "bison_parser.cpp" break; case 310: /* opt_row_lock_policy: NOWAIT */ -#line 1229 "bison_parser.y" +#line 1232 "bison_parser.y" { (yyval.lock_wait_policy_t) = RowLockWaitPolicy::NoWait; } -#line 5300 "bison_parser.cpp" +#line 5303 "bison_parser.cpp" break; case 311: /* opt_row_lock_policy: %empty */ -#line 1230 "bison_parser.y" +#line 1233 "bison_parser.y" { (yyval.lock_wait_policy_t) = RowLockWaitPolicy::None; } -#line 5306 "bison_parser.cpp" +#line 5309 "bison_parser.cpp" break; case 313: /* opt_with_clause: %empty */ -#line 1236 "bison_parser.y" +#line 1239 "bison_parser.y" { (yyval.with_description_vec) = nullptr; } -#line 5312 "bison_parser.cpp" +#line 5315 "bison_parser.cpp" break; case 314: /* with_clause: WITH with_description_list */ -#line 1238 "bison_parser.y" +#line 1241 "bison_parser.y" { (yyval.with_description_vec) = (yyvsp[0].with_description_vec); } -#line 5318 "bison_parser.cpp" +#line 5321 "bison_parser.cpp" break; case 315: /* with_description_list: with_description */ -#line 1240 "bison_parser.y" +#line 1243 "bison_parser.y" { (yyval.with_description_vec) = new std::vector(); (yyval.with_description_vec)->push_back((yyvsp[0].with_description_t)); } -#line 5327 "bison_parser.cpp" +#line 5330 "bison_parser.cpp" break; case 316: /* with_description_list: with_description_list ',' with_description */ -#line 1244 "bison_parser.y" +#line 1247 "bison_parser.y" { (yyvsp[-2].with_description_vec)->push_back((yyvsp[0].with_description_t)); (yyval.with_description_vec) = (yyvsp[-2].with_description_vec); } -#line 5336 "bison_parser.cpp" +#line 5339 "bison_parser.cpp" break; case 317: /* with_description: IDENTIFIER AS select_with_paren */ -#line 1249 "bison_parser.y" +#line 1252 "bison_parser.y" { (yyval.with_description_t) = new WithDescription(); (yyval.with_description_t)->alias = (yyvsp[-2].sval); (yyval.with_description_t)->select = (yyvsp[0].select_stmt); } -#line 5346 "bison_parser.cpp" +#line 5349 "bison_parser.cpp" break; case 318: /* join_clause: table_ref_atomic NATURAL JOIN nonjoin_table_ref_atomic */ -#line 1259 "bison_parser.y" +#line 1262 "bison_parser.y" { (yyval.table) = new TableRef(kTableJoin); (yyval.table)->join = new JoinDefinition(); @@ -5354,11 +5356,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.table)->join->left = (yyvsp[-3].table); (yyval.table)->join->right = (yyvsp[0].table); } -#line 5358 "bison_parser.cpp" +#line 5361 "bison_parser.cpp" break; case 319: /* join_clause: table_ref_atomic opt_join_type JOIN table_ref_atomic ON join_condition */ -#line 1266 "bison_parser.y" +#line 1269 "bison_parser.y" { (yyval.table) = new TableRef(kTableJoin); (yyval.table)->join = new JoinDefinition(); @@ -5367,117 +5369,102 @@ YYLTYPE yylloc = yyloc_default; (yyval.table)->join->right = (yyvsp[-2].table); (yyval.table)->join->condition = (yyvsp[0].expr); } -#line 5371 "bison_parser.cpp" +#line 5374 "bison_parser.cpp" break; - case 320: /* join_clause: table_ref_atomic opt_join_type JOIN table_ref_atomic USING '(' column_name ')' */ -#line 1274 "bison_parser.y" - { + case 320: /* join_clause: table_ref_atomic opt_join_type JOIN table_ref_atomic USING '(' ident_commalist ')' */ +#line 1277 "bison_parser.y" + { (yyval.table) = new TableRef(kTableJoin); (yyval.table)->join = new JoinDefinition(); - (yyval.table)->join->type = (JoinType)(yyvsp[-6].join_type); + (yyval.table)->join->type = (yyvsp[-6].join_type); (yyval.table)->join->left = (yyvsp[-7].table); (yyval.table)->join->right = (yyvsp[-4].table); - auto left_col = Expr::makeColumnRef(strdup((yyvsp[-1].expr)->name)); - if ((yyvsp[-1].expr)->alias) { - left_col->alias = strdup((yyvsp[-1].expr)->alias); - } - if ((yyvsp[-7].table)->getName()) { - left_col->table = strdup((yyvsp[-7].table)->getName()); - } - auto right_col = Expr::makeColumnRef(strdup((yyvsp[-1].expr)->name)); - if ((yyvsp[-1].expr)->alias) { - right_col->alias = strdup((yyvsp[-1].expr)->alias); - } - if ((yyvsp[-4].table)->getName()) { - right_col->table = strdup((yyvsp[-4].table)->getName()); - } - (yyval.table)->join->condition = Expr::makeOpBinary(left_col, kOpEquals, right_col); - delete (yyvsp[-1].expr); + (yyval.table)->join->namedColumns = (yyvsp[-1].str_vec); } -#line 5399 "bison_parser.cpp" +#line 5387 "bison_parser.cpp" break; case 321: /* opt_join_type: INNER */ -#line 1298 "bison_parser.y" +#line 1286 "bison_parser.y" { (yyval.join_type) = kJoinInner; } -#line 5405 "bison_parser.cpp" +#line 5393 "bison_parser.cpp" break; case 322: /* opt_join_type: LEFT OUTER */ -#line 1299 "bison_parser.y" +#line 1287 "bison_parser.y" { (yyval.join_type) = kJoinLeft; } -#line 5411 "bison_parser.cpp" +#line 5399 "bison_parser.cpp" break; case 323: /* opt_join_type: LEFT */ -#line 1300 "bison_parser.y" +#line 1288 "bison_parser.y" { (yyval.join_type) = kJoinLeft; } -#line 5417 "bison_parser.cpp" +#line 5405 "bison_parser.cpp" break; case 324: /* opt_join_type: RIGHT OUTER */ -#line 1301 "bison_parser.y" +#line 1289 "bison_parser.y" { (yyval.join_type) = kJoinRight; } -#line 5423 "bison_parser.cpp" +#line 5411 "bison_parser.cpp" break; case 325: /* opt_join_type: RIGHT */ -#line 1302 "bison_parser.y" +#line 1290 "bison_parser.y" { (yyval.join_type) = kJoinRight; } -#line 5429 "bison_parser.cpp" +#line 5417 "bison_parser.cpp" break; case 326: /* opt_join_type: FULL OUTER */ -#line 1303 "bison_parser.y" +#line 1291 "bison_parser.y" { (yyval.join_type) = kJoinFull; } -#line 5435 "bison_parser.cpp" +#line 5423 "bison_parser.cpp" break; case 327: /* opt_join_type: OUTER */ -#line 1304 "bison_parser.y" +#line 1292 "bison_parser.y" { (yyval.join_type) = kJoinFull; } -#line 5441 "bison_parser.cpp" +#line 5429 "bison_parser.cpp" break; case 328: /* opt_join_type: FULL */ -#line 1305 "bison_parser.y" +#line 1293 "bison_parser.y" { (yyval.join_type) = kJoinFull; } -#line 5447 "bison_parser.cpp" +#line 5435 "bison_parser.cpp" break; case 329: /* opt_join_type: CROSS */ -#line 1306 "bison_parser.y" +#line 1294 "bison_parser.y" { (yyval.join_type) = kJoinCross; } -#line 5453 "bison_parser.cpp" +#line 5441 "bison_parser.cpp" break; case 330: /* opt_join_type: %empty */ -#line 1307 "bison_parser.y" +#line 1295 "bison_parser.y" { (yyval.join_type) = kJoinInner; } -#line 5459 "bison_parser.cpp" +#line 5447 "bison_parser.cpp" break; case 334: /* ident_commalist: IDENTIFIER */ -#line 1318 "bison_parser.y" +#line 1306 "bison_parser.y" { (yyval.str_vec) = new std::vector(); (yyval.str_vec)->push_back((yyvsp[0].sval)); } -#line 5468 "bison_parser.cpp" +#line 5456 "bison_parser.cpp" break; case 335: /* ident_commalist: ident_commalist ',' IDENTIFIER */ -#line 1322 "bison_parser.y" +#line 1310 "bison_parser.y" { (yyvsp[-2].str_vec)->push_back((yyvsp[0].sval)); (yyval.str_vec) = (yyvsp[-2].str_vec); } -#line 5477 "bison_parser.cpp" +#line 5465 "bison_parser.cpp" break; -#line 5481 "bison_parser.cpp" +#line 5469 "bison_parser.cpp" default: break; } @@ -5706,11 +5693,11 @@ YYLTYPE yylloc = yyloc_default; return yyresult; } -#line 1328 "bison_parser.y" +#line 1316 "bison_parser.y" - // clang-format on - /********************************* +// clang-format on +/********************************* ** Section 4: Additional C code *********************************/ - /* empty */ +/* empty */ diff --git a/src/parser/bison_parser.h b/src/parser/bison_parser.h index 6005a081..41666cc2 100644 --- a/src/parser/bison_parser.h +++ b/src/parser/bison_parser.h @@ -36,24 +36,24 @@ private implementation details that can be changed or removed. */ #ifndef YY_HSQL_BISON_PARSER_H_INCLUDED -# define YY_HSQL_BISON_PARSER_H_INCLUDED +#define YY_HSQL_BISON_PARSER_H_INCLUDED /* Debug traces. */ #ifndef HSQL_DEBUG -# if defined YYDEBUG +#if defined YYDEBUG #if YYDEBUG -# define HSQL_DEBUG 1 -# else -# define HSQL_DEBUG 0 -# endif -# else /* ! defined YYDEBUG */ -# define HSQL_DEBUG 0 -# endif /* ! defined YYDEBUG */ -#endif /* ! defined HSQL_DEBUG */ +#define HSQL_DEBUG 1 +#else +#define HSQL_DEBUG 0 +#endif +#else /* ! defined YYDEBUG */ +#define HSQL_DEBUG 0 +#endif /* ! defined YYDEBUG */ +#endif /* ! defined HSQL_DEBUG */ #if HSQL_DEBUG extern int hsql_debug; #endif /* "%code requires" blocks. */ -#line 38 "bison_parser.y" +#line 39 "bison_parser.y" // %code requires block @@ -80,198 +80,196 @@ extern int hsql_debug; /* Token kinds. */ #ifndef HSQL_TOKENTYPE -# define HSQL_TOKENTYPE - enum hsql_tokentype - { - SQL_HSQL_EMPTY = -2, - SQL_YYEOF = 0, /* "end of file" */ - SQL_HSQL_error = 256, /* error */ - SQL_HSQL_UNDEF = 257, /* "invalid token" */ - SQL_IDENTIFIER = 258, /* IDENTIFIER */ - SQL_STRING = 259, /* STRING */ - SQL_FLOATVAL = 260, /* FLOATVAL */ - SQL_INTVAL = 261, /* INTVAL */ - SQL_DEALLOCATE = 262, /* DEALLOCATE */ - SQL_PARAMETERS = 263, /* PARAMETERS */ - SQL_INTERSECT = 264, /* INTERSECT */ - SQL_TEMPORARY = 265, /* TEMPORARY */ - SQL_TIMESTAMP = 266, /* TIMESTAMP */ - SQL_DISTINCT = 267, /* DISTINCT */ - SQL_NVARCHAR = 268, /* NVARCHAR */ - SQL_RESTRICT = 269, /* RESTRICT */ - SQL_TRUNCATE = 270, /* TRUNCATE */ - SQL_ANALYZE = 271, /* ANALYZE */ - SQL_BETWEEN = 272, /* BETWEEN */ - SQL_CASCADE = 273, /* CASCADE */ - SQL_COLUMNS = 274, /* COLUMNS */ - SQL_CONTROL = 275, /* CONTROL */ - SQL_DEFAULT = 276, /* DEFAULT */ - SQL_EXECUTE = 277, /* EXECUTE */ - SQL_EXPLAIN = 278, /* EXPLAIN */ - SQL_INTEGER = 279, /* INTEGER */ - SQL_NATURAL = 280, /* NATURAL */ - SQL_PREPARE = 281, /* PREPARE */ - SQL_PRIMARY = 282, /* PRIMARY */ - SQL_SCHEMAS = 283, /* SCHEMAS */ - SQL_CHARACTER_VARYING = 284, /* CHARACTER_VARYING */ - SQL_REAL = 285, /* REAL */ - SQL_DECIMAL = 286, /* DECIMAL */ - SQL_SMALLINT = 287, /* SMALLINT */ - SQL_BIGINT = 288, /* BIGINT */ - SQL_SPATIAL = 289, /* SPATIAL */ - SQL_VARCHAR = 290, /* VARCHAR */ - SQL_VIRTUAL = 291, /* VIRTUAL */ - SQL_DESCRIBE = 292, /* DESCRIBE */ - SQL_BEFORE = 293, /* BEFORE */ - SQL_COLUMN = 294, /* COLUMN */ - SQL_CREATE = 295, /* CREATE */ - SQL_DELETE = 296, /* DELETE */ - SQL_DIRECT = 297, /* DIRECT */ - SQL_DOUBLE = 298, /* DOUBLE */ - SQL_ESCAPE = 299, /* ESCAPE */ - SQL_EXCEPT = 300, /* EXCEPT */ - SQL_EXISTS = 301, /* EXISTS */ - SQL_EXTRACT = 302, /* EXTRACT */ - SQL_CAST = 303, /* CAST */ - SQL_FORMAT = 304, /* FORMAT */ - SQL_GLOBAL = 305, /* GLOBAL */ - SQL_HAVING = 306, /* HAVING */ - SQL_IMPORT = 307, /* IMPORT */ - SQL_INSERT = 308, /* INSERT */ - SQL_ISNULL = 309, /* ISNULL */ - SQL_OFFSET = 310, /* OFFSET */ - SQL_RENAME = 311, /* RENAME */ - SQL_SCHEMA = 312, /* SCHEMA */ - SQL_SELECT = 313, /* SELECT */ - SQL_SORTED = 314, /* SORTED */ - SQL_TABLES = 315, /* TABLES */ - SQL_UNIQUE = 316, /* UNIQUE */ - SQL_UNLOAD = 317, /* UNLOAD */ - SQL_UPDATE = 318, /* UPDATE */ - SQL_VALUES = 319, /* VALUES */ - SQL_AFTER = 320, /* AFTER */ - SQL_ALTER = 321, /* ALTER */ - SQL_CROSS = 322, /* CROSS */ - SQL_DELTA = 323, /* DELTA */ - SQL_FLOAT = 324, /* FLOAT */ - SQL_GROUP = 325, /* GROUP */ - SQL_INDEX = 326, /* INDEX */ - SQL_INNER = 327, /* INNER */ - SQL_LIMIT = 328, /* LIMIT */ - SQL_LOCAL = 329, /* LOCAL */ - SQL_MERGE = 330, /* MERGE */ - SQL_MINUS = 331, /* MINUS */ - SQL_ORDER = 332, /* ORDER */ - SQL_OVER = 333, /* OVER */ - SQL_OUTER = 334, /* OUTER */ - SQL_RIGHT = 335, /* RIGHT */ - SQL_TABLE = 336, /* TABLE */ - SQL_UNION = 337, /* UNION */ - SQL_USING = 338, /* USING */ - SQL_WHERE = 339, /* WHERE */ - SQL_CALL = 340, /* CALL */ - SQL_CASE = 341, /* CASE */ - SQL_CHAR = 342, /* CHAR */ - SQL_COPY = 343, /* COPY */ - SQL_DATE = 344, /* DATE */ - SQL_DATETIME = 345, /* DATETIME */ - SQL_DESC = 346, /* DESC */ - SQL_DROP = 347, /* DROP */ - SQL_ELSE = 348, /* ELSE */ - SQL_FILE = 349, /* FILE */ - SQL_FROM = 350, /* FROM */ - SQL_FULL = 351, /* FULL */ - SQL_HASH = 352, /* HASH */ - SQL_HINT = 353, /* HINT */ - SQL_INTO = 354, /* INTO */ - SQL_JOIN = 355, /* JOIN */ - SQL_LEFT = 356, /* LEFT */ - SQL_LIKE = 357, /* LIKE */ - SQL_LOAD = 358, /* LOAD */ - SQL_LONG = 359, /* LONG */ - SQL_NULL = 360, /* NULL */ - SQL_PARTITION = 361, /* PARTITION */ - SQL_PLAN = 362, /* PLAN */ - SQL_SHOW = 363, /* SHOW */ - SQL_TEXT = 364, /* TEXT */ - SQL_THEN = 365, /* THEN */ - SQL_TIME = 366, /* TIME */ - SQL_VIEW = 367, /* VIEW */ - SQL_WHEN = 368, /* WHEN */ - SQL_WITH = 369, /* WITH */ - SQL_ADD = 370, /* ADD */ - SQL_ALL = 371, /* ALL */ - SQL_AND = 372, /* AND */ - SQL_ASC = 373, /* ASC */ - SQL_END = 374, /* END */ - SQL_FOR = 375, /* FOR */ - SQL_INT = 376, /* INT */ - SQL_KEY = 377, /* KEY */ - SQL_NOT = 378, /* NOT */ - SQL_OFF = 379, /* OFF */ - SQL_SET = 380, /* SET */ - SQL_TOP = 381, /* TOP */ - SQL_AS = 382, /* AS */ - SQL_BY = 383, /* BY */ - SQL_IF = 384, /* IF */ - SQL_IN = 385, /* IN */ - SQL_IS = 386, /* IS */ - SQL_OF = 387, /* OF */ - SQL_ON = 388, /* ON */ - SQL_OR = 389, /* OR */ - SQL_TO = 390, /* TO */ - SQL_NO = 391, /* NO */ - SQL_ARRAY = 392, /* ARRAY */ - SQL_CONCAT = 393, /* CONCAT */ - SQL_ILIKE = 394, /* ILIKE */ - SQL_SECOND = 395, /* SECOND */ - SQL_MINUTE = 396, /* MINUTE */ - SQL_HOUR = 397, /* HOUR */ - SQL_DAY = 398, /* DAY */ - SQL_MONTH = 399, /* MONTH */ - SQL_YEAR = 400, /* YEAR */ - SQL_SECONDS = 401, /* SECONDS */ - SQL_MINUTES = 402, /* MINUTES */ - SQL_HOURS = 403, /* HOURS */ - SQL_DAYS = 404, /* DAYS */ - SQL_MONTHS = 405, /* MONTHS */ - SQL_YEARS = 406, /* YEARS */ - SQL_INTERVAL = 407, /* INTERVAL */ - SQL_TRUE = 408, /* TRUE */ - SQL_FALSE = 409, /* FALSE */ - SQL_BOOLEAN = 410, /* BOOLEAN */ - SQL_TRANSACTION = 411, /* TRANSACTION */ - SQL_BEGIN = 412, /* BEGIN */ - SQL_COMMIT = 413, /* COMMIT */ - SQL_ROLLBACK = 414, /* ROLLBACK */ - SQL_NOWAIT = 415, /* NOWAIT */ - SQL_SKIP = 416, /* SKIP */ - SQL_LOCKED = 417, /* LOCKED */ - SQL_SHARE = 418, /* SHARE */ - SQL_RANGE = 419, /* RANGE */ - SQL_ROWS = 420, /* ROWS */ - SQL_GROUPS = 421, /* GROUPS */ - SQL_UNBOUNDED = 422, /* UNBOUNDED */ - SQL_FOLLOWING = 423, /* FOLLOWING */ - SQL_PRECEDING = 424, /* PRECEDING */ - SQL_CURRENT_ROW = 425, /* CURRENT_ROW */ - SQL_EQUALS = 426, /* EQUALS */ - SQL_NOTEQUALS = 427, /* NOTEQUALS */ - SQL_LESS = 428, /* LESS */ - SQL_GREATER = 429, /* GREATER */ - SQL_LESSEQ = 430, /* LESSEQ */ - SQL_GREATEREQ = 431, /* GREATEREQ */ - SQL_NOTNULL = 432, /* NOTNULL */ - SQL_UMINUS = 433 /* UMINUS */ - }; - typedef enum hsql_tokentype hsql_token_kind_t; +#define HSQL_TOKENTYPE +enum hsql_tokentype { + SQL_HSQL_EMPTY = -2, + SQL_YYEOF = 0, /* "end of file" */ + SQL_HSQL_error = 256, /* error */ + SQL_HSQL_UNDEF = 257, /* "invalid token" */ + SQL_IDENTIFIER = 258, /* IDENTIFIER */ + SQL_STRING = 259, /* STRING */ + SQL_FLOATVAL = 260, /* FLOATVAL */ + SQL_INTVAL = 261, /* INTVAL */ + SQL_DEALLOCATE = 262, /* DEALLOCATE */ + SQL_PARAMETERS = 263, /* PARAMETERS */ + SQL_INTERSECT = 264, /* INTERSECT */ + SQL_TEMPORARY = 265, /* TEMPORARY */ + SQL_TIMESTAMP = 266, /* TIMESTAMP */ + SQL_DISTINCT = 267, /* DISTINCT */ + SQL_NVARCHAR = 268, /* NVARCHAR */ + SQL_RESTRICT = 269, /* RESTRICT */ + SQL_TRUNCATE = 270, /* TRUNCATE */ + SQL_ANALYZE = 271, /* ANALYZE */ + SQL_BETWEEN = 272, /* BETWEEN */ + SQL_CASCADE = 273, /* CASCADE */ + SQL_COLUMNS = 274, /* COLUMNS */ + SQL_CONTROL = 275, /* CONTROL */ + SQL_DEFAULT = 276, /* DEFAULT */ + SQL_EXECUTE = 277, /* EXECUTE */ + SQL_EXPLAIN = 278, /* EXPLAIN */ + SQL_INTEGER = 279, /* INTEGER */ + SQL_NATURAL = 280, /* NATURAL */ + SQL_PREPARE = 281, /* PREPARE */ + SQL_PRIMARY = 282, /* PRIMARY */ + SQL_SCHEMAS = 283, /* SCHEMAS */ + SQL_CHARACTER_VARYING = 284, /* CHARACTER_VARYING */ + SQL_REAL = 285, /* REAL */ + SQL_DECIMAL = 286, /* DECIMAL */ + SQL_SMALLINT = 287, /* SMALLINT */ + SQL_BIGINT = 288, /* BIGINT */ + SQL_SPATIAL = 289, /* SPATIAL */ + SQL_VARCHAR = 290, /* VARCHAR */ + SQL_VIRTUAL = 291, /* VIRTUAL */ + SQL_DESCRIBE = 292, /* DESCRIBE */ + SQL_BEFORE = 293, /* BEFORE */ + SQL_COLUMN = 294, /* COLUMN */ + SQL_CREATE = 295, /* CREATE */ + SQL_DELETE = 296, /* DELETE */ + SQL_DIRECT = 297, /* DIRECT */ + SQL_DOUBLE = 298, /* DOUBLE */ + SQL_ESCAPE = 299, /* ESCAPE */ + SQL_EXCEPT = 300, /* EXCEPT */ + SQL_EXISTS = 301, /* EXISTS */ + SQL_EXTRACT = 302, /* EXTRACT */ + SQL_CAST = 303, /* CAST */ + SQL_FORMAT = 304, /* FORMAT */ + SQL_GLOBAL = 305, /* GLOBAL */ + SQL_HAVING = 306, /* HAVING */ + SQL_IMPORT = 307, /* IMPORT */ + SQL_INSERT = 308, /* INSERT */ + SQL_ISNULL = 309, /* ISNULL */ + SQL_OFFSET = 310, /* OFFSET */ + SQL_RENAME = 311, /* RENAME */ + SQL_SCHEMA = 312, /* SCHEMA */ + SQL_SELECT = 313, /* SELECT */ + SQL_SORTED = 314, /* SORTED */ + SQL_TABLES = 315, /* TABLES */ + SQL_UNIQUE = 316, /* UNIQUE */ + SQL_UNLOAD = 317, /* UNLOAD */ + SQL_UPDATE = 318, /* UPDATE */ + SQL_VALUES = 319, /* VALUES */ + SQL_AFTER = 320, /* AFTER */ + SQL_ALTER = 321, /* ALTER */ + SQL_CROSS = 322, /* CROSS */ + SQL_DELTA = 323, /* DELTA */ + SQL_FLOAT = 324, /* FLOAT */ + SQL_GROUP = 325, /* GROUP */ + SQL_INDEX = 326, /* INDEX */ + SQL_INNER = 327, /* INNER */ + SQL_LIMIT = 328, /* LIMIT */ + SQL_LOCAL = 329, /* LOCAL */ + SQL_MERGE = 330, /* MERGE */ + SQL_MINUS = 331, /* MINUS */ + SQL_ORDER = 332, /* ORDER */ + SQL_OVER = 333, /* OVER */ + SQL_OUTER = 334, /* OUTER */ + SQL_RIGHT = 335, /* RIGHT */ + SQL_TABLE = 336, /* TABLE */ + SQL_UNION = 337, /* UNION */ + SQL_USING = 338, /* USING */ + SQL_WHERE = 339, /* WHERE */ + SQL_CALL = 340, /* CALL */ + SQL_CASE = 341, /* CASE */ + SQL_CHAR = 342, /* CHAR */ + SQL_COPY = 343, /* COPY */ + SQL_DATE = 344, /* DATE */ + SQL_DATETIME = 345, /* DATETIME */ + SQL_DESC = 346, /* DESC */ + SQL_DROP = 347, /* DROP */ + SQL_ELSE = 348, /* ELSE */ + SQL_FILE = 349, /* FILE */ + SQL_FROM = 350, /* FROM */ + SQL_FULL = 351, /* FULL */ + SQL_HASH = 352, /* HASH */ + SQL_HINT = 353, /* HINT */ + SQL_INTO = 354, /* INTO */ + SQL_JOIN = 355, /* JOIN */ + SQL_LEFT = 356, /* LEFT */ + SQL_LIKE = 357, /* LIKE */ + SQL_LOAD = 358, /* LOAD */ + SQL_LONG = 359, /* LONG */ + SQL_NULL = 360, /* NULL */ + SQL_PARTITION = 361, /* PARTITION */ + SQL_PLAN = 362, /* PLAN */ + SQL_SHOW = 363, /* SHOW */ + SQL_TEXT = 364, /* TEXT */ + SQL_THEN = 365, /* THEN */ + SQL_TIME = 366, /* TIME */ + SQL_VIEW = 367, /* VIEW */ + SQL_WHEN = 368, /* WHEN */ + SQL_WITH = 369, /* WITH */ + SQL_ADD = 370, /* ADD */ + SQL_ALL = 371, /* ALL */ + SQL_AND = 372, /* AND */ + SQL_ASC = 373, /* ASC */ + SQL_END = 374, /* END */ + SQL_FOR = 375, /* FOR */ + SQL_INT = 376, /* INT */ + SQL_KEY = 377, /* KEY */ + SQL_NOT = 378, /* NOT */ + SQL_OFF = 379, /* OFF */ + SQL_SET = 380, /* SET */ + SQL_TOP = 381, /* TOP */ + SQL_AS = 382, /* AS */ + SQL_BY = 383, /* BY */ + SQL_IF = 384, /* IF */ + SQL_IN = 385, /* IN */ + SQL_IS = 386, /* IS */ + SQL_OF = 387, /* OF */ + SQL_ON = 388, /* ON */ + SQL_OR = 389, /* OR */ + SQL_TO = 390, /* TO */ + SQL_NO = 391, /* NO */ + SQL_ARRAY = 392, /* ARRAY */ + SQL_CONCAT = 393, /* CONCAT */ + SQL_ILIKE = 394, /* ILIKE */ + SQL_SECOND = 395, /* SECOND */ + SQL_MINUTE = 396, /* MINUTE */ + SQL_HOUR = 397, /* HOUR */ + SQL_DAY = 398, /* DAY */ + SQL_MONTH = 399, /* MONTH */ + SQL_YEAR = 400, /* YEAR */ + SQL_SECONDS = 401, /* SECONDS */ + SQL_MINUTES = 402, /* MINUTES */ + SQL_HOURS = 403, /* HOURS */ + SQL_DAYS = 404, /* DAYS */ + SQL_MONTHS = 405, /* MONTHS */ + SQL_YEARS = 406, /* YEARS */ + SQL_INTERVAL = 407, /* INTERVAL */ + SQL_TRUE = 408, /* TRUE */ + SQL_FALSE = 409, /* FALSE */ + SQL_BOOLEAN = 410, /* BOOLEAN */ + SQL_TRANSACTION = 411, /* TRANSACTION */ + SQL_BEGIN = 412, /* BEGIN */ + SQL_COMMIT = 413, /* COMMIT */ + SQL_ROLLBACK = 414, /* ROLLBACK */ + SQL_NOWAIT = 415, /* NOWAIT */ + SQL_SKIP = 416, /* SKIP */ + SQL_LOCKED = 417, /* LOCKED */ + SQL_SHARE = 418, /* SHARE */ + SQL_RANGE = 419, /* RANGE */ + SQL_ROWS = 420, /* ROWS */ + SQL_GROUPS = 421, /* GROUPS */ + SQL_UNBOUNDED = 422, /* UNBOUNDED */ + SQL_FOLLOWING = 423, /* FOLLOWING */ + SQL_PRECEDING = 424, /* PRECEDING */ + SQL_CURRENT_ROW = 425, /* CURRENT_ROW */ + SQL_EQUALS = 426, /* EQUALS */ + SQL_NOTEQUALS = 427, /* NOTEQUALS */ + SQL_LESS = 428, /* LESS */ + SQL_GREATER = 429, /* GREATER */ + SQL_LESSEQ = 430, /* LESSEQ */ + SQL_GREATEREQ = 431, /* GREATEREQ */ + SQL_NOTNULL = 432, /* NOTNULL */ + SQL_UMINUS = 433 /* UMINUS */ +}; +typedef enum hsql_tokentype hsql_token_kind_t; #endif /* Value type. */ -#if ! defined HSQL_STYPE && ! defined HSQL_STYPE_IS_DECLARED -union HSQL_STYPE -{ -#line 96 "bison_parser.y" +#if !defined HSQL_STYPE && !defined HSQL_STYPE_IS_DECLARED +union HSQL_STYPE { +#line 97 "bison_parser.y" // clang-format on bool bval; @@ -339,7 +337,9 @@ union HSQL_STYPE hsql::RowLockMode lock_mode_t; hsql::RowLockWaitPolicy lock_wait_policy_t; -#line 343 "bison_parser.h" + // clang-format off + +#line 345 "bison_parser.h" }; typedef union HSQL_STYPE HSQL_STYPE; diff --git a/src/parser/bison_parser.y b/src/parser/bison_parser.y index e579a355..f3048c70 100644 --- a/src/parser/bison_parser.y +++ b/src/parser/bison_parser.y @@ -1,7 +1,7 @@ // clang-format off %{ - // clang-format on - /** + +/** * bison_parser.y * defines bison_parser.h * outputs bison_parser.c @@ -9,10 +9,11 @@ * Grammar File Spec: http://dinosaur.compilertools.net/bison/bison_6.html * */ - /********************************* +/********************************* ** Section 1: C Declarations *********************************/ +// clang-format on #include "bison_parser.h" #include "flex_lexer.h" @@ -159,164 +160,166 @@ hsql::RowLockMode lock_mode_t; hsql::RowLockWaitPolicy lock_wait_policy_t; + + // clang-format off } - /********************************* - ** Destructor symbols - *********************************/ - // clang-format off - %destructor { } - %destructor { - free( ($$.name) ); - free( ($$.schema) ); - } - %destructor { - if ($$) { - for (auto ptr : *($$)) { - free(ptr); - } - } - delete ($$); - } - %destructor { free( ($$) ); } - %destructor { - if ($$) { - for (auto ptr : *($$)) { - delete ptr; - } - } - delete ($$); - } - %destructor { delete ($$); } <*> +/********************************* + ** Destructor symbols + *********************************/ +%destructor { } +%destructor { + free( ($$.name) ); + free( ($$.schema) ); +} +%destructor { + if ($$) { + for (auto ptr : *($$)) { + free(ptr); + } + } + delete ($$); +} +%destructor { free( ($$) ); } +%destructor { + if ($$) { + for (auto ptr : *($$)) { + delete ptr; + } + } + delete ($$); +} +%destructor { delete ($$); } <*> - /********************************* - ** Token Definition - *********************************/ - %token IDENTIFIER STRING - %token FLOATVAL - %token INTVAL - - /* SQL Keywords */ - %token DEALLOCATE PARAMETERS INTERSECT TEMPORARY TIMESTAMP - %token DISTINCT NVARCHAR RESTRICT TRUNCATE ANALYZE BETWEEN - %token CASCADE COLUMNS CONTROL DEFAULT EXECUTE EXPLAIN - %token INTEGER NATURAL PREPARE PRIMARY SCHEMAS CHARACTER_VARYING REAL DECIMAL SMALLINT BIGINT - %token SPATIAL VARCHAR VIRTUAL DESCRIBE BEFORE COLUMN CREATE DELETE DIRECT - %token DOUBLE ESCAPE EXCEPT EXISTS EXTRACT CAST FORMAT GLOBAL HAVING IMPORT - %token INSERT ISNULL OFFSET RENAME SCHEMA SELECT SORTED - %token TABLES UNIQUE UNLOAD UPDATE VALUES AFTER ALTER CROSS - %token DELTA FLOAT GROUP INDEX INNER LIMIT LOCAL MERGE MINUS ORDER OVER - %token OUTER RIGHT TABLE UNION USING WHERE CALL CASE CHAR COPY DATE DATETIME - %token DESC DROP ELSE FILE FROM FULL HASH HINT INTO JOIN - %token LEFT LIKE LOAD LONG NULL PARTITION PLAN SHOW TEXT THEN TIME - %token VIEW WHEN WITH ADD ALL AND ASC END FOR INT KEY - %token NOT OFF SET TOP AS BY IF IN IS OF ON OR TO NO - %token ARRAY CONCAT ILIKE SECOND MINUTE HOUR DAY MONTH YEAR - %token SECONDS MINUTES HOURS DAYS MONTHS YEARS INTERVAL - %token TRUE FALSE BOOLEAN - %token TRANSACTION BEGIN COMMIT ROLLBACK - %token NOWAIT SKIP LOCKED SHARE - %token RANGE ROWS GROUPS UNBOUNDED FOLLOWING PRECEDING CURRENT_ROW - /********************************* - ** Non-Terminal types (http://www.gnu.org/software/bison/manual/html_node/Type-Decl.html) - *********************************/ - %type statement_list - %type statement preparable_statement - %type execute_statement - %type transaction_statement - %type prepare_statement - %type select_statement select_with_paren select_no_paren select_clause select_within_set_operation select_within_set_operation_no_parentheses - %type import_statement - %type export_statement - %type create_statement - %type insert_statement - %type delete_statement truncate_statement - %type update_statement - %type drop_statement - %type alter_statement - %type show_statement - %type table_name - %type opt_index_name - %type file_path prepare_target_query - %type opt_frame_clause - %type frame_bound - %type frame_type - %type opt_window - %type opt_not_exists opt_exists opt_distinct opt_all - %type opt_decimal_specification - %type opt_time_precision - %type opt_join_type - %type opt_from_clause from_clause table_ref table_ref_atomic table_ref_name nonjoin_table_ref_atomic - %type
join_clause table_ref_name_no_alias - %type expr operand scalar_expr unary_expr binary_expr logic_expr exists_expr extract_expr cast_expr - %type function_expr between_expr expr_alias param_expr - %type column_name literal int_literal num_literal string_literal bool_literal date_literal interval_literal - %type comp_expr opt_where join_condition opt_having case_expr case_list in_expr hint - %type array_expr array_index null_literal - %type opt_limit opt_top - %type order_desc - %type opt_order_type - %type datetime_field datetime_field_plural duration_field - %type column_def - %type table_elem - %type column_type - %type table_constraint - %type update_clause - %type locking_clause - %type opt_group - %type opt_table_alias table_alias opt_alias alias - %type with_description - %type set_operator set_type - %type column_constraint - %type opt_column_constraints - %type column_constraint_set - %type alter_action - %type drop_action - %type opt_row_lock_policy - %type row_lock_mode - - // ImportType is used for compatibility reasons - %type opt_file_type file_type - - %type ident_commalist opt_column_list - %type expr_list select_list opt_literal_list literal_list hint_list opt_hints opt_partition - %type table_ref_commalist - %type opt_order order_list - %type opt_with_clause with_clause with_description_list - %type update_clause_commalist - %type table_elem_commalist - %type opt_locking_clause_list opt_locking_clause - - /****************************** - ** Token Precedence and Associativity - ** Precedence: lowest to highest - ******************************/ - %left OR - %left AND - %right NOT - %nonassoc '=' EQUALS NOTEQUALS LIKE ILIKE - %nonassoc '<' '>' LESS GREATER LESSEQ GREATEREQ - - %nonassoc NOTNULL - %nonassoc ISNULL - %nonassoc IS /* sets precedence for IS NULL, etc */ - %left '+' '-' - %left '*' '/' '%' - %left '^' - %left CONCAT - - /* Unary Operators */ - %right UMINUS - %left '[' ']' - %left '(' ')' - %left '.' - %left JOIN +/********************************* + ** Token Definition + *********************************/ +%token IDENTIFIER STRING +%token FLOATVAL +%token INTVAL + +/* SQL Keywords */ +%token DEALLOCATE PARAMETERS INTERSECT TEMPORARY TIMESTAMP +%token DISTINCT NVARCHAR RESTRICT TRUNCATE ANALYZE BETWEEN +%token CASCADE COLUMNS CONTROL DEFAULT EXECUTE EXPLAIN +%token INTEGER NATURAL PREPARE PRIMARY SCHEMAS CHARACTER_VARYING REAL DECIMAL SMALLINT BIGINT +%token SPATIAL VARCHAR VIRTUAL DESCRIBE BEFORE COLUMN CREATE DELETE DIRECT +%token DOUBLE ESCAPE EXCEPT EXISTS EXTRACT CAST FORMAT GLOBAL HAVING IMPORT +%token INSERT ISNULL OFFSET RENAME SCHEMA SELECT SORTED +%token TABLES UNIQUE UNLOAD UPDATE VALUES AFTER ALTER CROSS +%token DELTA FLOAT GROUP INDEX INNER LIMIT LOCAL MERGE MINUS ORDER OVER +%token OUTER RIGHT TABLE UNION USING WHERE CALL CASE CHAR COPY DATE DATETIME +%token DESC DROP ELSE FILE FROM FULL HASH HINT INTO JOIN +%token LEFT LIKE LOAD LONG NULL PARTITION PLAN SHOW TEXT THEN TIME +%token VIEW WHEN WITH ADD ALL AND ASC END FOR INT KEY +%token NOT OFF SET TOP AS BY IF IN IS OF ON OR TO NO +%token ARRAY CONCAT ILIKE SECOND MINUTE HOUR DAY MONTH YEAR +%token SECONDS MINUTES HOURS DAYS MONTHS YEARS INTERVAL +%token TRUE FALSE BOOLEAN +%token TRANSACTION BEGIN COMMIT ROLLBACK +%token NOWAIT SKIP LOCKED SHARE +%token RANGE ROWS GROUPS UNBOUNDED FOLLOWING PRECEDING CURRENT_ROW + +/********************************* + ** Non-Terminal types (http://www.gnu.org/software/bison/manual/html_node/Type-Decl.html) + *********************************/ +%type statement_list +%type statement preparable_statement +%type execute_statement +%type transaction_statement +%type prepare_statement +%type select_statement select_with_paren select_no_paren select_clause select_within_set_operation select_within_set_operation_no_parentheses +%type import_statement +%type export_statement +%type create_statement +%type insert_statement +%type delete_statement truncate_statement +%type update_statement +%type drop_statement +%type alter_statement +%type show_statement +%type table_name +%type opt_index_name +%type file_path prepare_target_query +%type opt_frame_clause +%type frame_bound +%type frame_type +%type opt_window +%type opt_not_exists opt_exists opt_distinct opt_all +%type opt_decimal_specification +%type opt_time_precision +%type opt_join_type +%type
opt_from_clause from_clause table_ref table_ref_atomic table_ref_name nonjoin_table_ref_atomic +%type
join_clause table_ref_name_no_alias +%type expr operand scalar_expr unary_expr binary_expr logic_expr exists_expr extract_expr cast_expr +%type function_expr between_expr expr_alias param_expr +%type column_name literal int_literal num_literal string_literal bool_literal date_literal interval_literal +%type comp_expr opt_where join_condition opt_having case_expr case_list in_expr hint +%type array_expr array_index null_literal +%type opt_limit opt_top +%type order_desc +%type opt_order_type +%type datetime_field datetime_field_plural duration_field +%type column_def +%type table_elem +%type column_type +%type table_constraint +%type update_clause +%type locking_clause +%type opt_group +%type opt_table_alias table_alias opt_alias alias +%type with_description +%type set_operator set_type +%type column_constraint +%type opt_column_constraints +%type column_constraint_set +%type alter_action +%type drop_action +%type opt_row_lock_policy +%type row_lock_mode + +// ImportType is used for compatibility reasons +%type opt_file_type file_type + +%type ident_commalist opt_column_list +%type expr_list select_list opt_literal_list literal_list hint_list opt_hints opt_partition +%type table_ref_commalist +%type opt_order order_list +%type opt_with_clause with_clause with_description_list +%type update_clause_commalist +%type table_elem_commalist +%type opt_locking_clause_list opt_locking_clause + +/****************************** + ** Token Precedence and Associativity + ** Precedence: lowest to highest + ******************************/ +%left OR +%left AND +%right NOT +%nonassoc '=' EQUALS NOTEQUALS LIKE ILIKE +%nonassoc '<' '>' LESS GREATER LESSEQ GREATEREQ + +%nonassoc NOTNULL +%nonassoc ISNULL +%nonassoc IS /* sets precedence for IS NULL, etc */ +%left '+' '-' +%left '*' '/' '%' +%left '^' +%left CONCAT + +/* Unary Operators */ +%right UMINUS +%left '[' ']' +%left '(' ')' +%left '.' +%left JOIN %% /********************************* - ** Section 3: Grammar Definition -*********************************/ + ** Section 3: Grammar Definition + *********************************/ // Defines our general input. input : statement_list opt_semicolon { @@ -1271,28 +1274,13 @@ join_clause : table_ref_atomic NATURAL JOIN nonjoin_table_ref_atomic { $$->join->right = $4; $$->join->condition = $6; } -| table_ref_atomic opt_join_type JOIN table_ref_atomic USING '(' column_name ')' { +| table_ref_atomic opt_join_type JOIN table_ref_atomic USING '(' ident_commalist ')' { $$ = new TableRef(kTableJoin); $$->join = new JoinDefinition(); - $$->join->type = (JoinType)$2; + $$->join->type = $2; $$->join->left = $1; $$->join->right = $4; - auto left_col = Expr::makeColumnRef(strdup($7->name)); - if ($7->alias) { - left_col->alias = strdup($7->alias); - } - if ($1->getName()) { - left_col->table = strdup($1->getName()); - } - auto right_col = Expr::makeColumnRef(strdup($7->name)); - if ($7->alias) { - right_col->alias = strdup($7->alias); - } - if ($4->getName()) { - right_col->table = strdup($4->getName()); - } - $$->join->condition = Expr::makeOpBinary(left_col, kOpEquals, right_col); - delete $7; + $$->join->namedColumns = $7; }; opt_join_type : INNER { $$ = kJoinInner; } diff --git a/src/sql/Table.h b/src/sql/Table.h index 45cdf390..c4197cfb 100755 --- a/src/sql/Table.h +++ b/src/sql/Table.h @@ -62,6 +62,7 @@ struct JoinDefinition { Expr* condition; JoinType type; + std::vector* namedColumns; }; } // namespace hsql diff --git a/test/prepare_tests.cpp b/test/prepare_tests.cpp index f653106a..1c067b08 100644 --- a/test/prepare_tests.cpp +++ b/test/prepare_tests.cpp @@ -30,8 +30,8 @@ TEST(PrepareSingleStatementTest) { TEST_PARSE_SINGLE_SQL(prepare->query, kStmtSelect, SelectStatement, result2, select); ASSERT_EQ(result2.parameters().size(), 1); - ASSERT(select->whereClause->expr2->isType(kExprParameter)) - ASSERT_EQ(select->whereClause->expr2->ival, 0) + ASSERT(select->whereClause->expr2->isType(kExprParameter)); + ASSERT_EQ(select->whereClause->expr2->ival, 0); } TEST(DeallocatePrepareStatementTest) { @@ -49,16 +49,16 @@ TEST(StatementWithParameters) { ASSERT_EQ(result.parameters().size(), 2); - ASSERT_EQ(eq1->opType, hsql::kOpEquals) - ASSERT(eq1->expr->isType(hsql::kExprColumnRef)) - ASSERT(eq1->expr2->isType(kExprParameter)) - ASSERT_EQ(eq1->expr2->ival, 0) + ASSERT_EQ(eq1->opType, hsql::kOpEquals); + ASSERT(eq1->expr->isType(hsql::kExprColumnRef)); + ASSERT(eq1->expr2->isType(kExprParameter)); + ASSERT_EQ(eq1->expr2->ival, 0); ASSERT_EQ(result.parameters()[0], eq1->expr2); - ASSERT_EQ(eq2->opType, hsql::kOpEquals) - ASSERT(eq2->expr->isType(hsql::kExprColumnRef)) - ASSERT(eq2->expr2->isType(kExprParameter)) - ASSERT_EQ(eq2->expr2->ival, 1) + ASSERT_EQ(eq2->opType, hsql::kOpEquals); + ASSERT(eq2->expr->isType(hsql::kExprColumnRef)); + ASSERT(eq2->expr2->isType(kExprParameter)); + ASSERT_EQ(eq2->expr2->ival, 1); ASSERT_EQ(result.parameters()[1], eq2->expr2); } diff --git a/test/queries/queries-bad.sql b/test/queries/queries-bad.sql index 96fd4503..59517c32 100644 --- a/test/queries/queries-bad.sql +++ b/test/queries/queries-bad.sql @@ -60,3 +60,11 @@ !SELECT rank() OVER (ROWS UNBOUNDED PRECEDINGG) FROM test; !SELECT test1, rank() OVER (ROWS -1 PRECEDING) FROM test; !SELECT test1, rank() OVER (ROWS BETWEEN UNBOUNDED PRECEDING AND -1 FOLLOWING) FROM test; +# Join USING +!SELECT * FROM foo INNER JOIN bar USING (); +!SELECT * FROM foo INNER JOIN bar USING (*); +# Both the SQL standard and Postgres allow column names only (no column references). +!SELECT * FROM foo INNER JOIN bar USING (foo.a); +!SELECT * FROM foo INNER JOIN bar USING (a b); +!SELECT * FROM foo INNER JOIN bar USING (a AS b); +!SELECT * FROM foo INNER JOIN bar USING (1); diff --git a/test/select_tests.cpp b/test/select_tests.cpp index 40ad4e51..e3d8c670 100644 --- a/test/select_tests.cpp +++ b/test/select_tests.cpp @@ -336,6 +336,7 @@ TEST(SelectJoin) { ASSERT_STREQ(outer_join->condition->expr->name, "product_id"); ASSERT_STREQ(outer_join->condition->expr2->table, "Product"); ASSERT_STREQ(outer_join->condition->expr2->name, "id"); + ASSERT_FALSE(outer_join->namedColumns); // Joins are are left associative. // So the second join should be on the left. @@ -347,6 +348,7 @@ TEST(SelectJoin) { ASSERT_STREQ(inner_join->left->name, "fact"); ASSERT_EQ(inner_join->right->type, kTableName); ASSERT_STREQ(inner_join->right->name, "City"); + ASSERT_FALSE(inner_join->namedColumns); ASSERT_EQ(inner_join->condition->opType, kOpEquals); ASSERT_STREQ(inner_join->condition->expr->table, "fact"); @@ -355,6 +357,106 @@ TEST(SelectJoin) { ASSERT_STREQ(inner_join->condition->expr2->name, "id"); } +TEST(SelectJoinUsing) { + TEST_PARSE_SQL_QUERY( + "SELECT * FROM foo INNER JOIN bar USING (a, b);" + "SELECT a, b, c FROM foo LEFT JOIN bar USING (a);" + "SELECT b FROM foo AS baz JOIN bar USING (a);", + result, 3); + + auto stmt = (SelectStatement*)result.getStatement(0); + // SELECT * ... + ASSERT_TRUE(stmt->selectList); + ASSERT_EQ(stmt->selectList->size(), 1); + ASSERT_EQ(stmt->selectList->front()->type, kExprStar); + + // ... FROM foo INNER JOIN bar ... + ASSERT_TRUE(stmt->fromTable); + ASSERT_EQ(stmt->fromTable->type, kTableJoin); + ASSERT_TRUE(stmt->fromTable->join); + ASSERT_EQ(stmt->fromTable->join->type, kJoinInner); + ASSERT_TRUE(stmt->fromTable->join->left); + ASSERT_EQ(stmt->fromTable->join->left->type, kTableName); + ASSERT_TRUE(stmt->fromTable->join->left->name); + ASSERT_STREQ(stmt->fromTable->join->left->name, "foo"); + ASSERT_TRUE(stmt->fromTable->join->right); + ASSERT_EQ(stmt->fromTable->join->right->type, kTableName); + ASSERT_TRUE(stmt->fromTable->join->right->name); + ASSERT_STREQ(stmt->fromTable->join->right->name, "bar"); + + // ... USING a, b; + ASSERT_FALSE(stmt->fromTable->join->condition); + ASSERT_TRUE(stmt->fromTable->join->namedColumns); + ASSERT_EQ(stmt->fromTable->join->namedColumns->size(), 2); + ASSERT_STREQ(stmt->fromTable->join->namedColumns->at(0), "a"); + ASSERT_STREQ(stmt->fromTable->join->namedColumns->at(1), "b"); + + stmt = (SelectStatement*)result.getStatement(1); + // SELECT a, b, c ... + ASSERT_TRUE(stmt->selectList); + ASSERT_EQ(stmt->selectList->size(), 3); + ASSERT_EQ(stmt->selectList->at(0)->type, kExprColumnRef); + ASSERT_TRUE(stmt->selectList->at(0)->name); + ASSERT_STREQ(stmt->selectList->at(0)->name, "a"); + ASSERT_EQ(stmt->selectList->at(1)->type, kExprColumnRef); + ASSERT_TRUE(stmt->selectList->at(1)->name); + ASSERT_STREQ(stmt->selectList->at(1)->name, "b"); + ASSERT_EQ(stmt->selectList->at(2)->type, kExprColumnRef); + ASSERT_TRUE(stmt->selectList->at(2)->name); + ASSERT_STREQ(stmt->selectList->at(2)->name, "c"); + + // ... FROM foo LEFT JOIN bar ... + ASSERT_TRUE(stmt->fromTable); + ASSERT_EQ(stmt->fromTable->type, kTableJoin); + ASSERT_TRUE(stmt->fromTable->join); + ASSERT_EQ(stmt->fromTable->join->type, kJoinLeft); + ASSERT_TRUE(stmt->fromTable->join->left); + ASSERT_EQ(stmt->fromTable->join->left->type, kTableName); + ASSERT_TRUE(stmt->fromTable->join->left->name); + ASSERT_STREQ(stmt->fromTable->join->left->name, "foo"); + ASSERT_TRUE(stmt->fromTable->join->right); + ASSERT_EQ(stmt->fromTable->join->right->type, kTableName); + ASSERT_TRUE(stmt->fromTable->join->right->name); + ASSERT_STREQ(stmt->fromTable->join->right->name, "bar"); + + // ... USING a; + ASSERT_FALSE(stmt->fromTable->join->condition); + ASSERT_TRUE(stmt->fromTable->join->namedColumns); + ASSERT_EQ(stmt->fromTable->join->namedColumns->size(), 1); + ASSERT_STREQ(stmt->fromTable->join->namedColumns->at(0), "a"); + + stmt = (SelectStatement*)result.getStatement(2); + // SELECT b ... + ASSERT_TRUE(stmt->selectList); + ASSERT_EQ(stmt->selectList->size(), 1); + ASSERT_EQ(stmt->selectList->at(0)->type, kExprColumnRef); + ASSERT_TRUE(stmt->selectList->at(0)->name); + ASSERT_STREQ(stmt->selectList->at(0)->name, "b"); + + // ... FROM foo as baz JOIN bar ... + ASSERT_TRUE(stmt->fromTable); + ASSERT_EQ(stmt->fromTable->type, kTableJoin); + ASSERT_TRUE(stmt->fromTable->join); + ASSERT_EQ(stmt->fromTable->join->type, kJoinInner); + ASSERT_TRUE(stmt->fromTable->join->left); + ASSERT_EQ(stmt->fromTable->join->left->type, kTableName); + ASSERT_TRUE(stmt->fromTable->join->left->name); + ASSERT_STREQ(stmt->fromTable->join->left->name, "foo"); + ASSERT_TRUE(stmt->fromTable->join->left->alias); + ASSERT_TRUE(stmt->fromTable->join->left->alias->name); + ASSERT_STREQ(stmt->fromTable->join->left->alias->name, "baz"); + ASSERT_TRUE(stmt->fromTable->join->right); + ASSERT_EQ(stmt->fromTable->join->right->type, kTableName); + ASSERT_TRUE(stmt->fromTable->join->right->name); + ASSERT_STREQ(stmt->fromTable->join->right->name, "bar"); + + // ... USING a; + ASSERT_FALSE(stmt->fromTable->join->condition); + ASSERT_TRUE(stmt->fromTable->join->namedColumns); + ASSERT_EQ(stmt->fromTable->join->namedColumns->size(), 1); + ASSERT_STREQ(stmt->fromTable->join->namedColumns->at(0), "a"); +} + TEST(SelectColumnOrder) { TEST_PARSE_SINGLE_SQL( "SELECT *\ @@ -490,36 +592,47 @@ TEST(JoinTypes) { stmt = (SelectStatement*)result.getStatement(0); ASSERT_EQ(stmt->fromTable->join->type, kJoinInner); + ASSERT_FALSE(stmt->fromTable->join->namedColumns); stmt = (SelectStatement*)result.getStatement(1); ASSERT_EQ(stmt->fromTable->join->type, kJoinInner); + ASSERT_FALSE(stmt->fromTable->join->namedColumns); stmt = (SelectStatement*)result.getStatement(2); ASSERT_EQ(stmt->fromTable->join->type, kJoinLeft); + ASSERT_FALSE(stmt->fromTable->join->namedColumns); stmt = (SelectStatement*)result.getStatement(3); ASSERT_EQ(stmt->fromTable->join->type, kJoinLeft); + ASSERT_FALSE(stmt->fromTable->join->namedColumns); stmt = (SelectStatement*)result.getStatement(4); ASSERT_EQ(stmt->fromTable->join->type, kJoinRight); + ASSERT_FALSE(stmt->fromTable->join->namedColumns); stmt = (SelectStatement*)result.getStatement(5); ASSERT_EQ(stmt->fromTable->join->type, kJoinRight); + ASSERT_FALSE(stmt->fromTable->join->namedColumns); stmt = (SelectStatement*)result.getStatement(6); ASSERT_EQ(stmt->fromTable->join->type, kJoinFull); + ASSERT_FALSE(stmt->fromTable->join->namedColumns); stmt = (SelectStatement*)result.getStatement(7); ASSERT_EQ(stmt->fromTable->join->type, kJoinFull); + ASSERT_FALSE(stmt->fromTable->join->namedColumns); stmt = (SelectStatement*)result.getStatement(8); ASSERT_EQ(stmt->fromTable->join->type, kJoinFull); + ASSERT_FALSE(stmt->fromTable->join->namedColumns); stmt = (SelectStatement*)result.getStatement(9); ASSERT_EQ(stmt->fromTable->join->type, kJoinNatural); + ASSERT_FALSE(stmt->fromTable->join->namedColumns); stmt = (SelectStatement*)result.getStatement(10); ASSERT_EQ(stmt->fromTable->join->type, kJoinCross); + ASSERT_FALSE(stmt->fromTable->join->namedColumns); stmt = (SelectStatement*)result.getStatement(11); ASSERT_NULL(stmt->fromTable->join); @@ -699,7 +812,7 @@ TEST(WithClauseSingle) { ASSERT_STREQ(stmt->withDescriptions->at(0)->alias, "a"); // with_description – select stmt - ASSERT_EQ(stmt->withDescriptions->at(0)->select->selectList->size(), 1) + ASSERT_EQ(stmt->withDescriptions->at(0)->select->selectList->size(), 1); ASSERT_STREQ(stmt->withDescriptions->at(0)->select->selectList->at(0)->name, std::string("name")); ASSERT_STREQ(stmt->withDescriptions->at(0)->select->fromTable->name, std::string("peopleA")); @@ -725,9 +838,9 @@ TEST(WithClauseDouble) { ASSERT_STREQ(stmt->withDescriptions->at(1)->alias, "b"); // with_description – select stmts - ASSERT_EQ(stmt->withDescriptions->at(0)->select->selectList->size(), 1) + ASSERT_EQ(stmt->withDescriptions->at(0)->select->selectList->size(), 1); ASSERT_STREQ(stmt->withDescriptions->at(0)->select->fromTable->name, "peopleA"); - ASSERT_EQ(stmt->withDescriptions->at(1)->select->selectList->size(), 2) + ASSERT_EQ(stmt->withDescriptions->at(1)->select->selectList->size(), 2); ASSERT_STREQ(stmt->withDescriptions->at(1)->select->fromTable->name, "peopleB"); // main select @@ -990,7 +1103,6 @@ TEST(MultipleLockingClause) { } TEST(WindowFunctions) { - SelectStatement* stmt; TEST_PARSE_SQL_QUERY( "SELECT t2, 1 / avg(t1) OVER(), rank() OVER(ORDER BY t1 DESC) rnk FROM t;" "SELECT avg(t1) OVER(PARTITION BY t2, t3 ORDER BY t4, t5 ROWS UNBOUNDED PRECEDING) FROM t;" @@ -1000,7 +1112,7 @@ TEST(WindowFunctions) { "SELECT rank() OVER(PARTITION BY t1 ORDER BY t2 GROUPS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM t;", result, 5); - stmt = (SelectStatement*)result.getStatement(0); + auto stmt = (SelectStatement*)result.getStatement(0); ASSERT_TRUE(stmt->selectList); ASSERT_EQ(stmt->selectList->size(), 3); ASSERT_TRUE(stmt->fromTable); diff --git a/test/thirdparty/microtest/microtest.h b/test/thirdparty/microtest/microtest.h index 15295fef..95f80dc0 100644 --- a/test/thirdparty/microtest/microtest.h +++ b/test/thirdparty/microtest/microtest.h @@ -21,45 +21,53 @@ // Assertions // //////////////// -#define ASSERT(cond) ASSERT_TRUE(cond); +#define ASSERT(cond) ASSERT_TRUE(cond) -#define ASSERT_TRUE(cond) \ - if (!(cond)) throw mt::AssertFailedException(#cond, __FILE__, __LINE__); +#define ASSERT_TRUE(cond) \ + if (!(cond)) { \ + throw mt::AssertFailedException(#cond, __FILE__, __LINE__); \ + } \ + static_assert(true, "End call of macro with a semicolon.") -#define ASSERT_FALSE(cond) \ - if (cond) throw mt::AssertFailedException(#cond, __FILE__, __LINE__); +#define ASSERT_FALSE(cond) \ + if (cond) { \ + throw mt::AssertFailedException(#cond, __FILE__, __LINE__); \ + } \ + static_assert(true, "End call of macro with a semicolon.") -#define ASSERT_NULL(value) ASSERT_TRUE(value == NULL); +#define ASSERT_NULL(value) ASSERT_TRUE(value == NULL) -#define ASSERT_NOTNULL(value) ASSERT_TRUE(value != NULL); +#define ASSERT_NOTNULL(value) ASSERT_TRUE(value != NULL) #define ASSERT_STREQ(a, b) \ if (std::string(a).compare(std::string(b)) != 0) { \ printf("%s{ info} %s", mt::yellow(), mt::def()); \ std::cout << "Actual values: " << a << " != " << b << std::endl; \ throw mt::AssertFailedException(#a " == " #b, __FILE__, __LINE__); \ - } + } \ + static_assert(true, "End call of macro with a semicolon.") #define ASSERT_STRNEQ(a, b) \ if (std::string(a).compare(std::string(b)) != = 0) { \ printf("%s{ info} %s", mt::yellow(), mt::def()); \ std::cout << "Actual values: " << a << " == " << b << std::endl; \ throw mt::AssertFailedException(#a " != " #b, __FILE__, __LINE__); \ - } + } \ + static_assert(true, "End call of macro with a semicolon.") #define ASSERT_EQ(a, b) \ if (a != b) { \ printf("%s{ info} %s", mt::yellow(), mt::def()); \ std::cout << "Actual values: " << a << " != " << b << std::endl; \ } \ - ASSERT(a == b); + ASSERT(a == b) #define ASSERT_NEQ(a, b) \ if (a == b) { \ printf("%s{ info} %s", mt::yellow(), mt::def()); \ std::cout << "Actual values: " << a << " == " << b << std::endl; \ } \ - ASSERT(a != b); + ASSERT(a != b) //////////////// // Unit Tests // @@ -102,7 +110,7 @@ inline void printFailed(const char* message, FILE* file = stdout) { class AssertFailedException : public std::exception { public: AssertFailedException(std::string description, std::string filepath, int line) - : std::exception(), description_(description), filepath_(filepath), line_(line){}; + : std::exception(), description_(description), filepath_(filepath), line_(line) {}; virtual const char* what() const throw() { return description_.c_str(); } @@ -196,4 +204,4 @@ class Runtime { } \ } -#endif // __MICROTEST_H__ \ No newline at end of file +#endif // __MICROTEST_H__