From 2d1c15d54fc717d088d7cc93f7a4f077fa81772f Mon Sep 17 00:00:00 2001 From: dey4ss <27929897+dey4ss@users.noreply.github.com> Date: Sun, 26 May 2024 17:33:20 +0900 Subject: [PATCH] pass list of columns rather than parsing predicate --- src/parser/bison_parser.cpp | 2236 +++++++++++++++++------------------ src/parser/bison_parser.h | 8 +- src/parser/bison_parser.y | 337 +++--- src/sql/Table.h | 2 +- test/select_tests.cpp | 95 +- 5 files changed, 1283 insertions(+), 1395 deletions(-) diff --git a/src/parser/bison_parser.cpp b/src/parser/bison_parser.cpp index 35347f2..425a5f4 100644 --- a/src/parser/bison_parser.cpp +++ b/src/parser/bison_parser.cpp @@ -76,8 +76,8 @@ /* 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,10 +85,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" @@ -104,7 +105,7 @@ } // clang-format off -#line 108 "bison_parser.cpp" +#line 109 "bison_parser.cpp" # ifndef YY_CAST # ifdef __cplusplus @@ -864,40 +865,40 @@ static const yytype_uint8 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { - 0, 323, 323, 342, 348, 355, 359, 363, 364, 365, - 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, - 382, 383, 385, 389, 394, 398, 408, 409, 410, 412, - 412, 418, 424, 426, 430, 441, 447, 455, 470, 475, - 476, 482, 488, 499, 500, 505, 516, 529, 541, 548, - 555, 564, 565, 567, 571, 576, 577, 579, 586, 587, - 588, 589, 590, 591, 592, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 608, 609, 611, 612, - 613, 615, 616, 618, 622, 627, 628, 629, 630, 632, - 633, 641, 647, 653, 659, 665, 666, 673, 679, 681, - 691, 698, 709, 716, 724, 725, 732, 739, 743, 748, - 758, 762, 766, 778, 778, 780, 781, 790, 791, 793, - 807, 819, 824, 828, 832, 837, 838, 840, 850, 851, - 853, 855, 856, 858, 860, 861, 863, 868, 870, 871, - 873, 874, 876, 880, 885, 887, 888, 889, 893, 894, - 896, 897, 898, 899, 900, 901, 906, 910, 915, 916, - 918, 922, 927, 935, 935, 935, 935, 935, 937, 938, - 938, 938, 938, 938, 938, 938, 938, 939, 939, 943, - 943, 945, 946, 947, 948, 949, 951, 951, 952, 953, - 954, 955, 956, 957, 958, 959, 960, 962, 963, 965, - 966, 967, 968, 972, 973, 974, 975, 977, 978, 980, - 981, 983, 984, 985, 986, 987, 988, 989, 993, 994, - 998, 999, 1001, 1002, 1007, 1008, 1009, 1013, 1014, 1015, - 1017, 1018, 1019, 1020, 1021, 1023, 1025, 1027, 1028, 1029, - 1030, 1031, 1032, 1034, 1035, 1036, 1037, 1038, 1039, 1041, - 1041, 1043, 1045, 1047, 1049, 1050, 1051, 1052, 1054, 1054, - 1054, 1054, 1054, 1054, 1054, 1056, 1058, 1059, 1061, 1062, - 1064, 1066, 1068, 1079, 1083, 1094, 1126, 1135, 1135, 1142, - 1142, 1144, 1144, 1151, 1155, 1160, 1168, 1174, 1178, 1183, - 1184, 1186, 1186, 1188, 1188, 1190, 1191, 1193, 1193, 1199, - 1200, 1202, 1206, 1211, 1217, 1224, 1225, 1226, 1227, 1229, - 1230, 1231, 1237, 1237, 1239, 1241, 1245, 1250, 1260, 1267, - 1275, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, - 1316, 1318, 1324, 1324, 1327, 1331 + 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 @@ -2060,891 +2061,891 @@ yydestruct (const char *yymsg, switch (yykind) { case YYSYMBOL_IDENTIFIER: /* IDENTIFIER */ -#line 182 "bison_parser.y" - { free( (((*yyvaluep).sval)) ); } -#line 2066 "bison_parser.cpp" +#line 184 "bison_parser.y" + { free( (((*yyvaluep).sval)) ); } +#line 2067 "bison_parser.cpp" break; case YYSYMBOL_STRING: /* STRING */ -#line 182 "bison_parser.y" - { free( (((*yyvaluep).sval)) ); } -#line 2072 "bison_parser.cpp" +#line 184 "bison_parser.y" + { free( (((*yyvaluep).sval)) ); } +#line 2073 "bison_parser.cpp" break; case YYSYMBOL_FLOATVAL: /* FLOATVAL */ -#line 169 "bison_parser.y" - { } -#line 2078 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2079 "bison_parser.cpp" break; case YYSYMBOL_INTVAL: /* INTVAL */ -#line 169 "bison_parser.y" - { } -#line 2084 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2085 "bison_parser.cpp" break; case YYSYMBOL_statement_list: /* statement_list */ -#line 183 "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 2097 "bison_parser.cpp" + } + delete (((*yyvaluep).stmt_vec)); +} +#line 2098 "bison_parser.cpp" break; case YYSYMBOL_statement: /* statement */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).statement)); } -#line 2103 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).statement)); } +#line 2104 "bison_parser.cpp" break; case YYSYMBOL_preparable_statement: /* preparable_statement */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).statement)); } -#line 2109 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).statement)); } +#line 2110 "bison_parser.cpp" break; case YYSYMBOL_opt_hints: /* opt_hints */ -#line 183 "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 2122 "bison_parser.cpp" + } + delete (((*yyvaluep).expr_vec)); +} +#line 2123 "bison_parser.cpp" break; case YYSYMBOL_hint_list: /* hint_list */ -#line 183 "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 2135 "bison_parser.cpp" + } + delete (((*yyvaluep).expr_vec)); +} +#line 2136 "bison_parser.cpp" break; case YYSYMBOL_hint: /* hint */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2141 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2142 "bison_parser.cpp" break; case YYSYMBOL_transaction_statement: /* transaction_statement */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).transaction_stmt)); } -#line 2147 "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 191 "bison_parser.y" - { delete (((*yyvaluep).prep_stmt)); } -#line 2153 "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 182 "bison_parser.y" - { free( (((*yyvaluep).sval)) ); } -#line 2159 "bison_parser.cpp" +#line 184 "bison_parser.y" + { free( (((*yyvaluep).sval)) ); } +#line 2160 "bison_parser.cpp" break; case YYSYMBOL_execute_statement: /* execute_statement */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).exec_stmt)); } -#line 2165 "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 191 "bison_parser.y" - { delete (((*yyvaluep).import_stmt)); } -#line 2171 "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 169 "bison_parser.y" - { } -#line 2177 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2178 "bison_parser.cpp" break; case YYSYMBOL_file_path: /* file_path */ -#line 182 "bison_parser.y" - { free( (((*yyvaluep).sval)) ); } -#line 2183 "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 169 "bison_parser.y" - { } -#line 2189 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2190 "bison_parser.cpp" break; case YYSYMBOL_export_statement: /* export_statement */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).export_stmt)); } -#line 2195 "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 191 "bison_parser.y" - { delete (((*yyvaluep).show_stmt)); } -#line 2201 "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 191 "bison_parser.y" - { delete (((*yyvaluep).create_stmt)); } -#line 2207 "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 169 "bison_parser.y" - { } -#line 2213 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2214 "bison_parser.cpp" break; case YYSYMBOL_table_elem_commalist: /* table_elem_commalist */ -#line 183 "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 2226 "bison_parser.cpp" + } + delete (((*yyvaluep).table_element_vec)); +} +#line 2227 "bison_parser.cpp" break; case YYSYMBOL_table_elem: /* table_elem */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).table_element_t)); } -#line 2232 "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 191 "bison_parser.y" - { delete (((*yyvaluep).column_t)); } -#line 2238 "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 169 "bison_parser.y" - { } -#line 2244 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2245 "bison_parser.cpp" break; case YYSYMBOL_opt_time_precision: /* opt_time_precision */ -#line 169 "bison_parser.y" - { } -#line 2250 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2251 "bison_parser.cpp" break; case YYSYMBOL_opt_decimal_specification: /* opt_decimal_specification */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).ival_pair)); } -#line 2256 "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 169 "bison_parser.y" - { } -#line 2262 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2263 "bison_parser.cpp" break; case YYSYMBOL_column_constraint_set: /* column_constraint_set */ -#line 169 "bison_parser.y" - { } -#line 2268 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2269 "bison_parser.cpp" break; case YYSYMBOL_column_constraint: /* column_constraint */ -#line 169 "bison_parser.y" - { } -#line 2274 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2275 "bison_parser.cpp" break; case YYSYMBOL_table_constraint: /* table_constraint */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).table_constraint_t)); } -#line 2280 "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 191 "bison_parser.y" - { delete (((*yyvaluep).drop_stmt)); } -#line 2286 "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 169 "bison_parser.y" - { } -#line 2292 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2293 "bison_parser.cpp" break; case YYSYMBOL_alter_statement: /* alter_statement */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).alter_stmt)); } -#line 2298 "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 191 "bison_parser.y" - { delete (((*yyvaluep).alter_action_t)); } -#line 2304 "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 191 "bison_parser.y" - { delete (((*yyvaluep).drop_action_t)); } -#line 2310 "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 191 "bison_parser.y" - { delete (((*yyvaluep).delete_stmt)); } -#line 2316 "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 191 "bison_parser.y" - { delete (((*yyvaluep).delete_stmt)); } -#line 2322 "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 191 "bison_parser.y" - { delete (((*yyvaluep).insert_stmt)); } -#line 2328 "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 174 "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 2341 "bison_parser.cpp" + } + delete (((*yyvaluep).str_vec)); +} +#line 2342 "bison_parser.cpp" break; case YYSYMBOL_update_statement: /* update_statement */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).update_stmt)); } -#line 2347 "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 183 "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 2360 "bison_parser.cpp" + } + delete (((*yyvaluep).update_vec)); +} +#line 2361 "bison_parser.cpp" break; case YYSYMBOL_update_clause: /* update_clause */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).update_t)); } -#line 2366 "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 191 "bison_parser.y" - { delete (((*yyvaluep).select_stmt)); } -#line 2372 "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 191 "bison_parser.y" - { delete (((*yyvaluep).select_stmt)); } -#line 2378 "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 191 "bison_parser.y" - { delete (((*yyvaluep).select_stmt)); } -#line 2384 "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 191 "bison_parser.y" - { delete (((*yyvaluep).select_stmt)); } -#line 2390 "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 191 "bison_parser.y" - { delete (((*yyvaluep).select_stmt)); } -#line 2396 "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 191 "bison_parser.y" - { delete (((*yyvaluep).set_operator_t)); } -#line 2402 "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 191 "bison_parser.y" - { delete (((*yyvaluep).set_operator_t)); } -#line 2408 "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 169 "bison_parser.y" - { } -#line 2414 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2415 "bison_parser.cpp" break; case YYSYMBOL_select_clause: /* select_clause */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).select_stmt)); } -#line 2420 "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 169 "bison_parser.y" - { } -#line 2426 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2427 "bison_parser.cpp" break; case YYSYMBOL_select_list: /* select_list */ -#line 183 "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 2439 "bison_parser.cpp" + } + delete (((*yyvaluep).expr_vec)); +} +#line 2440 "bison_parser.cpp" break; case YYSYMBOL_opt_from_clause: /* opt_from_clause */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).table)); } -#line 2445 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).table)); } +#line 2446 "bison_parser.cpp" break; case YYSYMBOL_from_clause: /* from_clause */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).table)); } -#line 2451 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).table)); } +#line 2452 "bison_parser.cpp" break; case YYSYMBOL_opt_where: /* opt_where */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2457 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2458 "bison_parser.cpp" break; case YYSYMBOL_opt_group: /* opt_group */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).group_t)); } -#line 2463 "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 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2469 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2470 "bison_parser.cpp" break; case YYSYMBOL_opt_order: /* opt_order */ -#line 183 "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 2482 "bison_parser.cpp" + } + delete (((*yyvaluep).order_vec)); +} +#line 2483 "bison_parser.cpp" break; case YYSYMBOL_order_list: /* order_list */ -#line 183 "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 2495 "bison_parser.cpp" + } + delete (((*yyvaluep).order_vec)); +} +#line 2496 "bison_parser.cpp" break; case YYSYMBOL_order_desc: /* order_desc */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).order)); } -#line 2501 "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 169 "bison_parser.y" - { } -#line 2507 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2508 "bison_parser.cpp" break; case YYSYMBOL_opt_top: /* opt_top */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).limit)); } -#line 2513 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).limit)); } +#line 2514 "bison_parser.cpp" break; case YYSYMBOL_opt_limit: /* opt_limit */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).limit)); } -#line 2519 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).limit)); } +#line 2520 "bison_parser.cpp" break; case YYSYMBOL_expr_list: /* expr_list */ -#line 183 "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 2532 "bison_parser.cpp" + } + delete (((*yyvaluep).expr_vec)); +} +#line 2533 "bison_parser.cpp" break; case YYSYMBOL_opt_literal_list: /* opt_literal_list */ -#line 183 "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 2545 "bison_parser.cpp" + } + delete (((*yyvaluep).expr_vec)); +} +#line 2546 "bison_parser.cpp" break; case YYSYMBOL_literal_list: /* literal_list */ -#line 183 "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 2558 "bison_parser.cpp" + } + delete (((*yyvaluep).expr_vec)); +} +#line 2559 "bison_parser.cpp" break; case YYSYMBOL_expr_alias: /* expr_alias */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2564 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2565 "bison_parser.cpp" break; case YYSYMBOL_expr: /* expr */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2570 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2571 "bison_parser.cpp" break; case YYSYMBOL_operand: /* operand */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2576 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2577 "bison_parser.cpp" break; case YYSYMBOL_scalar_expr: /* scalar_expr */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2582 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2583 "bison_parser.cpp" break; case YYSYMBOL_unary_expr: /* unary_expr */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2588 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2589 "bison_parser.cpp" break; case YYSYMBOL_binary_expr: /* binary_expr */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2594 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2595 "bison_parser.cpp" break; case YYSYMBOL_logic_expr: /* logic_expr */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2600 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2601 "bison_parser.cpp" break; case YYSYMBOL_in_expr: /* in_expr */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2606 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2607 "bison_parser.cpp" break; case YYSYMBOL_case_expr: /* case_expr */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2612 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2613 "bison_parser.cpp" break; case YYSYMBOL_case_list: /* case_list */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2618 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2619 "bison_parser.cpp" break; case YYSYMBOL_exists_expr: /* exists_expr */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2624 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2625 "bison_parser.cpp" break; case YYSYMBOL_comp_expr: /* comp_expr */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2630 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2631 "bison_parser.cpp" break; case YYSYMBOL_function_expr: /* function_expr */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2636 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2637 "bison_parser.cpp" break; case YYSYMBOL_opt_window: /* opt_window */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).window_description)); } -#line 2642 "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 183 "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 2655 "bison_parser.cpp" + } + delete (((*yyvaluep).expr_vec)); +} +#line 2656 "bison_parser.cpp" break; case YYSYMBOL_opt_frame_clause: /* opt_frame_clause */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).frame_description)); } -#line 2661 "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 169 "bison_parser.y" - { } -#line 2667 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2668 "bison_parser.cpp" break; case YYSYMBOL_frame_bound: /* frame_bound */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).frame_bound)); } -#line 2673 "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 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2679 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2680 "bison_parser.cpp" break; case YYSYMBOL_cast_expr: /* cast_expr */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2685 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2686 "bison_parser.cpp" break; case YYSYMBOL_datetime_field: /* datetime_field */ -#line 169 "bison_parser.y" - { } -#line 2691 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2692 "bison_parser.cpp" break; case YYSYMBOL_datetime_field_plural: /* datetime_field_plural */ -#line 169 "bison_parser.y" - { } -#line 2697 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2698 "bison_parser.cpp" break; case YYSYMBOL_duration_field: /* duration_field */ -#line 169 "bison_parser.y" - { } -#line 2703 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2704 "bison_parser.cpp" break; case YYSYMBOL_array_expr: /* array_expr */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2709 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2710 "bison_parser.cpp" break; case YYSYMBOL_array_index: /* array_index */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2715 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2716 "bison_parser.cpp" break; case YYSYMBOL_between_expr: /* between_expr */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2721 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2722 "bison_parser.cpp" break; case YYSYMBOL_column_name: /* column_name */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2727 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2728 "bison_parser.cpp" break; case YYSYMBOL_literal: /* literal */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2733 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2734 "bison_parser.cpp" break; case YYSYMBOL_string_literal: /* string_literal */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2739 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2740 "bison_parser.cpp" break; case YYSYMBOL_bool_literal: /* bool_literal */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2745 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2746 "bison_parser.cpp" break; case YYSYMBOL_num_literal: /* num_literal */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2751 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2752 "bison_parser.cpp" break; case YYSYMBOL_int_literal: /* int_literal */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2757 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2758 "bison_parser.cpp" break; case YYSYMBOL_null_literal: /* null_literal */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2763 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2764 "bison_parser.cpp" break; case YYSYMBOL_date_literal: /* date_literal */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2769 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2770 "bison_parser.cpp" break; case YYSYMBOL_interval_literal: /* interval_literal */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2775 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2776 "bison_parser.cpp" break; case YYSYMBOL_param_expr: /* param_expr */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2781 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2782 "bison_parser.cpp" break; case YYSYMBOL_table_ref: /* table_ref */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).table)); } -#line 2787 "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 191 "bison_parser.y" - { delete (((*yyvaluep).table)); } -#line 2793 "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 191 "bison_parser.y" - { delete (((*yyvaluep).table)); } -#line 2799 "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 183 "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 2812 "bison_parser.cpp" + } + delete (((*yyvaluep).table_vec)); +} +#line 2813 "bison_parser.cpp" break; case YYSYMBOL_table_ref_name: /* table_ref_name */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).table)); } -#line 2818 "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 191 "bison_parser.y" - { delete (((*yyvaluep).table)); } -#line 2824 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).table)); } +#line 2825 "bison_parser.cpp" break; case YYSYMBOL_table_name: /* table_name */ -#line 170 "bison_parser.y" - { - free( (((*yyvaluep).table_name).name) ); - free( (((*yyvaluep).table_name).schema) ); - } -#line 2833 "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 182 "bison_parser.y" - { free( (((*yyvaluep).sval)) ); } -#line 2839 "bison_parser.cpp" +#line 184 "bison_parser.y" + { free( (((*yyvaluep).sval)) ); } +#line 2840 "bison_parser.cpp" break; case YYSYMBOL_table_alias: /* table_alias */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).alias_t)); } -#line 2845 "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 191 "bison_parser.y" - { delete (((*yyvaluep).alias_t)); } -#line 2851 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).alias_t)); } +#line 2852 "bison_parser.cpp" break; case YYSYMBOL_alias: /* alias */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).alias_t)); } -#line 2857 "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 191 "bison_parser.y" - { delete (((*yyvaluep).alias_t)); } -#line 2863 "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 191 "bison_parser.y" - { delete (((*yyvaluep).locking_clause_vec)); } -#line 2869 "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 191 "bison_parser.y" - { delete (((*yyvaluep).locking_clause_vec)); } -#line 2875 "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 191 "bison_parser.y" - { delete (((*yyvaluep).locking_t)); } -#line 2881 "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 169 "bison_parser.y" - { } -#line 2887 "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 169 "bison_parser.y" - { } -#line 2893 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2894 "bison_parser.cpp" break; case YYSYMBOL_opt_with_clause: /* opt_with_clause */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).with_description_vec)); } -#line 2899 "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 191 "bison_parser.y" - { delete (((*yyvaluep).with_description_vec)); } -#line 2905 "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 191 "bison_parser.y" - { delete (((*yyvaluep).with_description_vec)); } -#line 2911 "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 191 "bison_parser.y" - { delete (((*yyvaluep).with_description_t)); } -#line 2917 "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 191 "bison_parser.y" - { delete (((*yyvaluep).table)); } -#line 2923 "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 169 "bison_parser.y" - { } -#line 2929 "bison_parser.cpp" +#line 171 "bison_parser.y" + { } +#line 2930 "bison_parser.cpp" break; case YYSYMBOL_join_condition: /* join_condition */ -#line 191 "bison_parser.y" - { delete (((*yyvaluep).expr)); } -#line 2935 "bison_parser.cpp" +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2936 "bison_parser.cpp" break; case YYSYMBOL_ident_commalist: /* ident_commalist */ -#line 174 "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 2948 "bison_parser.cpp" + } + delete (((*yyvaluep).str_vec)); +} +#line 2949 "bison_parser.cpp" break; default: @@ -3041,7 +3042,7 @@ YYLTYPE yylloc = yyloc_default; /* User initialization code. */ -#line 75 "bison_parser.y" +#line 76 "bison_parser.y" { // Initialize yylloc.first_column = 0; @@ -3052,7 +3053,7 @@ YYLTYPE yylloc = yyloc_default; yylloc.string_length = 0; } -#line 3056 "bison_parser.cpp" +#line 3057 "bison_parser.cpp" yylsp[0] = yylloc; goto yysetstate; @@ -3263,7 +3264,7 @@ YYLTYPE yylloc = yyloc_default; switch (yyn) { case 2: /* input: statement_list opt_semicolon */ -#line 323 "bison_parser.y" +#line 325 "bison_parser.y" { for (SQLStatement* stmt : *(yyvsp[-1].stmt_vec)) { // Transfers ownership of the statement. @@ -3281,236 +3282,236 @@ YYLTYPE yylloc = yyloc_default; } delete (yyvsp[-1].stmt_vec); } -#line 3285 "bison_parser.cpp" +#line 3286 "bison_parser.cpp" break; case 3: /* statement_list: statement */ -#line 342 "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 3296 "bison_parser.cpp" +#line 3297 "bison_parser.cpp" break; case 4: /* statement_list: statement_list ';' statement */ -#line 348 "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 3307 "bison_parser.cpp" +#line 3308 "bison_parser.cpp" break; case 5: /* statement: prepare_statement opt_hints */ -#line 355 "bison_parser.y" +#line 357 "bison_parser.y" { (yyval.statement) = (yyvsp[-1].prep_stmt); (yyval.statement)->hints = (yyvsp[0].expr_vec); } -#line 3316 "bison_parser.cpp" +#line 3317 "bison_parser.cpp" break; case 6: /* statement: preparable_statement opt_hints */ -#line 359 "bison_parser.y" +#line 361 "bison_parser.y" { (yyval.statement) = (yyvsp[-1].statement); (yyval.statement)->hints = (yyvsp[0].expr_vec); } -#line 3325 "bison_parser.cpp" +#line 3326 "bison_parser.cpp" break; case 7: /* statement: show_statement */ -#line 363 "bison_parser.y" +#line 365 "bison_parser.y" { (yyval.statement) = (yyvsp[0].show_stmt); } -#line 3331 "bison_parser.cpp" +#line 3332 "bison_parser.cpp" break; case 8: /* statement: import_statement */ -#line 364 "bison_parser.y" +#line 366 "bison_parser.y" { (yyval.statement) = (yyvsp[0].import_stmt); } -#line 3337 "bison_parser.cpp" +#line 3338 "bison_parser.cpp" break; case 9: /* statement: export_statement */ -#line 365 "bison_parser.y" +#line 367 "bison_parser.y" { (yyval.statement) = (yyvsp[0].export_stmt); } -#line 3343 "bison_parser.cpp" +#line 3344 "bison_parser.cpp" break; case 10: /* preparable_statement: select_statement */ -#line 367 "bison_parser.y" +#line 369 "bison_parser.y" { (yyval.statement) = (yyvsp[0].select_stmt); } -#line 3349 "bison_parser.cpp" +#line 3350 "bison_parser.cpp" break; case 11: /* preparable_statement: create_statement */ -#line 368 "bison_parser.y" +#line 370 "bison_parser.y" { (yyval.statement) = (yyvsp[0].create_stmt); } -#line 3355 "bison_parser.cpp" +#line 3356 "bison_parser.cpp" break; case 12: /* preparable_statement: insert_statement */ -#line 369 "bison_parser.y" +#line 371 "bison_parser.y" { (yyval.statement) = (yyvsp[0].insert_stmt); } -#line 3361 "bison_parser.cpp" +#line 3362 "bison_parser.cpp" break; case 13: /* preparable_statement: delete_statement */ -#line 370 "bison_parser.y" +#line 372 "bison_parser.y" { (yyval.statement) = (yyvsp[0].delete_stmt); } -#line 3367 "bison_parser.cpp" +#line 3368 "bison_parser.cpp" break; case 14: /* preparable_statement: truncate_statement */ -#line 371 "bison_parser.y" +#line 373 "bison_parser.y" { (yyval.statement) = (yyvsp[0].delete_stmt); } -#line 3373 "bison_parser.cpp" +#line 3374 "bison_parser.cpp" break; case 15: /* preparable_statement: update_statement */ -#line 372 "bison_parser.y" +#line 374 "bison_parser.y" { (yyval.statement) = (yyvsp[0].update_stmt); } -#line 3379 "bison_parser.cpp" +#line 3380 "bison_parser.cpp" break; case 16: /* preparable_statement: drop_statement */ -#line 373 "bison_parser.y" +#line 375 "bison_parser.y" { (yyval.statement) = (yyvsp[0].drop_stmt); } -#line 3385 "bison_parser.cpp" +#line 3386 "bison_parser.cpp" break; case 17: /* preparable_statement: alter_statement */ -#line 374 "bison_parser.y" +#line 376 "bison_parser.y" { (yyval.statement) = (yyvsp[0].alter_stmt); } -#line 3391 "bison_parser.cpp" +#line 3392 "bison_parser.cpp" break; case 18: /* preparable_statement: execute_statement */ -#line 375 "bison_parser.y" +#line 377 "bison_parser.y" { (yyval.statement) = (yyvsp[0].exec_stmt); } -#line 3397 "bison_parser.cpp" +#line 3398 "bison_parser.cpp" break; case 19: /* preparable_statement: transaction_statement */ -#line 376 "bison_parser.y" +#line 378 "bison_parser.y" { (yyval.statement) = (yyvsp[0].transaction_stmt); } -#line 3403 "bison_parser.cpp" +#line 3404 "bison_parser.cpp" break; case 20: /* opt_hints: WITH HINT '(' hint_list ')' */ -#line 382 "bison_parser.y" +#line 384 "bison_parser.y" { (yyval.expr_vec) = (yyvsp[-1].expr_vec); } -#line 3409 "bison_parser.cpp" +#line 3410 "bison_parser.cpp" break; case 21: /* opt_hints: %empty */ -#line 383 "bison_parser.y" +#line 385 "bison_parser.y" { (yyval.expr_vec) = nullptr; } -#line 3415 "bison_parser.cpp" +#line 3416 "bison_parser.cpp" break; case 22: /* hint_list: hint */ -#line 385 "bison_parser.y" +#line 387 "bison_parser.y" { (yyval.expr_vec) = new std::vector(); (yyval.expr_vec)->push_back((yyvsp[0].expr)); } -#line 3424 "bison_parser.cpp" +#line 3425 "bison_parser.cpp" break; case 23: /* hint_list: hint_list ',' hint */ -#line 389 "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 3433 "bison_parser.cpp" +#line 3434 "bison_parser.cpp" break; case 24: /* hint: IDENTIFIER */ -#line 394 "bison_parser.y" +#line 396 "bison_parser.y" { (yyval.expr) = Expr::make(kExprHint); (yyval.expr)->name = (yyvsp[0].sval); } -#line 3442 "bison_parser.cpp" +#line 3443 "bison_parser.cpp" break; case 25: /* hint: IDENTIFIER '(' literal_list ')' */ -#line 398 "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 3452 "bison_parser.cpp" +#line 3453 "bison_parser.cpp" break; case 26: /* transaction_statement: BEGIN opt_transaction_keyword */ -#line 408 "bison_parser.y" +#line 410 "bison_parser.y" { (yyval.transaction_stmt) = new TransactionStatement(kBeginTransaction); } -#line 3458 "bison_parser.cpp" +#line 3459 "bison_parser.cpp" break; case 27: /* transaction_statement: ROLLBACK opt_transaction_keyword */ -#line 409 "bison_parser.y" +#line 411 "bison_parser.y" { (yyval.transaction_stmt) = new TransactionStatement(kRollbackTransaction); } -#line 3464 "bison_parser.cpp" +#line 3465 "bison_parser.cpp" break; case 28: /* transaction_statement: COMMIT opt_transaction_keyword */ -#line 410 "bison_parser.y" +#line 412 "bison_parser.y" { (yyval.transaction_stmt) = new TransactionStatement(kCommitTransaction); } -#line 3470 "bison_parser.cpp" +#line 3471 "bison_parser.cpp" break; case 31: /* prepare_statement: PREPARE IDENTIFIER FROM prepare_target_query */ -#line 418 "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 3480 "bison_parser.cpp" +#line 3481 "bison_parser.cpp" break; case 33: /* execute_statement: EXECUTE IDENTIFIER */ -#line 426 "bison_parser.y" +#line 428 "bison_parser.y" { (yyval.exec_stmt) = new ExecuteStatement(); (yyval.exec_stmt)->name = (yyvsp[0].sval); } -#line 3489 "bison_parser.cpp" +#line 3490 "bison_parser.cpp" break; case 34: /* execute_statement: EXECUTE IDENTIFIER '(' opt_literal_list ')' */ -#line 430 "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 3499 "bison_parser.cpp" +#line 3500 "bison_parser.cpp" break; case 35: /* import_statement: IMPORT FROM file_type FILE file_path INTO table_name */ -#line 441 "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 3510 "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 447 "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); @@ -3518,11 +3519,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.import_stmt)->tableName = (yyvsp[-4].table_name).name; (yyval.import_stmt)->whereClause = (yyvsp[0].expr); } -#line 3522 "bison_parser.cpp" +#line 3523 "bison_parser.cpp" break; case 37: /* file_type: IDENTIFIER */ -#line 455 "bison_parser.y" +#line 457 "bison_parser.y" { if (strcasecmp((yyvsp[0].sval), "csv") == 0) { (yyval.import_type_t) = kImportCSV; @@ -3537,79 +3538,79 @@ YYLTYPE yylloc = yyloc_default; } free((yyvsp[0].sval)); } -#line 3541 "bison_parser.cpp" +#line 3542 "bison_parser.cpp" break; case 38: /* file_path: string_literal */ -#line 470 "bison_parser.y" +#line 472 "bison_parser.y" { (yyval.sval) = strdup((yyvsp[0].expr)->name); delete (yyvsp[0].expr); } -#line 3550 "bison_parser.cpp" +#line 3551 "bison_parser.cpp" break; case 39: /* opt_file_type: WITH FORMAT file_type */ -#line 475 "bison_parser.y" +#line 477 "bison_parser.y" { (yyval.import_type_t) = (yyvsp[0].import_type_t); } -#line 3556 "bison_parser.cpp" +#line 3557 "bison_parser.cpp" break; case 40: /* opt_file_type: %empty */ -#line 476 "bison_parser.y" +#line 478 "bison_parser.y" { (yyval.import_type_t) = kImportAuto; } -#line 3562 "bison_parser.cpp" +#line 3563 "bison_parser.cpp" break; case 41: /* export_statement: COPY table_name TO file_path opt_file_type */ -#line 482 "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 3573 "bison_parser.cpp" +#line 3574 "bison_parser.cpp" break; case 42: /* export_statement: COPY select_with_paren TO file_path opt_file_type */ -#line 488 "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 3583 "bison_parser.cpp" +#line 3584 "bison_parser.cpp" break; case 43: /* show_statement: SHOW TABLES */ -#line 499 "bison_parser.y" +#line 501 "bison_parser.y" { (yyval.show_stmt) = new ShowStatement(kShowTables); } -#line 3589 "bison_parser.cpp" +#line 3590 "bison_parser.cpp" break; case 44: /* show_statement: SHOW COLUMNS table_name */ -#line 500 "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 3599 "bison_parser.cpp" +#line 3600 "bison_parser.cpp" break; case 45: /* show_statement: DESCRIBE table_name */ -#line 505 "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 3609 "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 516 "bison_parser.y" +#line 518 "bison_parser.y" { (yyval.create_stmt) = new CreateStatement(kCreateTableFromTbl); (yyval.create_stmt)->ifNotExists = (yyvsp[-5].bval); @@ -3623,11 +3624,11 @@ YYLTYPE yylloc = yyloc_default; free((yyvsp[-2].sval)); (yyval.create_stmt)->filePath = (yyvsp[0].sval); } -#line 3627 "bison_parser.cpp" +#line 3628 "bison_parser.cpp" break; case 47: /* create_statement: CREATE TABLE opt_not_exists table_name '(' table_elem_commalist ')' */ -#line 529 "bison_parser.y" +#line 531 "bison_parser.y" { (yyval.create_stmt) = new CreateStatement(kCreateTable); (yyval.create_stmt)->ifNotExists = (yyvsp[-4].bval); @@ -3640,11 +3641,11 @@ YYLTYPE yylloc = yyloc_default; YYERROR; } } -#line 3644 "bison_parser.cpp" +#line 3645 "bison_parser.cpp" break; case 48: /* create_statement: CREATE TABLE opt_not_exists table_name AS select_statement */ -#line 541 "bison_parser.y" +#line 543 "bison_parser.y" { (yyval.create_stmt) = new CreateStatement(kCreateTable); (yyval.create_stmt)->ifNotExists = (yyvsp[-3].bval); @@ -3652,11 +3653,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.create_stmt)->tableName = (yyvsp[-2].table_name).name; (yyval.create_stmt)->select = (yyvsp[0].select_stmt); } -#line 3656 "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 548 "bison_parser.y" +#line 550 "bison_parser.y" { (yyval.create_stmt) = new CreateStatement(kCreateIndex); (yyval.create_stmt)->indexName = (yyvsp[-5].sval); @@ -3664,11 +3665,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.create_stmt)->tableName = (yyvsp[-3].table_name).name; (yyval.create_stmt)->indexColumns = (yyvsp[-1].str_vec); } -#line 3668 "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 555 "bison_parser.y" +#line 557 "bison_parser.y" { (yyval.create_stmt) = new CreateStatement(kCreateView); (yyval.create_stmt)->ifNotExists = (yyvsp[-4].bval); @@ -3677,371 +3678,371 @@ YYLTYPE yylloc = yyloc_default; (yyval.create_stmt)->viewColumns = (yyvsp[-2].str_vec); (yyval.create_stmt)->select = (yyvsp[0].select_stmt); } -#line 3681 "bison_parser.cpp" +#line 3682 "bison_parser.cpp" break; case 51: /* opt_not_exists: IF NOT EXISTS */ -#line 564 "bison_parser.y" +#line 566 "bison_parser.y" { (yyval.bval) = true; } -#line 3687 "bison_parser.cpp" +#line 3688 "bison_parser.cpp" break; case 52: /* opt_not_exists: %empty */ -#line 565 "bison_parser.y" +#line 567 "bison_parser.y" { (yyval.bval) = false; } -#line 3693 "bison_parser.cpp" +#line 3694 "bison_parser.cpp" break; case 53: /* table_elem_commalist: table_elem */ -#line 567 "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 3702 "bison_parser.cpp" +#line 3703 "bison_parser.cpp" break; case 54: /* table_elem_commalist: table_elem_commalist ',' table_elem */ -#line 571 "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 3711 "bison_parser.cpp" +#line 3712 "bison_parser.cpp" break; case 55: /* table_elem: column_def */ -#line 576 "bison_parser.y" +#line 578 "bison_parser.y" { (yyval.table_element_t) = (yyvsp[0].column_t); } -#line 3717 "bison_parser.cpp" +#line 3718 "bison_parser.cpp" break; case 56: /* table_elem: table_constraint */ -#line 577 "bison_parser.y" +#line 579 "bison_parser.y" { (yyval.table_element_t) = (yyvsp[0].table_constraint_t); } -#line 3723 "bison_parser.cpp" +#line 3724 "bison_parser.cpp" break; case 57: /* column_def: IDENTIFIER column_type opt_column_constraints */ -#line 579 "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 3734 "bison_parser.cpp" +#line 3735 "bison_parser.cpp" break; case 58: /* column_type: BIGINT */ -#line 586 "bison_parser.y" +#line 588 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::BIGINT}; } -#line 3740 "bison_parser.cpp" +#line 3741 "bison_parser.cpp" break; case 59: /* column_type: BOOLEAN */ -#line 587 "bison_parser.y" +#line 589 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::BOOLEAN}; } -#line 3746 "bison_parser.cpp" +#line 3747 "bison_parser.cpp" break; case 60: /* column_type: CHAR '(' INTVAL ')' */ -#line 588 "bison_parser.y" +#line 590 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::CHAR, (yyvsp[-1].ival)}; } -#line 3752 "bison_parser.cpp" +#line 3753 "bison_parser.cpp" break; case 61: /* column_type: CHARACTER_VARYING '(' INTVAL ')' */ -#line 589 "bison_parser.y" +#line 591 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::VARCHAR, (yyvsp[-1].ival)}; } -#line 3758 "bison_parser.cpp" +#line 3759 "bison_parser.cpp" break; case 62: /* column_type: DATE */ -#line 590 "bison_parser.y" +#line 592 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::DATE}; } -#line 3764 "bison_parser.cpp" +#line 3765 "bison_parser.cpp" break; case 63: /* column_type: DATETIME */ -#line 591 "bison_parser.y" +#line 593 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::DATETIME}; } -#line 3770 "bison_parser.cpp" +#line 3771 "bison_parser.cpp" break; case 64: /* column_type: DECIMAL opt_decimal_specification */ -#line 592 "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 3779 "bison_parser.cpp" +#line 3780 "bison_parser.cpp" break; case 65: /* column_type: DOUBLE */ -#line 596 "bison_parser.y" +#line 598 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::DOUBLE}; } -#line 3785 "bison_parser.cpp" +#line 3786 "bison_parser.cpp" break; case 66: /* column_type: FLOAT */ -#line 597 "bison_parser.y" +#line 599 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::FLOAT}; } -#line 3791 "bison_parser.cpp" +#line 3792 "bison_parser.cpp" break; case 67: /* column_type: INT */ -#line 598 "bison_parser.y" +#line 600 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::INT}; } -#line 3797 "bison_parser.cpp" +#line 3798 "bison_parser.cpp" break; case 68: /* column_type: INTEGER */ -#line 599 "bison_parser.y" +#line 601 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::INT}; } -#line 3803 "bison_parser.cpp" +#line 3804 "bison_parser.cpp" break; case 69: /* column_type: LONG */ -#line 600 "bison_parser.y" +#line 602 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::LONG}; } -#line 3809 "bison_parser.cpp" +#line 3810 "bison_parser.cpp" break; case 70: /* column_type: REAL */ -#line 601 "bison_parser.y" +#line 603 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::REAL}; } -#line 3815 "bison_parser.cpp" +#line 3816 "bison_parser.cpp" break; case 71: /* column_type: SMALLINT */ -#line 602 "bison_parser.y" +#line 604 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::SMALLINT}; } -#line 3821 "bison_parser.cpp" +#line 3822 "bison_parser.cpp" break; case 72: /* column_type: TEXT */ -#line 603 "bison_parser.y" +#line 605 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::TEXT}; } -#line 3827 "bison_parser.cpp" +#line 3828 "bison_parser.cpp" break; case 73: /* column_type: TIME opt_time_precision */ -#line 604 "bison_parser.y" +#line 606 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::TIME, 0, (yyvsp[0].ival)}; } -#line 3833 "bison_parser.cpp" +#line 3834 "bison_parser.cpp" break; case 74: /* column_type: TIMESTAMP */ -#line 605 "bison_parser.y" +#line 607 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::DATETIME}; } -#line 3839 "bison_parser.cpp" +#line 3840 "bison_parser.cpp" break; case 75: /* column_type: VARCHAR '(' INTVAL ')' */ -#line 606 "bison_parser.y" +#line 608 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::VARCHAR, (yyvsp[-1].ival)}; } -#line 3845 "bison_parser.cpp" +#line 3846 "bison_parser.cpp" break; case 76: /* opt_time_precision: '(' INTVAL ')' */ -#line 608 "bison_parser.y" +#line 610 "bison_parser.y" { (yyval.ival) = (yyvsp[-1].ival); } -#line 3851 "bison_parser.cpp" +#line 3852 "bison_parser.cpp" break; case 77: /* opt_time_precision: %empty */ -#line 609 "bison_parser.y" +#line 611 "bison_parser.y" { (yyval.ival) = 0; } -#line 3857 "bison_parser.cpp" +#line 3858 "bison_parser.cpp" break; case 78: /* opt_decimal_specification: '(' INTVAL ',' INTVAL ')' */ -#line 611 "bison_parser.y" +#line 613 "bison_parser.y" { (yyval.ival_pair) = new std::pair{(yyvsp[-3].ival), (yyvsp[-1].ival)}; } -#line 3863 "bison_parser.cpp" +#line 3864 "bison_parser.cpp" break; case 79: /* opt_decimal_specification: '(' INTVAL ')' */ -#line 612 "bison_parser.y" +#line 614 "bison_parser.y" { (yyval.ival_pair) = new std::pair{(yyvsp[-1].ival), 0}; } -#line 3869 "bison_parser.cpp" +#line 3870 "bison_parser.cpp" break; case 80: /* opt_decimal_specification: %empty */ -#line 613 "bison_parser.y" +#line 615 "bison_parser.y" { (yyval.ival_pair) = new std::pair{0, 0}; } -#line 3875 "bison_parser.cpp" +#line 3876 "bison_parser.cpp" break; case 81: /* opt_column_constraints: column_constraint_set */ -#line 615 "bison_parser.y" +#line 617 "bison_parser.y" { (yyval.column_constraint_set) = (yyvsp[0].column_constraint_set); } -#line 3881 "bison_parser.cpp" +#line 3882 "bison_parser.cpp" break; case 82: /* opt_column_constraints: %empty */ -#line 616 "bison_parser.y" +#line 618 "bison_parser.y" { (yyval.column_constraint_set) = new std::unordered_set(); } -#line 3887 "bison_parser.cpp" +#line 3888 "bison_parser.cpp" break; case 83: /* column_constraint_set: column_constraint */ -#line 618 "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 3896 "bison_parser.cpp" +#line 3897 "bison_parser.cpp" break; case 84: /* column_constraint_set: column_constraint_set column_constraint */ -#line 622 "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 3905 "bison_parser.cpp" +#line 3906 "bison_parser.cpp" break; case 85: /* column_constraint: PRIMARY KEY */ -#line 627 "bison_parser.y" +#line 629 "bison_parser.y" { (yyval.column_constraint_t) = ConstraintType::PrimaryKey; } -#line 3911 "bison_parser.cpp" +#line 3912 "bison_parser.cpp" break; case 86: /* column_constraint: UNIQUE */ -#line 628 "bison_parser.y" +#line 630 "bison_parser.y" { (yyval.column_constraint_t) = ConstraintType::Unique; } -#line 3917 "bison_parser.cpp" +#line 3918 "bison_parser.cpp" break; case 87: /* column_constraint: NULL */ -#line 629 "bison_parser.y" +#line 631 "bison_parser.y" { (yyval.column_constraint_t) = ConstraintType::Null; } -#line 3923 "bison_parser.cpp" +#line 3924 "bison_parser.cpp" break; case 88: /* column_constraint: NOT NULL */ -#line 630 "bison_parser.y" +#line 632 "bison_parser.y" { (yyval.column_constraint_t) = ConstraintType::NotNull; } -#line 3929 "bison_parser.cpp" +#line 3930 "bison_parser.cpp" break; case 89: /* table_constraint: PRIMARY KEY '(' ident_commalist ')' */ -#line 632 "bison_parser.y" +#line 634 "bison_parser.y" { (yyval.table_constraint_t) = new TableConstraint(ConstraintType::PrimaryKey, (yyvsp[-1].str_vec)); } -#line 3935 "bison_parser.cpp" +#line 3936 "bison_parser.cpp" break; case 90: /* table_constraint: UNIQUE '(' ident_commalist ')' */ -#line 633 "bison_parser.y" +#line 635 "bison_parser.y" { (yyval.table_constraint_t) = new TableConstraint(ConstraintType::Unique, (yyvsp[-1].str_vec)); } -#line 3941 "bison_parser.cpp" +#line 3942 "bison_parser.cpp" break; case 91: /* drop_statement: DROP TABLE opt_exists table_name */ -#line 641 "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 3952 "bison_parser.cpp" +#line 3953 "bison_parser.cpp" break; case 92: /* drop_statement: DROP VIEW opt_exists table_name */ -#line 647 "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 3963 "bison_parser.cpp" +#line 3964 "bison_parser.cpp" break; case 93: /* drop_statement: DEALLOCATE PREPARE IDENTIFIER */ -#line 653 "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 3973 "bison_parser.cpp" +#line 3974 "bison_parser.cpp" break; case 94: /* drop_statement: DROP INDEX opt_exists IDENTIFIER */ -#line 659 "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 3983 "bison_parser.cpp" +#line 3984 "bison_parser.cpp" break; case 95: /* opt_exists: IF EXISTS */ -#line 665 "bison_parser.y" +#line 667 "bison_parser.y" { (yyval.bval) = true; } -#line 3989 "bison_parser.cpp" +#line 3990 "bison_parser.cpp" break; case 96: /* opt_exists: %empty */ -#line 666 "bison_parser.y" +#line 668 "bison_parser.y" { (yyval.bval) = false; } -#line 3995 "bison_parser.cpp" +#line 3996 "bison_parser.cpp" break; case 97: /* alter_statement: ALTER TABLE opt_exists table_name alter_action */ -#line 673 "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 4005 "bison_parser.cpp" +#line 4006 "bison_parser.cpp" break; case 98: /* alter_action: drop_action */ -#line 679 "bison_parser.y" +#line 681 "bison_parser.y" { (yyval.alter_action_t) = (yyvsp[0].drop_action_t); } -#line 4011 "bison_parser.cpp" +#line 4012 "bison_parser.cpp" break; case 99: /* drop_action: DROP COLUMN opt_exists IDENTIFIER */ -#line 681 "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 4020 "bison_parser.cpp" +#line 4021 "bison_parser.cpp" break; case 100: /* delete_statement: DELETE FROM table_name opt_where */ -#line 691 "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 4031 "bison_parser.cpp" +#line 4032 "bison_parser.cpp" break; case 101: /* truncate_statement: TRUNCATE table_name */ -#line 698 "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 4041 "bison_parser.cpp" +#line 4042 "bison_parser.cpp" break; case 102: /* insert_statement: INSERT INTO table_name opt_column_list VALUES '(' literal_list ')' */ -#line 709 "bison_parser.y" +#line 711 "bison_parser.y" { (yyval.insert_stmt) = new InsertStatement(kInsertValues); (yyval.insert_stmt)->schema = (yyvsp[-5].table_name).schema; @@ -4049,11 +4050,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.insert_stmt)->columns = (yyvsp[-4].str_vec); (yyval.insert_stmt)->values = (yyvsp[-1].expr_vec); } -#line 4053 "bison_parser.cpp" +#line 4054 "bison_parser.cpp" break; case 103: /* insert_statement: INSERT INTO table_name opt_column_list select_no_paren */ -#line 716 "bison_parser.y" +#line 718 "bison_parser.y" { (yyval.insert_stmt) = new InsertStatement(kInsertSelect); (yyval.insert_stmt)->schema = (yyvsp[-2].table_name).schema; @@ -4061,80 +4062,80 @@ YYLTYPE yylloc = yyloc_default; (yyval.insert_stmt)->columns = (yyvsp[-1].str_vec); (yyval.insert_stmt)->select = (yyvsp[0].select_stmt); } -#line 4065 "bison_parser.cpp" +#line 4066 "bison_parser.cpp" break; case 104: /* opt_column_list: '(' ident_commalist ')' */ -#line 724 "bison_parser.y" +#line 726 "bison_parser.y" { (yyval.str_vec) = (yyvsp[-1].str_vec); } -#line 4071 "bison_parser.cpp" +#line 4072 "bison_parser.cpp" break; case 105: /* opt_column_list: %empty */ -#line 725 "bison_parser.y" +#line 727 "bison_parser.y" { (yyval.str_vec) = nullptr; } -#line 4077 "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 732 "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 4088 "bison_parser.cpp" +#line 4089 "bison_parser.cpp" break; case 107: /* update_clause_commalist: update_clause */ -#line 739 "bison_parser.y" +#line 741 "bison_parser.y" { (yyval.update_vec) = new std::vector(); (yyval.update_vec)->push_back((yyvsp[0].update_t)); } -#line 4097 "bison_parser.cpp" +#line 4098 "bison_parser.cpp" break; case 108: /* update_clause_commalist: update_clause_commalist ',' update_clause */ -#line 743 "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 4106 "bison_parser.cpp" +#line 4107 "bison_parser.cpp" break; case 109: /* update_clause: IDENTIFIER '=' expr */ -#line 748 "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 4116 "bison_parser.cpp" +#line 4117 "bison_parser.cpp" break; case 110: /* select_statement: opt_with_clause select_with_paren */ -#line 758 "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 4125 "bison_parser.cpp" +#line 4126 "bison_parser.cpp" break; case 111: /* select_statement: opt_with_clause select_no_paren */ -#line 762 "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 4134 "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 766 "bison_parser.y" +#line 768 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-4].select_stmt); if ((yyval.select_stmt)->setOperations == nullptr) { @@ -4146,17 +4147,17 @@ YYLTYPE yylloc = yyloc_default; (yyval.select_stmt)->setOperations->back()->resultLimit = (yyvsp[0].limit); (yyval.select_stmt)->withDescriptions = (yyvsp[-5].with_description_vec); } -#line 4150 "bison_parser.cpp" +#line 4151 "bison_parser.cpp" break; case 115: /* select_within_set_operation_no_parentheses: select_clause */ -#line 780 "bison_parser.y" +#line 782 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[0].select_stmt); } -#line 4156 "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 781 "bison_parser.y" +#line 783 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-2].select_stmt); if ((yyval.select_stmt)->setOperations == nullptr) { @@ -4165,23 +4166,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 4169 "bison_parser.cpp" +#line 4170 "bison_parser.cpp" break; case 117: /* select_with_paren: '(' select_no_paren ')' */ -#line 790 "bison_parser.y" +#line 792 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-1].select_stmt); } -#line 4175 "bison_parser.cpp" +#line 4176 "bison_parser.cpp" break; case 118: /* select_with_paren: '(' select_with_paren ')' */ -#line 791 "bison_parser.y" +#line 793 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-1].select_stmt); } -#line 4181 "bison_parser.cpp" +#line 4182 "bison_parser.cpp" break; case 119: /* select_no_paren: select_clause opt_order opt_limit opt_locking_clause */ -#line 793 "bison_parser.y" +#line 795 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-3].select_stmt); (yyval.select_stmt)->order = (yyvsp[-2].order_vec); @@ -4196,11 +4197,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.select_stmt)->lockings = (yyvsp[0].locking_clause_vec); } } -#line 4200 "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 807 "bison_parser.y" +#line 809 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-5].select_stmt); if ((yyval.select_stmt)->setOperations == nullptr) { @@ -4212,59 +4213,59 @@ YYLTYPE yylloc = yyloc_default; (yyval.select_stmt)->setOperations->back()->resultLimit = (yyvsp[-1].limit); (yyval.select_stmt)->lockings = (yyvsp[0].locking_clause_vec); } -#line 4216 "bison_parser.cpp" +#line 4217 "bison_parser.cpp" break; case 121: /* set_operator: set_type opt_all */ -#line 819 "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 4225 "bison_parser.cpp" +#line 4226 "bison_parser.cpp" break; case 122: /* set_type: UNION */ -#line 824 "bison_parser.y" +#line 826 "bison_parser.y" { (yyval.set_operator_t) = new SetOperation(); (yyval.set_operator_t)->setType = SetType::kSetUnion; } -#line 4234 "bison_parser.cpp" +#line 4235 "bison_parser.cpp" break; case 123: /* set_type: INTERSECT */ -#line 828 "bison_parser.y" +#line 830 "bison_parser.y" { (yyval.set_operator_t) = new SetOperation(); (yyval.set_operator_t)->setType = SetType::kSetIntersect; } -#line 4243 "bison_parser.cpp" +#line 4244 "bison_parser.cpp" break; case 124: /* set_type: EXCEPT */ -#line 832 "bison_parser.y" +#line 834 "bison_parser.y" { (yyval.set_operator_t) = new SetOperation(); (yyval.set_operator_t)->setType = SetType::kSetExcept; } -#line 4252 "bison_parser.cpp" +#line 4253 "bison_parser.cpp" break; case 125: /* opt_all: ALL */ -#line 837 "bison_parser.y" +#line 839 "bison_parser.y" { (yyval.bval) = true; } -#line 4258 "bison_parser.cpp" +#line 4259 "bison_parser.cpp" break; case 126: /* opt_all: %empty */ -#line 838 "bison_parser.y" +#line 840 "bison_parser.y" { (yyval.bval) = false; } -#line 4264 "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 840 "bison_parser.y" +#line 842 "bison_parser.y" { (yyval.select_stmt) = new SelectStatement(); (yyval.select_stmt)->limit = (yyvsp[-5].limit); @@ -4274,231 +4275,231 @@ YYLTYPE yylloc = yyloc_default; (yyval.select_stmt)->whereClause = (yyvsp[-1].expr); (yyval.select_stmt)->groupBy = (yyvsp[0].group_t); } -#line 4278 "bison_parser.cpp" +#line 4279 "bison_parser.cpp" break; case 128: /* opt_distinct: DISTINCT */ -#line 850 "bison_parser.y" +#line 852 "bison_parser.y" { (yyval.bval) = true; } -#line 4284 "bison_parser.cpp" +#line 4285 "bison_parser.cpp" break; case 129: /* opt_distinct: %empty */ -#line 851 "bison_parser.y" +#line 853 "bison_parser.y" { (yyval.bval) = false; } -#line 4290 "bison_parser.cpp" +#line 4291 "bison_parser.cpp" break; case 131: /* opt_from_clause: from_clause */ -#line 855 "bison_parser.y" +#line 857 "bison_parser.y" { (yyval.table) = (yyvsp[0].table); } -#line 4296 "bison_parser.cpp" +#line 4297 "bison_parser.cpp" break; case 132: /* opt_from_clause: %empty */ -#line 856 "bison_parser.y" +#line 858 "bison_parser.y" { (yyval.table) = nullptr; } -#line 4302 "bison_parser.cpp" +#line 4303 "bison_parser.cpp" break; case 133: /* from_clause: FROM table_ref */ -#line 858 "bison_parser.y" +#line 860 "bison_parser.y" { (yyval.table) = (yyvsp[0].table); } -#line 4308 "bison_parser.cpp" +#line 4309 "bison_parser.cpp" break; case 134: /* opt_where: WHERE expr */ -#line 860 "bison_parser.y" +#line 862 "bison_parser.y" { (yyval.expr) = (yyvsp[0].expr); } -#line 4314 "bison_parser.cpp" +#line 4315 "bison_parser.cpp" break; case 135: /* opt_where: %empty */ -#line 861 "bison_parser.y" +#line 863 "bison_parser.y" { (yyval.expr) = nullptr; } -#line 4320 "bison_parser.cpp" +#line 4321 "bison_parser.cpp" break; case 136: /* opt_group: GROUP BY expr_list opt_having */ -#line 863 "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 4330 "bison_parser.cpp" +#line 4331 "bison_parser.cpp" break; case 137: /* opt_group: %empty */ -#line 868 "bison_parser.y" +#line 870 "bison_parser.y" { (yyval.group_t) = nullptr; } -#line 4336 "bison_parser.cpp" +#line 4337 "bison_parser.cpp" break; case 138: /* opt_having: HAVING expr */ -#line 870 "bison_parser.y" +#line 872 "bison_parser.y" { (yyval.expr) = (yyvsp[0].expr); } -#line 4342 "bison_parser.cpp" +#line 4343 "bison_parser.cpp" break; case 139: /* opt_having: %empty */ -#line 871 "bison_parser.y" +#line 873 "bison_parser.y" { (yyval.expr) = nullptr; } -#line 4348 "bison_parser.cpp" +#line 4349 "bison_parser.cpp" break; case 140: /* opt_order: ORDER BY order_list */ -#line 873 "bison_parser.y" +#line 875 "bison_parser.y" { (yyval.order_vec) = (yyvsp[0].order_vec); } -#line 4354 "bison_parser.cpp" +#line 4355 "bison_parser.cpp" break; case 141: /* opt_order: %empty */ -#line 874 "bison_parser.y" +#line 876 "bison_parser.y" { (yyval.order_vec) = nullptr; } -#line 4360 "bison_parser.cpp" +#line 4361 "bison_parser.cpp" break; case 142: /* order_list: order_desc */ -#line 876 "bison_parser.y" +#line 878 "bison_parser.y" { (yyval.order_vec) = new std::vector(); (yyval.order_vec)->push_back((yyvsp[0].order)); } -#line 4369 "bison_parser.cpp" +#line 4370 "bison_parser.cpp" break; case 143: /* order_list: order_list ',' order_desc */ -#line 880 "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 4378 "bison_parser.cpp" +#line 4379 "bison_parser.cpp" break; case 144: /* order_desc: expr opt_order_type */ -#line 885 "bison_parser.y" +#line 887 "bison_parser.y" { (yyval.order) = new OrderDescription((yyvsp[0].order_type), (yyvsp[-1].expr)); } -#line 4384 "bison_parser.cpp" +#line 4385 "bison_parser.cpp" break; case 145: /* opt_order_type: ASC */ -#line 887 "bison_parser.y" +#line 889 "bison_parser.y" { (yyval.order_type) = kOrderAsc; } -#line 4390 "bison_parser.cpp" +#line 4391 "bison_parser.cpp" break; case 146: /* opt_order_type: DESC */ -#line 888 "bison_parser.y" +#line 890 "bison_parser.y" { (yyval.order_type) = kOrderDesc; } -#line 4396 "bison_parser.cpp" +#line 4397 "bison_parser.cpp" break; case 147: /* opt_order_type: %empty */ -#line 889 "bison_parser.y" +#line 891 "bison_parser.y" { (yyval.order_type) = kOrderAsc; } -#line 4402 "bison_parser.cpp" +#line 4403 "bison_parser.cpp" break; case 148: /* opt_top: TOP int_literal */ -#line 893 "bison_parser.y" +#line 895 "bison_parser.y" { (yyval.limit) = new LimitDescription((yyvsp[0].expr), nullptr); } -#line 4408 "bison_parser.cpp" +#line 4409 "bison_parser.cpp" break; case 149: /* opt_top: %empty */ -#line 894 "bison_parser.y" +#line 896 "bison_parser.y" { (yyval.limit) = nullptr; } -#line 4414 "bison_parser.cpp" +#line 4415 "bison_parser.cpp" break; case 150: /* opt_limit: LIMIT expr */ -#line 896 "bison_parser.y" +#line 898 "bison_parser.y" { (yyval.limit) = new LimitDescription((yyvsp[0].expr), nullptr); } -#line 4420 "bison_parser.cpp" +#line 4421 "bison_parser.cpp" break; case 151: /* opt_limit: OFFSET expr */ -#line 897 "bison_parser.y" +#line 899 "bison_parser.y" { (yyval.limit) = new LimitDescription(nullptr, (yyvsp[0].expr)); } -#line 4426 "bison_parser.cpp" +#line 4427 "bison_parser.cpp" break; case 152: /* opt_limit: LIMIT expr OFFSET expr */ -#line 898 "bison_parser.y" +#line 900 "bison_parser.y" { (yyval.limit) = new LimitDescription((yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 4432 "bison_parser.cpp" +#line 4433 "bison_parser.cpp" break; case 153: /* opt_limit: LIMIT ALL */ -#line 899 "bison_parser.y" +#line 901 "bison_parser.y" { (yyval.limit) = new LimitDescription(nullptr, nullptr); } -#line 4438 "bison_parser.cpp" +#line 4439 "bison_parser.cpp" break; case 154: /* opt_limit: LIMIT ALL OFFSET expr */ -#line 900 "bison_parser.y" +#line 902 "bison_parser.y" { (yyval.limit) = new LimitDescription(nullptr, (yyvsp[0].expr)); } -#line 4444 "bison_parser.cpp" +#line 4445 "bison_parser.cpp" break; case 155: /* opt_limit: %empty */ -#line 901 "bison_parser.y" +#line 903 "bison_parser.y" { (yyval.limit) = nullptr; } -#line 4450 "bison_parser.cpp" +#line 4451 "bison_parser.cpp" break; case 156: /* expr_list: expr_alias */ -#line 906 "bison_parser.y" +#line 908 "bison_parser.y" { (yyval.expr_vec) = new std::vector(); (yyval.expr_vec)->push_back((yyvsp[0].expr)); } -#line 4459 "bison_parser.cpp" +#line 4460 "bison_parser.cpp" break; case 157: /* expr_list: expr_list ',' expr_alias */ -#line 910 "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 4468 "bison_parser.cpp" +#line 4469 "bison_parser.cpp" break; case 158: /* opt_literal_list: literal_list */ -#line 915 "bison_parser.y" +#line 917 "bison_parser.y" { (yyval.expr_vec) = (yyvsp[0].expr_vec); } -#line 4474 "bison_parser.cpp" +#line 4475 "bison_parser.cpp" break; case 159: /* opt_literal_list: %empty */ -#line 916 "bison_parser.y" +#line 918 "bison_parser.y" { (yyval.expr_vec) = nullptr; } -#line 4480 "bison_parser.cpp" +#line 4481 "bison_parser.cpp" break; case 160: /* literal_list: literal */ -#line 918 "bison_parser.y" +#line 920 "bison_parser.y" { (yyval.expr_vec) = new std::vector(); (yyval.expr_vec)->push_back((yyvsp[0].expr)); } -#line 4489 "bison_parser.cpp" +#line 4490 "bison_parser.cpp" break; case 161: /* literal_list: literal_list ',' literal */ -#line 922 "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 4498 "bison_parser.cpp" +#line 4499 "bison_parser.cpp" break; case 162: /* expr_alias: expr opt_alias */ -#line 927 "bison_parser.y" +#line 929 "bison_parser.y" { (yyval.expr) = (yyvsp[-1].expr); if ((yyvsp[0].alias_t)) { @@ -4506,507 +4507,507 @@ YYLTYPE yylloc = yyloc_default; delete (yyvsp[0].alias_t); } } -#line 4510 "bison_parser.cpp" +#line 4511 "bison_parser.cpp" break; case 168: /* operand: '(' expr ')' */ -#line 937 "bison_parser.y" +#line 939 "bison_parser.y" { (yyval.expr) = (yyvsp[-1].expr); } -#line 4516 "bison_parser.cpp" +#line 4517 "bison_parser.cpp" break; case 178: /* operand: '(' select_no_paren ')' */ -#line 939 "bison_parser.y" +#line 941 "bison_parser.y" { (yyval.expr) = Expr::makeSelect((yyvsp[-1].select_stmt)); } -#line 4524 "bison_parser.cpp" +#line 4525 "bison_parser.cpp" break; case 181: /* unary_expr: '-' operand */ -#line 945 "bison_parser.y" +#line 947 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpUnaryMinus, (yyvsp[0].expr)); } -#line 4530 "bison_parser.cpp" +#line 4531 "bison_parser.cpp" break; case 182: /* unary_expr: NOT operand */ -#line 946 "bison_parser.y" +#line 948 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, (yyvsp[0].expr)); } -#line 4536 "bison_parser.cpp" +#line 4537 "bison_parser.cpp" break; case 183: /* unary_expr: operand ISNULL */ -#line 947 "bison_parser.y" +#line 949 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpIsNull, (yyvsp[-1].expr)); } -#line 4542 "bison_parser.cpp" +#line 4543 "bison_parser.cpp" break; case 184: /* unary_expr: operand IS NULL */ -#line 948 "bison_parser.y" +#line 950 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpIsNull, (yyvsp[-2].expr)); } -#line 4548 "bison_parser.cpp" +#line 4549 "bison_parser.cpp" break; case 185: /* unary_expr: operand IS NOT NULL */ -#line 949 "bison_parser.y" +#line 951 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeOpUnary(kOpIsNull, (yyvsp[-3].expr))); } -#line 4554 "bison_parser.cpp" +#line 4555 "bison_parser.cpp" break; case 187: /* binary_expr: operand '-' operand */ -#line 951 "bison_parser.y" +#line 953 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpMinus, (yyvsp[0].expr)); } -#line 4560 "bison_parser.cpp" +#line 4561 "bison_parser.cpp" break; case 188: /* binary_expr: operand '+' operand */ -#line 952 "bison_parser.y" +#line 954 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpPlus, (yyvsp[0].expr)); } -#line 4566 "bison_parser.cpp" +#line 4567 "bison_parser.cpp" break; case 189: /* binary_expr: operand '/' operand */ -#line 953 "bison_parser.y" +#line 955 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpSlash, (yyvsp[0].expr)); } -#line 4572 "bison_parser.cpp" +#line 4573 "bison_parser.cpp" break; case 190: /* binary_expr: operand '*' operand */ -#line 954 "bison_parser.y" +#line 956 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpAsterisk, (yyvsp[0].expr)); } -#line 4578 "bison_parser.cpp" +#line 4579 "bison_parser.cpp" break; case 191: /* binary_expr: operand '%' operand */ -#line 955 "bison_parser.y" +#line 957 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpPercentage, (yyvsp[0].expr)); } -#line 4584 "bison_parser.cpp" +#line 4585 "bison_parser.cpp" break; case 192: /* binary_expr: operand '^' operand */ -#line 956 "bison_parser.y" +#line 958 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpCaret, (yyvsp[0].expr)); } -#line 4590 "bison_parser.cpp" +#line 4591 "bison_parser.cpp" break; case 193: /* binary_expr: operand LIKE operand */ -#line 957 "bison_parser.y" +#line 959 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpLike, (yyvsp[0].expr)); } -#line 4596 "bison_parser.cpp" +#line 4597 "bison_parser.cpp" break; case 194: /* binary_expr: operand NOT LIKE operand */ -#line 958 "bison_parser.y" +#line 960 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-3].expr), kOpNotLike, (yyvsp[0].expr)); } -#line 4602 "bison_parser.cpp" +#line 4603 "bison_parser.cpp" break; case 195: /* binary_expr: operand ILIKE operand */ -#line 959 "bison_parser.y" +#line 961 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpILike, (yyvsp[0].expr)); } -#line 4608 "bison_parser.cpp" +#line 4609 "bison_parser.cpp" break; case 196: /* binary_expr: operand CONCAT operand */ -#line 960 "bison_parser.y" +#line 962 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpConcat, (yyvsp[0].expr)); } -#line 4614 "bison_parser.cpp" +#line 4615 "bison_parser.cpp" break; case 197: /* logic_expr: expr AND expr */ -#line 962 "bison_parser.y" +#line 964 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpAnd, (yyvsp[0].expr)); } -#line 4620 "bison_parser.cpp" +#line 4621 "bison_parser.cpp" break; case 198: /* logic_expr: expr OR expr */ -#line 963 "bison_parser.y" +#line 965 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpOr, (yyvsp[0].expr)); } -#line 4626 "bison_parser.cpp" +#line 4627 "bison_parser.cpp" break; case 199: /* in_expr: operand IN '(' expr_list ')' */ -#line 965 "bison_parser.y" +#line 967 "bison_parser.y" { (yyval.expr) = Expr::makeInOperator((yyvsp[-4].expr), (yyvsp[-1].expr_vec)); } -#line 4632 "bison_parser.cpp" +#line 4633 "bison_parser.cpp" break; case 200: /* in_expr: operand NOT IN '(' expr_list ')' */ -#line 966 "bison_parser.y" +#line 968 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeInOperator((yyvsp[-5].expr), (yyvsp[-1].expr_vec))); } -#line 4638 "bison_parser.cpp" +#line 4639 "bison_parser.cpp" break; case 201: /* in_expr: operand IN '(' select_no_paren ')' */ -#line 967 "bison_parser.y" +#line 969 "bison_parser.y" { (yyval.expr) = Expr::makeInOperator((yyvsp[-4].expr), (yyvsp[-1].select_stmt)); } -#line 4644 "bison_parser.cpp" +#line 4645 "bison_parser.cpp" break; case 202: /* in_expr: operand NOT IN '(' select_no_paren ')' */ -#line 968 "bison_parser.y" +#line 970 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeInOperator((yyvsp[-5].expr), (yyvsp[-1].select_stmt))); } -#line 4650 "bison_parser.cpp" +#line 4651 "bison_parser.cpp" break; case 203: /* case_expr: CASE expr case_list END */ -#line 972 "bison_parser.y" +#line 974 "bison_parser.y" { (yyval.expr) = Expr::makeCase((yyvsp[-2].expr), (yyvsp[-1].expr), nullptr); } -#line 4656 "bison_parser.cpp" +#line 4657 "bison_parser.cpp" break; case 204: /* case_expr: CASE expr case_list ELSE expr END */ -#line 973 "bison_parser.y" +#line 975 "bison_parser.y" { (yyval.expr) = Expr::makeCase((yyvsp[-4].expr), (yyvsp[-3].expr), (yyvsp[-1].expr)); } -#line 4662 "bison_parser.cpp" +#line 4663 "bison_parser.cpp" break; case 205: /* case_expr: CASE case_list END */ -#line 974 "bison_parser.y" +#line 976 "bison_parser.y" { (yyval.expr) = Expr::makeCase(nullptr, (yyvsp[-1].expr), nullptr); } -#line 4668 "bison_parser.cpp" +#line 4669 "bison_parser.cpp" break; case 206: /* case_expr: CASE case_list ELSE expr END */ -#line 975 "bison_parser.y" +#line 977 "bison_parser.y" { (yyval.expr) = Expr::makeCase(nullptr, (yyvsp[-3].expr), (yyvsp[-1].expr)); } -#line 4674 "bison_parser.cpp" +#line 4675 "bison_parser.cpp" break; case 207: /* case_list: WHEN expr THEN expr */ -#line 977 "bison_parser.y" +#line 979 "bison_parser.y" { (yyval.expr) = Expr::makeCaseList(Expr::makeCaseListElement((yyvsp[-2].expr), (yyvsp[0].expr))); } -#line 4680 "bison_parser.cpp" +#line 4681 "bison_parser.cpp" break; case 208: /* case_list: case_list WHEN expr THEN expr */ -#line 978 "bison_parser.y" +#line 980 "bison_parser.y" { (yyval.expr) = Expr::caseListAppend((yyvsp[-4].expr), Expr::makeCaseListElement((yyvsp[-2].expr), (yyvsp[0].expr))); } -#line 4686 "bison_parser.cpp" +#line 4687 "bison_parser.cpp" break; case 209: /* exists_expr: EXISTS '(' select_no_paren ')' */ -#line 980 "bison_parser.y" +#line 982 "bison_parser.y" { (yyval.expr) = Expr::makeExists((yyvsp[-1].select_stmt)); } -#line 4692 "bison_parser.cpp" +#line 4693 "bison_parser.cpp" break; case 210: /* exists_expr: NOT EXISTS '(' select_no_paren ')' */ -#line 981 "bison_parser.y" +#line 983 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeExists((yyvsp[-1].select_stmt))); } -#line 4698 "bison_parser.cpp" +#line 4699 "bison_parser.cpp" break; case 211: /* comp_expr: operand '=' operand */ -#line 983 "bison_parser.y" +#line 985 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpEquals, (yyvsp[0].expr)); } -#line 4704 "bison_parser.cpp" +#line 4705 "bison_parser.cpp" break; case 212: /* comp_expr: operand EQUALS operand */ -#line 984 "bison_parser.y" +#line 986 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpEquals, (yyvsp[0].expr)); } -#line 4710 "bison_parser.cpp" +#line 4711 "bison_parser.cpp" break; case 213: /* comp_expr: operand NOTEQUALS operand */ -#line 985 "bison_parser.y" +#line 987 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpNotEquals, (yyvsp[0].expr)); } -#line 4716 "bison_parser.cpp" +#line 4717 "bison_parser.cpp" break; case 214: /* comp_expr: operand '<' operand */ -#line 986 "bison_parser.y" +#line 988 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpLess, (yyvsp[0].expr)); } -#line 4722 "bison_parser.cpp" +#line 4723 "bison_parser.cpp" break; case 215: /* comp_expr: operand '>' operand */ -#line 987 "bison_parser.y" +#line 989 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpGreater, (yyvsp[0].expr)); } -#line 4728 "bison_parser.cpp" +#line 4729 "bison_parser.cpp" break; case 216: /* comp_expr: operand LESSEQ operand */ -#line 988 "bison_parser.y" +#line 990 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpLessEq, (yyvsp[0].expr)); } -#line 4734 "bison_parser.cpp" +#line 4735 "bison_parser.cpp" break; case 217: /* comp_expr: operand GREATEREQ operand */ -#line 989 "bison_parser.y" +#line 991 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpGreaterEq, (yyvsp[0].expr)); } -#line 4740 "bison_parser.cpp" +#line 4741 "bison_parser.cpp" break; case 218: /* function_expr: IDENTIFIER '(' ')' opt_window */ -#line 993 "bison_parser.y" +#line 995 "bison_parser.y" { (yyval.expr) = Expr::makeFunctionRef((yyvsp[-3].sval), new std::vector(), false, (yyvsp[0].window_description)); } -#line 4746 "bison_parser.cpp" +#line 4747 "bison_parser.cpp" break; case 219: /* function_expr: IDENTIFIER '(' opt_distinct expr_list ')' opt_window */ -#line 994 "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 4752 "bison_parser.cpp" +#line 4753 "bison_parser.cpp" break; case 220: /* opt_window: OVER '(' opt_partition opt_order opt_frame_clause ')' */ -#line 998 "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 4758 "bison_parser.cpp" +#line 4759 "bison_parser.cpp" break; case 221: /* opt_window: %empty */ -#line 999 "bison_parser.y" +#line 1001 "bison_parser.y" { (yyval.window_description) = nullptr; } -#line 4764 "bison_parser.cpp" +#line 4765 "bison_parser.cpp" break; case 222: /* opt_partition: PARTITION BY expr_list */ -#line 1001 "bison_parser.y" +#line 1003 "bison_parser.y" { (yyval.expr_vec) = (yyvsp[0].expr_vec); } -#line 4770 "bison_parser.cpp" +#line 4771 "bison_parser.cpp" break; case 223: /* opt_partition: %empty */ -#line 1002 "bison_parser.y" +#line 1004 "bison_parser.y" { (yyval.expr_vec) = nullptr; } -#line 4776 "bison_parser.cpp" +#line 4777 "bison_parser.cpp" break; case 224: /* opt_frame_clause: frame_type frame_bound */ -#line 1007 "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 4782 "bison_parser.cpp" +#line 4783 "bison_parser.cpp" break; case 225: /* opt_frame_clause: frame_type BETWEEN frame_bound AND frame_bound */ -#line 1008 "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 4788 "bison_parser.cpp" +#line 4789 "bison_parser.cpp" break; case 226: /* opt_frame_clause: %empty */ -#line 1009 "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 4796 "bison_parser.cpp" +#line 4797 "bison_parser.cpp" break; case 227: /* frame_type: RANGE */ -#line 1013 "bison_parser.y" +#line 1015 "bison_parser.y" { (yyval.frame_type) = kRange; } -#line 4802 "bison_parser.cpp" +#line 4803 "bison_parser.cpp" break; case 228: /* frame_type: ROWS */ -#line 1014 "bison_parser.y" +#line 1016 "bison_parser.y" { (yyval.frame_type) = kRows; } -#line 4808 "bison_parser.cpp" +#line 4809 "bison_parser.cpp" break; case 229: /* frame_type: GROUPS */ -#line 1015 "bison_parser.y" +#line 1017 "bison_parser.y" { (yyval.frame_type) = kGroups; } -#line 4814 "bison_parser.cpp" +#line 4815 "bison_parser.cpp" break; case 230: /* frame_bound: UNBOUNDED PRECEDING */ -#line 1017 "bison_parser.y" +#line 1019 "bison_parser.y" { (yyval.frame_bound) = new FrameBound{0, kPreceding, true}; } -#line 4820 "bison_parser.cpp" +#line 4821 "bison_parser.cpp" break; case 231: /* frame_bound: INTVAL PRECEDING */ -#line 1018 "bison_parser.y" +#line 1020 "bison_parser.y" { (yyval.frame_bound) = new FrameBound{(yyvsp[-1].ival), kPreceding, false}; } -#line 4826 "bison_parser.cpp" +#line 4827 "bison_parser.cpp" break; case 232: /* frame_bound: UNBOUNDED FOLLOWING */ -#line 1019 "bison_parser.y" +#line 1021 "bison_parser.y" { (yyval.frame_bound) = new FrameBound{0, kFollowing, true}; } -#line 4832 "bison_parser.cpp" +#line 4833 "bison_parser.cpp" break; case 233: /* frame_bound: INTVAL FOLLOWING */ -#line 1020 "bison_parser.y" +#line 1022 "bison_parser.y" { (yyval.frame_bound) = new FrameBound{(yyvsp[-1].ival), kFollowing, false}; } -#line 4838 "bison_parser.cpp" +#line 4839 "bison_parser.cpp" break; case 234: /* frame_bound: CURRENT_ROW */ -#line 1021 "bison_parser.y" +#line 1023 "bison_parser.y" { (yyval.frame_bound) = new FrameBound{0, kCurrentRow, false}; } -#line 4844 "bison_parser.cpp" +#line 4845 "bison_parser.cpp" break; case 235: /* extract_expr: EXTRACT '(' datetime_field FROM expr ')' */ -#line 1023 "bison_parser.y" +#line 1025 "bison_parser.y" { (yyval.expr) = Expr::makeExtract((yyvsp[-3].datetime_field), (yyvsp[-1].expr)); } -#line 4850 "bison_parser.cpp" +#line 4851 "bison_parser.cpp" break; case 236: /* cast_expr: CAST '(' expr AS column_type ')' */ -#line 1025 "bison_parser.y" +#line 1027 "bison_parser.y" { (yyval.expr) = Expr::makeCast((yyvsp[-3].expr), (yyvsp[-1].column_type_t)); } -#line 4856 "bison_parser.cpp" +#line 4857 "bison_parser.cpp" break; case 237: /* datetime_field: SECOND */ -#line 1027 "bison_parser.y" +#line 1029 "bison_parser.y" { (yyval.datetime_field) = kDatetimeSecond; } -#line 4862 "bison_parser.cpp" +#line 4863 "bison_parser.cpp" break; case 238: /* datetime_field: MINUTE */ -#line 1028 "bison_parser.y" +#line 1030 "bison_parser.y" { (yyval.datetime_field) = kDatetimeMinute; } -#line 4868 "bison_parser.cpp" +#line 4869 "bison_parser.cpp" break; case 239: /* datetime_field: HOUR */ -#line 1029 "bison_parser.y" +#line 1031 "bison_parser.y" { (yyval.datetime_field) = kDatetimeHour; } -#line 4874 "bison_parser.cpp" +#line 4875 "bison_parser.cpp" break; case 240: /* datetime_field: DAY */ -#line 1030 "bison_parser.y" +#line 1032 "bison_parser.y" { (yyval.datetime_field) = kDatetimeDay; } -#line 4880 "bison_parser.cpp" +#line 4881 "bison_parser.cpp" break; case 241: /* datetime_field: MONTH */ -#line 1031 "bison_parser.y" +#line 1033 "bison_parser.y" { (yyval.datetime_field) = kDatetimeMonth; } -#line 4886 "bison_parser.cpp" +#line 4887 "bison_parser.cpp" break; case 242: /* datetime_field: YEAR */ -#line 1032 "bison_parser.y" +#line 1034 "bison_parser.y" { (yyval.datetime_field) = kDatetimeYear; } -#line 4892 "bison_parser.cpp" +#line 4893 "bison_parser.cpp" break; case 243: /* datetime_field_plural: SECONDS */ -#line 1034 "bison_parser.y" +#line 1036 "bison_parser.y" { (yyval.datetime_field) = kDatetimeSecond; } -#line 4898 "bison_parser.cpp" +#line 4899 "bison_parser.cpp" break; case 244: /* datetime_field_plural: MINUTES */ -#line 1035 "bison_parser.y" +#line 1037 "bison_parser.y" { (yyval.datetime_field) = kDatetimeMinute; } -#line 4904 "bison_parser.cpp" +#line 4905 "bison_parser.cpp" break; case 245: /* datetime_field_plural: HOURS */ -#line 1036 "bison_parser.y" +#line 1038 "bison_parser.y" { (yyval.datetime_field) = kDatetimeHour; } -#line 4910 "bison_parser.cpp" +#line 4911 "bison_parser.cpp" break; case 246: /* datetime_field_plural: DAYS */ -#line 1037 "bison_parser.y" +#line 1039 "bison_parser.y" { (yyval.datetime_field) = kDatetimeDay; } -#line 4916 "bison_parser.cpp" +#line 4917 "bison_parser.cpp" break; case 247: /* datetime_field_plural: MONTHS */ -#line 1038 "bison_parser.y" +#line 1040 "bison_parser.y" { (yyval.datetime_field) = kDatetimeMonth; } -#line 4922 "bison_parser.cpp" +#line 4923 "bison_parser.cpp" break; case 248: /* datetime_field_plural: YEARS */ -#line 1039 "bison_parser.y" +#line 1041 "bison_parser.y" { (yyval.datetime_field) = kDatetimeYear; } -#line 4928 "bison_parser.cpp" +#line 4929 "bison_parser.cpp" break; case 251: /* array_expr: ARRAY '[' expr_list ']' */ -#line 1043 "bison_parser.y" +#line 1045 "bison_parser.y" { (yyval.expr) = Expr::makeArray((yyvsp[-1].expr_vec)); } -#line 4934 "bison_parser.cpp" +#line 4935 "bison_parser.cpp" break; case 252: /* array_index: operand '[' int_literal ']' */ -#line 1045 "bison_parser.y" +#line 1047 "bison_parser.y" { (yyval.expr) = Expr::makeArrayIndex((yyvsp[-3].expr), (yyvsp[-1].expr)->ival); } -#line 4940 "bison_parser.cpp" +#line 4941 "bison_parser.cpp" break; case 253: /* between_expr: operand BETWEEN operand AND operand */ -#line 1047 "bison_parser.y" +#line 1049 "bison_parser.y" { (yyval.expr) = Expr::makeBetween((yyvsp[-4].expr), (yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 4946 "bison_parser.cpp" +#line 4947 "bison_parser.cpp" break; case 254: /* column_name: IDENTIFIER */ -#line 1049 "bison_parser.y" +#line 1051 "bison_parser.y" { (yyval.expr) = Expr::makeColumnRef((yyvsp[0].sval)); } -#line 4952 "bison_parser.cpp" +#line 4953 "bison_parser.cpp" break; case 255: /* column_name: IDENTIFIER '.' IDENTIFIER */ -#line 1050 "bison_parser.y" +#line 1052 "bison_parser.y" { (yyval.expr) = Expr::makeColumnRef((yyvsp[-2].sval), (yyvsp[0].sval)); } -#line 4958 "bison_parser.cpp" +#line 4959 "bison_parser.cpp" break; case 256: /* column_name: '*' */ -#line 1051 "bison_parser.y" +#line 1053 "bison_parser.y" { (yyval.expr) = Expr::makeStar(); } -#line 4964 "bison_parser.cpp" +#line 4965 "bison_parser.cpp" break; case 257: /* column_name: IDENTIFIER '.' '*' */ -#line 1052 "bison_parser.y" +#line 1054 "bison_parser.y" { (yyval.expr) = Expr::makeStar((yyvsp[-2].sval)); } -#line 4970 "bison_parser.cpp" +#line 4971 "bison_parser.cpp" break; case 265: /* string_literal: STRING */ -#line 1056 "bison_parser.y" +#line 1058 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral((yyvsp[0].sval)); } -#line 4976 "bison_parser.cpp" +#line 4977 "bison_parser.cpp" break; case 266: /* bool_literal: TRUE */ -#line 1058 "bison_parser.y" +#line 1060 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral(true); } -#line 4982 "bison_parser.cpp" +#line 4983 "bison_parser.cpp" break; case 267: /* bool_literal: FALSE */ -#line 1059 "bison_parser.y" +#line 1061 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral(false); } -#line 4988 "bison_parser.cpp" +#line 4989 "bison_parser.cpp" break; case 268: /* num_literal: FLOATVAL */ -#line 1061 "bison_parser.y" +#line 1063 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral((yyvsp[0].fval)); } -#line 4994 "bison_parser.cpp" +#line 4995 "bison_parser.cpp" break; case 270: /* int_literal: INTVAL */ -#line 1064 "bison_parser.y" +#line 1066 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral((yyvsp[0].ival)); } -#line 5000 "bison_parser.cpp" +#line 5001 "bison_parser.cpp" break; case 271: /* null_literal: NULL */ -#line 1066 "bison_parser.y" +#line 1068 "bison_parser.y" { (yyval.expr) = Expr::makeNullLiteral(); } -#line 5006 "bison_parser.cpp" +#line 5007 "bison_parser.cpp" break; case 272: /* date_literal: DATE STRING */ -#line 1068 "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 @@ -5017,20 +5018,20 @@ YYLTYPE yylloc = yyloc_default; } (yyval.expr) = Expr::makeDateLiteral((yyvsp[0].sval)); } -#line 5021 "bison_parser.cpp" +#line 5022 "bison_parser.cpp" break; case 273: /* interval_literal: int_literal duration_field */ -#line 1079 "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 5030 "bison_parser.cpp" +#line 5031 "bison_parser.cpp" break; case 274: /* interval_literal: INTERVAL STRING datetime_field */ -#line 1083 "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 @@ -5042,11 +5043,11 @@ YYLTYPE yylloc = yyloc_default; free((yyvsp[-1].sval)); (yyval.expr) = Expr::makeIntervalLiteral(duration, (yyvsp[0].datetime_field)); } -#line 5046 "bison_parser.cpp" +#line 5047 "bison_parser.cpp" break; case 275: /* interval_literal: INTERVAL STRING */ -#line 1094 "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 @@ -5078,61 +5079,61 @@ YYLTYPE yylloc = yyloc_default; } (yyval.expr) = Expr::makeIntervalLiteral(duration, unit); } -#line 5082 "bison_parser.cpp" +#line 5083 "bison_parser.cpp" break; case 276: /* param_expr: '?' */ -#line 1126 "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 5092 "bison_parser.cpp" +#line 5093 "bison_parser.cpp" break; case 278: /* table_ref: table_ref_commalist ',' table_ref_atomic */ -#line 1135 "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 5103 "bison_parser.cpp" +#line 5104 "bison_parser.cpp" break; case 282: /* nonjoin_table_ref_atomic: '(' select_statement ')' opt_table_alias */ -#line 1144 "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 5114 "bison_parser.cpp" +#line 5115 "bison_parser.cpp" break; case 283: /* table_ref_commalist: table_ref_atomic */ -#line 1151 "bison_parser.y" +#line 1153 "bison_parser.y" { (yyval.table_vec) = new std::vector(); (yyval.table_vec)->push_back((yyvsp[0].table)); } -#line 5123 "bison_parser.cpp" +#line 5124 "bison_parser.cpp" break; case 284: /* table_ref_commalist: table_ref_commalist ',' table_ref_atomic */ -#line 1155 "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 5132 "bison_parser.cpp" +#line 5133 "bison_parser.cpp" break; case 285: /* table_ref_name: table_name opt_table_alias */ -#line 1160 "bison_parser.y" +#line 1162 "bison_parser.y" { auto tbl = new TableRef(kTableName); tbl->schema = (yyvsp[-1].table_name).schema; @@ -5140,215 +5141,215 @@ YYLTYPE yylloc = yyloc_default; tbl->alias = (yyvsp[0].alias_t); (yyval.table) = tbl; } -#line 5144 "bison_parser.cpp" +#line 5145 "bison_parser.cpp" break; case 286: /* table_ref_name_no_alias: table_name */ -#line 1168 "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 5154 "bison_parser.cpp" +#line 5155 "bison_parser.cpp" break; case 287: /* table_name: IDENTIFIER */ -#line 1174 "bison_parser.y" +#line 1176 "bison_parser.y" { (yyval.table_name).schema = nullptr; (yyval.table_name).name = (yyvsp[0].sval); } -#line 5163 "bison_parser.cpp" +#line 5164 "bison_parser.cpp" break; case 288: /* table_name: IDENTIFIER '.' IDENTIFIER */ -#line 1178 "bison_parser.y" +#line 1180 "bison_parser.y" { (yyval.table_name).schema = (yyvsp[-2].sval); (yyval.table_name).name = (yyvsp[0].sval); } -#line 5172 "bison_parser.cpp" +#line 5173 "bison_parser.cpp" break; case 289: /* opt_index_name: IDENTIFIER */ -#line 1183 "bison_parser.y" +#line 1185 "bison_parser.y" { (yyval.sval) = (yyvsp[0].sval); } -#line 5178 "bison_parser.cpp" +#line 5179 "bison_parser.cpp" break; case 290: /* opt_index_name: %empty */ -#line 1184 "bison_parser.y" +#line 1186 "bison_parser.y" { (yyval.sval) = nullptr; } -#line 5184 "bison_parser.cpp" +#line 5185 "bison_parser.cpp" break; case 292: /* table_alias: AS IDENTIFIER '(' ident_commalist ')' */ -#line 1186 "bison_parser.y" +#line 1188 "bison_parser.y" { (yyval.alias_t) = new Alias((yyvsp[-3].sval), (yyvsp[-1].str_vec)); } -#line 5190 "bison_parser.cpp" +#line 5191 "bison_parser.cpp" break; case 294: /* opt_table_alias: %empty */ -#line 1188 "bison_parser.y" +#line 1190 "bison_parser.y" { (yyval.alias_t) = nullptr; } -#line 5196 "bison_parser.cpp" +#line 5197 "bison_parser.cpp" break; case 295: /* alias: AS IDENTIFIER */ -#line 1190 "bison_parser.y" +#line 1192 "bison_parser.y" { (yyval.alias_t) = new Alias((yyvsp[0].sval)); } -#line 5202 "bison_parser.cpp" +#line 5203 "bison_parser.cpp" break; case 296: /* alias: IDENTIFIER */ -#line 1191 "bison_parser.y" +#line 1193 "bison_parser.y" { (yyval.alias_t) = new Alias((yyvsp[0].sval)); } -#line 5208 "bison_parser.cpp" +#line 5209 "bison_parser.cpp" break; case 298: /* opt_alias: %empty */ -#line 1193 "bison_parser.y" +#line 1195 "bison_parser.y" { (yyval.alias_t) = nullptr; } -#line 5214 "bison_parser.cpp" +#line 5215 "bison_parser.cpp" break; case 299: /* opt_locking_clause: opt_locking_clause_list */ -#line 1199 "bison_parser.y" +#line 1201 "bison_parser.y" { (yyval.locking_clause_vec) = (yyvsp[0].locking_clause_vec); } -#line 5220 "bison_parser.cpp" +#line 5221 "bison_parser.cpp" break; case 300: /* opt_locking_clause: %empty */ -#line 1200 "bison_parser.y" +#line 1202 "bison_parser.y" { (yyval.locking_clause_vec) = nullptr; } -#line 5226 "bison_parser.cpp" +#line 5227 "bison_parser.cpp" break; case 301: /* opt_locking_clause_list: locking_clause */ -#line 1202 "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 5235 "bison_parser.cpp" +#line 5236 "bison_parser.cpp" break; case 302: /* opt_locking_clause_list: opt_locking_clause_list locking_clause */ -#line 1206 "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 5244 "bison_parser.cpp" +#line 5245 "bison_parser.cpp" break; case 303: /* locking_clause: FOR row_lock_mode opt_row_lock_policy */ -#line 1211 "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 5255 "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 1217 "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 5266 "bison_parser.cpp" +#line 5267 "bison_parser.cpp" break; case 305: /* row_lock_mode: UPDATE */ -#line 1224 "bison_parser.y" +#line 1226 "bison_parser.y" { (yyval.lock_mode_t) = RowLockMode::ForUpdate; } -#line 5272 "bison_parser.cpp" +#line 5273 "bison_parser.cpp" break; case 306: /* row_lock_mode: NO KEY UPDATE */ -#line 1225 "bison_parser.y" +#line 1227 "bison_parser.y" { (yyval.lock_mode_t) = RowLockMode::ForNoKeyUpdate; } -#line 5278 "bison_parser.cpp" +#line 5279 "bison_parser.cpp" break; case 307: /* row_lock_mode: SHARE */ -#line 1226 "bison_parser.y" +#line 1228 "bison_parser.y" { (yyval.lock_mode_t) = RowLockMode::ForShare; } -#line 5284 "bison_parser.cpp" +#line 5285 "bison_parser.cpp" break; case 308: /* row_lock_mode: KEY SHARE */ -#line 1227 "bison_parser.y" +#line 1229 "bison_parser.y" { (yyval.lock_mode_t) = RowLockMode::ForKeyShare; } -#line 5290 "bison_parser.cpp" +#line 5291 "bison_parser.cpp" break; case 309: /* opt_row_lock_policy: SKIP LOCKED */ -#line 1229 "bison_parser.y" +#line 1231 "bison_parser.y" { (yyval.lock_wait_policy_t) = RowLockWaitPolicy::SkipLocked; } -#line 5296 "bison_parser.cpp" +#line 5297 "bison_parser.cpp" break; case 310: /* opt_row_lock_policy: NOWAIT */ -#line 1230 "bison_parser.y" +#line 1232 "bison_parser.y" { (yyval.lock_wait_policy_t) = RowLockWaitPolicy::NoWait; } -#line 5302 "bison_parser.cpp" +#line 5303 "bison_parser.cpp" break; case 311: /* opt_row_lock_policy: %empty */ -#line 1231 "bison_parser.y" +#line 1233 "bison_parser.y" { (yyval.lock_wait_policy_t) = RowLockWaitPolicy::None; } -#line 5308 "bison_parser.cpp" +#line 5309 "bison_parser.cpp" break; case 313: /* opt_with_clause: %empty */ -#line 1237 "bison_parser.y" +#line 1239 "bison_parser.y" { (yyval.with_description_vec) = nullptr; } -#line 5314 "bison_parser.cpp" +#line 5315 "bison_parser.cpp" break; case 314: /* with_clause: WITH with_description_list */ -#line 1239 "bison_parser.y" +#line 1241 "bison_parser.y" { (yyval.with_description_vec) = (yyvsp[0].with_description_vec); } -#line 5320 "bison_parser.cpp" +#line 5321 "bison_parser.cpp" break; case 315: /* with_description_list: with_description */ -#line 1241 "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 5329 "bison_parser.cpp" +#line 5330 "bison_parser.cpp" break; case 316: /* with_description_list: with_description_list ',' with_description */ -#line 1245 "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 5338 "bison_parser.cpp" +#line 5339 "bison_parser.cpp" break; case 317: /* with_description: IDENTIFIER AS select_with_paren */ -#line 1250 "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 5348 "bison_parser.cpp" +#line 5349 "bison_parser.cpp" break; case 318: /* join_clause: table_ref_atomic NATURAL JOIN nonjoin_table_ref_atomic */ -#line 1260 "bison_parser.y" +#line 1262 "bison_parser.y" { (yyval.table) = new TableRef(kTableJoin); (yyval.table)->join = new JoinDefinition(); @@ -5356,11 +5357,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.table)->join->left = (yyvsp[-3].table); (yyval.table)->join->right = (yyvsp[0].table); } -#line 5360 "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 1267 "bison_parser.y" +#line 1269 "bison_parser.y" { (yyval.table) = new TableRef(kTableJoin); (yyval.table)->join = new JoinDefinition(); @@ -5369,125 +5370,102 @@ YYLTYPE yylloc = yyloc_default; (yyval.table)->join->right = (yyvsp[-2].table); (yyval.table)->join->condition = (yyvsp[0].expr); } -#line 5373 "bison_parser.cpp" +#line 5374 "bison_parser.cpp" break; case 320: /* join_clause: table_ref_atomic opt_join_type JOIN table_ref_atomic USING '(' ident_commalist ')' */ -#line 1275 "bison_parser.y" +#line 1277 "bison_parser.y" { (yyval.table) = new TableRef(kTableJoin); (yyval.table)->join = new JoinDefinition(); (yyval.table)->join->type = (yyvsp[-6].join_type); (yyval.table)->join->left = (yyvsp[-7].table); (yyval.table)->join->right = (yyvsp[-4].table); - (yyval.table)->join->namedColumns = true; - - for (auto column_it = (yyvsp[-1].str_vec)->rbegin(); column_it != (yyvsp[-1].str_vec)->rend(); ++column_it) { - auto column_name = *column_it; - auto left_col = Expr::makeColumnRef(strdup(column_name)); - if ((yyvsp[-7].table)->getName()) { - left_col->table = strdup((yyvsp[-7].table)->getName()); - } - auto right_col = Expr::makeColumnRef(strdup(column_name)); - if ((yyvsp[-4].table)->getName()) { - right_col->table = strdup((yyvsp[-4].table)->getName()); - } - - free(column_name); - auto predicate = Expr::makeOpBinary(left_col, kOpEquals, right_col); - - if (!(yyval.table)->join->condition) { - (yyval.table)->join->condition = predicate; - } else { - (yyval.table)->join->condition = Expr::makeOpBinary(predicate, kOpAnd, (yyval.table)->join->condition); - } - } - - delete ((yyvsp[-1].str_vec)); + (yyval.table)->join->namedColumns = (yyvsp[-1].str_vec); } -#line 5409 "bison_parser.cpp" +#line 5387 "bison_parser.cpp" break; case 321: /* opt_join_type: INNER */ -#line 1307 "bison_parser.y" +#line 1286 "bison_parser.y" { (yyval.join_type) = kJoinInner; } -#line 5415 "bison_parser.cpp" +#line 5393 "bison_parser.cpp" break; case 322: /* opt_join_type: LEFT OUTER */ -#line 1308 "bison_parser.y" +#line 1287 "bison_parser.y" { (yyval.join_type) = kJoinLeft; } -#line 5421 "bison_parser.cpp" +#line 5399 "bison_parser.cpp" break; case 323: /* opt_join_type: LEFT */ -#line 1309 "bison_parser.y" +#line 1288 "bison_parser.y" { (yyval.join_type) = kJoinLeft; } -#line 5427 "bison_parser.cpp" +#line 5405 "bison_parser.cpp" break; case 324: /* opt_join_type: RIGHT OUTER */ -#line 1310 "bison_parser.y" +#line 1289 "bison_parser.y" { (yyval.join_type) = kJoinRight; } -#line 5433 "bison_parser.cpp" +#line 5411 "bison_parser.cpp" break; case 325: /* opt_join_type: RIGHT */ -#line 1311 "bison_parser.y" +#line 1290 "bison_parser.y" { (yyval.join_type) = kJoinRight; } -#line 5439 "bison_parser.cpp" +#line 5417 "bison_parser.cpp" break; case 326: /* opt_join_type: FULL OUTER */ -#line 1312 "bison_parser.y" +#line 1291 "bison_parser.y" { (yyval.join_type) = kJoinFull; } -#line 5445 "bison_parser.cpp" +#line 5423 "bison_parser.cpp" break; case 327: /* opt_join_type: OUTER */ -#line 1313 "bison_parser.y" +#line 1292 "bison_parser.y" { (yyval.join_type) = kJoinFull; } -#line 5451 "bison_parser.cpp" +#line 5429 "bison_parser.cpp" break; case 328: /* opt_join_type: FULL */ -#line 1314 "bison_parser.y" +#line 1293 "bison_parser.y" { (yyval.join_type) = kJoinFull; } -#line 5457 "bison_parser.cpp" +#line 5435 "bison_parser.cpp" break; case 329: /* opt_join_type: CROSS */ -#line 1315 "bison_parser.y" +#line 1294 "bison_parser.y" { (yyval.join_type) = kJoinCross; } -#line 5463 "bison_parser.cpp" +#line 5441 "bison_parser.cpp" break; case 330: /* opt_join_type: %empty */ -#line 1316 "bison_parser.y" +#line 1295 "bison_parser.y" { (yyval.join_type) = kJoinInner; } -#line 5469 "bison_parser.cpp" +#line 5447 "bison_parser.cpp" break; case 334: /* ident_commalist: IDENTIFIER */ -#line 1327 "bison_parser.y" +#line 1306 "bison_parser.y" { (yyval.str_vec) = new std::vector(); (yyval.str_vec)->push_back((yyvsp[0].sval)); } -#line 5478 "bison_parser.cpp" +#line 5456 "bison_parser.cpp" break; case 335: /* ident_commalist: ident_commalist ',' IDENTIFIER */ -#line 1331 "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 5487 "bison_parser.cpp" +#line 5465 "bison_parser.cpp" break; -#line 5491 "bison_parser.cpp" +#line 5469 "bison_parser.cpp" default: break; } @@ -5716,7 +5694,7 @@ YYLTYPE yylloc = yyloc_default; return yyresult; } -#line 1337 "bison_parser.y" +#line 1316 "bison_parser.y" // clang-format on /********************************* diff --git a/src/parser/bison_parser.h b/src/parser/bison_parser.h index 6005a08..0e002d8 100644 --- a/src/parser/bison_parser.h +++ b/src/parser/bison_parser.h @@ -53,7 +53,7 @@ extern int hsql_debug; #endif /* "%code requires" blocks. */ -#line 38 "bison_parser.y" +#line 39 "bison_parser.y" // %code requires block @@ -271,7 +271,7 @@ extern int hsql_debug; #if ! defined HSQL_STYPE && ! defined HSQL_STYPE_IS_DECLARED union HSQL_STYPE { -#line 96 "bison_parser.y" +#line 97 "bison_parser.y" // clang-format on bool bval; @@ -339,7 +339,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 f364465..f3048c7 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,165 +160,166 @@ hsql::RowLockMode lock_mode_t; hsql::RowLockWaitPolicy lock_wait_policy_t; + + // clang-format off } - // clang-format off - /********************************* - ** 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 ($$); } <*> +/********************************* + ** 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 { @@ -1278,30 +1280,7 @@ join_clause : table_ref_atomic NATURAL JOIN nonjoin_table_ref_atomic { $$->join->type = $2; $$->join->left = $1; $$->join->right = $4; - $$->join->namedColumns = true; - - for (auto column_it = $7->rbegin(); column_it != $7->rend(); ++column_it) { - auto column_name = *column_it; - auto left_col = Expr::makeColumnRef(strdup(column_name)); - if ($1->getName()) { - left_col->table = strdup($1->getName()); - } - auto right_col = Expr::makeColumnRef(strdup(column_name)); - if ($4->getName()) { - right_col->table = strdup($4->getName()); - } - - free(column_name); - auto predicate = Expr::makeOpBinary(left_col, kOpEquals, right_col); - - if (!$$->join->condition) { - $$->join->condition = predicate; - } else { - $$->join->condition = Expr::makeOpBinary(predicate, kOpAnd, $$->join->condition); - } - } - - delete ($7); + $$->join->namedColumns = $7; }; opt_join_type : INNER { $$ = kJoinInner; } diff --git a/src/sql/Table.h b/src/sql/Table.h index 6824e1d..c4197cf 100755 --- a/src/sql/Table.h +++ b/src/sql/Table.h @@ -62,7 +62,7 @@ struct JoinDefinition { Expr* condition; JoinType type; - bool namedColumns{false}; + std::vector* namedColumns; }; } // namespace hsql diff --git a/test/select_tests.cpp b/test/select_tests.cpp index 4dbe8d9..665b5a4 100644 --- a/test/select_tests.cpp +++ b/test/select_tests.cpp @@ -348,7 +348,8 @@ 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_FALSE(inner_join->namedColumns); + ; ASSERT_EQ(inner_join->condition->opType, kOpEquals); ASSERT_STREQ(inner_join->condition->expr->table, "fact"); @@ -384,51 +385,11 @@ TEST(SelectJoinUsing) { ASSERT_TRUE(stmt->fromTable->join->right->name); ASSERT_STREQ(stmt->fromTable->join->right->name, "bar"); - // ... USING ... + // ... USING a, b; ASSERT_TRUE(stmt->fromTable->join->namedColumns); - - // Two named columns, resulting in a conjunction of two join predicates. - ASSERT_TRUE(stmt->fromTable->join->condition); - ASSERT_EQ(stmt->fromTable->join->condition->type, kExprOperator); - ASSERT_EQ(stmt->fromTable->join->condition->opType, kOpAnd); - ASSERT_TRUE(stmt->fromTable->join->condition->expr); - ASSERT_TRUE(stmt->fromTable->join->condition->expr2); - - // foo.a = bar.a - ASSERT_EQ(stmt->fromTable->join->condition->expr->type, kExprOperator); - ASSERT_EQ(stmt->fromTable->join->condition->expr->opType, kOpEquals); - ASSERT_TRUE(stmt->fromTable->join->condition->expr->expr); - ASSERT_TRUE(stmt->fromTable->join->condition->expr->expr2); - - ASSERT_EQ(stmt->fromTable->join->condition->expr->expr->type, kExprColumnRef); - ASSERT_TRUE(stmt->fromTable->join->condition->expr->expr->name); - ASSERT_STREQ(stmt->fromTable->join->condition->expr->expr->name, "a"); - ASSERT_TRUE(stmt->fromTable->join->condition->expr->expr->table); - ASSERT_STREQ(stmt->fromTable->join->condition->expr->expr->table, "foo"); - - ASSERT_EQ(stmt->fromTable->join->condition->expr->expr2->type, kExprColumnRef); - ASSERT_TRUE(stmt->fromTable->join->condition->expr->expr2->name); - ASSERT_STREQ(stmt->fromTable->join->condition->expr->expr2->name, "a"); - ASSERT_TRUE(stmt->fromTable->join->condition->expr->expr2->table); - ASSERT_STREQ(stmt->fromTable->join->condition->expr->expr2->table, "bar"); - - // foo.b = bar.b - ASSERT_EQ(stmt->fromTable->join->condition->expr2->type, kExprOperator); - ASSERT_EQ(stmt->fromTable->join->condition->expr2->opType, kOpEquals); - ASSERT_TRUE(stmt->fromTable->join->condition->expr2->expr); - ASSERT_TRUE(stmt->fromTable->join->condition->expr2->expr2); - - ASSERT_EQ(stmt->fromTable->join->condition->expr2->expr->type, kExprColumnRef); - ASSERT_TRUE(stmt->fromTable->join->condition->expr2->expr->name); - ASSERT_STREQ(stmt->fromTable->join->condition->expr2->expr->name, "b"); - ASSERT_TRUE(stmt->fromTable->join->condition->expr2->expr->table); - ASSERT_STREQ(stmt->fromTable->join->condition->expr2->expr->table, "foo"); - - ASSERT_EQ(stmt->fromTable->join->condition->expr2->expr2->type, kExprColumnRef); - ASSERT_TRUE(stmt->fromTable->join->condition->expr2->expr2->name); - ASSERT_STREQ(stmt->fromTable->join->condition->expr2->expr2->name, "b"); - ASSERT_TRUE(stmt->fromTable->join->condition->expr2->expr2->table); - ASSERT_STREQ(stmt->fromTable->join->condition->expr2->expr2->table, "bar"); + 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 ... @@ -458,26 +419,10 @@ TEST(SelectJoinUsing) { ASSERT_TRUE(stmt->fromTable->join->right->name); ASSERT_STREQ(stmt->fromTable->join->right->name, "bar"); - // ... USING ... + // ... USING a; ASSERT_TRUE(stmt->fromTable->join->namedColumns); - - // One named column, resulting in a one join predicate foo.a = bar.a. - ASSERT_EQ(stmt->fromTable->join->condition->type, kExprOperator); - ASSERT_EQ(stmt->fromTable->join->condition->opType, kOpEquals); - ASSERT_TRUE(stmt->fromTable->join->condition->expr); - ASSERT_TRUE(stmt->fromTable->join->condition->expr2); - - ASSERT_EQ(stmt->fromTable->join->condition->expr->type, kExprColumnRef); - ASSERT_TRUE(stmt->fromTable->join->condition->expr->name); - ASSERT_STREQ(stmt->fromTable->join->condition->expr->name, "a"); - ASSERT_TRUE(stmt->fromTable->join->condition->expr->table); - ASSERT_STREQ(stmt->fromTable->join->condition->expr->table, "foo"); - - ASSERT_EQ(stmt->fromTable->join->condition->expr2->type, kExprColumnRef); - ASSERT_TRUE(stmt->fromTable->join->condition->expr2->name); - ASSERT_STREQ(stmt->fromTable->join->condition->expr2->name, "a"); - ASSERT_TRUE(stmt->fromTable->join->condition->expr2->table); - ASSERT_STREQ(stmt->fromTable->join->condition->expr2->table, "bar"); + ASSERT_EQ(stmt->fromTable->join->namedColumns->size(), 1); + ASSERT_STREQ(stmt->fromTable->join->namedColumns->at(0), "a"); stmt = (SelectStatement*)result.getStatement(2); // SELECT b ... @@ -504,26 +449,10 @@ TEST(SelectJoinUsing) { ASSERT_TRUE(stmt->fromTable->join->right->name); ASSERT_STREQ(stmt->fromTable->join->right->name, "bar"); - // ... USING ... + // ... USING a; ASSERT_TRUE(stmt->fromTable->join->namedColumns); - - // One named column, resulting in one join predicate foo.a = bar.a. - ASSERT_EQ(stmt->fromTable->join->condition->type, kExprOperator); - ASSERT_EQ(stmt->fromTable->join->condition->opType, kOpEquals); - ASSERT_TRUE(stmt->fromTable->join->condition->expr); - ASSERT_TRUE(stmt->fromTable->join->condition->expr2); - - ASSERT_EQ(stmt->fromTable->join->condition->expr->type, kExprColumnRef); - ASSERT_TRUE(stmt->fromTable->join->condition->expr->name); - ASSERT_STREQ(stmt->fromTable->join->condition->expr->name, "a"); - ASSERT_TRUE(stmt->fromTable->join->condition->expr->table); - ASSERT_STREQ(stmt->fromTable->join->condition->expr->table, "baz"); - - ASSERT_EQ(stmt->fromTable->join->condition->expr2->type, kExprColumnRef); - ASSERT_TRUE(stmt->fromTable->join->condition->expr2->name); - ASSERT_STREQ(stmt->fromTable->join->condition->expr2->name, "a"); - ASSERT_TRUE(stmt->fromTable->join->condition->expr2->table); - ASSERT_STREQ(stmt->fromTable->join->condition->expr2->table, "bar"); + ASSERT_EQ(stmt->fromTable->join->namedColumns->size(), 1); + ASSERT_STREQ(stmt->fromTable->join->namedColumns->at(0), "a"); } TEST(SelectColumnOrder) {