diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index de3cf180..60a3b470 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,19 +27,19 @@ jobs: os: ubuntu-latest container: ubuntu:18.04 - - name: gcc-12 - cc: gcc-12 - cxx: g++-12 + - name: gcc-13 + cc: gcc-13 + cxx: g++-13 os: ubuntu-latest - container: ubuntu:22.04 + container: ubuntu:24.04 # We need relaxed builds for debug mode with current GCC versions, see #218. build_options: "relaxed_build=on" - - name: clang-15 - cc: clang-15 - cxx: clang++-15 + - name: clang-18 + cc: clang-18 + cxx: clang++-18 os: ubuntu-latest - container: ubuntu:22.04 + container: ubuntu:24.04 - name: clang-macOS cc: clang diff --git a/src/parser/bison_parser.cpp b/src/parser/bison_parser.cpp index e403ac37..d74eff65 100644 --- a/src/parser/bison_parser.cpp +++ b/src/parser/bison_parser.cpp @@ -64,18 +64,19 @@ #define YYPULL 1 /* Substitute the type names. */ -#define YYSTYPE HSQL_STYPE -#define YYLTYPE HSQL_LTYPE +#define YYSTYPE HSQL_STYPE +#define YYLTYPE HSQL_LTYPE /* Substitute the variable and function names. */ -#define yyparse hsql_parse -#define yylex hsql_lex -#define yyerror hsql_error -#define yydebug hsql_debug -#define yynerrs hsql_nerrs +#define yyparse hsql_parse +#define yylex hsql_lex +#define yyerror hsql_error +#define yydebug hsql_debug +#define yynerrs hsql_nerrs /* First part of user prologue. */ #line 2 "bison_parser.y" + /** * bison_parser.y * defines bison_parser.h @@ -95,14 +96,14 @@ #include #include -using namespace hsql; + using namespace hsql; -int yyerror(YYLTYPE* llocp, SQLParserResult* result, yyscan_t scanner, const char* msg) { - result->setIsValid(false); - result->setErrorDetails(strdup(msg), llocp->first_line, llocp->first_column); - return 0; -} -// clang-format off + int yyerror(YYLTYPE * llocp, SQLParserResult * result, yyscan_t scanner, const char* msg) { + result->setIsValid(false); + result->setErrorDetails(strdup(msg), llocp->first_line, llocp->first_column); + return 0; + } + // clang-format off #line 109 "bison_parser.cpp" @@ -394,70 +395,72 @@ enum yysymbol_kind_t YYSYMBOL_opt_top = 259, /* opt_top */ YYSYMBOL_opt_limit = 260, /* opt_limit */ YYSYMBOL_expr_list = 261, /* expr_list */ - YYSYMBOL_opt_literal_list = 262, /* opt_literal_list */ - YYSYMBOL_literal_list = 263, /* literal_list */ - YYSYMBOL_expr_alias = 264, /* expr_alias */ - YYSYMBOL_expr = 265, /* expr */ - YYSYMBOL_operand = 266, /* operand */ - YYSYMBOL_scalar_expr = 267, /* scalar_expr */ - YYSYMBOL_unary_expr = 268, /* unary_expr */ - YYSYMBOL_binary_expr = 269, /* binary_expr */ - YYSYMBOL_logic_expr = 270, /* logic_expr */ - YYSYMBOL_in_expr = 271, /* in_expr */ - YYSYMBOL_case_expr = 272, /* case_expr */ - YYSYMBOL_case_list = 273, /* case_list */ - YYSYMBOL_exists_expr = 274, /* exists_expr */ - YYSYMBOL_comp_expr = 275, /* comp_expr */ - YYSYMBOL_function_expr = 276, /* function_expr */ - YYSYMBOL_opt_window = 277, /* opt_window */ - YYSYMBOL_opt_partition = 278, /* opt_partition */ - YYSYMBOL_opt_frame_clause = 279, /* opt_frame_clause */ - YYSYMBOL_frame_type = 280, /* frame_type */ - YYSYMBOL_frame_bound = 281, /* frame_bound */ - YYSYMBOL_extract_expr = 282, /* extract_expr */ - YYSYMBOL_cast_expr = 283, /* cast_expr */ - YYSYMBOL_datetime_field = 284, /* datetime_field */ - YYSYMBOL_datetime_field_plural = 285, /* datetime_field_plural */ - YYSYMBOL_duration_field = 286, /* duration_field */ - YYSYMBOL_array_expr = 287, /* array_expr */ - YYSYMBOL_array_index = 288, /* array_index */ - YYSYMBOL_between_expr = 289, /* between_expr */ - YYSYMBOL_column_name = 290, /* column_name */ - YYSYMBOL_literal = 291, /* literal */ - YYSYMBOL_string_literal = 292, /* string_literal */ - YYSYMBOL_bool_literal = 293, /* bool_literal */ - YYSYMBOL_num_literal = 294, /* num_literal */ - YYSYMBOL_int_literal = 295, /* int_literal */ - YYSYMBOL_null_literal = 296, /* null_literal */ - YYSYMBOL_date_literal = 297, /* date_literal */ - YYSYMBOL_interval_literal = 298, /* interval_literal */ - YYSYMBOL_param_expr = 299, /* param_expr */ - YYSYMBOL_table_ref = 300, /* table_ref */ - YYSYMBOL_table_ref_atomic = 301, /* table_ref_atomic */ - YYSYMBOL_nonjoin_table_ref_atomic = 302, /* nonjoin_table_ref_atomic */ - YYSYMBOL_table_ref_commalist = 303, /* table_ref_commalist */ - YYSYMBOL_table_ref_name = 304, /* table_ref_name */ - YYSYMBOL_table_ref_name_no_alias = 305, /* table_ref_name_no_alias */ - YYSYMBOL_table_name = 306, /* table_name */ - YYSYMBOL_opt_index_name = 307, /* opt_index_name */ - YYSYMBOL_table_alias = 308, /* table_alias */ - YYSYMBOL_opt_table_alias = 309, /* opt_table_alias */ - YYSYMBOL_alias = 310, /* alias */ - YYSYMBOL_opt_alias = 311, /* opt_alias */ - YYSYMBOL_opt_locking_clause = 312, /* opt_locking_clause */ - YYSYMBOL_opt_locking_clause_list = 313, /* opt_locking_clause_list */ - YYSYMBOL_locking_clause = 314, /* locking_clause */ - YYSYMBOL_row_lock_mode = 315, /* row_lock_mode */ - YYSYMBOL_opt_row_lock_policy = 316, /* opt_row_lock_policy */ - YYSYMBOL_opt_with_clause = 317, /* opt_with_clause */ - YYSYMBOL_with_clause = 318, /* with_clause */ - YYSYMBOL_with_description_list = 319, /* with_description_list */ - YYSYMBOL_with_description = 320, /* with_description */ - YYSYMBOL_join_clause = 321, /* join_clause */ - YYSYMBOL_opt_join_type = 322, /* opt_join_type */ - YYSYMBOL_join_condition = 323, /* join_condition */ - YYSYMBOL_opt_semicolon = 324, /* opt_semicolon */ - YYSYMBOL_ident_commalist = 325 /* ident_commalist */ + YYSYMBOL_opt_extended_literal_list = 262, /* opt_extended_literal_list */ + YYSYMBOL_extended_literal_list = 263, /* extended_literal_list */ + YYSYMBOL_casted_extended_literal = 264, /* casted_extended_literal */ + YYSYMBOL_extended_literal = 265, /* extended_literal */ + YYSYMBOL_expr_alias = 266, /* expr_alias */ + YYSYMBOL_expr = 267, /* expr */ + YYSYMBOL_operand = 268, /* operand */ + YYSYMBOL_scalar_expr = 269, /* scalar_expr */ + YYSYMBOL_unary_expr = 270, /* unary_expr */ + YYSYMBOL_binary_expr = 271, /* binary_expr */ + YYSYMBOL_logic_expr = 272, /* logic_expr */ + YYSYMBOL_in_expr = 273, /* in_expr */ + YYSYMBOL_case_expr = 274, /* case_expr */ + YYSYMBOL_case_list = 275, /* case_list */ + YYSYMBOL_exists_expr = 276, /* exists_expr */ + YYSYMBOL_comp_expr = 277, /* comp_expr */ + YYSYMBOL_function_expr = 278, /* function_expr */ + YYSYMBOL_opt_window = 279, /* opt_window */ + YYSYMBOL_opt_partition = 280, /* opt_partition */ + YYSYMBOL_opt_frame_clause = 281, /* opt_frame_clause */ + YYSYMBOL_frame_type = 282, /* frame_type */ + YYSYMBOL_frame_bound = 283, /* frame_bound */ + YYSYMBOL_extract_expr = 284, /* extract_expr */ + YYSYMBOL_cast_expr = 285, /* cast_expr */ + YYSYMBOL_datetime_field = 286, /* datetime_field */ + YYSYMBOL_datetime_field_plural = 287, /* datetime_field_plural */ + YYSYMBOL_duration_field = 288, /* duration_field */ + YYSYMBOL_array_expr = 289, /* array_expr */ + YYSYMBOL_array_index = 290, /* array_index */ + YYSYMBOL_between_expr = 291, /* between_expr */ + YYSYMBOL_column_name = 292, /* column_name */ + YYSYMBOL_literal = 293, /* literal */ + YYSYMBOL_string_literal = 294, /* string_literal */ + YYSYMBOL_bool_literal = 295, /* bool_literal */ + YYSYMBOL_num_literal = 296, /* num_literal */ + YYSYMBOL_int_literal = 297, /* int_literal */ + YYSYMBOL_null_literal = 298, /* null_literal */ + YYSYMBOL_date_literal = 299, /* date_literal */ + YYSYMBOL_interval_literal = 300, /* interval_literal */ + YYSYMBOL_param_expr = 301, /* param_expr */ + YYSYMBOL_table_ref = 302, /* table_ref */ + YYSYMBOL_table_ref_atomic = 303, /* table_ref_atomic */ + YYSYMBOL_nonjoin_table_ref_atomic = 304, /* nonjoin_table_ref_atomic */ + YYSYMBOL_table_ref_commalist = 305, /* table_ref_commalist */ + YYSYMBOL_table_ref_name = 306, /* table_ref_name */ + YYSYMBOL_table_ref_name_no_alias = 307, /* table_ref_name_no_alias */ + YYSYMBOL_table_name = 308, /* table_name */ + YYSYMBOL_opt_index_name = 309, /* opt_index_name */ + YYSYMBOL_table_alias = 310, /* table_alias */ + YYSYMBOL_opt_table_alias = 311, /* opt_table_alias */ + YYSYMBOL_alias = 312, /* alias */ + YYSYMBOL_opt_alias = 313, /* opt_alias */ + YYSYMBOL_opt_locking_clause = 314, /* opt_locking_clause */ + YYSYMBOL_opt_locking_clause_list = 315, /* opt_locking_clause_list */ + YYSYMBOL_locking_clause = 316, /* locking_clause */ + YYSYMBOL_row_lock_mode = 317, /* row_lock_mode */ + YYSYMBOL_opt_row_lock_policy = 318, /* opt_row_lock_policy */ + YYSYMBOL_opt_with_clause = 319, /* opt_with_clause */ + YYSYMBOL_with_clause = 320, /* with_clause */ + YYSYMBOL_with_description_list = 321, /* with_description_list */ + YYSYMBOL_with_description = 322, /* with_description */ + YYSYMBOL_join_clause = 323, /* join_clause */ + YYSYMBOL_opt_join_type = 324, /* opt_join_type */ + YYSYMBOL_join_condition = 325, /* join_condition */ + YYSYMBOL_opt_semicolon = 326, /* opt_semicolon */ + YYSYMBOL_ident_commalist = 327 /* ident_commalist */ }; typedef enum yysymbol_kind_t yysymbol_kind_t; @@ -788,16 +791,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 69 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 888 +#define YYLAST 868 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 196 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 130 +#define YYNNTS 132 /* YYNRULES -- Number of rules. */ -#define YYNRULES 335 +#define YYNRULES 340 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 604 +#define YYNSTATES 616 /* YYMAXUTOK -- Last valid token kind. */ #define YYMAXUTOK 433 @@ -879,25 +882,26 @@ static const yytype_int16 yyrline[] = 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 + 898, 899, 900, 901, 902, 903, 908, 912, 918, 919, + 921, 925, 930, 930, 934, 942, 943, 945, 953, 953, + 953, 953, 953, 955, 956, 956, 956, 956, 956, 956, + 956, 956, 957, 957, 961, 961, 963, 964, 965, 966, + 967, 969, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 980, 981, 983, 984, 985, 986, 990, 991, + 992, 993, 995, 996, 998, 999, 1001, 1002, 1003, 1004, + 1005, 1006, 1007, 1011, 1012, 1016, 1017, 1019, 1020, 1025, + 1026, 1027, 1031, 1032, 1033, 1035, 1036, 1037, 1038, 1039, + 1041, 1043, 1045, 1046, 1047, 1048, 1049, 1050, 1052, 1053, + 1054, 1055, 1056, 1057, 1059, 1059, 1061, 1063, 1065, 1067, + 1068, 1069, 1070, 1072, 1072, 1072, 1072, 1072, 1072, 1072, + 1074, 1076, 1077, 1079, 1080, 1082, 1084, 1086, 1097, 1098, + 1109, 1141, 1150, 1150, 1157, 1157, 1159, 1159, 1166, 1170, + 1175, 1183, 1189, 1193, 1198, 1199, 1201, 1201, 1203, 1203, + 1205, 1206, 1208, 1208, 1214, 1215, 1217, 1221, 1226, 1232, + 1239, 1240, 1241, 1242, 1244, 1245, 1246, 1252, 1252, 1254, + 1256, 1260, 1265, 1275, 1282, 1290, 1299, 1300, 1301, 1302, + 1303, 1304, 1305, 1306, 1307, 1308, 1310, 1316, 1316, 1319, + 1323 }; #endif @@ -958,7 +962,8 @@ static const char *const yytname[] = "select_clause", "opt_distinct", "select_list", "opt_from_clause", "from_clause", "opt_where", "opt_group", "opt_having", "opt_order", "order_list", "order_desc", "opt_order_type", "opt_top", "opt_limit", - "expr_list", "opt_literal_list", "literal_list", "expr_alias", "expr", + "expr_list", "opt_extended_literal_list", "extended_literal_list", + "casted_extended_literal", "extended_literal", "expr_alias", "expr", "operand", "scalar_expr", "unary_expr", "binary_expr", "logic_expr", "in_expr", "case_expr", "case_list", "exists_expr", "comp_expr", "function_expr", "opt_window", "opt_partition", "opt_frame_clause", @@ -984,12 +989,12 @@ yysymbol_name (yysymbol_kind_t yysymbol) } #endif -#define YYPACT_NINF (-526) +#define YYPACT_NINF (-537) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF (-333) +#define YYTABLE_NINF (-338) #define yytable_value_is_error(Yyn) \ ((Yyn) == YYTABLE_NINF) @@ -998,67 +1003,68 @@ yysymbol_name (yysymbol_kind_t yysymbol) STATE-NUM. */ static const yytype_int16 yypact[] = { - 598, 72, 146, 157, 180, 146, 123, -42, 38, 54, - 146, 81, 19, 147, 138, 184, 17, 17, 17, 202, - 39, -526, 172, -526, 172, -526, -526, -526, -526, -526, - -526, -526, -526, -526, -526, -526, -526, -31, -526, 258, - 90, -526, 83, 195, -526, 165, 165, 165, 146, 296, - 146, 176, -526, 177, -31, 190, -49, 177, 177, 177, - 146, -526, 210, 152, -526, -526, -526, -526, -526, -526, - 593, -526, 252, -526, -526, 206, 20, -526, 69, -526, - 365, 85, 369, 251, 372, 146, 146, 302, -526, 300, - 200, 401, 363, 146, 219, 225, 420, 420, 420, 436, - 146, 146, -526, 266, 184, -526, 267, 456, 430, -526, - -526, -526, -31, 347, 338, -31, 130, -526, -526, -526, - -526, 471, -526, 472, -526, -526, -526, 286, 284, -526, - -526, -526, -526, 304, -526, -526, -526, -526, -526, -526, - 433, -526, 348, -48, 200, 306, -526, 420, 479, 94, - 314, -53, -526, -526, 391, -526, -526, 373, -526, 373, - 373, -526, -526, -526, -526, -526, 483, -526, -526, 306, - 415, -526, -526, 20, -526, -526, 306, 415, 306, 131, - 370, -526, 329, -526, 85, -526, -526, -526, -526, -526, - -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, - -526, 146, 490, 380, 49, 376, -105, 307, 309, 310, - 166, 375, 316, 379, -526, 218, 110, 413, -526, -526, - -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, - -526, -526, -526, -526, 406, -526, 111, 317, -526, 306, - 401, -526, 467, -526, -526, 459, -526, 302, -526, 319, - 133, -526, 416, 323, -526, 48, 130, -31, 324, -526, - -46, 130, 110, 455, 108, 18, -526, 370, -526, -526, - -526, 330, 419, -526, 684, 392, 331, 140, -526, -526, - -526, 380, 9, 27, 461, 329, 306, 306, 82, -39, - 332, 379, 638, 306, 159, 333, -76, 306, 306, 379, - -526, 379, 89, 335, 135, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 456, 146, -526, 520, 85, 110, -526, 177, 296, -526, - 85, -526, 483, 21, 302, -526, 306, -526, 523, -526, - -526, -526, -526, 306, -526, -526, -526, 370, 306, 306, - -526, 367, 417, -526, 73, -526, 479, 420, -526, -526, - 345, -526, 350, -526, -526, 351, -526, -526, 355, -526, - -526, -526, -526, 356, -526, -526, 43, 357, 479, -526, - 49, -526, 460, 306, -526, -526, 364, 453, 161, -35, - 150, 306, 306, -526, 461, 452, 78, -526, -526, -526, - 439, 560, 676, 379, 374, 218, -526, 454, 384, 676, - 676, 676, 676, 700, 700, 700, 700, 159, 159, 0, - 0, 0, -82, 371, -526, -526, 168, 564, -526, 169, - -526, 380, -526, 297, -526, 381, -526, 37, -526, 493, - -526, -526, -526, -526, 110, 110, -526, 505, 479, -526, - 411, -526, 197, -526, 570, 571, -526, 572, 573, 574, - -526, 468, -526, -526, 476, -526, 43, -526, 479, 205, - -526, 393, -526, 211, -526, 306, 684, 306, 306, -526, - 174, 143, 398, -526, 379, 676, 218, 418, 212, -526, - -526, -526, -526, -526, 421, 482, -526, -526, -526, 525, - 527, 528, 502, 21, 607, -526, -526, -526, 488, -526, - -526, -111, -526, -526, 426, 223, 427, 431, 432, -526, - -526, -526, 224, -526, 515, 460, 50, 434, 110, 181, - -526, 306, -526, 638, 435, 234, -526, -526, 37, 21, - -526, -526, -526, 21, 340, 437, 306, -526, -526, -526, - 605, -526, -526, -526, -526, 500, 415, -526, -526, -526, - -526, 110, -526, -526, -526, -526, 470, 479, -18, 438, - 306, -103, 441, 306, 243, 306, -526, -526, 323, -526, - -526, -526, 445, 22, 479, 110, -526, -526, 110, -526, - 148, 26, 170, -526, -526, 244, -526, -526, 524, -526, - -526, -526, 26, -526 + 595, 27, 59, 63, 80, 59, -20, -2, 67, 33, + 59, 74, 12, -6, 83, 181, 38, 38, 38, 186, + 6, -537, 93, -537, 93, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -17, -537, 212, + 51, -537, 29, 154, -537, 148, 148, 148, 59, 276, + 59, 166, -537, 204, -17, 160, -51, 204, 204, 204, + 59, -537, 216, 153, -537, -537, -537, -537, -537, -537, + 563, -537, 259, -537, -537, 247, 92, -537, 169, -537, + 380, 227, 382, 268, 390, 59, 59, 313, -537, 312, + 220, 413, 385, 59, 237, 239, 428, 428, 428, 433, + 59, 59, -537, 249, 181, -537, 252, 431, 434, -537, + -537, -537, -17, 331, 320, -17, 0, -537, -537, -537, + 679, 263, 445, -537, 450, -537, -537, 25, -537, 265, + 266, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, 411, -537, 329, -45, 220, 318, + -537, 428, 475, 99, 308, -38, -537, -537, 391, -537, + -537, 368, -537, 368, 368, -537, -537, -537, -537, -537, + 481, -537, -537, -537, 318, 408, -537, -537, 92, -537, + -537, 318, 408, 318, 104, 367, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, 384, -537, 324, -537, -537, -537, 227, -537, 59, + 487, 378, 53, 369, 60, 304, 307, 317, 177, 322, + 314, 372, -537, 298, 101, 409, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, 404, -537, 90, 326, -537, 318, 413, -537, + 467, -537, -537, 461, -537, 313, -537, 328, 116, -537, + 426, 334, -537, 37, 0, -17, 335, -537, 130, 0, + 101, 459, 24, 81, -537, 367, -537, 395, -537, -537, + 340, 429, -537, 661, 412, 341, 126, -537, -537, -537, + 378, 13, 23, 477, 324, 318, 318, 202, 192, 343, + 372, 624, 318, 84, 350, -57, 318, 318, 372, -537, + 372, 70, 352, -42, 372, 372, 372, 372, 372, 372, + 372, 372, 372, 372, 372, 372, 372, 372, 372, 431, + 59, -537, 540, 227, 101, -537, 204, 276, -537, 227, + -537, 481, 18, 313, -537, 318, -537, 541, -537, -537, + -537, -537, 318, -537, -537, -537, 367, 318, 318, -537, + 383, 423, -537, -73, -537, 661, 475, 428, -537, -537, + 359, -537, 360, -537, -537, 361, -537, -537, 362, -537, + -537, -537, -537, 363, -537, -537, 30, 366, 475, -537, + 53, -537, 479, 318, -537, -537, 370, 463, 179, 128, + 199, 318, 318, -537, 477, 457, -120, -537, -537, -537, + 443, 606, 662, 372, 374, 298, -537, 460, 381, 662, + 662, 662, 662, 680, 680, 680, 680, 84, 84, -90, + -90, -90, 8, 379, -537, -537, 144, 568, -537, 146, + -537, 378, -537, 333, -537, 392, -537, 39, -537, 502, + -537, -537, -537, -537, 101, 101, -537, 510, 475, -537, + 414, -537, 386, 157, -537, 569, 590, -537, 593, 599, + 600, -537, 452, -537, -537, 496, -537, 30, -537, 475, + 158, -537, 417, -537, 180, -537, 318, 661, 318, 318, + -537, 78, 163, 418, -537, 372, 662, 298, 420, 191, + -537, -537, -537, -537, -537, 421, 508, -537, -537, -537, + 535, 539, 543, 519, 18, 617, -537, -537, -537, 495, + -537, -537, 7, -537, -537, -537, 436, 201, 437, 439, + 440, -537, -537, -537, 207, -537, 518, 479, -49, 442, + 101, 159, -537, 318, -537, 624, 446, 208, -537, -537, + 39, 18, -537, -537, -537, 18, 419, 435, 318, -537, + -537, -537, 628, -537, -537, -537, -537, 511, 408, -537, + -537, -537, -537, 101, -537, -537, -537, -537, 573, 475, + -18, 447, 318, 189, 451, 318, 223, 318, -537, -537, + 334, -537, -537, -537, 453, 22, 475, 101, -537, -537, + 101, -537, 61, 21, 140, -537, -537, 224, -537, -537, + 525, -537, -537, -537, 21, -537 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1066,103 +1072,106 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_int16 yydefact[] = { - 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 0, - 333, 3, 21, 19, 21, 18, 8, 9, 7, 11, - 16, 17, 13, 14, 12, 15, 10, 0, 312, 0, - 287, 101, 33, 0, 45, 52, 52, 52, 0, 0, - 0, 0, 286, 96, 0, 0, 0, 96, 96, 96, - 0, 43, 0, 314, 315, 29, 26, 28, 27, 1, - 313, 2, 0, 6, 5, 149, 110, 111, 141, 93, - 0, 159, 0, 0, 290, 0, 0, 135, 37, 0, + 338, 3, 21, 19, 21, 18, 8, 9, 7, 11, + 16, 17, 13, 14, 12, 15, 10, 0, 317, 0, + 292, 101, 33, 0, 45, 52, 52, 52, 0, 0, + 0, 0, 291, 96, 0, 0, 0, 96, 96, 96, + 0, 43, 0, 319, 320, 29, 26, 28, 27, 1, + 318, 2, 0, 6, 5, 149, 110, 111, 141, 93, + 0, 159, 0, 0, 295, 0, 0, 135, 37, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 4, 0, 0, 129, 123, - 124, 122, 0, 126, 0, 0, 155, 288, 265, 268, - 270, 0, 271, 0, 266, 267, 276, 0, 158, 160, - 258, 259, 260, 269, 261, 262, 263, 264, 32, 31, - 0, 289, 0, 0, 105, 0, 100, 0, 0, 0, - 0, 135, 107, 95, 0, 118, 117, 40, 38, 40, - 40, 94, 91, 92, 317, 316, 0, 148, 128, 0, - 141, 114, 113, 115, 125, 121, 0, 141, 0, 0, - 300, 272, 275, 34, 0, 237, 238, 239, 240, 241, - 242, 243, 244, 245, 246, 247, 248, 249, 250, 273, - 51, 0, 0, 313, 0, 0, 254, 0, 0, 0, - 0, 0, 0, 0, 256, 0, 134, 163, 170, 171, - 172, 165, 167, 173, 166, 186, 174, 175, 176, 177, - 169, 164, 179, 180, 0, 334, 0, 0, 103, 0, - 0, 106, 0, 97, 98, 0, 42, 135, 41, 24, - 0, 22, 132, 130, 156, 298, 155, 0, 140, 142, - 147, 155, 151, 153, 150, 0, 119, 299, 301, 274, - 161, 0, 0, 48, 0, 0, 0, 0, 53, 55, - 56, 313, 129, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 182, 0, 181, 0, 0, 0, 0, 0, - 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 124, 122, 0, 126, 0, 0, 155, 293, 270, 273, + 275, 0, 0, 276, 0, 271, 272, 0, 281, 0, + 158, 160, 162, 164, 263, 264, 265, 274, 266, 267, + 268, 269, 32, 31, 0, 294, 0, 0, 105, 0, + 100, 0, 0, 0, 0, 135, 107, 95, 0, 118, + 117, 40, 38, 40, 40, 94, 91, 92, 322, 321, + 0, 275, 148, 128, 0, 141, 114, 113, 115, 125, + 121, 0, 141, 0, 0, 305, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 278, 0, 277, 280, 165, 166, 34, 0, 51, 0, + 0, 318, 0, 0, 259, 0, 0, 0, 0, 0, + 0, 0, 261, 0, 134, 168, 175, 176, 177, 170, + 172, 178, 171, 191, 179, 180, 181, 182, 174, 169, + 184, 185, 0, 339, 0, 0, 103, 0, 0, 106, + 0, 97, 98, 0, 42, 135, 41, 24, 0, 22, + 132, 130, 156, 303, 155, 0, 140, 142, 147, 155, + 151, 153, 150, 0, 119, 304, 306, 0, 279, 161, + 0, 0, 48, 0, 0, 0, 0, 53, 55, 56, + 318, 129, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 187, 0, 186, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 104, 0, 0, 109, 108, 96, 0, 36, - 0, 20, 0, 0, 135, 131, 0, 296, 0, 297, - 162, 112, 116, 0, 146, 145, 144, 300, 0, 0, - 305, 0, 0, 307, 311, 302, 0, 0, 74, 68, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 104, 0, 0, 109, 108, 96, 0, 36, 0, + 20, 0, 0, 135, 131, 0, 301, 0, 302, 167, + 112, 116, 0, 146, 145, 144, 305, 0, 0, 310, + 0, 0, 312, 316, 307, 0, 0, 0, 74, 68, 0, 70, 80, 71, 58, 0, 65, 66, 0, 62, 63, 69, 72, 77, 67, 59, 82, 0, 0, 47, - 0, 50, 221, 0, 255, 257, 0, 0, 0, 0, - 0, 0, 0, 205, 0, 0, 0, 178, 168, 197, - 198, 0, 193, 0, 0, 0, 184, 0, 196, 195, - 211, 212, 213, 214, 215, 216, 217, 188, 187, 190, - 189, 191, 192, 0, 35, 335, 0, 0, 39, 0, - 23, 313, 133, 277, 279, 0, 281, 294, 280, 137, - 157, 295, 143, 120, 154, 152, 308, 0, 0, 310, - 0, 303, 0, 46, 0, 0, 64, 0, 0, 0, - 73, 0, 86, 87, 0, 57, 81, 83, 0, 0, - 54, 0, 218, 0, 209, 0, 0, 0, 0, 203, - 0, 0, 0, 251, 0, 194, 0, 0, 0, 185, - 252, 102, 99, 25, 0, 0, 329, 321, 327, 325, - 328, 323, 0, 0, 0, 293, 285, 291, 0, 127, - 306, 311, 309, 49, 0, 0, 0, 0, 0, 85, - 88, 84, 0, 90, 223, 221, 0, 0, 207, 0, - 206, 0, 210, 253, 0, 0, 201, 199, 294, 0, - 324, 326, 322, 0, 278, 295, 0, 304, 61, 79, - 0, 75, 60, 76, 89, 0, 141, 219, 235, 236, - 204, 208, 202, 200, 282, 318, 330, 0, 139, 0, - 0, 226, 0, 0, 0, 0, 136, 78, 222, 227, - 228, 229, 0, 0, 0, 331, 319, 292, 138, 220, - 0, 0, 0, 234, 224, 0, 233, 231, 0, 232, - 230, 320, 0, 225 + 0, 50, 226, 0, 260, 262, 0, 0, 0, 0, + 0, 0, 0, 210, 0, 0, 0, 183, 173, 202, + 203, 0, 198, 0, 0, 0, 189, 0, 201, 200, + 216, 217, 218, 219, 220, 221, 222, 193, 192, 195, + 194, 196, 197, 0, 35, 340, 0, 0, 39, 0, + 23, 318, 133, 282, 284, 0, 286, 299, 285, 137, + 157, 300, 143, 120, 154, 152, 313, 0, 0, 315, + 0, 308, 0, 0, 46, 0, 0, 64, 0, 0, + 0, 73, 0, 86, 87, 0, 57, 81, 83, 0, + 0, 54, 0, 223, 0, 214, 0, 0, 0, 0, + 208, 0, 0, 0, 256, 0, 199, 0, 0, 0, + 190, 257, 102, 99, 25, 0, 0, 334, 326, 332, + 330, 333, 328, 0, 0, 0, 298, 290, 296, 0, + 127, 311, 316, 314, 163, 49, 0, 0, 0, 0, + 0, 85, 88, 84, 0, 90, 228, 226, 0, 0, + 212, 0, 211, 0, 215, 258, 0, 0, 206, 204, + 299, 0, 329, 331, 327, 0, 283, 300, 0, 309, + 61, 79, 0, 75, 60, 76, 89, 0, 141, 224, + 240, 241, 209, 213, 207, 205, 287, 323, 335, 0, + 139, 0, 0, 231, 0, 0, 0, 0, 136, 78, + 227, 232, 233, 234, 0, 0, 0, 336, 324, 297, + 138, 225, 0, 0, 0, 239, 229, 0, 238, 236, + 0, 237, 235, 325, 0, 230 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -526, -526, -526, 562, -526, 613, -526, 308, -526, 312, - -526, -526, -526, -526, 315, -87, 198, -526, -526, -526, - 320, -526, 262, -526, 171, -526, -526, -526, -526, 178, - -526, -526, -52, -526, -526, -526, -526, -526, -526, 504, - -526, -526, 409, -185, -89, -526, 47, -54, -30, -526, - -526, -77, 378, -526, -526, -526, -108, -526, -526, -169, - -526, 311, -526, -526, 31, -289, -526, -68, 321, -142, - -188, -526, -526, -526, -526, -526, -526, 377, -526, -526, - -526, 127, -526, -526, -526, -525, -526, -526, -138, -526, - -526, -526, -526, -526, -526, -79, -83, -526, -526, -91, - -526, -526, -526, -526, -526, -434, 114, -526, -526, -526, - 7, -526, -526, 117, 403, -526, 322, -526, 396, -526, - 155, -526, -526, -526, 563, -526, -526, -526, -526, -336 + -537, -537, -537, 576, -537, 619, -537, 309, -537, 243, + -537, -537, -537, -537, 325, -93, 261, -537, -537, -537, + 316, -537, 264, -537, -322, -537, -537, -537, -537, 172, + -537, -537, -47, -537, -537, -537, -537, -537, -537, 509, + -537, -537, 415, -204, -86, -537, 58, -54, -31, -537, + -537, -80, 373, -537, -537, -537, -117, -537, -537, -174, + -537, 315, -537, -537, -94, -299, -537, -99, 458, 465, + 323, -147, -197, -537, -537, -537, -537, -537, -537, 376, + -537, -537, -537, 122, -537, -537, -537, -536, -537, -537, + -154, -537, -537, -537, -537, -537, -537, -68, -79, -537, + 548, -87, -537, -537, 549, -537, -537, -327, 119, -537, + -537, -537, 4, -537, -537, 129, 425, -537, 330, -537, + 405, -537, 162, -537, -537, -537, 577, -537, -537, -537, + -537, -343 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - 0, 19, 20, 21, 22, 73, 250, 251, 23, 66, - 24, 139, 25, 26, 89, 157, 246, 27, 28, 29, - 84, 277, 278, 279, 376, 460, 456, 465, 466, 467, - 280, 30, 93, 31, 243, 244, 32, 33, 34, 149, - 35, 151, 152, 36, 170, 171, 172, 77, 112, 113, - 175, 78, 169, 252, 334, 335, 146, 509, 576, 116, - 258, 259, 346, 108, 180, 253, 127, 128, 254, 255, - 217, 218, 219, 220, 221, 222, 223, 289, 224, 225, - 226, 472, 556, 582, 583, 594, 227, 228, 197, 198, - 199, 229, 230, 231, 232, 233, 130, 131, 132, 133, - 134, 135, 136, 137, 432, 433, 434, 435, 436, 51, - 437, 142, 505, 506, 507, 340, 266, 267, 268, 354, - 451, 37, 38, 63, 64, 438, 502, 586, 71, 236 + 0, 19, 20, 21, 22, 73, 258, 259, 23, 66, + 24, 143, 25, 26, 89, 161, 254, 27, 28, 29, + 84, 286, 287, 288, 386, 471, 467, 476, 477, 478, + 289, 30, 93, 31, 251, 252, 32, 33, 34, 153, + 35, 155, 156, 36, 175, 176, 177, 77, 112, 113, + 180, 78, 174, 260, 343, 344, 150, 520, 588, 116, + 266, 267, 355, 108, 185, 261, 129, 130, 131, 132, + 262, 263, 225, 226, 227, 228, 229, 230, 231, 298, + 232, 233, 234, 483, 568, 594, 595, 606, 235, 236, + 198, 199, 200, 237, 238, 239, 240, 241, 134, 135, + 136, 137, 138, 139, 140, 141, 442, 443, 444, 445, + 446, 51, 447, 146, 516, 517, 518, 349, 274, 275, + 276, 363, 461, 37, 38, 63, 64, 448, 513, 598, + 71, 244 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1170,187 +1179,183 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 95, 256, 129, 216, 396, 99, 100, 101, 261, 41, - 159, 160, 44, 158, 158, 158, 167, 52, 273, 56, - 452, 168, 40, 292, 40, 294, 177, 75, 590, 109, - 384, 145, 590, 575, 260, 173, 262, 264, 173, 591, - 337, 297, 469, 241, 269, 344, 97, 202, 115, 449, - 450, 337, 274, 48, 391, 87, 305, 90, 298, 55, - 234, 579, 580, 581, 158, 110, 598, 102, 288, 544, - 461, 297, 345, 296, 392, 477, 275, 603, 109, 203, - 393, 350, 297, 323, 76, 282, 98, 283, 298, 118, - 119, 120, 143, 144, 473, 238, 381, 325, 39, 298, - 154, 94, 111, 292, 462, 270, 320, 162, 163, 566, - 276, 401, 511, 402, 110, 398, 488, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, 422, 522, 49, 206, 118, 119, 120, 305, 329, - 351, 240, 204, 257, 388, 389, 114, 387, 463, 40, - 164, 111, 75, 50, 352, 399, 400, 60, 237, 54, - 42, 295, 53, 349, 504, 297, 464, 297, 342, 206, - 118, 119, 120, 65, 121, 338, 336, 207, 208, 209, - 173, 353, 298, 43, 298, 178, 319, 62, 320, 592, - 122, 403, 593, 592, 45, 287, 593, 535, 61, 297, - 382, 260, 69, 179, 46, 448, 444, 445, 271, 54, - 385, 431, 207, 208, 209, 485, 298, 210, 57, 404, - 121, 206, 118, 119, 120, 297, 439, 297, 58, 423, - 386, 574, 70, 449, 450, 47, 122, 123, 124, 125, - 406, 558, 298, 478, 298, 129, 494, 263, 595, 480, - 481, 129, 210, 531, 211, 121, 426, 568, 407, 59, - 297, 79, 429, 392, 207, 208, 209, 483, 212, 479, - 453, 122, 336, 81, 158, 427, 75, 298, 297, 287, - 126, 578, 80, 123, 124, 125, 72, 341, 476, 211, - 82, 297, 347, 530, 83, 298, 533, 305, 297, 88, - 560, 91, 322, 212, 210, 323, 92, 121, 298, 206, - 118, 119, 120, 213, 214, 298, 596, 597, 123, 124, - 125, 215, 495, 122, 331, 96, 126, 332, 424, 67, - 68, 379, 107, 526, 380, 528, 529, 103, 599, 600, - 482, 211, 316, 317, 318, 319, 104, 320, 213, 214, - 106, 487, 207, 208, 209, 212, 215, 247, 248, 491, - 493, 126, 184, 184, 496, 495, 85, 86, 117, 497, - 123, 124, 125, 138, 140, 141, 498, 499, 206, 118, - 119, 120, 206, 118, 119, 120, 145, 571, 513, 561, - 148, 323, 210, 500, 147, 121, 523, -330, 501, 323, - 213, 214, 525, 537, 150, 336, 336, 496, 215, 153, - 155, 122, 497, 126, 549, 554, 156, 550, 323, 498, - 499, 290, 208, 209, 118, 563, 208, 209, 336, 211, - 299, 585, 534, 588, 587, 601, 500, 323, 323, 161, - -330, 501, 168, 212, 185, 186, 187, 188, 189, 190, - 191, 192, 193, 194, 195, 196, 54, 166, 123, 124, - 125, 210, 120, 174, 121, 210, 176, 300, 121, 185, - 186, 187, 188, 189, 190, 181, 182, 183, 184, 200, - 122, 201, 235, 242, 122, 239, 249, 245, 213, 214, - 265, -283, 114, 272, 15, 495, 215, 284, 291, 285, - 286, 126, 291, 281, 293, 321, 327, 324, 328, 330, - 348, 333, 212, 357, 377, 301, 212, 336, 343, 75, - 356, 378, 394, 425, 397, 405, 441, 123, 124, 125, - 446, 123, 124, 125, -284, 454, 302, 496, 471, 447, - 455, 457, 497, 303, 304, 458, 459, 468, 475, 498, - 499, 305, 306, 572, 403, 474, 297, 213, 214, 489, - 490, 213, 214, 508, 486, 215, 500, 492, 510, 215, - 126, 501, 320, 512, 126, 503, 514, 515, 516, 517, - 518, 520, 539, 524, 307, 308, 309, 310, 311, 532, - 519, 312, 313, -332, 314, 315, 316, 317, 318, 319, - 1, 320, 543, 573, 540, 1, 541, 542, 2, 536, - 545, 569, 538, 2, 300, 3, 546, 548, 551, 4, - 3, 555, 552, 553, 4, 559, 562, 567, 570, 577, - 5, 584, 105, 6, 7, 5, 589, 74, 6, 7, - 430, 602, 470, 428, 521, 8, 9, 527, 205, 326, - 8, 9, 557, 565, 442, 564, 10, 440, 339, 11, - 383, 10, 301, 355, 11, 390, 547, 165, 0, 443, - 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, - 0, 12, 0, 395, 0, 13, 12, 0, 0, 0, - 13, 304, 300, 0, 0, 358, 0, 0, 305, 306, - 0, 14, 0, 0, 0, 0, 14, 15, 359, 0, - 0, 0, 15, 360, 361, 362, 363, 364, 0, 365, - 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, - 300, 307, 308, 309, 310, 311, 0, 0, 312, 313, - 301, 314, 315, 316, 317, 318, 319, 0, 320, 0, - 16, 17, 18, 367, 300, 16, 17, 18, 0, 0, - 0, 395, 0, 0, 0, 0, 0, 0, 0, 304, - 0, 368, 0, 369, 370, 0, 305, 306, -333, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, - 0, 0, 0, 372, 0, 373, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 374, 0, 304, 0, 307, - 308, 309, 310, 311, 305, -333, 312, 313, 0, 314, - 315, 316, 317, 318, 319, 0, 320, 0, 0, 0, - 0, 304, 0, 0, 0, 0, 0, 0, 305, 375, - 0, 0, 0, 0, 0, 0, 0, -333, -333, -333, - 310, 311, 0, 0, 312, 313, 0, 314, 315, 316, - 317, 318, 319, 0, 320, 0, 0, 0, 0, 0, - 0, 0, 0, 0, -333, -333, 0, 0, -333, -333, - 0, 314, 315, 316, 317, 318, 319, 0, 320 + 95, 264, 224, 406, 163, 164, 41, 282, 269, 44, + 99, 100, 101, 133, 52, 40, 56, 162, 162, 162, + 172, 40, 301, 463, 303, 173, 394, 602, 602, 182, + 119, 120, 178, 587, 268, 178, 270, 272, 249, 603, + 346, 75, 346, 462, 97, 480, 149, 115, 314, 278, + 210, 45, 87, 39, 90, 183, 283, 472, 242, 458, + 306, 46, 40, 416, 102, 57, 42, 610, 306, 494, + 55, 297, 162, 184, 345, 58, 305, 307, 615, 358, + 284, 417, 211, 43, 98, 307, 391, 459, 460, 147, + 148, 473, 47, 48, 484, 76, 328, 158, 329, 246, + 334, 109, 60, 301, 166, 167, 59, 214, 118, 119, + 120, 411, 94, 412, 285, 522, 499, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 50, 133, 408, 474, 534, 110, 338, 133, + 397, 306, 570, 61, 359, 212, 314, 265, 398, 399, + 215, 216, 217, 475, 306, 53, 248, 75, 307, 409, + 410, 168, 49, 245, 347, 539, 515, 459, 460, 304, + 350, 307, 413, 54, 111, 356, 345, 124, 109, 351, + 214, 118, 119, 120, 62, 178, 69, 556, 604, 604, + 218, 605, 605, 122, 65, 306, 329, 542, 547, 70, + 414, 332, 54, 360, 392, 268, 395, 72, 441, 123, + 454, 455, 307, 280, 110, 79, 496, 361, 306, 81, + 271, 353, 314, 215, 216, 217, 449, 219, 578, 608, + 609, 118, 119, 120, 436, 307, 586, 505, 488, 396, + 439, 220, 433, 80, 362, 306, 114, 306, 354, 82, + 291, 111, 292, 607, 491, 492, 124, 125, 126, 580, + 67, 68, 307, 218, 307, 133, 122, 325, 326, 327, + 328, 133, 329, 543, 464, 121, 306, 83, 572, 88, + 306, 331, 123, 590, 332, 401, 221, 222, 162, 437, + 296, 91, 489, 307, 223, 96, 306, 307, 545, 128, + 219, 214, 118, 119, 120, 402, 487, 340, 611, 612, + 341, 403, 402, 307, 220, 296, 122, 389, 490, 306, + 390, 214, 118, 119, 120, 214, 118, 119, 120, 124, + 125, 126, 123, 92, 434, 502, 307, 504, 207, 538, + 207, 540, 541, 103, 215, 216, 217, 104, 525, 535, + 493, 332, 332, 591, 592, 593, 75, 106, 506, 221, + 222, 498, 85, 86, 215, 216, 217, 223, 299, 216, + 217, 537, 128, 107, 345, 214, 118, 119, 120, 124, + 125, 126, 549, 117, 218, 345, 142, 122, 118, 119, + 120, 144, 561, 145, 583, 562, 573, 149, 566, 575, + 507, 332, 345, 123, 218, 508, 151, 122, 218, 127, + 152, 122, 509, 510, 599, 613, 154, 332, 332, 216, + 217, 219, 128, 123, 255, 256, 308, 123, 159, 511, + 160, 157, 118, -335, 512, 220, 165, 171, 597, 54, + 600, 219, 170, 546, 506, 300, 173, 179, 181, 202, + 124, 125, 126, 201, 203, 220, 206, 208, 218, 220, + 207, 122, 209, 309, 186, 187, 188, 189, 190, 191, + 124, 125, 126, 122, 124, 125, 126, 123, 243, 247, + 221, 222, 253, 250, 257, 114, 507, 273, 223, 123, + 281, 508, 15, 128, 293, 300, 290, 294, 509, 510, + 221, 222, 302, 330, 221, 222, 336, 295, 223, 220, + 337, 310, 223, 128, 357, 511, 333, 128, 339, -335, + 512, 342, 365, 367, 124, 125, 126, -288, 345, 352, + 366, 388, 311, 404, 387, 75, 124, 125, 126, 312, + 313, 407, 415, 435, 451, 457, 456, 314, 315, 465, + 466, 468, 469, 470, 221, 222, 479, 482, 486, 413, + 306, 485, 223, -337, 497, 500, 127, 128, 501, 329, + 1, 503, 519, 521, 531, 526, 523, 524, 2, 128, + 316, 317, 318, 319, 320, 3, 514, 321, 322, 4, + 323, 324, 325, 326, 327, 328, 527, 329, 506, 528, + 5, 532, 1, 6, 7, 529, 530, 536, 551, 544, + 2, 548, 550, -289, 552, 8, 9, 3, 553, 555, + 557, 4, 554, 558, 567, 579, 10, 560, 563, 11, + 564, 565, 5, 571, 581, 6, 7, 574, 589, 582, + 507, 596, 614, 74, 601, 508, 105, 8, 9, 533, + 440, 12, 509, 510, 481, 13, 584, 213, 10, 569, + 309, 11, 438, 335, 393, 279, 277, 452, 450, 511, + 577, 14, 368, 400, 512, 204, 205, 15, 309, 576, + 364, 169, 0, 12, 559, 369, 453, 13, 348, 0, + 370, 371, 372, 373, 374, 0, 375, 0, 0, 0, + 0, 0, 0, 14, 376, 0, 585, 0, 310, 15, + 0, 0, 0, 0, 0, 0, 309, 0, 0, 0, + 16, 17, 18, 495, 0, 0, 310, 0, 0, 405, + 377, 0, 0, 0, 309, 0, 0, 313, 0, 0, + 0, 0, 0, 0, 314, 315, 0, 405, 378, 0, + 379, 380, 16, 17, 18, 313, 0, 0, 0, 0, + 0, 0, 314, 315, -338, 381, 0, 0, 0, 0, + 382, 0, 383, 0, 0, 0, 0, 316, 317, 318, + 319, 320, 384, 0, 321, 322, 0, 323, 324, 325, + 326, 327, 328, 313, 329, 316, 317, 318, 319, 320, + 314, -338, 321, 322, 0, 323, 324, 325, 326, 327, + 328, 313, 329, 0, 0, 0, 385, 0, 314, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 0, 0, -338, -338, -338, 319, 320, 0, 0, + 321, 322, 0, 323, 324, 325, 326, 327, 328, 0, + 329, 0, 0, 0, -338, -338, 0, 0, -338, -338, + 0, 323, 324, 325, 326, 327, 328, 0, 329 }; static const yytype_int16 yycheck[] = { - 54, 170, 81, 145, 293, 57, 58, 59, 177, 2, - 97, 98, 5, 96, 97, 98, 107, 10, 203, 12, - 356, 12, 3, 211, 3, 213, 115, 58, 6, 9, - 3, 84, 6, 51, 176, 112, 178, 179, 115, 17, - 3, 117, 378, 151, 182, 91, 95, 95, 78, 160, - 161, 3, 3, 95, 93, 48, 138, 50, 134, 12, - 147, 164, 165, 166, 147, 45, 591, 60, 210, 503, - 27, 117, 118, 215, 113, 110, 27, 602, 9, 127, - 119, 63, 117, 194, 37, 190, 135, 192, 134, 4, - 5, 6, 85, 86, 383, 149, 281, 239, 26, 134, - 93, 54, 82, 291, 61, 184, 188, 100, 101, 543, - 61, 299, 448, 301, 45, 191, 405, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 468, 95, 3, 4, 5, 6, 138, 247, - 122, 194, 190, 173, 286, 287, 77, 285, 105, 3, - 103, 82, 58, 99, 136, 297, 298, 19, 64, 190, - 3, 215, 81, 55, 127, 117, 123, 117, 257, 3, - 4, 5, 6, 156, 89, 127, 194, 46, 47, 48, - 257, 163, 134, 3, 134, 55, 186, 3, 188, 167, - 105, 102, 170, 167, 71, 113, 170, 486, 60, 117, - 191, 343, 0, 73, 81, 132, 348, 349, 201, 190, - 183, 190, 46, 47, 48, 403, 134, 86, 71, 130, - 89, 3, 4, 5, 6, 117, 334, 117, 81, 320, - 284, 567, 193, 160, 161, 112, 105, 152, 153, 154, - 105, 191, 134, 93, 134, 324, 431, 116, 584, 391, - 392, 330, 86, 110, 123, 89, 324, 546, 123, 112, - 117, 3, 330, 113, 46, 47, 48, 189, 137, 119, - 357, 105, 194, 190, 357, 327, 58, 134, 117, 113, - 195, 570, 192, 152, 153, 154, 114, 256, 127, 123, - 95, 117, 261, 119, 129, 134, 484, 138, 117, 3, - 119, 125, 191, 137, 86, 194, 129, 89, 134, 3, - 4, 5, 6, 182, 183, 134, 168, 169, 152, 153, - 154, 190, 25, 105, 191, 135, 195, 194, 321, 17, - 18, 191, 126, 475, 194, 477, 478, 127, 168, 169, - 394, 123, 183, 184, 185, 186, 194, 188, 182, 183, - 98, 405, 46, 47, 48, 137, 190, 159, 160, 191, - 191, 195, 194, 194, 67, 25, 46, 47, 3, 72, - 152, 153, 154, 4, 123, 3, 79, 80, 3, 4, - 5, 6, 3, 4, 5, 6, 84, 556, 191, 531, - 190, 194, 86, 96, 94, 89, 191, 100, 101, 194, - 182, 183, 191, 191, 3, 194, 194, 67, 190, 46, - 191, 105, 72, 195, 191, 191, 191, 194, 194, 79, - 80, 46, 47, 48, 4, 191, 47, 48, 194, 123, - 17, 573, 486, 575, 191, 191, 96, 194, 194, 3, - 100, 101, 12, 137, 140, 141, 142, 143, 144, 145, - 146, 147, 148, 149, 150, 151, 190, 190, 152, 153, - 154, 86, 6, 116, 89, 86, 128, 54, 89, 140, - 141, 142, 143, 144, 145, 4, 4, 191, 194, 46, - 105, 133, 3, 92, 105, 171, 3, 114, 182, 183, - 120, 194, 77, 3, 114, 25, 190, 190, 123, 190, - 190, 195, 123, 127, 188, 99, 39, 190, 49, 190, - 55, 95, 137, 94, 122, 102, 137, 194, 194, 58, - 190, 190, 190, 3, 191, 190, 3, 152, 153, 154, - 163, 152, 153, 154, 194, 190, 123, 67, 78, 122, - 190, 190, 72, 130, 131, 190, 190, 190, 95, 79, - 80, 138, 139, 83, 102, 191, 117, 182, 183, 105, - 189, 182, 183, 70, 190, 190, 96, 3, 63, 190, - 195, 101, 188, 162, 195, 194, 6, 6, 6, 6, - 6, 105, 100, 190, 171, 172, 173, 174, 175, 191, - 122, 178, 179, 0, 181, 182, 183, 184, 185, 186, - 7, 188, 100, 133, 79, 7, 79, 79, 15, 191, - 3, 6, 191, 15, 54, 22, 128, 191, 191, 26, - 22, 106, 191, 191, 26, 191, 191, 190, 128, 191, - 37, 190, 70, 40, 41, 37, 191, 24, 40, 41, - 332, 117, 380, 328, 466, 52, 53, 476, 144, 240, - 52, 53, 525, 539, 343, 538, 63, 336, 255, 66, - 282, 63, 102, 267, 66, 288, 511, 104, -1, 347, - -1, -1, -1, -1, -1, -1, -1, 117, -1, -1, - -1, 88, -1, 123, -1, 92, 88, -1, -1, -1, - 92, 131, 54, -1, -1, 11, -1, -1, 138, 139, - -1, 108, -1, -1, -1, -1, 108, 114, 24, -1, - -1, -1, 114, 29, 30, 31, 32, 33, -1, 35, - -1, -1, -1, -1, -1, -1, -1, 43, -1, -1, - 54, 171, 172, 173, 174, 175, -1, -1, 178, 179, - 102, 181, 182, 183, 184, 185, 186, -1, 188, -1, - 157, 158, 159, 69, 54, 157, 158, 159, -1, -1, - -1, 123, -1, -1, -1, -1, -1, -1, -1, 131, - -1, 87, -1, 89, 90, -1, 138, 139, 102, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 104, -1, - -1, -1, -1, 109, -1, 111, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 121, -1, 131, -1, 171, - 172, 173, 174, 175, 138, 139, 178, 179, -1, 181, - 182, 183, 184, 185, 186, -1, 188, -1, -1, -1, - -1, 131, -1, -1, -1, -1, -1, -1, 138, 155, - -1, -1, -1, -1, -1, -1, -1, 171, 172, 173, - 174, 175, -1, -1, 178, 179, -1, 181, 182, 183, - 184, 185, 186, -1, 188, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 174, 175, -1, -1, 178, 179, + 54, 175, 149, 302, 97, 98, 2, 211, 182, 5, + 57, 58, 59, 81, 10, 3, 12, 96, 97, 98, + 107, 3, 219, 366, 221, 12, 3, 6, 6, 115, + 5, 6, 112, 51, 181, 115, 183, 184, 155, 17, + 3, 58, 3, 365, 95, 388, 84, 78, 138, 203, + 95, 71, 48, 26, 50, 55, 3, 27, 151, 132, + 117, 81, 3, 105, 60, 71, 3, 603, 117, 189, + 12, 218, 151, 73, 194, 81, 223, 134, 614, 55, + 27, 123, 127, 3, 135, 134, 290, 160, 161, 85, + 86, 61, 112, 95, 393, 37, 186, 93, 188, 153, + 247, 9, 19, 300, 100, 101, 112, 3, 4, 5, + 6, 308, 54, 310, 61, 458, 415, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 99, 201, 191, 105, 479, 45, 255, 207, + 294, 117, 191, 60, 63, 190, 138, 178, 295, 296, + 46, 47, 48, 123, 117, 81, 194, 58, 134, 306, + 307, 103, 95, 64, 127, 487, 127, 160, 161, 223, + 264, 134, 102, 190, 82, 269, 194, 152, 9, 265, + 3, 4, 5, 6, 3, 265, 0, 514, 167, 167, + 86, 170, 170, 89, 156, 117, 188, 119, 497, 193, + 130, 194, 190, 122, 191, 352, 183, 114, 190, 105, + 357, 358, 134, 209, 45, 3, 413, 136, 117, 190, + 116, 91, 138, 46, 47, 48, 343, 123, 555, 168, + 169, 4, 5, 6, 333, 134, 579, 441, 110, 293, + 339, 137, 329, 192, 163, 117, 77, 117, 118, 95, + 190, 82, 192, 596, 401, 402, 152, 153, 154, 558, + 17, 18, 134, 86, 134, 333, 89, 183, 184, 185, + 186, 339, 188, 110, 367, 48, 117, 129, 119, 3, + 117, 191, 105, 582, 194, 93, 182, 183, 367, 336, + 113, 125, 93, 134, 190, 135, 117, 134, 495, 195, + 123, 3, 4, 5, 6, 113, 127, 191, 168, 169, + 194, 119, 113, 134, 137, 113, 89, 191, 119, 117, + 194, 3, 4, 5, 6, 3, 4, 5, 6, 152, + 153, 154, 105, 129, 330, 191, 134, 191, 194, 486, + 194, 488, 489, 127, 46, 47, 48, 194, 191, 191, + 404, 194, 194, 164, 165, 166, 58, 98, 25, 182, + 183, 415, 46, 47, 46, 47, 48, 190, 46, 47, + 48, 191, 195, 126, 194, 3, 4, 5, 6, 152, + 153, 154, 191, 3, 86, 194, 4, 89, 4, 5, + 6, 123, 191, 3, 568, 194, 543, 84, 191, 191, + 67, 194, 194, 105, 86, 72, 94, 89, 86, 182, + 190, 89, 79, 80, 191, 191, 3, 194, 194, 47, + 48, 123, 195, 105, 163, 164, 17, 105, 191, 96, + 191, 46, 4, 100, 101, 137, 3, 6, 585, 190, + 587, 123, 190, 497, 25, 123, 12, 116, 128, 4, + 152, 153, 154, 190, 4, 137, 191, 46, 86, 137, + 194, 89, 133, 54, 140, 141, 142, 143, 144, 145, + 152, 153, 154, 89, 152, 153, 154, 105, 3, 171, + 182, 183, 114, 92, 3, 77, 67, 120, 190, 105, + 3, 72, 114, 195, 190, 123, 127, 190, 79, 80, + 182, 183, 188, 99, 182, 183, 39, 190, 190, 137, + 49, 102, 190, 195, 55, 96, 190, 195, 190, 100, + 101, 95, 127, 94, 152, 153, 154, 194, 194, 194, + 190, 190, 123, 190, 122, 58, 152, 153, 154, 130, + 131, 191, 190, 3, 3, 122, 163, 138, 139, 190, + 190, 190, 190, 190, 182, 183, 190, 78, 95, 102, + 117, 191, 190, 0, 190, 105, 182, 195, 189, 188, + 7, 3, 70, 63, 122, 6, 162, 191, 15, 195, + 171, 172, 173, 174, 175, 22, 194, 178, 179, 26, + 181, 182, 183, 184, 185, 186, 6, 188, 25, 6, + 37, 105, 7, 40, 41, 6, 6, 190, 100, 191, + 15, 191, 191, 194, 79, 52, 53, 22, 79, 100, + 3, 26, 79, 128, 106, 190, 63, 191, 191, 66, + 191, 191, 37, 191, 6, 40, 41, 191, 191, 128, + 67, 190, 117, 24, 191, 72, 70, 52, 53, 477, + 341, 88, 79, 80, 390, 92, 83, 148, 63, 537, + 54, 66, 337, 248, 291, 207, 201, 352, 345, 96, + 551, 108, 11, 297, 101, 127, 127, 114, 54, 550, + 275, 104, -1, 88, 522, 24, 356, 92, 263, -1, + 29, 30, 31, 32, 33, -1, 35, -1, -1, -1, + -1, -1, -1, 108, 43, -1, 133, -1, 102, 114, + -1, -1, -1, -1, -1, -1, 54, -1, -1, -1, + 157, 158, 159, 117, -1, -1, 102, -1, -1, 123, + 69, -1, -1, -1, 54, -1, -1, 131, -1, -1, + -1, -1, -1, -1, 138, 139, -1, 123, 87, -1, + 89, 90, 157, 158, 159, 131, -1, -1, -1, -1, + -1, -1, 138, 139, 102, 104, -1, -1, -1, -1, + 109, -1, 111, -1, -1, -1, -1, 171, 172, 173, + 174, 175, 121, -1, 178, 179, -1, 181, 182, 183, + 184, 185, 186, 131, 188, 171, 172, 173, 174, 175, + 138, 139, 178, 179, -1, 181, 182, 183, 184, 185, + 186, 131, 188, -1, -1, -1, 155, -1, 138, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, -1, -1, 171, 172, 173, 174, 175, -1, -1, + 178, 179, -1, 181, 182, 183, 184, 185, 186, -1, + 188, -1, -1, -1, 174, 175, -1, -1, 178, 179, -1, 181, 182, 183, 184, 185, 186, -1, 188 }; @@ -1361,64 +1366,65 @@ static const yytype_int16 yystos[] = 0, 7, 15, 22, 26, 37, 40, 41, 52, 53, 63, 66, 88, 92, 108, 114, 157, 158, 159, 197, 198, 199, 200, 204, 206, 208, 209, 213, 214, 215, - 227, 229, 232, 233, 234, 236, 239, 317, 318, 26, - 3, 306, 3, 3, 306, 71, 81, 112, 95, 95, - 99, 305, 306, 81, 190, 242, 306, 71, 81, 112, - 19, 60, 3, 319, 320, 156, 205, 205, 205, 0, - 193, 324, 114, 201, 201, 58, 242, 243, 247, 3, - 192, 190, 95, 129, 216, 216, 216, 306, 3, 210, - 306, 125, 129, 228, 242, 243, 135, 95, 135, 228, - 228, 228, 306, 127, 194, 199, 98, 126, 259, 9, + 227, 229, 232, 233, 234, 236, 239, 319, 320, 26, + 3, 308, 3, 3, 308, 71, 81, 112, 95, 95, + 99, 307, 308, 81, 190, 242, 308, 71, 81, 112, + 19, 60, 3, 321, 322, 156, 205, 205, 205, 0, + 193, 326, 114, 201, 201, 58, 242, 243, 247, 3, + 192, 190, 95, 129, 216, 216, 216, 308, 3, 210, + 308, 125, 129, 228, 242, 243, 135, 95, 135, 228, + 228, 228, 308, 127, 194, 199, 98, 126, 259, 9, 45, 82, 244, 245, 77, 244, 255, 3, 4, 5, - 6, 89, 105, 152, 153, 154, 195, 262, 263, 291, - 292, 293, 294, 295, 296, 297, 298, 299, 4, 207, - 123, 3, 307, 306, 306, 84, 252, 94, 190, 235, - 3, 237, 238, 46, 306, 191, 191, 211, 292, 211, - 211, 3, 306, 306, 242, 320, 190, 295, 12, 248, - 240, 241, 242, 247, 116, 246, 128, 240, 55, 73, - 260, 4, 4, 191, 194, 140, 141, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 151, 284, 285, 286, - 46, 133, 95, 127, 190, 235, 3, 46, 47, 48, - 86, 123, 137, 182, 183, 190, 265, 266, 267, 268, - 269, 270, 271, 272, 274, 275, 276, 282, 283, 287, - 288, 289, 290, 291, 211, 3, 325, 64, 243, 171, - 194, 252, 92, 230, 231, 114, 212, 212, 212, 3, - 202, 203, 249, 261, 264, 265, 255, 244, 256, 257, - 265, 255, 265, 116, 265, 120, 312, 313, 314, 284, - 291, 306, 3, 239, 3, 27, 61, 217, 218, 219, - 226, 127, 190, 192, 190, 190, 190, 113, 265, 273, - 46, 123, 266, 188, 266, 243, 265, 117, 134, 17, - 54, 102, 123, 130, 131, 138, 139, 171, 172, 173, - 174, 175, 178, 179, 181, 182, 183, 184, 185, 186, - 188, 99, 191, 194, 190, 265, 238, 39, 49, 252, - 190, 191, 194, 95, 250, 251, 194, 3, 127, 310, - 311, 260, 240, 194, 91, 118, 258, 260, 55, 55, - 63, 122, 136, 163, 315, 314, 190, 94, 11, 24, + 6, 48, 89, 105, 152, 153, 154, 182, 195, 262, + 263, 264, 265, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 4, 207, 123, 3, 309, 308, 308, 84, + 252, 94, 190, 235, 3, 237, 238, 46, 308, 191, + 191, 211, 294, 211, 211, 3, 308, 308, 242, 322, + 190, 6, 297, 12, 248, 240, 241, 242, 247, 116, + 246, 128, 240, 55, 73, 260, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 286, 287, + 288, 190, 4, 4, 296, 300, 191, 194, 46, 133, + 95, 127, 190, 235, 3, 46, 47, 48, 86, 123, + 137, 182, 183, 190, 267, 268, 269, 270, 271, 272, + 273, 274, 276, 277, 278, 284, 285, 289, 290, 291, + 292, 293, 211, 3, 327, 64, 243, 171, 194, 252, + 92, 230, 231, 114, 212, 212, 212, 3, 202, 203, + 249, 261, 266, 267, 255, 244, 256, 257, 267, 255, + 267, 116, 267, 120, 314, 315, 316, 265, 286, 264, + 308, 3, 239, 3, 27, 61, 217, 218, 219, 226, + 127, 190, 192, 190, 190, 190, 113, 267, 275, 46, + 123, 268, 188, 268, 243, 267, 117, 134, 17, 54, + 102, 123, 130, 131, 138, 139, 171, 172, 173, 174, + 175, 178, 179, 181, 182, 183, 184, 185, 186, 188, + 99, 191, 194, 190, 267, 238, 39, 49, 252, 190, + 191, 194, 95, 250, 251, 194, 3, 127, 312, 313, + 260, 240, 194, 91, 118, 258, 260, 55, 55, 63, + 122, 136, 163, 317, 316, 127, 190, 94, 11, 24, 29, 30, 31, 32, 33, 35, 43, 69, 87, 89, 90, 104, 109, 111, 121, 155, 220, 122, 190, 191, - 194, 239, 191, 248, 3, 183, 243, 284, 265, 265, - 273, 93, 113, 119, 190, 123, 261, 191, 191, 265, - 265, 266, 266, 102, 130, 190, 105, 123, 266, 266, - 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, - 266, 266, 266, 295, 306, 3, 263, 228, 210, 263, - 203, 190, 300, 301, 302, 303, 304, 306, 321, 252, - 264, 3, 257, 312, 265, 265, 163, 122, 132, 160, - 161, 316, 325, 211, 190, 190, 222, 190, 190, 190, - 221, 27, 61, 105, 123, 223, 224, 225, 190, 325, - 218, 78, 277, 261, 191, 95, 127, 110, 93, 119, - 265, 265, 243, 189, 117, 266, 190, 243, 261, 105, - 189, 191, 3, 191, 239, 25, 67, 72, 79, 80, - 96, 101, 322, 194, 127, 308, 309, 310, 70, 253, - 63, 325, 162, 191, 6, 6, 6, 6, 6, 122, - 105, 225, 325, 191, 190, 191, 265, 220, 265, 265, - 119, 110, 191, 266, 243, 261, 191, 191, 191, 100, - 79, 79, 79, 100, 301, 3, 128, 316, 191, 191, - 194, 191, 191, 191, 191, 106, 278, 277, 191, 191, - 119, 265, 191, 191, 309, 302, 301, 190, 261, 6, - 128, 255, 83, 133, 325, 51, 254, 191, 261, 164, - 165, 166, 279, 280, 190, 265, 323, 191, 265, 191, - 6, 17, 167, 170, 281, 325, 168, 169, 281, 168, - 169, 191, 117, 281 + 194, 239, 191, 248, 3, 183, 243, 286, 267, 267, + 275, 93, 113, 119, 190, 123, 261, 191, 191, 267, + 267, 268, 268, 102, 130, 190, 105, 123, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 297, 308, 3, 263, 228, 210, 263, + 203, 190, 302, 303, 304, 305, 306, 308, 323, 252, + 266, 3, 257, 314, 267, 267, 163, 122, 132, 160, + 161, 318, 220, 327, 211, 190, 190, 222, 190, 190, + 190, 221, 27, 61, 105, 123, 223, 224, 225, 190, + 327, 218, 78, 279, 261, 191, 95, 127, 110, 93, + 119, 267, 267, 243, 189, 117, 268, 190, 243, 261, + 105, 189, 191, 3, 191, 239, 25, 67, 72, 79, + 80, 96, 101, 324, 194, 127, 310, 311, 312, 70, + 253, 63, 327, 162, 191, 191, 6, 6, 6, 6, + 6, 122, 105, 225, 327, 191, 190, 191, 267, 220, + 267, 267, 119, 110, 191, 268, 243, 261, 191, 191, + 191, 100, 79, 79, 79, 100, 303, 3, 128, 318, + 191, 191, 194, 191, 191, 191, 191, 106, 280, 279, + 191, 191, 119, 267, 191, 191, 311, 304, 303, 190, + 261, 6, 128, 255, 83, 133, 327, 51, 254, 191, + 261, 164, 165, 166, 281, 282, 190, 267, 325, 191, + 267, 191, 6, 17, 167, 170, 283, 327, 168, 169, + 283, 168, 169, 191, 117, 283 }; /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ @@ -1440,24 +1446,25 @@ static const yytype_int16 yyr1[] = 249, 250, 250, 251, 252, 252, 253, 253, 254, 254, 255, 255, 256, 256, 257, 258, 258, 258, 259, 259, 260, 260, 260, 260, 260, 260, 261, 261, 262, 262, - 263, 263, 264, 265, 265, 265, 265, 265, 266, 266, - 266, 266, 266, 266, 266, 266, 266, 266, 266, 267, - 267, 268, 268, 268, 268, 268, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 270, 270, 271, - 271, 271, 271, 272, 272, 272, 272, 273, 273, 274, - 274, 275, 275, 275, 275, 275, 275, 275, 276, 276, - 277, 277, 278, 278, 279, 279, 279, 280, 280, 280, - 281, 281, 281, 281, 281, 282, 283, 284, 284, 284, - 284, 284, 284, 285, 285, 285, 285, 285, 285, 286, - 286, 287, 288, 289, 290, 290, 290, 290, 291, 291, - 291, 291, 291, 291, 291, 292, 293, 293, 294, 294, - 295, 296, 297, 298, 298, 298, 299, 300, 300, 301, - 301, 302, 302, 303, 303, 304, 305, 306, 306, 307, - 307, 308, 308, 309, 309, 310, 310, 311, 311, 312, - 312, 313, 313, 314, 314, 315, 315, 315, 315, 316, - 316, 316, 317, 317, 318, 319, 319, 320, 321, 321, - 321, 322, 322, 322, 322, 322, 322, 322, 322, 322, - 322, 323, 324, 324, 325, 325 + 263, 263, 264, 264, 265, 265, 265, 266, 267, 267, + 267, 267, 267, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 269, 269, 270, 270, 270, 270, + 270, 271, 271, 271, 271, 271, 271, 271, 271, 271, + 271, 271, 272, 272, 273, 273, 273, 273, 274, 274, + 274, 274, 275, 275, 276, 276, 277, 277, 277, 277, + 277, 277, 277, 278, 278, 279, 279, 280, 280, 281, + 281, 281, 282, 282, 282, 283, 283, 283, 283, 283, + 284, 285, 286, 286, 286, 286, 286, 286, 287, 287, + 287, 287, 287, 287, 288, 288, 289, 290, 291, 292, + 292, 292, 292, 293, 293, 293, 293, 293, 293, 293, + 294, 295, 295, 296, 296, 297, 298, 299, 300, 300, + 300, 301, 302, 302, 303, 303, 304, 304, 305, 305, + 306, 307, 308, 308, 309, 309, 310, 310, 311, 311, + 312, 312, 313, 313, 314, 314, 315, 315, 316, 316, + 317, 317, 317, 317, 318, 318, 318, 319, 319, 320, + 321, 321, 322, 323, 323, 323, 324, 324, 324, 324, + 324, 324, 324, 324, 324, 324, 325, 326, 326, 327, + 327 }; /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */ @@ -1479,24 +1486,25 @@ static const yytype_int8 yyr2[] = 1, 1, 0, 2, 2, 0, 4, 0, 2, 0, 3, 0, 1, 3, 2, 1, 1, 0, 2, 0, 2, 2, 4, 2, 4, 0, 1, 3, 1, 0, - 1, 3, 2, 1, 1, 1, 1, 1, 3, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, - 1, 2, 2, 2, 3, 4, 1, 3, 3, 3, - 3, 3, 3, 3, 4, 3, 3, 3, 3, 5, - 6, 5, 6, 4, 6, 3, 5, 4, 5, 4, - 5, 3, 3, 3, 3, 3, 3, 3, 4, 6, - 6, 0, 3, 0, 2, 5, 0, 1, 1, 1, - 2, 2, 2, 2, 1, 6, 6, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 5, 1, 3, 1, 3, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 3, 2, 1, 1, 3, 1, - 1, 1, 4, 1, 3, 2, 1, 1, 3, 1, - 0, 1, 5, 1, 0, 2, 1, 1, 0, 1, - 0, 1, 2, 3, 5, 1, 3, 1, 2, 2, - 1, 0, 1, 0, 2, 1, 3, 3, 4, 6, - 8, 1, 2, 1, 2, 1, 2, 1, 1, 1, - 0, 1, 1, 0, 1, 3 + 1, 3, 1, 6, 1, 2, 2, 2, 1, 1, + 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 3, 1, 1, 2, 2, 2, 3, + 4, 1, 3, 3, 3, 3, 3, 3, 3, 4, + 3, 3, 3, 3, 5, 6, 5, 6, 4, 6, + 3, 5, 4, 5, 4, 5, 3, 3, 3, 3, + 3, 3, 3, 4, 6, 6, 0, 3, 0, 2, + 5, 0, 1, 1, 1, 2, 2, 2, 2, 1, + 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 4, 4, 5, 1, + 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, + 2, 1, 1, 3, 1, 1, 1, 4, 1, 3, + 2, 1, 1, 3, 1, 0, 1, 5, 1, 0, + 2, 1, 1, 0, 1, 0, 1, 2, 3, 5, + 1, 3, 1, 2, 2, 1, 0, 1, 0, 2, + 1, 3, 3, 4, 6, 8, 1, 2, 1, 2, + 1, 2, 1, 1, 1, 0, 1, 1, 0, 1, + 3 }; @@ -2062,25 +2070,25 @@ yydestruct (const char *yymsg, case YYSYMBOL_IDENTIFIER: /* IDENTIFIER */ #line 184 "bison_parser.y" { free( (((*yyvaluep).sval)) ); } -#line 2067 "bison_parser.cpp" +#line 2074 "bison_parser.cpp" break; case YYSYMBOL_STRING: /* STRING */ #line 184 "bison_parser.y" { free( (((*yyvaluep).sval)) ); } -#line 2073 "bison_parser.cpp" +#line 2080 "bison_parser.cpp" break; case YYSYMBOL_FLOATVAL: /* FLOATVAL */ #line 171 "bison_parser.y" { } -#line 2079 "bison_parser.cpp" +#line 2086 "bison_parser.cpp" break; case YYSYMBOL_INTVAL: /* INTVAL */ #line 171 "bison_parser.y" { } -#line 2085 "bison_parser.cpp" +#line 2092 "bison_parser.cpp" break; case YYSYMBOL_statement_list: /* statement_list */ @@ -2093,19 +2101,19 @@ yydestruct (const char *yymsg, } delete (((*yyvaluep).stmt_vec)); } -#line 2098 "bison_parser.cpp" +#line 2105 "bison_parser.cpp" break; case YYSYMBOL_statement: /* statement */ #line 193 "bison_parser.y" { delete (((*yyvaluep).statement)); } -#line 2104 "bison_parser.cpp" +#line 2111 "bison_parser.cpp" break; case YYSYMBOL_preparable_statement: /* preparable_statement */ #line 193 "bison_parser.y" { delete (((*yyvaluep).statement)); } -#line 2110 "bison_parser.cpp" +#line 2117 "bison_parser.cpp" break; case YYSYMBOL_opt_hints: /* opt_hints */ @@ -2118,7 +2126,7 @@ yydestruct (const char *yymsg, } delete (((*yyvaluep).expr_vec)); } -#line 2123 "bison_parser.cpp" +#line 2130 "bison_parser.cpp" break; case YYSYMBOL_hint_list: /* hint_list */ @@ -2131,85 +2139,85 @@ yydestruct (const char *yymsg, } delete (((*yyvaluep).expr_vec)); } -#line 2136 "bison_parser.cpp" +#line 2143 "bison_parser.cpp" break; case YYSYMBOL_hint: /* hint */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2142 "bison_parser.cpp" +#line 2149 "bison_parser.cpp" break; case YYSYMBOL_transaction_statement: /* transaction_statement */ #line 193 "bison_parser.y" { delete (((*yyvaluep).transaction_stmt)); } -#line 2148 "bison_parser.cpp" +#line 2155 "bison_parser.cpp" break; case YYSYMBOL_prepare_statement: /* prepare_statement */ #line 193 "bison_parser.y" { delete (((*yyvaluep).prep_stmt)); } -#line 2154 "bison_parser.cpp" +#line 2161 "bison_parser.cpp" break; case YYSYMBOL_prepare_target_query: /* prepare_target_query */ #line 184 "bison_parser.y" { free( (((*yyvaluep).sval)) ); } -#line 2160 "bison_parser.cpp" +#line 2167 "bison_parser.cpp" break; case YYSYMBOL_execute_statement: /* execute_statement */ #line 193 "bison_parser.y" { delete (((*yyvaluep).exec_stmt)); } -#line 2166 "bison_parser.cpp" +#line 2173 "bison_parser.cpp" break; case YYSYMBOL_import_statement: /* import_statement */ #line 193 "bison_parser.y" { delete (((*yyvaluep).import_stmt)); } -#line 2172 "bison_parser.cpp" +#line 2179 "bison_parser.cpp" break; case YYSYMBOL_file_type: /* file_type */ #line 171 "bison_parser.y" { } -#line 2178 "bison_parser.cpp" +#line 2185 "bison_parser.cpp" break; case YYSYMBOL_file_path: /* file_path */ #line 184 "bison_parser.y" { free( (((*yyvaluep).sval)) ); } -#line 2184 "bison_parser.cpp" +#line 2191 "bison_parser.cpp" break; case YYSYMBOL_opt_file_type: /* opt_file_type */ #line 171 "bison_parser.y" { } -#line 2190 "bison_parser.cpp" +#line 2197 "bison_parser.cpp" break; case YYSYMBOL_export_statement: /* export_statement */ #line 193 "bison_parser.y" { delete (((*yyvaluep).export_stmt)); } -#line 2196 "bison_parser.cpp" +#line 2203 "bison_parser.cpp" break; case YYSYMBOL_show_statement: /* show_statement */ #line 193 "bison_parser.y" { delete (((*yyvaluep).show_stmt)); } -#line 2202 "bison_parser.cpp" +#line 2209 "bison_parser.cpp" break; case YYSYMBOL_create_statement: /* create_statement */ #line 193 "bison_parser.y" { delete (((*yyvaluep).create_stmt)); } -#line 2208 "bison_parser.cpp" +#line 2215 "bison_parser.cpp" break; case YYSYMBOL_opt_not_exists: /* opt_not_exists */ #line 171 "bison_parser.y" { } -#line 2214 "bison_parser.cpp" +#line 2221 "bison_parser.cpp" break; case YYSYMBOL_table_elem_commalist: /* table_elem_commalist */ @@ -2222,109 +2230,109 @@ yydestruct (const char *yymsg, } delete (((*yyvaluep).table_element_vec)); } -#line 2227 "bison_parser.cpp" +#line 2234 "bison_parser.cpp" break; case YYSYMBOL_table_elem: /* table_elem */ #line 193 "bison_parser.y" { delete (((*yyvaluep).table_element_t)); } -#line 2233 "bison_parser.cpp" +#line 2240 "bison_parser.cpp" break; case YYSYMBOL_column_def: /* column_def */ #line 193 "bison_parser.y" { delete (((*yyvaluep).column_t)); } -#line 2239 "bison_parser.cpp" +#line 2246 "bison_parser.cpp" break; case YYSYMBOL_column_type: /* column_type */ #line 171 "bison_parser.y" { } -#line 2245 "bison_parser.cpp" +#line 2252 "bison_parser.cpp" break; case YYSYMBOL_opt_time_precision: /* opt_time_precision */ #line 171 "bison_parser.y" { } -#line 2251 "bison_parser.cpp" +#line 2258 "bison_parser.cpp" break; case YYSYMBOL_opt_decimal_specification: /* opt_decimal_specification */ #line 193 "bison_parser.y" { delete (((*yyvaluep).ival_pair)); } -#line 2257 "bison_parser.cpp" +#line 2264 "bison_parser.cpp" break; case YYSYMBOL_opt_column_constraints: /* opt_column_constraints */ #line 171 "bison_parser.y" { } -#line 2263 "bison_parser.cpp" +#line 2270 "bison_parser.cpp" break; case YYSYMBOL_column_constraint_set: /* column_constraint_set */ #line 171 "bison_parser.y" { } -#line 2269 "bison_parser.cpp" +#line 2276 "bison_parser.cpp" break; case YYSYMBOL_column_constraint: /* column_constraint */ #line 171 "bison_parser.y" { } -#line 2275 "bison_parser.cpp" +#line 2282 "bison_parser.cpp" break; case YYSYMBOL_table_constraint: /* table_constraint */ #line 193 "bison_parser.y" { delete (((*yyvaluep).table_constraint_t)); } -#line 2281 "bison_parser.cpp" +#line 2288 "bison_parser.cpp" break; case YYSYMBOL_drop_statement: /* drop_statement */ #line 193 "bison_parser.y" { delete (((*yyvaluep).drop_stmt)); } -#line 2287 "bison_parser.cpp" +#line 2294 "bison_parser.cpp" break; case YYSYMBOL_opt_exists: /* opt_exists */ #line 171 "bison_parser.y" { } -#line 2293 "bison_parser.cpp" +#line 2300 "bison_parser.cpp" break; case YYSYMBOL_alter_statement: /* alter_statement */ #line 193 "bison_parser.y" { delete (((*yyvaluep).alter_stmt)); } -#line 2299 "bison_parser.cpp" +#line 2306 "bison_parser.cpp" break; case YYSYMBOL_alter_action: /* alter_action */ #line 193 "bison_parser.y" { delete (((*yyvaluep).alter_action_t)); } -#line 2305 "bison_parser.cpp" +#line 2312 "bison_parser.cpp" break; case YYSYMBOL_drop_action: /* drop_action */ #line 193 "bison_parser.y" { delete (((*yyvaluep).drop_action_t)); } -#line 2311 "bison_parser.cpp" +#line 2318 "bison_parser.cpp" break; case YYSYMBOL_delete_statement: /* delete_statement */ #line 193 "bison_parser.y" { delete (((*yyvaluep).delete_stmt)); } -#line 2317 "bison_parser.cpp" +#line 2324 "bison_parser.cpp" break; case YYSYMBOL_truncate_statement: /* truncate_statement */ #line 193 "bison_parser.y" { delete (((*yyvaluep).delete_stmt)); } -#line 2323 "bison_parser.cpp" +#line 2330 "bison_parser.cpp" break; case YYSYMBOL_insert_statement: /* insert_statement */ #line 193 "bison_parser.y" { delete (((*yyvaluep).insert_stmt)); } -#line 2329 "bison_parser.cpp" +#line 2336 "bison_parser.cpp" break; case YYSYMBOL_opt_column_list: /* opt_column_list */ @@ -2337,13 +2345,13 @@ yydestruct (const char *yymsg, } delete (((*yyvaluep).str_vec)); } -#line 2342 "bison_parser.cpp" +#line 2349 "bison_parser.cpp" break; case YYSYMBOL_update_statement: /* update_statement */ #line 193 "bison_parser.y" { delete (((*yyvaluep).update_stmt)); } -#line 2348 "bison_parser.cpp" +#line 2355 "bison_parser.cpp" break; case YYSYMBOL_update_clause_commalist: /* update_clause_commalist */ @@ -2356,73 +2364,73 @@ yydestruct (const char *yymsg, } delete (((*yyvaluep).update_vec)); } -#line 2361 "bison_parser.cpp" +#line 2368 "bison_parser.cpp" break; case YYSYMBOL_update_clause: /* update_clause */ #line 193 "bison_parser.y" { delete (((*yyvaluep).update_t)); } -#line 2367 "bison_parser.cpp" +#line 2374 "bison_parser.cpp" break; case YYSYMBOL_select_statement: /* select_statement */ #line 193 "bison_parser.y" { delete (((*yyvaluep).select_stmt)); } -#line 2373 "bison_parser.cpp" +#line 2380 "bison_parser.cpp" break; case YYSYMBOL_select_within_set_operation: /* select_within_set_operation */ #line 193 "bison_parser.y" { delete (((*yyvaluep).select_stmt)); } -#line 2379 "bison_parser.cpp" +#line 2386 "bison_parser.cpp" break; case YYSYMBOL_select_within_set_operation_no_parentheses: /* select_within_set_operation_no_parentheses */ #line 193 "bison_parser.y" { delete (((*yyvaluep).select_stmt)); } -#line 2385 "bison_parser.cpp" +#line 2392 "bison_parser.cpp" break; case YYSYMBOL_select_with_paren: /* select_with_paren */ #line 193 "bison_parser.y" { delete (((*yyvaluep).select_stmt)); } -#line 2391 "bison_parser.cpp" +#line 2398 "bison_parser.cpp" break; case YYSYMBOL_select_no_paren: /* select_no_paren */ #line 193 "bison_parser.y" { delete (((*yyvaluep).select_stmt)); } -#line 2397 "bison_parser.cpp" +#line 2404 "bison_parser.cpp" break; case YYSYMBOL_set_operator: /* set_operator */ #line 193 "bison_parser.y" { delete (((*yyvaluep).set_operator_t)); } -#line 2403 "bison_parser.cpp" +#line 2410 "bison_parser.cpp" break; case YYSYMBOL_set_type: /* set_type */ #line 193 "bison_parser.y" { delete (((*yyvaluep).set_operator_t)); } -#line 2409 "bison_parser.cpp" +#line 2416 "bison_parser.cpp" break; case YYSYMBOL_opt_all: /* opt_all */ #line 171 "bison_parser.y" { } -#line 2415 "bison_parser.cpp" +#line 2422 "bison_parser.cpp" break; case YYSYMBOL_select_clause: /* select_clause */ #line 193 "bison_parser.y" { delete (((*yyvaluep).select_stmt)); } -#line 2421 "bison_parser.cpp" +#line 2428 "bison_parser.cpp" break; case YYSYMBOL_opt_distinct: /* opt_distinct */ #line 171 "bison_parser.y" { } -#line 2427 "bison_parser.cpp" +#line 2434 "bison_parser.cpp" break; case YYSYMBOL_select_list: /* select_list */ @@ -2435,37 +2443,37 @@ yydestruct (const char *yymsg, } delete (((*yyvaluep).expr_vec)); } -#line 2440 "bison_parser.cpp" +#line 2447 "bison_parser.cpp" break; case YYSYMBOL_opt_from_clause: /* opt_from_clause */ #line 193 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2446 "bison_parser.cpp" +#line 2453 "bison_parser.cpp" break; case YYSYMBOL_from_clause: /* from_clause */ #line 193 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2452 "bison_parser.cpp" +#line 2459 "bison_parser.cpp" break; case YYSYMBOL_opt_where: /* opt_where */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2458 "bison_parser.cpp" +#line 2465 "bison_parser.cpp" break; case YYSYMBOL_opt_group: /* opt_group */ #line 193 "bison_parser.y" { delete (((*yyvaluep).group_t)); } -#line 2464 "bison_parser.cpp" +#line 2471 "bison_parser.cpp" break; case YYSYMBOL_opt_having: /* opt_having */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2470 "bison_parser.cpp" +#line 2477 "bison_parser.cpp" break; case YYSYMBOL_opt_order: /* opt_order */ @@ -2478,7 +2486,7 @@ yydestruct (const char *yymsg, } delete (((*yyvaluep).order_vec)); } -#line 2483 "bison_parser.cpp" +#line 2490 "bison_parser.cpp" break; case YYSYMBOL_order_list: /* order_list */ @@ -2491,31 +2499,31 @@ yydestruct (const char *yymsg, } delete (((*yyvaluep).order_vec)); } -#line 2496 "bison_parser.cpp" +#line 2503 "bison_parser.cpp" break; case YYSYMBOL_order_desc: /* order_desc */ #line 193 "bison_parser.y" { delete (((*yyvaluep).order)); } -#line 2502 "bison_parser.cpp" +#line 2509 "bison_parser.cpp" break; case YYSYMBOL_opt_order_type: /* opt_order_type */ #line 171 "bison_parser.y" { } -#line 2508 "bison_parser.cpp" +#line 2515 "bison_parser.cpp" break; case YYSYMBOL_opt_top: /* opt_top */ #line 193 "bison_parser.y" { delete (((*yyvaluep).limit)); } -#line 2514 "bison_parser.cpp" +#line 2521 "bison_parser.cpp" break; case YYSYMBOL_opt_limit: /* opt_limit */ #line 193 "bison_parser.y" { delete (((*yyvaluep).limit)); } -#line 2520 "bison_parser.cpp" +#line 2527 "bison_parser.cpp" break; case YYSYMBOL_expr_list: /* expr_list */ @@ -2528,10 +2536,10 @@ yydestruct (const char *yymsg, } delete (((*yyvaluep).expr_vec)); } -#line 2533 "bison_parser.cpp" +#line 2540 "bison_parser.cpp" break; - case YYSYMBOL_opt_literal_list: /* opt_literal_list */ + case YYSYMBOL_opt_extended_literal_list: /* opt_extended_literal_list */ #line 185 "bison_parser.y" { if (((*yyvaluep).expr_vec)) { @@ -2541,10 +2549,10 @@ yydestruct (const char *yymsg, } delete (((*yyvaluep).expr_vec)); } -#line 2546 "bison_parser.cpp" +#line 2553 "bison_parser.cpp" break; - case YYSYMBOL_literal_list: /* literal_list */ + case YYSYMBOL_extended_literal_list: /* extended_literal_list */ #line 185 "bison_parser.y" { if (((*yyvaluep).expr_vec)) { @@ -2554,91 +2562,103 @@ yydestruct (const char *yymsg, } delete (((*yyvaluep).expr_vec)); } -#line 2559 "bison_parser.cpp" +#line 2566 "bison_parser.cpp" + break; + + case YYSYMBOL_casted_extended_literal: /* casted_extended_literal */ +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2572 "bison_parser.cpp" + break; + + case YYSYMBOL_extended_literal: /* extended_literal */ +#line 193 "bison_parser.y" + { delete (((*yyvaluep).expr)); } +#line 2578 "bison_parser.cpp" break; case YYSYMBOL_expr_alias: /* expr_alias */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2565 "bison_parser.cpp" +#line 2584 "bison_parser.cpp" break; case YYSYMBOL_expr: /* expr */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2571 "bison_parser.cpp" +#line 2590 "bison_parser.cpp" break; case YYSYMBOL_operand: /* operand */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2577 "bison_parser.cpp" +#line 2596 "bison_parser.cpp" break; case YYSYMBOL_scalar_expr: /* scalar_expr */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2583 "bison_parser.cpp" +#line 2602 "bison_parser.cpp" break; case YYSYMBOL_unary_expr: /* unary_expr */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2589 "bison_parser.cpp" +#line 2608 "bison_parser.cpp" break; case YYSYMBOL_binary_expr: /* binary_expr */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2595 "bison_parser.cpp" +#line 2614 "bison_parser.cpp" break; case YYSYMBOL_logic_expr: /* logic_expr */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2601 "bison_parser.cpp" +#line 2620 "bison_parser.cpp" break; case YYSYMBOL_in_expr: /* in_expr */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2607 "bison_parser.cpp" +#line 2626 "bison_parser.cpp" break; case YYSYMBOL_case_expr: /* case_expr */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2613 "bison_parser.cpp" +#line 2632 "bison_parser.cpp" break; case YYSYMBOL_case_list: /* case_list */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2619 "bison_parser.cpp" +#line 2638 "bison_parser.cpp" break; case YYSYMBOL_exists_expr: /* exists_expr */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2625 "bison_parser.cpp" +#line 2644 "bison_parser.cpp" break; case YYSYMBOL_comp_expr: /* comp_expr */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2631 "bison_parser.cpp" +#line 2650 "bison_parser.cpp" break; case YYSYMBOL_function_expr: /* function_expr */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2637 "bison_parser.cpp" +#line 2656 "bison_parser.cpp" break; case YYSYMBOL_opt_window: /* opt_window */ #line 193 "bison_parser.y" { delete (((*yyvaluep).window_description)); } -#line 2643 "bison_parser.cpp" +#line 2662 "bison_parser.cpp" break; case YYSYMBOL_opt_partition: /* opt_partition */ @@ -2651,151 +2671,151 @@ yydestruct (const char *yymsg, } delete (((*yyvaluep).expr_vec)); } -#line 2656 "bison_parser.cpp" +#line 2675 "bison_parser.cpp" break; case YYSYMBOL_opt_frame_clause: /* opt_frame_clause */ #line 193 "bison_parser.y" { delete (((*yyvaluep).frame_description)); } -#line 2662 "bison_parser.cpp" +#line 2681 "bison_parser.cpp" break; case YYSYMBOL_frame_type: /* frame_type */ #line 171 "bison_parser.y" { } -#line 2668 "bison_parser.cpp" +#line 2687 "bison_parser.cpp" break; case YYSYMBOL_frame_bound: /* frame_bound */ #line 193 "bison_parser.y" { delete (((*yyvaluep).frame_bound)); } -#line 2674 "bison_parser.cpp" +#line 2693 "bison_parser.cpp" break; case YYSYMBOL_extract_expr: /* extract_expr */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2680 "bison_parser.cpp" +#line 2699 "bison_parser.cpp" break; case YYSYMBOL_cast_expr: /* cast_expr */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2686 "bison_parser.cpp" +#line 2705 "bison_parser.cpp" break; case YYSYMBOL_datetime_field: /* datetime_field */ #line 171 "bison_parser.y" { } -#line 2692 "bison_parser.cpp" +#line 2711 "bison_parser.cpp" break; case YYSYMBOL_datetime_field_plural: /* datetime_field_plural */ #line 171 "bison_parser.y" { } -#line 2698 "bison_parser.cpp" +#line 2717 "bison_parser.cpp" break; case YYSYMBOL_duration_field: /* duration_field */ #line 171 "bison_parser.y" { } -#line 2704 "bison_parser.cpp" +#line 2723 "bison_parser.cpp" break; case YYSYMBOL_array_expr: /* array_expr */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2710 "bison_parser.cpp" +#line 2729 "bison_parser.cpp" break; case YYSYMBOL_array_index: /* array_index */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2716 "bison_parser.cpp" +#line 2735 "bison_parser.cpp" break; case YYSYMBOL_between_expr: /* between_expr */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2722 "bison_parser.cpp" +#line 2741 "bison_parser.cpp" break; case YYSYMBOL_column_name: /* column_name */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2728 "bison_parser.cpp" +#line 2747 "bison_parser.cpp" break; case YYSYMBOL_literal: /* literal */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2734 "bison_parser.cpp" +#line 2753 "bison_parser.cpp" break; case YYSYMBOL_string_literal: /* string_literal */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2740 "bison_parser.cpp" +#line 2759 "bison_parser.cpp" break; case YYSYMBOL_bool_literal: /* bool_literal */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2746 "bison_parser.cpp" +#line 2765 "bison_parser.cpp" break; case YYSYMBOL_num_literal: /* num_literal */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2752 "bison_parser.cpp" +#line 2771 "bison_parser.cpp" break; case YYSYMBOL_int_literal: /* int_literal */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2758 "bison_parser.cpp" +#line 2777 "bison_parser.cpp" break; case YYSYMBOL_null_literal: /* null_literal */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2764 "bison_parser.cpp" +#line 2783 "bison_parser.cpp" break; case YYSYMBOL_date_literal: /* date_literal */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2770 "bison_parser.cpp" +#line 2789 "bison_parser.cpp" break; case YYSYMBOL_interval_literal: /* interval_literal */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2776 "bison_parser.cpp" +#line 2795 "bison_parser.cpp" break; case YYSYMBOL_param_expr: /* param_expr */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2782 "bison_parser.cpp" +#line 2801 "bison_parser.cpp" break; case YYSYMBOL_table_ref: /* table_ref */ #line 193 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2788 "bison_parser.cpp" +#line 2807 "bison_parser.cpp" break; case YYSYMBOL_table_ref_atomic: /* table_ref_atomic */ #line 193 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2794 "bison_parser.cpp" +#line 2813 "bison_parser.cpp" break; case YYSYMBOL_nonjoin_table_ref_atomic: /* nonjoin_table_ref_atomic */ #line 193 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2800 "bison_parser.cpp" +#line 2819 "bison_parser.cpp" break; case YYSYMBOL_table_ref_commalist: /* table_ref_commalist */ @@ -2808,19 +2828,19 @@ yydestruct (const char *yymsg, } delete (((*yyvaluep).table_vec)); } -#line 2813 "bison_parser.cpp" +#line 2832 "bison_parser.cpp" break; case YYSYMBOL_table_ref_name: /* table_ref_name */ #line 193 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2819 "bison_parser.cpp" +#line 2838 "bison_parser.cpp" break; case YYSYMBOL_table_ref_name_no_alias: /* table_ref_name_no_alias */ #line 193 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2825 "bison_parser.cpp" +#line 2844 "bison_parser.cpp" break; case YYSYMBOL_table_name: /* table_name */ @@ -2829,109 +2849,109 @@ yydestruct (const char *yymsg, free( (((*yyvaluep).table_name).name) ); free( (((*yyvaluep).table_name).schema) ); } -#line 2834 "bison_parser.cpp" +#line 2853 "bison_parser.cpp" break; case YYSYMBOL_opt_index_name: /* opt_index_name */ #line 184 "bison_parser.y" { free( (((*yyvaluep).sval)) ); } -#line 2840 "bison_parser.cpp" +#line 2859 "bison_parser.cpp" break; case YYSYMBOL_table_alias: /* table_alias */ #line 193 "bison_parser.y" { delete (((*yyvaluep).alias_t)); } -#line 2846 "bison_parser.cpp" +#line 2865 "bison_parser.cpp" break; case YYSYMBOL_opt_table_alias: /* opt_table_alias */ #line 193 "bison_parser.y" { delete (((*yyvaluep).alias_t)); } -#line 2852 "bison_parser.cpp" +#line 2871 "bison_parser.cpp" break; case YYSYMBOL_alias: /* alias */ #line 193 "bison_parser.y" { delete (((*yyvaluep).alias_t)); } -#line 2858 "bison_parser.cpp" +#line 2877 "bison_parser.cpp" break; case YYSYMBOL_opt_alias: /* opt_alias */ #line 193 "bison_parser.y" { delete (((*yyvaluep).alias_t)); } -#line 2864 "bison_parser.cpp" +#line 2883 "bison_parser.cpp" break; case YYSYMBOL_opt_locking_clause: /* opt_locking_clause */ #line 193 "bison_parser.y" { delete (((*yyvaluep).locking_clause_vec)); } -#line 2870 "bison_parser.cpp" +#line 2889 "bison_parser.cpp" break; case YYSYMBOL_opt_locking_clause_list: /* opt_locking_clause_list */ #line 193 "bison_parser.y" { delete (((*yyvaluep).locking_clause_vec)); } -#line 2876 "bison_parser.cpp" +#line 2895 "bison_parser.cpp" break; case YYSYMBOL_locking_clause: /* locking_clause */ #line 193 "bison_parser.y" { delete (((*yyvaluep).locking_t)); } -#line 2882 "bison_parser.cpp" +#line 2901 "bison_parser.cpp" break; case YYSYMBOL_row_lock_mode: /* row_lock_mode */ #line 171 "bison_parser.y" { } -#line 2888 "bison_parser.cpp" +#line 2907 "bison_parser.cpp" break; case YYSYMBOL_opt_row_lock_policy: /* opt_row_lock_policy */ #line 171 "bison_parser.y" { } -#line 2894 "bison_parser.cpp" +#line 2913 "bison_parser.cpp" break; case YYSYMBOL_opt_with_clause: /* opt_with_clause */ #line 193 "bison_parser.y" { delete (((*yyvaluep).with_description_vec)); } -#line 2900 "bison_parser.cpp" +#line 2919 "bison_parser.cpp" break; case YYSYMBOL_with_clause: /* with_clause */ #line 193 "bison_parser.y" { delete (((*yyvaluep).with_description_vec)); } -#line 2906 "bison_parser.cpp" +#line 2925 "bison_parser.cpp" break; case YYSYMBOL_with_description_list: /* with_description_list */ #line 193 "bison_parser.y" { delete (((*yyvaluep).with_description_vec)); } -#line 2912 "bison_parser.cpp" +#line 2931 "bison_parser.cpp" break; case YYSYMBOL_with_description: /* with_description */ #line 193 "bison_parser.y" { delete (((*yyvaluep).with_description_t)); } -#line 2918 "bison_parser.cpp" +#line 2937 "bison_parser.cpp" break; case YYSYMBOL_join_clause: /* join_clause */ #line 193 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2924 "bison_parser.cpp" +#line 2943 "bison_parser.cpp" break; case YYSYMBOL_opt_join_type: /* opt_join_type */ #line 171 "bison_parser.y" { } -#line 2930 "bison_parser.cpp" +#line 2949 "bison_parser.cpp" break; case YYSYMBOL_join_condition: /* join_condition */ #line 193 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2936 "bison_parser.cpp" +#line 2955 "bison_parser.cpp" break; case YYSYMBOL_ident_commalist: /* ident_commalist */ @@ -2944,7 +2964,7 @@ yydestruct (const char *yymsg, } delete (((*yyvaluep).str_vec)); } -#line 2949 "bison_parser.cpp" +#line 2968 "bison_parser.cpp" break; default: @@ -3052,7 +3072,7 @@ YYLTYPE yylloc = yyloc_default; yylloc.string_length = 0; } -#line 3057 "bison_parser.cpp" +#line 3076 "bison_parser.cpp" yylsp[0] = yylloc; goto yysetstate; @@ -3281,7 +3301,7 @@ YYLTYPE yylloc = yyloc_default; } delete (yyvsp[-1].stmt_vec); } -#line 3286 "bison_parser.cpp" +#line 3305 "bison_parser.cpp" break; case 3: /* statement_list: statement */ @@ -3292,7 +3312,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.stmt_vec) = new std::vector(); (yyval.stmt_vec)->push_back((yyvsp[0].statement)); } -#line 3297 "bison_parser.cpp" +#line 3316 "bison_parser.cpp" break; case 4: /* statement_list: statement_list ';' statement */ @@ -3303,7 +3323,7 @@ YYLTYPE yylloc = yyloc_default; (yyvsp[-2].stmt_vec)->push_back((yyvsp[0].statement)); (yyval.stmt_vec) = (yyvsp[-2].stmt_vec); } -#line 3308 "bison_parser.cpp" +#line 3327 "bison_parser.cpp" break; case 5: /* statement: prepare_statement opt_hints */ @@ -3312,7 +3332,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.statement) = (yyvsp[-1].prep_stmt); (yyval.statement)->hints = (yyvsp[0].expr_vec); } -#line 3317 "bison_parser.cpp" +#line 3336 "bison_parser.cpp" break; case 6: /* statement: preparable_statement opt_hints */ @@ -3321,97 +3341,97 @@ YYLTYPE yylloc = yyloc_default; (yyval.statement) = (yyvsp[-1].statement); (yyval.statement)->hints = (yyvsp[0].expr_vec); } -#line 3326 "bison_parser.cpp" +#line 3345 "bison_parser.cpp" break; case 7: /* statement: show_statement */ #line 365 "bison_parser.y" { (yyval.statement) = (yyvsp[0].show_stmt); } -#line 3332 "bison_parser.cpp" +#line 3351 "bison_parser.cpp" break; case 8: /* statement: import_statement */ #line 366 "bison_parser.y" { (yyval.statement) = (yyvsp[0].import_stmt); } -#line 3338 "bison_parser.cpp" +#line 3357 "bison_parser.cpp" break; case 9: /* statement: export_statement */ #line 367 "bison_parser.y" { (yyval.statement) = (yyvsp[0].export_stmt); } -#line 3344 "bison_parser.cpp" +#line 3363 "bison_parser.cpp" break; case 10: /* preparable_statement: select_statement */ #line 369 "bison_parser.y" { (yyval.statement) = (yyvsp[0].select_stmt); } -#line 3350 "bison_parser.cpp" +#line 3369 "bison_parser.cpp" break; case 11: /* preparable_statement: create_statement */ #line 370 "bison_parser.y" { (yyval.statement) = (yyvsp[0].create_stmt); } -#line 3356 "bison_parser.cpp" +#line 3375 "bison_parser.cpp" break; case 12: /* preparable_statement: insert_statement */ #line 371 "bison_parser.y" { (yyval.statement) = (yyvsp[0].insert_stmt); } -#line 3362 "bison_parser.cpp" +#line 3381 "bison_parser.cpp" break; case 13: /* preparable_statement: delete_statement */ #line 372 "bison_parser.y" { (yyval.statement) = (yyvsp[0].delete_stmt); } -#line 3368 "bison_parser.cpp" +#line 3387 "bison_parser.cpp" break; case 14: /* preparable_statement: truncate_statement */ #line 373 "bison_parser.y" { (yyval.statement) = (yyvsp[0].delete_stmt); } -#line 3374 "bison_parser.cpp" +#line 3393 "bison_parser.cpp" break; case 15: /* preparable_statement: update_statement */ #line 374 "bison_parser.y" { (yyval.statement) = (yyvsp[0].update_stmt); } -#line 3380 "bison_parser.cpp" +#line 3399 "bison_parser.cpp" break; case 16: /* preparable_statement: drop_statement */ #line 375 "bison_parser.y" { (yyval.statement) = (yyvsp[0].drop_stmt); } -#line 3386 "bison_parser.cpp" +#line 3405 "bison_parser.cpp" break; case 17: /* preparable_statement: alter_statement */ #line 376 "bison_parser.y" { (yyval.statement) = (yyvsp[0].alter_stmt); } -#line 3392 "bison_parser.cpp" +#line 3411 "bison_parser.cpp" break; case 18: /* preparable_statement: execute_statement */ #line 377 "bison_parser.y" { (yyval.statement) = (yyvsp[0].exec_stmt); } -#line 3398 "bison_parser.cpp" +#line 3417 "bison_parser.cpp" break; case 19: /* preparable_statement: transaction_statement */ #line 378 "bison_parser.y" { (yyval.statement) = (yyvsp[0].transaction_stmt); } -#line 3404 "bison_parser.cpp" +#line 3423 "bison_parser.cpp" break; case 20: /* opt_hints: WITH HINT '(' hint_list ')' */ #line 384 "bison_parser.y" { (yyval.expr_vec) = (yyvsp[-1].expr_vec); } -#line 3410 "bison_parser.cpp" +#line 3429 "bison_parser.cpp" break; case 21: /* opt_hints: %empty */ #line 385 "bison_parser.y" { (yyval.expr_vec) = nullptr; } -#line 3416 "bison_parser.cpp" +#line 3435 "bison_parser.cpp" break; case 22: /* hint_list: hint */ @@ -3420,7 +3440,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.expr_vec) = new std::vector(); (yyval.expr_vec)->push_back((yyvsp[0].expr)); } -#line 3425 "bison_parser.cpp" +#line 3444 "bison_parser.cpp" break; case 23: /* hint_list: hint_list ',' hint */ @@ -3429,7 +3449,7 @@ YYLTYPE yylloc = yyloc_default; (yyvsp[-2].expr_vec)->push_back((yyvsp[0].expr)); (yyval.expr_vec) = (yyvsp[-2].expr_vec); } -#line 3434 "bison_parser.cpp" +#line 3453 "bison_parser.cpp" break; case 24: /* hint: IDENTIFIER */ @@ -3438,35 +3458,35 @@ YYLTYPE yylloc = yyloc_default; (yyval.expr) = Expr::make(kExprHint); (yyval.expr)->name = (yyvsp[0].sval); } -#line 3443 "bison_parser.cpp" +#line 3462 "bison_parser.cpp" break; - case 25: /* hint: IDENTIFIER '(' literal_list ')' */ + case 25: /* hint: IDENTIFIER '(' extended_literal_list ')' */ #line 400 "bison_parser.y" - { + { (yyval.expr) = Expr::make(kExprHint); (yyval.expr)->name = (yyvsp[-3].sval); (yyval.expr)->exprList = (yyvsp[-1].expr_vec); } -#line 3453 "bison_parser.cpp" +#line 3472 "bison_parser.cpp" break; case 26: /* transaction_statement: BEGIN opt_transaction_keyword */ #line 410 "bison_parser.y" { (yyval.transaction_stmt) = new TransactionStatement(kBeginTransaction); } -#line 3459 "bison_parser.cpp" +#line 3478 "bison_parser.cpp" break; case 27: /* transaction_statement: ROLLBACK opt_transaction_keyword */ #line 411 "bison_parser.y" { (yyval.transaction_stmt) = new TransactionStatement(kRollbackTransaction); } -#line 3465 "bison_parser.cpp" +#line 3484 "bison_parser.cpp" break; case 28: /* transaction_statement: COMMIT opt_transaction_keyword */ #line 412 "bison_parser.y" { (yyval.transaction_stmt) = new TransactionStatement(kCommitTransaction); } -#line 3471 "bison_parser.cpp" +#line 3490 "bison_parser.cpp" break; case 31: /* prepare_statement: PREPARE IDENTIFIER FROM prepare_target_query */ @@ -3476,26 +3496,26 @@ YYLTYPE yylloc = yyloc_default; (yyval.prep_stmt)->name = (yyvsp[-2].sval); (yyval.prep_stmt)->query = (yyvsp[0].sval); } -#line 3481 "bison_parser.cpp" +#line 3500 "bison_parser.cpp" break; case 33: /* execute_statement: EXECUTE IDENTIFIER */ #line 428 "bison_parser.y" - { + { (yyval.exec_stmt) = new ExecuteStatement(); (yyval.exec_stmt)->name = (yyvsp[0].sval); } -#line 3490 "bison_parser.cpp" +#line 3509 "bison_parser.cpp" break; - case 34: /* execute_statement: EXECUTE IDENTIFIER '(' opt_literal_list ')' */ + case 34: /* execute_statement: EXECUTE IDENTIFIER '(' opt_extended_literal_list ')' */ #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 3500 "bison_parser.cpp" +#line 3519 "bison_parser.cpp" break; case 35: /* import_statement: IMPORT FROM file_type FILE file_path INTO table_name */ @@ -3506,7 +3526,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.import_stmt)->schema = (yyvsp[0].table_name).schema; (yyval.import_stmt)->tableName = (yyvsp[0].table_name).name; } -#line 3511 "bison_parser.cpp" +#line 3530 "bison_parser.cpp" break; case 36: /* import_statement: COPY table_name FROM file_path opt_file_type opt_where */ @@ -3518,7 +3538,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.import_stmt)->tableName = (yyvsp[-4].table_name).name; (yyval.import_stmt)->whereClause = (yyvsp[0].expr); } -#line 3523 "bison_parser.cpp" +#line 3542 "bison_parser.cpp" break; case 37: /* file_type: IDENTIFIER */ @@ -3537,7 +3557,7 @@ YYLTYPE yylloc = yyloc_default; } free((yyvsp[0].sval)); } -#line 3542 "bison_parser.cpp" +#line 3561 "bison_parser.cpp" break; case 38: /* file_path: string_literal */ @@ -3546,19 +3566,19 @@ YYLTYPE yylloc = yyloc_default; (yyval.sval) = strdup((yyvsp[0].expr)->name); delete (yyvsp[0].expr); } -#line 3551 "bison_parser.cpp" +#line 3570 "bison_parser.cpp" break; case 39: /* opt_file_type: WITH FORMAT file_type */ #line 477 "bison_parser.y" { (yyval.import_type_t) = (yyvsp[0].import_type_t); } -#line 3557 "bison_parser.cpp" +#line 3576 "bison_parser.cpp" break; case 40: /* opt_file_type: %empty */ #line 478 "bison_parser.y" { (yyval.import_type_t) = kImportAuto; } -#line 3563 "bison_parser.cpp" +#line 3582 "bison_parser.cpp" break; case 41: /* export_statement: COPY table_name TO file_path opt_file_type */ @@ -3569,7 +3589,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.export_stmt)->schema = (yyvsp[-3].table_name).schema; (yyval.export_stmt)->tableName = (yyvsp[-3].table_name).name; } -#line 3574 "bison_parser.cpp" +#line 3593 "bison_parser.cpp" break; case 42: /* export_statement: COPY select_with_paren TO file_path opt_file_type */ @@ -3579,13 +3599,13 @@ YYLTYPE yylloc = yyloc_default; (yyval.export_stmt)->filePath = (yyvsp[-1].sval); (yyval.export_stmt)->select = (yyvsp[-3].select_stmt); } -#line 3584 "bison_parser.cpp" +#line 3603 "bison_parser.cpp" break; case 43: /* show_statement: SHOW TABLES */ #line 501 "bison_parser.y" { (yyval.show_stmt) = new ShowStatement(kShowTables); } -#line 3590 "bison_parser.cpp" +#line 3609 "bison_parser.cpp" break; case 44: /* show_statement: SHOW COLUMNS table_name */ @@ -3595,7 +3615,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.show_stmt)->schema = (yyvsp[0].table_name).schema; (yyval.show_stmt)->name = (yyvsp[0].table_name).name; } -#line 3600 "bison_parser.cpp" +#line 3619 "bison_parser.cpp" break; case 45: /* show_statement: DESCRIBE table_name */ @@ -3605,7 +3625,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.show_stmt)->schema = (yyvsp[0].table_name).schema; (yyval.show_stmt)->name = (yyvsp[0].table_name).name; } -#line 3610 "bison_parser.cpp" +#line 3629 "bison_parser.cpp" break; case 46: /* create_statement: CREATE TABLE opt_not_exists table_name FROM IDENTIFIER FILE file_path */ @@ -3623,7 +3643,7 @@ YYLTYPE yylloc = yyloc_default; free((yyvsp[-2].sval)); (yyval.create_stmt)->filePath = (yyvsp[0].sval); } -#line 3628 "bison_parser.cpp" +#line 3647 "bison_parser.cpp" break; case 47: /* create_statement: CREATE TABLE opt_not_exists table_name '(' table_elem_commalist ')' */ @@ -3640,7 +3660,7 @@ YYLTYPE yylloc = yyloc_default; YYERROR; } } -#line 3645 "bison_parser.cpp" +#line 3664 "bison_parser.cpp" break; case 48: /* create_statement: CREATE TABLE opt_not_exists table_name AS select_statement */ @@ -3652,7 +3672,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.create_stmt)->tableName = (yyvsp[-2].table_name).name; (yyval.create_stmt)->select = (yyvsp[0].select_stmt); } -#line 3657 "bison_parser.cpp" +#line 3676 "bison_parser.cpp" break; case 49: /* create_statement: CREATE INDEX opt_not_exists opt_index_name ON table_name '(' ident_commalist ')' */ @@ -3664,7 +3684,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.create_stmt)->tableName = (yyvsp[-3].table_name).name; (yyval.create_stmt)->indexColumns = (yyvsp[-1].str_vec); } -#line 3669 "bison_parser.cpp" +#line 3688 "bison_parser.cpp" break; case 50: /* create_statement: CREATE VIEW opt_not_exists table_name opt_column_list AS select_statement */ @@ -3677,19 +3697,19 @@ YYLTYPE yylloc = yyloc_default; (yyval.create_stmt)->viewColumns = (yyvsp[-2].str_vec); (yyval.create_stmt)->select = (yyvsp[0].select_stmt); } -#line 3682 "bison_parser.cpp" +#line 3701 "bison_parser.cpp" break; case 51: /* opt_not_exists: IF NOT EXISTS */ #line 566 "bison_parser.y" { (yyval.bval) = true; } -#line 3688 "bison_parser.cpp" +#line 3707 "bison_parser.cpp" break; case 52: /* opt_not_exists: %empty */ #line 567 "bison_parser.y" { (yyval.bval) = false; } -#line 3694 "bison_parser.cpp" +#line 3713 "bison_parser.cpp" break; case 53: /* table_elem_commalist: table_elem */ @@ -3698,7 +3718,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.table_element_vec) = new std::vector(); (yyval.table_element_vec)->push_back((yyvsp[0].table_element_t)); } -#line 3703 "bison_parser.cpp" +#line 3722 "bison_parser.cpp" break; case 54: /* table_elem_commalist: table_elem_commalist ',' table_elem */ @@ -3707,19 +3727,19 @@ YYLTYPE yylloc = yyloc_default; (yyvsp[-2].table_element_vec)->push_back((yyvsp[0].table_element_t)); (yyval.table_element_vec) = (yyvsp[-2].table_element_vec); } -#line 3712 "bison_parser.cpp" +#line 3731 "bison_parser.cpp" break; case 55: /* table_elem: column_def */ #line 578 "bison_parser.y" { (yyval.table_element_t) = (yyvsp[0].column_t); } -#line 3718 "bison_parser.cpp" +#line 3737 "bison_parser.cpp" break; case 56: /* table_elem: table_constraint */ #line 579 "bison_parser.y" { (yyval.table_element_t) = (yyvsp[0].table_constraint_t); } -#line 3724 "bison_parser.cpp" +#line 3743 "bison_parser.cpp" break; case 57: /* column_def: IDENTIFIER column_type opt_column_constraints */ @@ -3730,43 +3750,43 @@ YYLTYPE yylloc = yyloc_default; yyerror(&yyloc, result, scanner, ("Conflicting nullability constraints for " + std::string{(yyvsp[-2].sval)}).c_str()); } } -#line 3735 "bison_parser.cpp" +#line 3754 "bison_parser.cpp" break; case 58: /* column_type: BIGINT */ #line 588 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::BIGINT}; } -#line 3741 "bison_parser.cpp" +#line 3760 "bison_parser.cpp" break; case 59: /* column_type: BOOLEAN */ #line 589 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::BOOLEAN}; } -#line 3747 "bison_parser.cpp" +#line 3766 "bison_parser.cpp" break; case 60: /* column_type: CHAR '(' INTVAL ')' */ #line 590 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::CHAR, (yyvsp[-1].ival)}; } -#line 3753 "bison_parser.cpp" +#line 3772 "bison_parser.cpp" break; case 61: /* column_type: CHARACTER_VARYING '(' INTVAL ')' */ #line 591 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::VARCHAR, (yyvsp[-1].ival)}; } -#line 3759 "bison_parser.cpp" +#line 3778 "bison_parser.cpp" break; case 62: /* column_type: DATE */ #line 592 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::DATE}; } -#line 3765 "bison_parser.cpp" +#line 3784 "bison_parser.cpp" break; case 63: /* column_type: DATETIME */ #line 593 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::DATETIME}; } -#line 3771 "bison_parser.cpp" +#line 3790 "bison_parser.cpp" break; case 64: /* column_type: DECIMAL opt_decimal_specification */ @@ -3775,115 +3795,115 @@ YYLTYPE yylloc = yyloc_default; (yyval.column_type_t) = ColumnType{DataType::DECIMAL, 0, (yyvsp[0].ival_pair)->first, (yyvsp[0].ival_pair)->second}; delete (yyvsp[0].ival_pair); } -#line 3780 "bison_parser.cpp" +#line 3799 "bison_parser.cpp" break; case 65: /* column_type: DOUBLE */ #line 598 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::DOUBLE}; } -#line 3786 "bison_parser.cpp" +#line 3805 "bison_parser.cpp" break; case 66: /* column_type: FLOAT */ #line 599 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::FLOAT}; } -#line 3792 "bison_parser.cpp" +#line 3811 "bison_parser.cpp" break; case 67: /* column_type: INT */ #line 600 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::INT}; } -#line 3798 "bison_parser.cpp" +#line 3817 "bison_parser.cpp" break; case 68: /* column_type: INTEGER */ #line 601 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::INT}; } -#line 3804 "bison_parser.cpp" +#line 3823 "bison_parser.cpp" break; case 69: /* column_type: LONG */ #line 602 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::LONG}; } -#line 3810 "bison_parser.cpp" +#line 3829 "bison_parser.cpp" break; case 70: /* column_type: REAL */ #line 603 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::REAL}; } -#line 3816 "bison_parser.cpp" +#line 3835 "bison_parser.cpp" break; case 71: /* column_type: SMALLINT */ #line 604 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::SMALLINT}; } -#line 3822 "bison_parser.cpp" +#line 3841 "bison_parser.cpp" break; case 72: /* column_type: TEXT */ #line 605 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::TEXT}; } -#line 3828 "bison_parser.cpp" +#line 3847 "bison_parser.cpp" break; case 73: /* column_type: TIME opt_time_precision */ #line 606 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::TIME, 0, (yyvsp[0].ival)}; } -#line 3834 "bison_parser.cpp" +#line 3853 "bison_parser.cpp" break; case 74: /* column_type: TIMESTAMP */ #line 607 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::DATETIME}; } -#line 3840 "bison_parser.cpp" +#line 3859 "bison_parser.cpp" break; case 75: /* column_type: VARCHAR '(' INTVAL ')' */ #line 608 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::VARCHAR, (yyvsp[-1].ival)}; } -#line 3846 "bison_parser.cpp" +#line 3865 "bison_parser.cpp" break; case 76: /* opt_time_precision: '(' INTVAL ')' */ #line 610 "bison_parser.y" { (yyval.ival) = (yyvsp[-1].ival); } -#line 3852 "bison_parser.cpp" +#line 3871 "bison_parser.cpp" break; case 77: /* opt_time_precision: %empty */ #line 611 "bison_parser.y" { (yyval.ival) = 0; } -#line 3858 "bison_parser.cpp" +#line 3877 "bison_parser.cpp" break; case 78: /* opt_decimal_specification: '(' INTVAL ',' INTVAL ')' */ #line 613 "bison_parser.y" { (yyval.ival_pair) = new std::pair{(yyvsp[-3].ival), (yyvsp[-1].ival)}; } -#line 3864 "bison_parser.cpp" +#line 3883 "bison_parser.cpp" break; case 79: /* opt_decimal_specification: '(' INTVAL ')' */ #line 614 "bison_parser.y" { (yyval.ival_pair) = new std::pair{(yyvsp[-1].ival), 0}; } -#line 3870 "bison_parser.cpp" +#line 3889 "bison_parser.cpp" break; case 80: /* opt_decimal_specification: %empty */ #line 615 "bison_parser.y" { (yyval.ival_pair) = new std::pair{0, 0}; } -#line 3876 "bison_parser.cpp" +#line 3895 "bison_parser.cpp" break; case 81: /* opt_column_constraints: column_constraint_set */ #line 617 "bison_parser.y" { (yyval.column_constraint_set) = (yyvsp[0].column_constraint_set); } -#line 3882 "bison_parser.cpp" +#line 3901 "bison_parser.cpp" break; case 82: /* opt_column_constraints: %empty */ #line 618 "bison_parser.y" { (yyval.column_constraint_set) = new std::unordered_set(); } -#line 3888 "bison_parser.cpp" +#line 3907 "bison_parser.cpp" break; case 83: /* column_constraint_set: column_constraint */ @@ -3892,7 +3912,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.column_constraint_set) = new std::unordered_set(); (yyval.column_constraint_set)->insert((yyvsp[0].column_constraint_t)); } -#line 3897 "bison_parser.cpp" +#line 3916 "bison_parser.cpp" break; case 84: /* column_constraint_set: column_constraint_set column_constraint */ @@ -3901,43 +3921,43 @@ YYLTYPE yylloc = yyloc_default; (yyvsp[-1].column_constraint_set)->insert((yyvsp[0].column_constraint_t)); (yyval.column_constraint_set) = (yyvsp[-1].column_constraint_set); } -#line 3906 "bison_parser.cpp" +#line 3925 "bison_parser.cpp" break; case 85: /* column_constraint: PRIMARY KEY */ #line 629 "bison_parser.y" { (yyval.column_constraint_t) = ConstraintType::PrimaryKey; } -#line 3912 "bison_parser.cpp" +#line 3931 "bison_parser.cpp" break; case 86: /* column_constraint: UNIQUE */ #line 630 "bison_parser.y" { (yyval.column_constraint_t) = ConstraintType::Unique; } -#line 3918 "bison_parser.cpp" +#line 3937 "bison_parser.cpp" break; case 87: /* column_constraint: NULL */ #line 631 "bison_parser.y" { (yyval.column_constraint_t) = ConstraintType::Null; } -#line 3924 "bison_parser.cpp" +#line 3943 "bison_parser.cpp" break; case 88: /* column_constraint: NOT NULL */ #line 632 "bison_parser.y" { (yyval.column_constraint_t) = ConstraintType::NotNull; } -#line 3930 "bison_parser.cpp" +#line 3949 "bison_parser.cpp" break; case 89: /* table_constraint: PRIMARY KEY '(' ident_commalist ')' */ #line 634 "bison_parser.y" { (yyval.table_constraint_t) = new TableConstraint(ConstraintType::PrimaryKey, (yyvsp[-1].str_vec)); } -#line 3936 "bison_parser.cpp" +#line 3955 "bison_parser.cpp" break; case 90: /* table_constraint: UNIQUE '(' ident_commalist ')' */ #line 635 "bison_parser.y" { (yyval.table_constraint_t) = new TableConstraint(ConstraintType::Unique, (yyvsp[-1].str_vec)); } -#line 3942 "bison_parser.cpp" +#line 3961 "bison_parser.cpp" break; case 91: /* drop_statement: DROP TABLE opt_exists table_name */ @@ -3948,7 +3968,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.drop_stmt)->schema = (yyvsp[0].table_name).schema; (yyval.drop_stmt)->name = (yyvsp[0].table_name).name; } -#line 3953 "bison_parser.cpp" +#line 3972 "bison_parser.cpp" break; case 92: /* drop_statement: DROP VIEW opt_exists table_name */ @@ -3959,7 +3979,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.drop_stmt)->schema = (yyvsp[0].table_name).schema; (yyval.drop_stmt)->name = (yyvsp[0].table_name).name; } -#line 3964 "bison_parser.cpp" +#line 3983 "bison_parser.cpp" break; case 93: /* drop_statement: DEALLOCATE PREPARE IDENTIFIER */ @@ -3969,7 +3989,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.drop_stmt)->ifExists = false; (yyval.drop_stmt)->name = (yyvsp[0].sval); } -#line 3974 "bison_parser.cpp" +#line 3993 "bison_parser.cpp" break; case 94: /* drop_statement: DROP INDEX opt_exists IDENTIFIER */ @@ -3979,19 +3999,19 @@ YYLTYPE yylloc = yyloc_default; (yyval.drop_stmt)->ifExists = (yyvsp[-1].bval); (yyval.drop_stmt)->indexName = (yyvsp[0].sval); } -#line 3984 "bison_parser.cpp" +#line 4003 "bison_parser.cpp" break; case 95: /* opt_exists: IF EXISTS */ #line 667 "bison_parser.y" { (yyval.bval) = true; } -#line 3990 "bison_parser.cpp" +#line 4009 "bison_parser.cpp" break; case 96: /* opt_exists: %empty */ #line 668 "bison_parser.y" { (yyval.bval) = false; } -#line 3996 "bison_parser.cpp" +#line 4015 "bison_parser.cpp" break; case 97: /* alter_statement: ALTER TABLE opt_exists table_name alter_action */ @@ -4001,13 +4021,13 @@ YYLTYPE yylloc = yyloc_default; (yyval.alter_stmt)->ifTableExists = (yyvsp[-2].bval); (yyval.alter_stmt)->schema = (yyvsp[-1].table_name).schema; } -#line 4006 "bison_parser.cpp" +#line 4025 "bison_parser.cpp" break; case 98: /* alter_action: drop_action */ #line 681 "bison_parser.y" { (yyval.alter_action_t) = (yyvsp[0].drop_action_t); } -#line 4012 "bison_parser.cpp" +#line 4031 "bison_parser.cpp" break; case 99: /* drop_action: DROP COLUMN opt_exists IDENTIFIER */ @@ -4016,7 +4036,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.drop_action_t) = new DropColumnAction((yyvsp[0].sval)); (yyval.drop_action_t)->ifExists = (yyvsp[-1].bval); } -#line 4021 "bison_parser.cpp" +#line 4040 "bison_parser.cpp" break; case 100: /* delete_statement: DELETE FROM table_name opt_where */ @@ -4027,7 +4047,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.delete_stmt)->tableName = (yyvsp[-1].table_name).name; (yyval.delete_stmt)->expr = (yyvsp[0].expr); } -#line 4032 "bison_parser.cpp" +#line 4051 "bison_parser.cpp" break; case 101: /* truncate_statement: TRUNCATE table_name */ @@ -4037,19 +4057,19 @@ YYLTYPE yylloc = yyloc_default; (yyval.delete_stmt)->schema = (yyvsp[0].table_name).schema; (yyval.delete_stmt)->tableName = (yyvsp[0].table_name).name; } -#line 4042 "bison_parser.cpp" +#line 4061 "bison_parser.cpp" break; - case 102: /* insert_statement: INSERT INTO table_name opt_column_list VALUES '(' literal_list ')' */ + case 102: /* insert_statement: INSERT INTO table_name opt_column_list VALUES '(' extended_literal_list ')' */ #line 711 "bison_parser.y" - { + { (yyval.insert_stmt) = new InsertStatement(kInsertValues); (yyval.insert_stmt)->schema = (yyvsp[-5].table_name).schema; (yyval.insert_stmt)->tableName = (yyvsp[-5].table_name).name; (yyval.insert_stmt)->columns = (yyvsp[-4].str_vec); (yyval.insert_stmt)->values = (yyvsp[-1].expr_vec); } -#line 4054 "bison_parser.cpp" +#line 4073 "bison_parser.cpp" break; case 103: /* insert_statement: INSERT INTO table_name opt_column_list select_no_paren */ @@ -4061,19 +4081,19 @@ YYLTYPE yylloc = yyloc_default; (yyval.insert_stmt)->columns = (yyvsp[-1].str_vec); (yyval.insert_stmt)->select = (yyvsp[0].select_stmt); } -#line 4066 "bison_parser.cpp" +#line 4085 "bison_parser.cpp" break; case 104: /* opt_column_list: '(' ident_commalist ')' */ #line 726 "bison_parser.y" { (yyval.str_vec) = (yyvsp[-1].str_vec); } -#line 4072 "bison_parser.cpp" +#line 4091 "bison_parser.cpp" break; case 105: /* opt_column_list: %empty */ #line 727 "bison_parser.y" { (yyval.str_vec) = nullptr; } -#line 4078 "bison_parser.cpp" +#line 4097 "bison_parser.cpp" break; case 106: /* update_statement: UPDATE table_ref_name_no_alias SET update_clause_commalist opt_where */ @@ -4084,7 +4104,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.update_stmt)->updates = (yyvsp[-1].update_vec); (yyval.update_stmt)->where = (yyvsp[0].expr); } -#line 4089 "bison_parser.cpp" +#line 4108 "bison_parser.cpp" break; case 107: /* update_clause_commalist: update_clause */ @@ -4093,7 +4113,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.update_vec) = new std::vector(); (yyval.update_vec)->push_back((yyvsp[0].update_t)); } -#line 4098 "bison_parser.cpp" +#line 4117 "bison_parser.cpp" break; case 108: /* update_clause_commalist: update_clause_commalist ',' update_clause */ @@ -4102,7 +4122,7 @@ YYLTYPE yylloc = yyloc_default; (yyvsp[-2].update_vec)->push_back((yyvsp[0].update_t)); (yyval.update_vec) = (yyvsp[-2].update_vec); } -#line 4107 "bison_parser.cpp" +#line 4126 "bison_parser.cpp" break; case 109: /* update_clause: IDENTIFIER '=' expr */ @@ -4112,7 +4132,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.update_t)->column = (yyvsp[-2].sval); (yyval.update_t)->value = (yyvsp[0].expr); } -#line 4117 "bison_parser.cpp" +#line 4136 "bison_parser.cpp" break; case 110: /* select_statement: opt_with_clause select_with_paren */ @@ -4121,7 +4141,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.select_stmt) = (yyvsp[0].select_stmt); (yyval.select_stmt)->withDescriptions = (yyvsp[-1].with_description_vec); } -#line 4126 "bison_parser.cpp" +#line 4145 "bison_parser.cpp" break; case 111: /* select_statement: opt_with_clause select_no_paren */ @@ -4130,7 +4150,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.select_stmt) = (yyvsp[0].select_stmt); (yyval.select_stmt)->withDescriptions = (yyvsp[-1].with_description_vec); } -#line 4135 "bison_parser.cpp" +#line 4154 "bison_parser.cpp" break; case 112: /* select_statement: opt_with_clause select_with_paren set_operator select_within_set_operation opt_order opt_limit */ @@ -4146,13 +4166,13 @@ YYLTYPE yylloc = yyloc_default; (yyval.select_stmt)->setOperations->back()->resultLimit = (yyvsp[0].limit); (yyval.select_stmt)->withDescriptions = (yyvsp[-5].with_description_vec); } -#line 4151 "bison_parser.cpp" +#line 4170 "bison_parser.cpp" break; case 115: /* select_within_set_operation_no_parentheses: select_clause */ #line 782 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[0].select_stmt); } -#line 4157 "bison_parser.cpp" +#line 4176 "bison_parser.cpp" break; case 116: /* select_within_set_operation_no_parentheses: select_clause set_operator select_within_set_operation */ @@ -4165,19 +4185,19 @@ 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 4170 "bison_parser.cpp" +#line 4189 "bison_parser.cpp" break; case 117: /* select_with_paren: '(' select_no_paren ')' */ #line 792 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-1].select_stmt); } -#line 4176 "bison_parser.cpp" +#line 4195 "bison_parser.cpp" break; case 118: /* select_with_paren: '(' select_with_paren ')' */ #line 793 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-1].select_stmt); } -#line 4182 "bison_parser.cpp" +#line 4201 "bison_parser.cpp" break; case 119: /* select_no_paren: select_clause opt_order opt_limit opt_locking_clause */ @@ -4196,7 +4216,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.select_stmt)->lockings = (yyvsp[0].locking_clause_vec); } } -#line 4201 "bison_parser.cpp" +#line 4220 "bison_parser.cpp" break; case 120: /* select_no_paren: select_clause set_operator select_within_set_operation opt_order opt_limit opt_locking_clause */ @@ -4212,7 +4232,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.select_stmt)->setOperations->back()->resultLimit = (yyvsp[-1].limit); (yyval.select_stmt)->lockings = (yyvsp[0].locking_clause_vec); } -#line 4217 "bison_parser.cpp" +#line 4236 "bison_parser.cpp" break; case 121: /* set_operator: set_type opt_all */ @@ -4221,7 +4241,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.set_operator_t) = (yyvsp[-1].set_operator_t); (yyval.set_operator_t)->isAll = (yyvsp[0].bval); } -#line 4226 "bison_parser.cpp" +#line 4245 "bison_parser.cpp" break; case 122: /* set_type: UNION */ @@ -4230,7 +4250,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.set_operator_t) = new SetOperation(); (yyval.set_operator_t)->setType = SetType::kSetUnion; } -#line 4235 "bison_parser.cpp" +#line 4254 "bison_parser.cpp" break; case 123: /* set_type: INTERSECT */ @@ -4239,7 +4259,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.set_operator_t) = new SetOperation(); (yyval.set_operator_t)->setType = SetType::kSetIntersect; } -#line 4244 "bison_parser.cpp" +#line 4263 "bison_parser.cpp" break; case 124: /* set_type: EXCEPT */ @@ -4248,19 +4268,19 @@ YYLTYPE yylloc = yyloc_default; (yyval.set_operator_t) = new SetOperation(); (yyval.set_operator_t)->setType = SetType::kSetExcept; } -#line 4253 "bison_parser.cpp" +#line 4272 "bison_parser.cpp" break; case 125: /* opt_all: ALL */ #line 839 "bison_parser.y" { (yyval.bval) = true; } -#line 4259 "bison_parser.cpp" +#line 4278 "bison_parser.cpp" break; case 126: /* opt_all: %empty */ #line 840 "bison_parser.y" { (yyval.bval) = false; } -#line 4265 "bison_parser.cpp" +#line 4284 "bison_parser.cpp" break; case 127: /* select_clause: SELECT opt_top opt_distinct select_list opt_from_clause opt_where opt_group */ @@ -4274,49 +4294,49 @@ YYLTYPE yylloc = yyloc_default; (yyval.select_stmt)->whereClause = (yyvsp[-1].expr); (yyval.select_stmt)->groupBy = (yyvsp[0].group_t); } -#line 4279 "bison_parser.cpp" +#line 4298 "bison_parser.cpp" break; case 128: /* opt_distinct: DISTINCT */ #line 852 "bison_parser.y" { (yyval.bval) = true; } -#line 4285 "bison_parser.cpp" +#line 4304 "bison_parser.cpp" break; case 129: /* opt_distinct: %empty */ #line 853 "bison_parser.y" { (yyval.bval) = false; } -#line 4291 "bison_parser.cpp" +#line 4310 "bison_parser.cpp" break; case 131: /* opt_from_clause: from_clause */ #line 857 "bison_parser.y" { (yyval.table) = (yyvsp[0].table); } -#line 4297 "bison_parser.cpp" +#line 4316 "bison_parser.cpp" break; case 132: /* opt_from_clause: %empty */ #line 858 "bison_parser.y" { (yyval.table) = nullptr; } -#line 4303 "bison_parser.cpp" +#line 4322 "bison_parser.cpp" break; case 133: /* from_clause: FROM table_ref */ #line 860 "bison_parser.y" { (yyval.table) = (yyvsp[0].table); } -#line 4309 "bison_parser.cpp" +#line 4328 "bison_parser.cpp" break; case 134: /* opt_where: WHERE expr */ #line 862 "bison_parser.y" { (yyval.expr) = (yyvsp[0].expr); } -#line 4315 "bison_parser.cpp" +#line 4334 "bison_parser.cpp" break; case 135: /* opt_where: %empty */ #line 863 "bison_parser.y" { (yyval.expr) = nullptr; } -#line 4321 "bison_parser.cpp" +#line 4340 "bison_parser.cpp" break; case 136: /* opt_group: GROUP BY expr_list opt_having */ @@ -4326,37 +4346,37 @@ YYLTYPE yylloc = yyloc_default; (yyval.group_t)->columns = (yyvsp[-1].expr_vec); (yyval.group_t)->having = (yyvsp[0].expr); } -#line 4331 "bison_parser.cpp" +#line 4350 "bison_parser.cpp" break; case 137: /* opt_group: %empty */ #line 870 "bison_parser.y" { (yyval.group_t) = nullptr; } -#line 4337 "bison_parser.cpp" +#line 4356 "bison_parser.cpp" break; case 138: /* opt_having: HAVING expr */ #line 872 "bison_parser.y" { (yyval.expr) = (yyvsp[0].expr); } -#line 4343 "bison_parser.cpp" +#line 4362 "bison_parser.cpp" break; case 139: /* opt_having: %empty */ #line 873 "bison_parser.y" { (yyval.expr) = nullptr; } -#line 4349 "bison_parser.cpp" +#line 4368 "bison_parser.cpp" break; case 140: /* opt_order: ORDER BY order_list */ #line 875 "bison_parser.y" { (yyval.order_vec) = (yyvsp[0].order_vec); } -#line 4355 "bison_parser.cpp" +#line 4374 "bison_parser.cpp" break; case 141: /* opt_order: %empty */ #line 876 "bison_parser.y" { (yyval.order_vec) = nullptr; } -#line 4361 "bison_parser.cpp" +#line 4380 "bison_parser.cpp" break; case 142: /* order_list: order_desc */ @@ -4365,7 +4385,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.order_vec) = new std::vector(); (yyval.order_vec)->push_back((yyvsp[0].order)); } -#line 4370 "bison_parser.cpp" +#line 4389 "bison_parser.cpp" break; case 143: /* order_list: order_list ',' order_desc */ @@ -4374,79 +4394,79 @@ YYLTYPE yylloc = yyloc_default; (yyvsp[-2].order_vec)->push_back((yyvsp[0].order)); (yyval.order_vec) = (yyvsp[-2].order_vec); } -#line 4379 "bison_parser.cpp" +#line 4398 "bison_parser.cpp" break; case 144: /* order_desc: expr opt_order_type */ #line 887 "bison_parser.y" { (yyval.order) = new OrderDescription((yyvsp[0].order_type), (yyvsp[-1].expr)); } -#line 4385 "bison_parser.cpp" +#line 4404 "bison_parser.cpp" break; case 145: /* opt_order_type: ASC */ #line 889 "bison_parser.y" { (yyval.order_type) = kOrderAsc; } -#line 4391 "bison_parser.cpp" +#line 4410 "bison_parser.cpp" break; case 146: /* opt_order_type: DESC */ #line 890 "bison_parser.y" { (yyval.order_type) = kOrderDesc; } -#line 4397 "bison_parser.cpp" +#line 4416 "bison_parser.cpp" break; case 147: /* opt_order_type: %empty */ #line 891 "bison_parser.y" { (yyval.order_type) = kOrderAsc; } -#line 4403 "bison_parser.cpp" +#line 4422 "bison_parser.cpp" break; case 148: /* opt_top: TOP int_literal */ #line 895 "bison_parser.y" { (yyval.limit) = new LimitDescription((yyvsp[0].expr), nullptr); } -#line 4409 "bison_parser.cpp" +#line 4428 "bison_parser.cpp" break; case 149: /* opt_top: %empty */ #line 896 "bison_parser.y" { (yyval.limit) = nullptr; } -#line 4415 "bison_parser.cpp" +#line 4434 "bison_parser.cpp" break; case 150: /* opt_limit: LIMIT expr */ #line 898 "bison_parser.y" { (yyval.limit) = new LimitDescription((yyvsp[0].expr), nullptr); } -#line 4421 "bison_parser.cpp" +#line 4440 "bison_parser.cpp" break; case 151: /* opt_limit: OFFSET expr */ #line 899 "bison_parser.y" { (yyval.limit) = new LimitDescription(nullptr, (yyvsp[0].expr)); } -#line 4427 "bison_parser.cpp" +#line 4446 "bison_parser.cpp" break; case 152: /* opt_limit: LIMIT expr OFFSET expr */ #line 900 "bison_parser.y" { (yyval.limit) = new LimitDescription((yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 4433 "bison_parser.cpp" +#line 4452 "bison_parser.cpp" break; case 153: /* opt_limit: LIMIT ALL */ #line 901 "bison_parser.y" { (yyval.limit) = new LimitDescription(nullptr, nullptr); } -#line 4439 "bison_parser.cpp" +#line 4458 "bison_parser.cpp" break; case 154: /* opt_limit: LIMIT ALL OFFSET expr */ #line 902 "bison_parser.y" { (yyval.limit) = new LimitDescription(nullptr, (yyvsp[0].expr)); } -#line 4445 "bison_parser.cpp" +#line 4464 "bison_parser.cpp" break; case 155: /* opt_limit: %empty */ #line 903 "bison_parser.y" { (yyval.limit) = nullptr; } -#line 4451 "bison_parser.cpp" +#line 4470 "bison_parser.cpp" break; case 156: /* expr_list: expr_alias */ @@ -4455,7 +4475,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.expr_vec) = new std::vector(); (yyval.expr_vec)->push_back((yyvsp[0].expr)); } -#line 4460 "bison_parser.cpp" +#line 4479 "bison_parser.cpp" break; case 157: /* expr_list: expr_list ',' expr_alias */ @@ -4464,41 +4484,74 @@ YYLTYPE yylloc = yyloc_default; (yyvsp[-2].expr_vec)->push_back((yyvsp[0].expr)); (yyval.expr_vec) = (yyvsp[-2].expr_vec); } -#line 4469 "bison_parser.cpp" +#line 4488 "bison_parser.cpp" break; - case 158: /* opt_literal_list: literal_list */ -#line 917 "bison_parser.y" - { (yyval.expr_vec) = (yyvsp[0].expr_vec); } -#line 4475 "bison_parser.cpp" + case 158: /* opt_extended_literal_list: extended_literal_list */ +#line 918 "bison_parser.y" + { (yyval.expr_vec) = (yyvsp[0].expr_vec); } +#line 4494 "bison_parser.cpp" break; - case 159: /* opt_literal_list: %empty */ -#line 918 "bison_parser.y" + case 159: /* opt_extended_literal_list: %empty */ +#line 919 "bison_parser.y" { (yyval.expr_vec) = nullptr; } -#line 4481 "bison_parser.cpp" +#line 4500 "bison_parser.cpp" break; - case 160: /* literal_list: literal */ -#line 920 "bison_parser.y" - { + case 160: /* extended_literal_list: casted_extended_literal */ +#line 921 "bison_parser.y" + { (yyval.expr_vec) = new std::vector(); (yyval.expr_vec)->push_back((yyvsp[0].expr)); } -#line 4490 "bison_parser.cpp" +#line 4509 "bison_parser.cpp" break; - case 161: /* literal_list: literal_list ',' literal */ -#line 924 "bison_parser.y" - { + case 161: /* extended_literal_list: extended_literal_list ',' casted_extended_literal */ +#line 925 "bison_parser.y" + { (yyvsp[-2].expr_vec)->push_back((yyvsp[0].expr)); (yyval.expr_vec) = (yyvsp[-2].expr_vec); } -#line 4499 "bison_parser.cpp" +#line 4518 "bison_parser.cpp" break; - case 162: /* expr_alias: expr opt_alias */ -#line 929 "bison_parser.y" + case 163: /* casted_extended_literal: CAST '(' extended_literal AS column_type ')' */ +#line 930 "bison_parser.y" + { + (yyval.expr) = Expr::makeCast((yyvsp[-3].expr), (yyvsp[-1].column_type_t)); +} +#line 4526 "bison_parser.cpp" + break; + + case 164: /* extended_literal: literal */ +#line 934 "bison_parser.y" + { + if ((yyvsp[0].expr)->type == ExprType::kExprParameter) { + delete (yyvsp[0].expr); + yyerror(&yyloc, result, scanner, "Parameter ? is not a valid literal."); + YYERROR; + } + (yyval.expr) = (yyvsp[0].expr); +} +#line 4539 "bison_parser.cpp" + break; + + case 165: /* extended_literal: '-' num_literal */ +#line 942 "bison_parser.y" + { (yyval.expr) = Expr::makeOpUnary(kOpUnaryMinus, (yyvsp[0].expr)); } +#line 4545 "bison_parser.cpp" + break; + + case 166: /* extended_literal: '-' interval_literal */ +#line 943 "bison_parser.y" + { (yyval.expr) = Expr::makeOpUnary(kOpUnaryMinus, (yyvsp[0].expr)); } +#line 4551 "bison_parser.cpp" + break; + + case 167: /* expr_alias: expr opt_alias */ +#line 945 "bison_parser.y" { (yyval.expr) = (yyvsp[-1].expr); if ((yyvsp[0].alias_t)) { @@ -4506,507 +4559,507 @@ YYLTYPE yylloc = yyloc_default; delete (yyvsp[0].alias_t); } } -#line 4511 "bison_parser.cpp" +#line 4563 "bison_parser.cpp" break; - case 168: /* operand: '(' expr ')' */ -#line 939 "bison_parser.y" + case 173: /* operand: '(' expr ')' */ +#line 955 "bison_parser.y" { (yyval.expr) = (yyvsp[-1].expr); } -#line 4517 "bison_parser.cpp" +#line 4569 "bison_parser.cpp" break; - case 178: /* operand: '(' select_no_paren ')' */ -#line 941 "bison_parser.y" + case 183: /* operand: '(' select_no_paren ')' */ +#line 957 "bison_parser.y" { (yyval.expr) = Expr::makeSelect((yyvsp[-1].select_stmt)); } -#line 4525 "bison_parser.cpp" +#line 4577 "bison_parser.cpp" break; - case 181: /* unary_expr: '-' operand */ -#line 947 "bison_parser.y" + case 186: /* unary_expr: '-' operand */ +#line 963 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpUnaryMinus, (yyvsp[0].expr)); } -#line 4531 "bison_parser.cpp" +#line 4583 "bison_parser.cpp" break; - case 182: /* unary_expr: NOT operand */ -#line 948 "bison_parser.y" + case 187: /* unary_expr: NOT operand */ +#line 964 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, (yyvsp[0].expr)); } -#line 4537 "bison_parser.cpp" +#line 4589 "bison_parser.cpp" break; - case 183: /* unary_expr: operand ISNULL */ -#line 949 "bison_parser.y" + case 188: /* unary_expr: operand ISNULL */ +#line 965 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpIsNull, (yyvsp[-1].expr)); } -#line 4543 "bison_parser.cpp" +#line 4595 "bison_parser.cpp" break; - case 184: /* unary_expr: operand IS NULL */ -#line 950 "bison_parser.y" + case 189: /* unary_expr: operand IS NULL */ +#line 966 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpIsNull, (yyvsp[-2].expr)); } -#line 4549 "bison_parser.cpp" +#line 4601 "bison_parser.cpp" break; - case 185: /* unary_expr: operand IS NOT NULL */ -#line 951 "bison_parser.y" + case 190: /* unary_expr: operand IS NOT NULL */ +#line 967 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeOpUnary(kOpIsNull, (yyvsp[-3].expr))); } -#line 4555 "bison_parser.cpp" +#line 4607 "bison_parser.cpp" break; - case 187: /* binary_expr: operand '-' operand */ -#line 953 "bison_parser.y" + case 192: /* binary_expr: operand '-' operand */ +#line 969 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpMinus, (yyvsp[0].expr)); } -#line 4561 "bison_parser.cpp" +#line 4613 "bison_parser.cpp" break; - case 188: /* binary_expr: operand '+' operand */ -#line 954 "bison_parser.y" + case 193: /* binary_expr: operand '+' operand */ +#line 970 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpPlus, (yyvsp[0].expr)); } -#line 4567 "bison_parser.cpp" +#line 4619 "bison_parser.cpp" break; - case 189: /* binary_expr: operand '/' operand */ -#line 955 "bison_parser.y" + case 194: /* binary_expr: operand '/' operand */ +#line 971 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpSlash, (yyvsp[0].expr)); } -#line 4573 "bison_parser.cpp" +#line 4625 "bison_parser.cpp" break; - case 190: /* binary_expr: operand '*' operand */ -#line 956 "bison_parser.y" + case 195: /* binary_expr: operand '*' operand */ +#line 972 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpAsterisk, (yyvsp[0].expr)); } -#line 4579 "bison_parser.cpp" +#line 4631 "bison_parser.cpp" break; - case 191: /* binary_expr: operand '%' operand */ -#line 957 "bison_parser.y" + case 196: /* binary_expr: operand '%' operand */ +#line 973 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpPercentage, (yyvsp[0].expr)); } -#line 4585 "bison_parser.cpp" +#line 4637 "bison_parser.cpp" break; - case 192: /* binary_expr: operand '^' operand */ -#line 958 "bison_parser.y" + case 197: /* binary_expr: operand '^' operand */ +#line 974 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpCaret, (yyvsp[0].expr)); } -#line 4591 "bison_parser.cpp" +#line 4643 "bison_parser.cpp" break; - case 193: /* binary_expr: operand LIKE operand */ -#line 959 "bison_parser.y" + case 198: /* binary_expr: operand LIKE operand */ +#line 975 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpLike, (yyvsp[0].expr)); } -#line 4597 "bison_parser.cpp" +#line 4649 "bison_parser.cpp" break; - case 194: /* binary_expr: operand NOT LIKE operand */ -#line 960 "bison_parser.y" + case 199: /* binary_expr: operand NOT LIKE operand */ +#line 976 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-3].expr), kOpNotLike, (yyvsp[0].expr)); } -#line 4603 "bison_parser.cpp" +#line 4655 "bison_parser.cpp" break; - case 195: /* binary_expr: operand ILIKE operand */ -#line 961 "bison_parser.y" + case 200: /* binary_expr: operand ILIKE operand */ +#line 977 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpILike, (yyvsp[0].expr)); } -#line 4609 "bison_parser.cpp" +#line 4661 "bison_parser.cpp" break; - case 196: /* binary_expr: operand CONCAT operand */ -#line 962 "bison_parser.y" + case 201: /* binary_expr: operand CONCAT operand */ +#line 978 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpConcat, (yyvsp[0].expr)); } -#line 4615 "bison_parser.cpp" +#line 4667 "bison_parser.cpp" break; - case 197: /* logic_expr: expr AND expr */ -#line 964 "bison_parser.y" + case 202: /* logic_expr: expr AND expr */ +#line 980 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpAnd, (yyvsp[0].expr)); } -#line 4621 "bison_parser.cpp" +#line 4673 "bison_parser.cpp" break; - case 198: /* logic_expr: expr OR expr */ -#line 965 "bison_parser.y" + case 203: /* logic_expr: expr OR expr */ +#line 981 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpOr, (yyvsp[0].expr)); } -#line 4627 "bison_parser.cpp" +#line 4679 "bison_parser.cpp" break; - case 199: /* in_expr: operand IN '(' expr_list ')' */ -#line 967 "bison_parser.y" + case 204: /* in_expr: operand IN '(' expr_list ')' */ +#line 983 "bison_parser.y" { (yyval.expr) = Expr::makeInOperator((yyvsp[-4].expr), (yyvsp[-1].expr_vec)); } -#line 4633 "bison_parser.cpp" +#line 4685 "bison_parser.cpp" break; - case 200: /* in_expr: operand NOT IN '(' expr_list ')' */ -#line 968 "bison_parser.y" + case 205: /* in_expr: operand NOT IN '(' expr_list ')' */ +#line 984 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeInOperator((yyvsp[-5].expr), (yyvsp[-1].expr_vec))); } -#line 4639 "bison_parser.cpp" +#line 4691 "bison_parser.cpp" break; - case 201: /* in_expr: operand IN '(' select_no_paren ')' */ -#line 969 "bison_parser.y" + case 206: /* in_expr: operand IN '(' select_no_paren ')' */ +#line 985 "bison_parser.y" { (yyval.expr) = Expr::makeInOperator((yyvsp[-4].expr), (yyvsp[-1].select_stmt)); } -#line 4645 "bison_parser.cpp" +#line 4697 "bison_parser.cpp" break; - case 202: /* in_expr: operand NOT IN '(' select_no_paren ')' */ -#line 970 "bison_parser.y" + case 207: /* in_expr: operand NOT IN '(' select_no_paren ')' */ +#line 986 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeInOperator((yyvsp[-5].expr), (yyvsp[-1].select_stmt))); } -#line 4651 "bison_parser.cpp" +#line 4703 "bison_parser.cpp" break; - case 203: /* case_expr: CASE expr case_list END */ -#line 974 "bison_parser.y" + case 208: /* case_expr: CASE expr case_list END */ +#line 990 "bison_parser.y" { (yyval.expr) = Expr::makeCase((yyvsp[-2].expr), (yyvsp[-1].expr), nullptr); } -#line 4657 "bison_parser.cpp" +#line 4709 "bison_parser.cpp" break; - case 204: /* case_expr: CASE expr case_list ELSE expr END */ -#line 975 "bison_parser.y" + case 209: /* case_expr: CASE expr case_list ELSE expr END */ +#line 991 "bison_parser.y" { (yyval.expr) = Expr::makeCase((yyvsp[-4].expr), (yyvsp[-3].expr), (yyvsp[-1].expr)); } -#line 4663 "bison_parser.cpp" +#line 4715 "bison_parser.cpp" break; - case 205: /* case_expr: CASE case_list END */ -#line 976 "bison_parser.y" + case 210: /* case_expr: CASE case_list END */ +#line 992 "bison_parser.y" { (yyval.expr) = Expr::makeCase(nullptr, (yyvsp[-1].expr), nullptr); } -#line 4669 "bison_parser.cpp" +#line 4721 "bison_parser.cpp" break; - case 206: /* case_expr: CASE case_list ELSE expr END */ -#line 977 "bison_parser.y" + case 211: /* case_expr: CASE case_list ELSE expr END */ +#line 993 "bison_parser.y" { (yyval.expr) = Expr::makeCase(nullptr, (yyvsp[-3].expr), (yyvsp[-1].expr)); } -#line 4675 "bison_parser.cpp" +#line 4727 "bison_parser.cpp" break; - case 207: /* case_list: WHEN expr THEN expr */ -#line 979 "bison_parser.y" + case 212: /* case_list: WHEN expr THEN expr */ +#line 995 "bison_parser.y" { (yyval.expr) = Expr::makeCaseList(Expr::makeCaseListElement((yyvsp[-2].expr), (yyvsp[0].expr))); } -#line 4681 "bison_parser.cpp" +#line 4733 "bison_parser.cpp" break; - case 208: /* case_list: case_list WHEN expr THEN expr */ -#line 980 "bison_parser.y" + case 213: /* case_list: case_list WHEN expr THEN expr */ +#line 996 "bison_parser.y" { (yyval.expr) = Expr::caseListAppend((yyvsp[-4].expr), Expr::makeCaseListElement((yyvsp[-2].expr), (yyvsp[0].expr))); } -#line 4687 "bison_parser.cpp" +#line 4739 "bison_parser.cpp" break; - case 209: /* exists_expr: EXISTS '(' select_no_paren ')' */ -#line 982 "bison_parser.y" + case 214: /* exists_expr: EXISTS '(' select_no_paren ')' */ +#line 998 "bison_parser.y" { (yyval.expr) = Expr::makeExists((yyvsp[-1].select_stmt)); } -#line 4693 "bison_parser.cpp" +#line 4745 "bison_parser.cpp" break; - case 210: /* exists_expr: NOT EXISTS '(' select_no_paren ')' */ -#line 983 "bison_parser.y" + case 215: /* exists_expr: NOT EXISTS '(' select_no_paren ')' */ +#line 999 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeExists((yyvsp[-1].select_stmt))); } -#line 4699 "bison_parser.cpp" +#line 4751 "bison_parser.cpp" break; - case 211: /* comp_expr: operand '=' operand */ -#line 985 "bison_parser.y" + case 216: /* comp_expr: operand '=' operand */ +#line 1001 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpEquals, (yyvsp[0].expr)); } -#line 4705 "bison_parser.cpp" +#line 4757 "bison_parser.cpp" break; - case 212: /* comp_expr: operand EQUALS operand */ -#line 986 "bison_parser.y" + case 217: /* comp_expr: operand EQUALS operand */ +#line 1002 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpEquals, (yyvsp[0].expr)); } -#line 4711 "bison_parser.cpp" +#line 4763 "bison_parser.cpp" break; - case 213: /* comp_expr: operand NOTEQUALS operand */ -#line 987 "bison_parser.y" + case 218: /* comp_expr: operand NOTEQUALS operand */ +#line 1003 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpNotEquals, (yyvsp[0].expr)); } -#line 4717 "bison_parser.cpp" +#line 4769 "bison_parser.cpp" break; - case 214: /* comp_expr: operand '<' operand */ -#line 988 "bison_parser.y" + case 219: /* comp_expr: operand '<' operand */ +#line 1004 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpLess, (yyvsp[0].expr)); } -#line 4723 "bison_parser.cpp" +#line 4775 "bison_parser.cpp" break; - case 215: /* comp_expr: operand '>' operand */ -#line 989 "bison_parser.y" + case 220: /* comp_expr: operand '>' operand */ +#line 1005 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpGreater, (yyvsp[0].expr)); } -#line 4729 "bison_parser.cpp" +#line 4781 "bison_parser.cpp" break; - case 216: /* comp_expr: operand LESSEQ operand */ -#line 990 "bison_parser.y" + case 221: /* comp_expr: operand LESSEQ operand */ +#line 1006 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpLessEq, (yyvsp[0].expr)); } -#line 4735 "bison_parser.cpp" +#line 4787 "bison_parser.cpp" break; - case 217: /* comp_expr: operand GREATEREQ operand */ -#line 991 "bison_parser.y" + case 222: /* comp_expr: operand GREATEREQ operand */ +#line 1007 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpGreaterEq, (yyvsp[0].expr)); } -#line 4741 "bison_parser.cpp" +#line 4793 "bison_parser.cpp" break; - case 218: /* function_expr: IDENTIFIER '(' ')' opt_window */ -#line 995 "bison_parser.y" + case 223: /* function_expr: IDENTIFIER '(' ')' opt_window */ +#line 1011 "bison_parser.y" { (yyval.expr) = Expr::makeFunctionRef((yyvsp[-3].sval), new std::vector(), false, (yyvsp[0].window_description)); } -#line 4747 "bison_parser.cpp" +#line 4799 "bison_parser.cpp" break; - case 219: /* function_expr: IDENTIFIER '(' opt_distinct expr_list ')' opt_window */ -#line 996 "bison_parser.y" + case 224: /* function_expr: IDENTIFIER '(' opt_distinct expr_list ')' opt_window */ +#line 1012 "bison_parser.y" { (yyval.expr) = Expr::makeFunctionRef((yyvsp[-5].sval), (yyvsp[-2].expr_vec), (yyvsp[-3].bval), (yyvsp[0].window_description)); } -#line 4753 "bison_parser.cpp" +#line 4805 "bison_parser.cpp" break; - case 220: /* opt_window: OVER '(' opt_partition opt_order opt_frame_clause ')' */ -#line 1000 "bison_parser.y" + case 225: /* opt_window: OVER '(' opt_partition opt_order opt_frame_clause ')' */ +#line 1016 "bison_parser.y" { (yyval.window_description) = new WindowDescription((yyvsp[-3].expr_vec), (yyvsp[-2].order_vec), (yyvsp[-1].frame_description)); } -#line 4759 "bison_parser.cpp" +#line 4811 "bison_parser.cpp" break; - case 221: /* opt_window: %empty */ -#line 1001 "bison_parser.y" + case 226: /* opt_window: %empty */ +#line 1017 "bison_parser.y" { (yyval.window_description) = nullptr; } -#line 4765 "bison_parser.cpp" +#line 4817 "bison_parser.cpp" break; - case 222: /* opt_partition: PARTITION BY expr_list */ -#line 1003 "bison_parser.y" + case 227: /* opt_partition: PARTITION BY expr_list */ +#line 1019 "bison_parser.y" { (yyval.expr_vec) = (yyvsp[0].expr_vec); } -#line 4771 "bison_parser.cpp" +#line 4823 "bison_parser.cpp" break; - case 223: /* opt_partition: %empty */ -#line 1004 "bison_parser.y" + case 228: /* opt_partition: %empty */ +#line 1020 "bison_parser.y" { (yyval.expr_vec) = nullptr; } -#line 4777 "bison_parser.cpp" +#line 4829 "bison_parser.cpp" break; - case 224: /* opt_frame_clause: frame_type frame_bound */ -#line 1009 "bison_parser.y" + case 229: /* opt_frame_clause: frame_type frame_bound */ +#line 1025 "bison_parser.y" { (yyval.frame_description) = new FrameDescription{(yyvsp[-1].frame_type), (yyvsp[0].frame_bound), new FrameBound{0, kCurrentRow, false}}; } -#line 4783 "bison_parser.cpp" +#line 4835 "bison_parser.cpp" break; - case 225: /* opt_frame_clause: frame_type BETWEEN frame_bound AND frame_bound */ -#line 1010 "bison_parser.y" + case 230: /* opt_frame_clause: frame_type BETWEEN frame_bound AND frame_bound */ +#line 1026 "bison_parser.y" { (yyval.frame_description) = new FrameDescription{(yyvsp[-4].frame_type), (yyvsp[-2].frame_bound), (yyvsp[0].frame_bound)}; } -#line 4789 "bison_parser.cpp" +#line 4841 "bison_parser.cpp" break; - case 226: /* opt_frame_clause: %empty */ -#line 1011 "bison_parser.y" + case 231: /* opt_frame_clause: %empty */ +#line 1027 "bison_parser.y" { (yyval.frame_description) = new FrameDescription{kRange, new FrameBound{0, kPreceding, true}, new FrameBound{0, kCurrentRow, false}}; } -#line 4797 "bison_parser.cpp" +#line 4849 "bison_parser.cpp" break; - case 227: /* frame_type: RANGE */ -#line 1015 "bison_parser.y" + case 232: /* frame_type: RANGE */ +#line 1031 "bison_parser.y" { (yyval.frame_type) = kRange; } -#line 4803 "bison_parser.cpp" +#line 4855 "bison_parser.cpp" break; - case 228: /* frame_type: ROWS */ -#line 1016 "bison_parser.y" + case 233: /* frame_type: ROWS */ +#line 1032 "bison_parser.y" { (yyval.frame_type) = kRows; } -#line 4809 "bison_parser.cpp" +#line 4861 "bison_parser.cpp" break; - case 229: /* frame_type: GROUPS */ -#line 1017 "bison_parser.y" + case 234: /* frame_type: GROUPS */ +#line 1033 "bison_parser.y" { (yyval.frame_type) = kGroups; } -#line 4815 "bison_parser.cpp" +#line 4867 "bison_parser.cpp" break; - case 230: /* frame_bound: UNBOUNDED PRECEDING */ -#line 1019 "bison_parser.y" + case 235: /* frame_bound: UNBOUNDED PRECEDING */ +#line 1035 "bison_parser.y" { (yyval.frame_bound) = new FrameBound{0, kPreceding, true}; } -#line 4821 "bison_parser.cpp" +#line 4873 "bison_parser.cpp" break; - case 231: /* frame_bound: INTVAL PRECEDING */ -#line 1020 "bison_parser.y" + case 236: /* frame_bound: INTVAL PRECEDING */ +#line 1036 "bison_parser.y" { (yyval.frame_bound) = new FrameBound{(yyvsp[-1].ival), kPreceding, false}; } -#line 4827 "bison_parser.cpp" +#line 4879 "bison_parser.cpp" break; - case 232: /* frame_bound: UNBOUNDED FOLLOWING */ -#line 1021 "bison_parser.y" + case 237: /* frame_bound: UNBOUNDED FOLLOWING */ +#line 1037 "bison_parser.y" { (yyval.frame_bound) = new FrameBound{0, kFollowing, true}; } -#line 4833 "bison_parser.cpp" +#line 4885 "bison_parser.cpp" break; - case 233: /* frame_bound: INTVAL FOLLOWING */ -#line 1022 "bison_parser.y" + case 238: /* frame_bound: INTVAL FOLLOWING */ +#line 1038 "bison_parser.y" { (yyval.frame_bound) = new FrameBound{(yyvsp[-1].ival), kFollowing, false}; } -#line 4839 "bison_parser.cpp" +#line 4891 "bison_parser.cpp" break; - case 234: /* frame_bound: CURRENT_ROW */ -#line 1023 "bison_parser.y" + case 239: /* frame_bound: CURRENT_ROW */ +#line 1039 "bison_parser.y" { (yyval.frame_bound) = new FrameBound{0, kCurrentRow, false}; } -#line 4845 "bison_parser.cpp" +#line 4897 "bison_parser.cpp" break; - case 235: /* extract_expr: EXTRACT '(' datetime_field FROM expr ')' */ -#line 1025 "bison_parser.y" + case 240: /* extract_expr: EXTRACT '(' datetime_field FROM expr ')' */ +#line 1041 "bison_parser.y" { (yyval.expr) = Expr::makeExtract((yyvsp[-3].datetime_field), (yyvsp[-1].expr)); } -#line 4851 "bison_parser.cpp" +#line 4903 "bison_parser.cpp" break; - case 236: /* cast_expr: CAST '(' expr AS column_type ')' */ -#line 1027 "bison_parser.y" + case 241: /* cast_expr: CAST '(' expr AS column_type ')' */ +#line 1043 "bison_parser.y" { (yyval.expr) = Expr::makeCast((yyvsp[-3].expr), (yyvsp[-1].column_type_t)); } -#line 4857 "bison_parser.cpp" +#line 4909 "bison_parser.cpp" break; - case 237: /* datetime_field: SECOND */ -#line 1029 "bison_parser.y" + case 242: /* datetime_field: SECOND */ +#line 1045 "bison_parser.y" { (yyval.datetime_field) = kDatetimeSecond; } -#line 4863 "bison_parser.cpp" +#line 4915 "bison_parser.cpp" break; - case 238: /* datetime_field: MINUTE */ -#line 1030 "bison_parser.y" + case 243: /* datetime_field: MINUTE */ +#line 1046 "bison_parser.y" { (yyval.datetime_field) = kDatetimeMinute; } -#line 4869 "bison_parser.cpp" +#line 4921 "bison_parser.cpp" break; - case 239: /* datetime_field: HOUR */ -#line 1031 "bison_parser.y" + case 244: /* datetime_field: HOUR */ +#line 1047 "bison_parser.y" { (yyval.datetime_field) = kDatetimeHour; } -#line 4875 "bison_parser.cpp" +#line 4927 "bison_parser.cpp" break; - case 240: /* datetime_field: DAY */ -#line 1032 "bison_parser.y" + case 245: /* datetime_field: DAY */ +#line 1048 "bison_parser.y" { (yyval.datetime_field) = kDatetimeDay; } -#line 4881 "bison_parser.cpp" +#line 4933 "bison_parser.cpp" break; - case 241: /* datetime_field: MONTH */ -#line 1033 "bison_parser.y" + case 246: /* datetime_field: MONTH */ +#line 1049 "bison_parser.y" { (yyval.datetime_field) = kDatetimeMonth; } -#line 4887 "bison_parser.cpp" +#line 4939 "bison_parser.cpp" break; - case 242: /* datetime_field: YEAR */ -#line 1034 "bison_parser.y" + case 247: /* datetime_field: YEAR */ +#line 1050 "bison_parser.y" { (yyval.datetime_field) = kDatetimeYear; } -#line 4893 "bison_parser.cpp" +#line 4945 "bison_parser.cpp" break; - case 243: /* datetime_field_plural: SECONDS */ -#line 1036 "bison_parser.y" + case 248: /* datetime_field_plural: SECONDS */ +#line 1052 "bison_parser.y" { (yyval.datetime_field) = kDatetimeSecond; } -#line 4899 "bison_parser.cpp" +#line 4951 "bison_parser.cpp" break; - case 244: /* datetime_field_plural: MINUTES */ -#line 1037 "bison_parser.y" + case 249: /* datetime_field_plural: MINUTES */ +#line 1053 "bison_parser.y" { (yyval.datetime_field) = kDatetimeMinute; } -#line 4905 "bison_parser.cpp" +#line 4957 "bison_parser.cpp" break; - case 245: /* datetime_field_plural: HOURS */ -#line 1038 "bison_parser.y" + case 250: /* datetime_field_plural: HOURS */ +#line 1054 "bison_parser.y" { (yyval.datetime_field) = kDatetimeHour; } -#line 4911 "bison_parser.cpp" +#line 4963 "bison_parser.cpp" break; - case 246: /* datetime_field_plural: DAYS */ -#line 1039 "bison_parser.y" + case 251: /* datetime_field_plural: DAYS */ +#line 1055 "bison_parser.y" { (yyval.datetime_field) = kDatetimeDay; } -#line 4917 "bison_parser.cpp" +#line 4969 "bison_parser.cpp" break; - case 247: /* datetime_field_plural: MONTHS */ -#line 1040 "bison_parser.y" + case 252: /* datetime_field_plural: MONTHS */ +#line 1056 "bison_parser.y" { (yyval.datetime_field) = kDatetimeMonth; } -#line 4923 "bison_parser.cpp" +#line 4975 "bison_parser.cpp" break; - case 248: /* datetime_field_plural: YEARS */ -#line 1041 "bison_parser.y" + case 253: /* datetime_field_plural: YEARS */ +#line 1057 "bison_parser.y" { (yyval.datetime_field) = kDatetimeYear; } -#line 4929 "bison_parser.cpp" +#line 4981 "bison_parser.cpp" break; - case 251: /* array_expr: ARRAY '[' expr_list ']' */ -#line 1045 "bison_parser.y" + case 256: /* array_expr: ARRAY '[' expr_list ']' */ +#line 1061 "bison_parser.y" { (yyval.expr) = Expr::makeArray((yyvsp[-1].expr_vec)); } -#line 4935 "bison_parser.cpp" +#line 4987 "bison_parser.cpp" break; - case 252: /* array_index: operand '[' int_literal ']' */ -#line 1047 "bison_parser.y" + case 257: /* array_index: operand '[' int_literal ']' */ +#line 1063 "bison_parser.y" { (yyval.expr) = Expr::makeArrayIndex((yyvsp[-3].expr), (yyvsp[-1].expr)->ival); } -#line 4941 "bison_parser.cpp" +#line 4993 "bison_parser.cpp" break; - case 253: /* between_expr: operand BETWEEN operand AND operand */ -#line 1049 "bison_parser.y" + case 258: /* between_expr: operand BETWEEN operand AND operand */ +#line 1065 "bison_parser.y" { (yyval.expr) = Expr::makeBetween((yyvsp[-4].expr), (yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 4947 "bison_parser.cpp" +#line 4999 "bison_parser.cpp" break; - case 254: /* column_name: IDENTIFIER */ -#line 1051 "bison_parser.y" + case 259: /* column_name: IDENTIFIER */ +#line 1067 "bison_parser.y" { (yyval.expr) = Expr::makeColumnRef((yyvsp[0].sval)); } -#line 4953 "bison_parser.cpp" +#line 5005 "bison_parser.cpp" break; - case 255: /* column_name: IDENTIFIER '.' IDENTIFIER */ -#line 1052 "bison_parser.y" + case 260: /* column_name: IDENTIFIER '.' IDENTIFIER */ +#line 1068 "bison_parser.y" { (yyval.expr) = Expr::makeColumnRef((yyvsp[-2].sval), (yyvsp[0].sval)); } -#line 4959 "bison_parser.cpp" +#line 5011 "bison_parser.cpp" break; - case 256: /* column_name: '*' */ -#line 1053 "bison_parser.y" + case 261: /* column_name: '*' */ +#line 1069 "bison_parser.y" { (yyval.expr) = Expr::makeStar(); } -#line 4965 "bison_parser.cpp" +#line 5017 "bison_parser.cpp" break; - case 257: /* column_name: IDENTIFIER '.' '*' */ -#line 1054 "bison_parser.y" + case 262: /* column_name: IDENTIFIER '.' '*' */ +#line 1070 "bison_parser.y" { (yyval.expr) = Expr::makeStar((yyvsp[-2].sval)); } -#line 4971 "bison_parser.cpp" +#line 5023 "bison_parser.cpp" break; - case 265: /* string_literal: STRING */ -#line 1058 "bison_parser.y" + case 270: /* string_literal: STRING */ +#line 1074 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral((yyvsp[0].sval)); } -#line 4977 "bison_parser.cpp" +#line 5029 "bison_parser.cpp" break; - case 266: /* bool_literal: TRUE */ -#line 1060 "bison_parser.y" + case 271: /* bool_literal: TRUE */ +#line 1076 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral(true); } -#line 4983 "bison_parser.cpp" +#line 5035 "bison_parser.cpp" break; - case 267: /* bool_literal: FALSE */ -#line 1061 "bison_parser.y" + case 272: /* bool_literal: FALSE */ +#line 1077 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral(false); } -#line 4989 "bison_parser.cpp" +#line 5041 "bison_parser.cpp" break; - case 268: /* num_literal: FLOATVAL */ -#line 1063 "bison_parser.y" + case 273: /* num_literal: FLOATVAL */ +#line 1079 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral((yyvsp[0].fval)); } -#line 4995 "bison_parser.cpp" +#line 5047 "bison_parser.cpp" break; - case 270: /* int_literal: INTVAL */ -#line 1066 "bison_parser.y" + case 275: /* int_literal: INTVAL */ +#line 1082 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral((yyvsp[0].ival)); } -#line 5001 "bison_parser.cpp" +#line 5053 "bison_parser.cpp" break; - case 271: /* null_literal: NULL */ -#line 1068 "bison_parser.y" + case 276: /* null_literal: NULL */ +#line 1084 "bison_parser.y" { (yyval.expr) = Expr::makeNullLiteral(); } -#line 5007 "bison_parser.cpp" +#line 5059 "bison_parser.cpp" break; - case 272: /* date_literal: DATE STRING */ -#line 1070 "bison_parser.y" + case 277: /* date_literal: DATE STRING */ +#line 1086 "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 +5070,17 @@ YYLTYPE yylloc = yyloc_default; } (yyval.expr) = Expr::makeDateLiteral((yyvsp[0].sval)); } -#line 5022 "bison_parser.cpp" +#line 5074 "bison_parser.cpp" break; - case 273: /* interval_literal: int_literal duration_field */ -#line 1081 "bison_parser.y" - { - (yyval.expr) = Expr::makeIntervalLiteral((yyvsp[-1].expr)->ival, (yyvsp[0].datetime_field)); - delete (yyvsp[-1].expr); -} -#line 5031 "bison_parser.cpp" + case 278: /* interval_literal: INTVAL duration_field */ +#line 1097 "bison_parser.y" + { (yyval.expr) = Expr::makeIntervalLiteral((yyvsp[-1].ival), (yyvsp[0].datetime_field)); } +#line 5080 "bison_parser.cpp" break; - case 274: /* interval_literal: INTERVAL STRING datetime_field */ -#line 1085 "bison_parser.y" + case 279: /* interval_literal: INTERVAL STRING datetime_field */ +#line 1098 "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 +5092,11 @@ YYLTYPE yylloc = yyloc_default; free((yyvsp[-1].sval)); (yyval.expr) = Expr::makeIntervalLiteral(duration, (yyvsp[0].datetime_field)); } -#line 5047 "bison_parser.cpp" +#line 5096 "bison_parser.cpp" break; - case 275: /* interval_literal: INTERVAL STRING */ -#line 1096 "bison_parser.y" + case 280: /* interval_literal: INTERVAL STRING */ +#line 1109 "bison_parser.y" { int duration{0}, chars_parsed{0}; // 'seconds' and 'minutes' are the longest accepted interval qualifiers (7 chars) + null byte @@ -5078,61 +5128,61 @@ YYLTYPE yylloc = yyloc_default; } (yyval.expr) = Expr::makeIntervalLiteral(duration, unit); } -#line 5083 "bison_parser.cpp" +#line 5132 "bison_parser.cpp" break; - case 276: /* param_expr: '?' */ -#line 1128 "bison_parser.y" + case 281: /* param_expr: '?' */ +#line 1141 "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 5093 "bison_parser.cpp" +#line 5142 "bison_parser.cpp" break; - case 278: /* table_ref: table_ref_commalist ',' table_ref_atomic */ -#line 1137 "bison_parser.y" + case 283: /* table_ref: table_ref_commalist ',' table_ref_atomic */ +#line 1150 "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 5104 "bison_parser.cpp" +#line 5153 "bison_parser.cpp" break; - case 282: /* nonjoin_table_ref_atomic: '(' select_statement ')' opt_table_alias */ -#line 1146 "bison_parser.y" + case 287: /* nonjoin_table_ref_atomic: '(' select_statement ')' opt_table_alias */ +#line 1159 "bison_parser.y" { auto tbl = new TableRef(kTableSelect); tbl->select = (yyvsp[-2].select_stmt); tbl->alias = (yyvsp[0].alias_t); (yyval.table) = tbl; } -#line 5115 "bison_parser.cpp" +#line 5164 "bison_parser.cpp" break; - case 283: /* table_ref_commalist: table_ref_atomic */ -#line 1153 "bison_parser.y" + case 288: /* table_ref_commalist: table_ref_atomic */ +#line 1166 "bison_parser.y" { (yyval.table_vec) = new std::vector(); (yyval.table_vec)->push_back((yyvsp[0].table)); } -#line 5124 "bison_parser.cpp" +#line 5173 "bison_parser.cpp" break; - case 284: /* table_ref_commalist: table_ref_commalist ',' table_ref_atomic */ -#line 1157 "bison_parser.y" + case 289: /* table_ref_commalist: table_ref_commalist ',' table_ref_atomic */ +#line 1170 "bison_parser.y" { (yyvsp[-2].table_vec)->push_back((yyvsp[0].table)); (yyval.table_vec) = (yyvsp[-2].table_vec); } -#line 5133 "bison_parser.cpp" +#line 5182 "bison_parser.cpp" break; - case 285: /* table_ref_name: table_name opt_table_alias */ -#line 1162 "bison_parser.y" + case 290: /* table_ref_name: table_name opt_table_alias */ +#line 1175 "bison_parser.y" { auto tbl = new TableRef(kTableName); tbl->schema = (yyvsp[-1].table_name).schema; @@ -5140,215 +5190,215 @@ YYLTYPE yylloc = yyloc_default; tbl->alias = (yyvsp[0].alias_t); (yyval.table) = tbl; } -#line 5145 "bison_parser.cpp" +#line 5194 "bison_parser.cpp" break; - case 286: /* table_ref_name_no_alias: table_name */ -#line 1170 "bison_parser.y" + case 291: /* table_ref_name_no_alias: table_name */ +#line 1183 "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 5155 "bison_parser.cpp" +#line 5204 "bison_parser.cpp" break; - case 287: /* table_name: IDENTIFIER */ -#line 1176 "bison_parser.y" + case 292: /* table_name: IDENTIFIER */ +#line 1189 "bison_parser.y" { (yyval.table_name).schema = nullptr; (yyval.table_name).name = (yyvsp[0].sval); } -#line 5164 "bison_parser.cpp" +#line 5213 "bison_parser.cpp" break; - case 288: /* table_name: IDENTIFIER '.' IDENTIFIER */ -#line 1180 "bison_parser.y" + case 293: /* table_name: IDENTIFIER '.' IDENTIFIER */ +#line 1193 "bison_parser.y" { (yyval.table_name).schema = (yyvsp[-2].sval); (yyval.table_name).name = (yyvsp[0].sval); } -#line 5173 "bison_parser.cpp" +#line 5222 "bison_parser.cpp" break; - case 289: /* opt_index_name: IDENTIFIER */ -#line 1185 "bison_parser.y" + case 294: /* opt_index_name: IDENTIFIER */ +#line 1198 "bison_parser.y" { (yyval.sval) = (yyvsp[0].sval); } -#line 5179 "bison_parser.cpp" +#line 5228 "bison_parser.cpp" break; - case 290: /* opt_index_name: %empty */ -#line 1186 "bison_parser.y" + case 295: /* opt_index_name: %empty */ +#line 1199 "bison_parser.y" { (yyval.sval) = nullptr; } -#line 5185 "bison_parser.cpp" +#line 5234 "bison_parser.cpp" break; - case 292: /* table_alias: AS IDENTIFIER '(' ident_commalist ')' */ -#line 1188 "bison_parser.y" + case 297: /* table_alias: AS IDENTIFIER '(' ident_commalist ')' */ +#line 1201 "bison_parser.y" { (yyval.alias_t) = new Alias((yyvsp[-3].sval), (yyvsp[-1].str_vec)); } -#line 5191 "bison_parser.cpp" +#line 5240 "bison_parser.cpp" break; - case 294: /* opt_table_alias: %empty */ -#line 1190 "bison_parser.y" + case 299: /* opt_table_alias: %empty */ +#line 1203 "bison_parser.y" { (yyval.alias_t) = nullptr; } -#line 5197 "bison_parser.cpp" +#line 5246 "bison_parser.cpp" break; - case 295: /* alias: AS IDENTIFIER */ -#line 1192 "bison_parser.y" + case 300: /* alias: AS IDENTIFIER */ +#line 1205 "bison_parser.y" { (yyval.alias_t) = new Alias((yyvsp[0].sval)); } -#line 5203 "bison_parser.cpp" +#line 5252 "bison_parser.cpp" break; - case 296: /* alias: IDENTIFIER */ -#line 1193 "bison_parser.y" + case 301: /* alias: IDENTIFIER */ +#line 1206 "bison_parser.y" { (yyval.alias_t) = new Alias((yyvsp[0].sval)); } -#line 5209 "bison_parser.cpp" +#line 5258 "bison_parser.cpp" break; - case 298: /* opt_alias: %empty */ -#line 1195 "bison_parser.y" + case 303: /* opt_alias: %empty */ +#line 1208 "bison_parser.y" { (yyval.alias_t) = nullptr; } -#line 5215 "bison_parser.cpp" +#line 5264 "bison_parser.cpp" break; - case 299: /* opt_locking_clause: opt_locking_clause_list */ -#line 1201 "bison_parser.y" + case 304: /* opt_locking_clause: opt_locking_clause_list */ +#line 1214 "bison_parser.y" { (yyval.locking_clause_vec) = (yyvsp[0].locking_clause_vec); } -#line 5221 "bison_parser.cpp" +#line 5270 "bison_parser.cpp" break; - case 300: /* opt_locking_clause: %empty */ -#line 1202 "bison_parser.y" + case 305: /* opt_locking_clause: %empty */ +#line 1215 "bison_parser.y" { (yyval.locking_clause_vec) = nullptr; } -#line 5227 "bison_parser.cpp" +#line 5276 "bison_parser.cpp" break; - case 301: /* opt_locking_clause_list: locking_clause */ -#line 1204 "bison_parser.y" + case 306: /* opt_locking_clause_list: locking_clause */ +#line 1217 "bison_parser.y" { (yyval.locking_clause_vec) = new std::vector(); (yyval.locking_clause_vec)->push_back((yyvsp[0].locking_t)); } -#line 5236 "bison_parser.cpp" +#line 5285 "bison_parser.cpp" break; - case 302: /* opt_locking_clause_list: opt_locking_clause_list locking_clause */ -#line 1208 "bison_parser.y" + case 307: /* opt_locking_clause_list: opt_locking_clause_list locking_clause */ +#line 1221 "bison_parser.y" { (yyvsp[-1].locking_clause_vec)->push_back((yyvsp[0].locking_t)); (yyval.locking_clause_vec) = (yyvsp[-1].locking_clause_vec); } -#line 5245 "bison_parser.cpp" +#line 5294 "bison_parser.cpp" break; - case 303: /* locking_clause: FOR row_lock_mode opt_row_lock_policy */ -#line 1213 "bison_parser.y" + case 308: /* locking_clause: FOR row_lock_mode opt_row_lock_policy */ +#line 1226 "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 5256 "bison_parser.cpp" +#line 5305 "bison_parser.cpp" break; - case 304: /* locking_clause: FOR row_lock_mode OF ident_commalist opt_row_lock_policy */ -#line 1219 "bison_parser.y" + case 309: /* locking_clause: FOR row_lock_mode OF ident_commalist opt_row_lock_policy */ +#line 1232 "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 5267 "bison_parser.cpp" +#line 5316 "bison_parser.cpp" break; - case 305: /* row_lock_mode: UPDATE */ -#line 1226 "bison_parser.y" + case 310: /* row_lock_mode: UPDATE */ +#line 1239 "bison_parser.y" { (yyval.lock_mode_t) = RowLockMode::ForUpdate; } -#line 5273 "bison_parser.cpp" +#line 5322 "bison_parser.cpp" break; - case 306: /* row_lock_mode: NO KEY UPDATE */ -#line 1227 "bison_parser.y" + case 311: /* row_lock_mode: NO KEY UPDATE */ +#line 1240 "bison_parser.y" { (yyval.lock_mode_t) = RowLockMode::ForNoKeyUpdate; } -#line 5279 "bison_parser.cpp" +#line 5328 "bison_parser.cpp" break; - case 307: /* row_lock_mode: SHARE */ -#line 1228 "bison_parser.y" + case 312: /* row_lock_mode: SHARE */ +#line 1241 "bison_parser.y" { (yyval.lock_mode_t) = RowLockMode::ForShare; } -#line 5285 "bison_parser.cpp" +#line 5334 "bison_parser.cpp" break; - case 308: /* row_lock_mode: KEY SHARE */ -#line 1229 "bison_parser.y" + case 313: /* row_lock_mode: KEY SHARE */ +#line 1242 "bison_parser.y" { (yyval.lock_mode_t) = RowLockMode::ForKeyShare; } -#line 5291 "bison_parser.cpp" +#line 5340 "bison_parser.cpp" break; - case 309: /* opt_row_lock_policy: SKIP LOCKED */ -#line 1231 "bison_parser.y" + case 314: /* opt_row_lock_policy: SKIP LOCKED */ +#line 1244 "bison_parser.y" { (yyval.lock_wait_policy_t) = RowLockWaitPolicy::SkipLocked; } -#line 5297 "bison_parser.cpp" +#line 5346 "bison_parser.cpp" break; - case 310: /* opt_row_lock_policy: NOWAIT */ -#line 1232 "bison_parser.y" + case 315: /* opt_row_lock_policy: NOWAIT */ +#line 1245 "bison_parser.y" { (yyval.lock_wait_policy_t) = RowLockWaitPolicy::NoWait; } -#line 5303 "bison_parser.cpp" +#line 5352 "bison_parser.cpp" break; - case 311: /* opt_row_lock_policy: %empty */ -#line 1233 "bison_parser.y" + case 316: /* opt_row_lock_policy: %empty */ +#line 1246 "bison_parser.y" { (yyval.lock_wait_policy_t) = RowLockWaitPolicy::None; } -#line 5309 "bison_parser.cpp" +#line 5358 "bison_parser.cpp" break; - case 313: /* opt_with_clause: %empty */ -#line 1239 "bison_parser.y" + case 318: /* opt_with_clause: %empty */ +#line 1252 "bison_parser.y" { (yyval.with_description_vec) = nullptr; } -#line 5315 "bison_parser.cpp" +#line 5364 "bison_parser.cpp" break; - case 314: /* with_clause: WITH with_description_list */ -#line 1241 "bison_parser.y" + case 319: /* with_clause: WITH with_description_list */ +#line 1254 "bison_parser.y" { (yyval.with_description_vec) = (yyvsp[0].with_description_vec); } -#line 5321 "bison_parser.cpp" +#line 5370 "bison_parser.cpp" break; - case 315: /* with_description_list: with_description */ -#line 1243 "bison_parser.y" + case 320: /* with_description_list: with_description */ +#line 1256 "bison_parser.y" { (yyval.with_description_vec) = new std::vector(); (yyval.with_description_vec)->push_back((yyvsp[0].with_description_t)); } -#line 5330 "bison_parser.cpp" +#line 5379 "bison_parser.cpp" break; - case 316: /* with_description_list: with_description_list ',' with_description */ -#line 1247 "bison_parser.y" + case 321: /* with_description_list: with_description_list ',' with_description */ +#line 1260 "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 5339 "bison_parser.cpp" +#line 5388 "bison_parser.cpp" break; - case 317: /* with_description: IDENTIFIER AS select_with_paren */ -#line 1252 "bison_parser.y" + case 322: /* with_description: IDENTIFIER AS select_with_paren */ +#line 1265 "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 5349 "bison_parser.cpp" +#line 5398 "bison_parser.cpp" break; - case 318: /* join_clause: table_ref_atomic NATURAL JOIN nonjoin_table_ref_atomic */ -#line 1262 "bison_parser.y" + case 323: /* join_clause: table_ref_atomic NATURAL JOIN nonjoin_table_ref_atomic */ +#line 1275 "bison_parser.y" { (yyval.table) = new TableRef(kTableJoin); (yyval.table)->join = new JoinDefinition(); @@ -5356,11 +5406,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.table)->join->left = (yyvsp[-3].table); (yyval.table)->join->right = (yyvsp[0].table); } -#line 5361 "bison_parser.cpp" +#line 5410 "bison_parser.cpp" break; - case 319: /* join_clause: table_ref_atomic opt_join_type JOIN table_ref_atomic ON join_condition */ -#line 1269 "bison_parser.y" + case 324: /* join_clause: table_ref_atomic opt_join_type JOIN table_ref_atomic ON join_condition */ +#line 1282 "bison_parser.y" { (yyval.table) = new TableRef(kTableJoin); (yyval.table)->join = new JoinDefinition(); @@ -5369,11 +5419,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.table)->join->right = (yyvsp[-2].table); (yyval.table)->join->condition = (yyvsp[0].expr); } -#line 5374 "bison_parser.cpp" +#line 5423 "bison_parser.cpp" break; - case 320: /* join_clause: table_ref_atomic opt_join_type JOIN table_ref_atomic USING '(' ident_commalist ')' */ -#line 1277 "bison_parser.y" + case 325: /* join_clause: table_ref_atomic opt_join_type JOIN table_ref_atomic USING '(' ident_commalist ')' */ +#line 1290 "bison_parser.y" { (yyval.table) = new TableRef(kTableJoin); (yyval.table)->join = new JoinDefinition(); @@ -5382,89 +5432,89 @@ YYLTYPE yylloc = yyloc_default; (yyval.table)->join->right = (yyvsp[-4].table); (yyval.table)->join->namedColumns = (yyvsp[-1].str_vec); } -#line 5387 "bison_parser.cpp" +#line 5436 "bison_parser.cpp" break; - case 321: /* opt_join_type: INNER */ -#line 1286 "bison_parser.y" + case 326: /* opt_join_type: INNER */ +#line 1299 "bison_parser.y" { (yyval.join_type) = kJoinInner; } -#line 5393 "bison_parser.cpp" +#line 5442 "bison_parser.cpp" break; - case 322: /* opt_join_type: LEFT OUTER */ -#line 1287 "bison_parser.y" + case 327: /* opt_join_type: LEFT OUTER */ +#line 1300 "bison_parser.y" { (yyval.join_type) = kJoinLeft; } -#line 5399 "bison_parser.cpp" +#line 5448 "bison_parser.cpp" break; - case 323: /* opt_join_type: LEFT */ -#line 1288 "bison_parser.y" + case 328: /* opt_join_type: LEFT */ +#line 1301 "bison_parser.y" { (yyval.join_type) = kJoinLeft; } -#line 5405 "bison_parser.cpp" +#line 5454 "bison_parser.cpp" break; - case 324: /* opt_join_type: RIGHT OUTER */ -#line 1289 "bison_parser.y" + case 329: /* opt_join_type: RIGHT OUTER */ +#line 1302 "bison_parser.y" { (yyval.join_type) = kJoinRight; } -#line 5411 "bison_parser.cpp" +#line 5460 "bison_parser.cpp" break; - case 325: /* opt_join_type: RIGHT */ -#line 1290 "bison_parser.y" + case 330: /* opt_join_type: RIGHT */ +#line 1303 "bison_parser.y" { (yyval.join_type) = kJoinRight; } -#line 5417 "bison_parser.cpp" +#line 5466 "bison_parser.cpp" break; - case 326: /* opt_join_type: FULL OUTER */ -#line 1291 "bison_parser.y" + case 331: /* opt_join_type: FULL OUTER */ +#line 1304 "bison_parser.y" { (yyval.join_type) = kJoinFull; } -#line 5423 "bison_parser.cpp" +#line 5472 "bison_parser.cpp" break; - case 327: /* opt_join_type: OUTER */ -#line 1292 "bison_parser.y" + case 332: /* opt_join_type: OUTER */ +#line 1305 "bison_parser.y" { (yyval.join_type) = kJoinFull; } -#line 5429 "bison_parser.cpp" +#line 5478 "bison_parser.cpp" break; - case 328: /* opt_join_type: FULL */ -#line 1293 "bison_parser.y" + case 333: /* opt_join_type: FULL */ +#line 1306 "bison_parser.y" { (yyval.join_type) = kJoinFull; } -#line 5435 "bison_parser.cpp" +#line 5484 "bison_parser.cpp" break; - case 329: /* opt_join_type: CROSS */ -#line 1294 "bison_parser.y" + case 334: /* opt_join_type: CROSS */ +#line 1307 "bison_parser.y" { (yyval.join_type) = kJoinCross; } -#line 5441 "bison_parser.cpp" +#line 5490 "bison_parser.cpp" break; - case 330: /* opt_join_type: %empty */ -#line 1295 "bison_parser.y" + case 335: /* opt_join_type: %empty */ +#line 1308 "bison_parser.y" { (yyval.join_type) = kJoinInner; } -#line 5447 "bison_parser.cpp" +#line 5496 "bison_parser.cpp" break; - case 334: /* ident_commalist: IDENTIFIER */ -#line 1306 "bison_parser.y" + case 339: /* ident_commalist: IDENTIFIER */ +#line 1319 "bison_parser.y" { (yyval.str_vec) = new std::vector(); (yyval.str_vec)->push_back((yyvsp[0].sval)); } -#line 5456 "bison_parser.cpp" +#line 5505 "bison_parser.cpp" break; - case 335: /* ident_commalist: ident_commalist ',' IDENTIFIER */ -#line 1310 "bison_parser.y" + case 340: /* ident_commalist: ident_commalist ',' IDENTIFIER */ +#line 1323 "bison_parser.y" { (yyvsp[-2].str_vec)->push_back((yyvsp[0].sval)); (yyval.str_vec) = (yyvsp[-2].str_vec); } -#line 5465 "bison_parser.cpp" +#line 5514 "bison_parser.cpp" break; -#line 5469 "bison_parser.cpp" +#line 5518 "bison_parser.cpp" default: break; } @@ -5693,11 +5743,13 @@ YYLTYPE yylloc = yyloc_default; return yyresult; } -#line 1316 "bison_parser.y" +#line 1329 "bison_parser.y" + -// clang-format on /********************************* ** Section 4: Additional C code *********************************/ /* empty */ + + // clang-format on diff --git a/src/parser/bison_parser.h b/src/parser/bison_parser.h index 41666cc2..0e002d81 100644 --- a/src/parser/bison_parser.h +++ b/src/parser/bison_parser.h @@ -36,19 +36,19 @@ private implementation details that can be changed or removed. */ #ifndef YY_HSQL_BISON_PARSER_H_INCLUDED -#define YY_HSQL_BISON_PARSER_H_INCLUDED +# define YY_HSQL_BISON_PARSER_H_INCLUDED /* Debug traces. */ #ifndef HSQL_DEBUG -#if defined YYDEBUG +# if defined YYDEBUG #if YYDEBUG -#define HSQL_DEBUG 1 -#else -#define HSQL_DEBUG 0 -#endif -#else /* ! defined YYDEBUG */ -#define HSQL_DEBUG 0 -#endif /* ! defined YYDEBUG */ -#endif /* ! defined HSQL_DEBUG */ +# define HSQL_DEBUG 1 +# else +# define HSQL_DEBUG 0 +# endif +# else /* ! defined YYDEBUG */ +# define HSQL_DEBUG 0 +# endif /* ! defined YYDEBUG */ +#endif /* ! defined HSQL_DEBUG */ #if HSQL_DEBUG extern int hsql_debug; #endif @@ -80,195 +80,197 @@ extern int hsql_debug; /* Token kinds. */ #ifndef HSQL_TOKENTYPE -#define HSQL_TOKENTYPE -enum hsql_tokentype { - SQL_HSQL_EMPTY = -2, - SQL_YYEOF = 0, /* "end of file" */ - SQL_HSQL_error = 256, /* error */ - SQL_HSQL_UNDEF = 257, /* "invalid token" */ - SQL_IDENTIFIER = 258, /* IDENTIFIER */ - SQL_STRING = 259, /* STRING */ - SQL_FLOATVAL = 260, /* FLOATVAL */ - SQL_INTVAL = 261, /* INTVAL */ - SQL_DEALLOCATE = 262, /* DEALLOCATE */ - SQL_PARAMETERS = 263, /* PARAMETERS */ - SQL_INTERSECT = 264, /* INTERSECT */ - SQL_TEMPORARY = 265, /* TEMPORARY */ - SQL_TIMESTAMP = 266, /* TIMESTAMP */ - SQL_DISTINCT = 267, /* DISTINCT */ - SQL_NVARCHAR = 268, /* NVARCHAR */ - SQL_RESTRICT = 269, /* RESTRICT */ - SQL_TRUNCATE = 270, /* TRUNCATE */ - SQL_ANALYZE = 271, /* ANALYZE */ - SQL_BETWEEN = 272, /* BETWEEN */ - SQL_CASCADE = 273, /* CASCADE */ - SQL_COLUMNS = 274, /* COLUMNS */ - SQL_CONTROL = 275, /* CONTROL */ - SQL_DEFAULT = 276, /* DEFAULT */ - SQL_EXECUTE = 277, /* EXECUTE */ - SQL_EXPLAIN = 278, /* EXPLAIN */ - SQL_INTEGER = 279, /* INTEGER */ - SQL_NATURAL = 280, /* NATURAL */ - SQL_PREPARE = 281, /* PREPARE */ - SQL_PRIMARY = 282, /* PRIMARY */ - SQL_SCHEMAS = 283, /* SCHEMAS */ - SQL_CHARACTER_VARYING = 284, /* CHARACTER_VARYING */ - SQL_REAL = 285, /* REAL */ - SQL_DECIMAL = 286, /* DECIMAL */ - SQL_SMALLINT = 287, /* SMALLINT */ - SQL_BIGINT = 288, /* BIGINT */ - SQL_SPATIAL = 289, /* SPATIAL */ - SQL_VARCHAR = 290, /* VARCHAR */ - SQL_VIRTUAL = 291, /* VIRTUAL */ - SQL_DESCRIBE = 292, /* DESCRIBE */ - SQL_BEFORE = 293, /* BEFORE */ - SQL_COLUMN = 294, /* COLUMN */ - SQL_CREATE = 295, /* CREATE */ - SQL_DELETE = 296, /* DELETE */ - SQL_DIRECT = 297, /* DIRECT */ - SQL_DOUBLE = 298, /* DOUBLE */ - SQL_ESCAPE = 299, /* ESCAPE */ - SQL_EXCEPT = 300, /* EXCEPT */ - SQL_EXISTS = 301, /* EXISTS */ - SQL_EXTRACT = 302, /* EXTRACT */ - SQL_CAST = 303, /* CAST */ - SQL_FORMAT = 304, /* FORMAT */ - SQL_GLOBAL = 305, /* GLOBAL */ - SQL_HAVING = 306, /* HAVING */ - SQL_IMPORT = 307, /* IMPORT */ - SQL_INSERT = 308, /* INSERT */ - SQL_ISNULL = 309, /* ISNULL */ - SQL_OFFSET = 310, /* OFFSET */ - SQL_RENAME = 311, /* RENAME */ - SQL_SCHEMA = 312, /* SCHEMA */ - SQL_SELECT = 313, /* SELECT */ - SQL_SORTED = 314, /* SORTED */ - SQL_TABLES = 315, /* TABLES */ - SQL_UNIQUE = 316, /* UNIQUE */ - SQL_UNLOAD = 317, /* UNLOAD */ - SQL_UPDATE = 318, /* UPDATE */ - SQL_VALUES = 319, /* VALUES */ - SQL_AFTER = 320, /* AFTER */ - SQL_ALTER = 321, /* ALTER */ - SQL_CROSS = 322, /* CROSS */ - SQL_DELTA = 323, /* DELTA */ - SQL_FLOAT = 324, /* FLOAT */ - SQL_GROUP = 325, /* GROUP */ - SQL_INDEX = 326, /* INDEX */ - SQL_INNER = 327, /* INNER */ - SQL_LIMIT = 328, /* LIMIT */ - SQL_LOCAL = 329, /* LOCAL */ - SQL_MERGE = 330, /* MERGE */ - SQL_MINUS = 331, /* MINUS */ - SQL_ORDER = 332, /* ORDER */ - SQL_OVER = 333, /* OVER */ - SQL_OUTER = 334, /* OUTER */ - SQL_RIGHT = 335, /* RIGHT */ - SQL_TABLE = 336, /* TABLE */ - SQL_UNION = 337, /* UNION */ - SQL_USING = 338, /* USING */ - SQL_WHERE = 339, /* WHERE */ - SQL_CALL = 340, /* CALL */ - SQL_CASE = 341, /* CASE */ - SQL_CHAR = 342, /* CHAR */ - SQL_COPY = 343, /* COPY */ - SQL_DATE = 344, /* DATE */ - SQL_DATETIME = 345, /* DATETIME */ - SQL_DESC = 346, /* DESC */ - SQL_DROP = 347, /* DROP */ - SQL_ELSE = 348, /* ELSE */ - SQL_FILE = 349, /* FILE */ - SQL_FROM = 350, /* FROM */ - SQL_FULL = 351, /* FULL */ - SQL_HASH = 352, /* HASH */ - SQL_HINT = 353, /* HINT */ - SQL_INTO = 354, /* INTO */ - SQL_JOIN = 355, /* JOIN */ - SQL_LEFT = 356, /* LEFT */ - SQL_LIKE = 357, /* LIKE */ - SQL_LOAD = 358, /* LOAD */ - SQL_LONG = 359, /* LONG */ - SQL_NULL = 360, /* NULL */ - SQL_PARTITION = 361, /* PARTITION */ - SQL_PLAN = 362, /* PLAN */ - SQL_SHOW = 363, /* SHOW */ - SQL_TEXT = 364, /* TEXT */ - SQL_THEN = 365, /* THEN */ - SQL_TIME = 366, /* TIME */ - SQL_VIEW = 367, /* VIEW */ - SQL_WHEN = 368, /* WHEN */ - SQL_WITH = 369, /* WITH */ - SQL_ADD = 370, /* ADD */ - SQL_ALL = 371, /* ALL */ - SQL_AND = 372, /* AND */ - SQL_ASC = 373, /* ASC */ - SQL_END = 374, /* END */ - SQL_FOR = 375, /* FOR */ - SQL_INT = 376, /* INT */ - SQL_KEY = 377, /* KEY */ - SQL_NOT = 378, /* NOT */ - SQL_OFF = 379, /* OFF */ - SQL_SET = 380, /* SET */ - SQL_TOP = 381, /* TOP */ - SQL_AS = 382, /* AS */ - SQL_BY = 383, /* BY */ - SQL_IF = 384, /* IF */ - SQL_IN = 385, /* IN */ - SQL_IS = 386, /* IS */ - SQL_OF = 387, /* OF */ - SQL_ON = 388, /* ON */ - SQL_OR = 389, /* OR */ - SQL_TO = 390, /* TO */ - SQL_NO = 391, /* NO */ - SQL_ARRAY = 392, /* ARRAY */ - SQL_CONCAT = 393, /* CONCAT */ - SQL_ILIKE = 394, /* ILIKE */ - SQL_SECOND = 395, /* SECOND */ - SQL_MINUTE = 396, /* MINUTE */ - SQL_HOUR = 397, /* HOUR */ - SQL_DAY = 398, /* DAY */ - SQL_MONTH = 399, /* MONTH */ - SQL_YEAR = 400, /* YEAR */ - SQL_SECONDS = 401, /* SECONDS */ - SQL_MINUTES = 402, /* MINUTES */ - SQL_HOURS = 403, /* HOURS */ - SQL_DAYS = 404, /* DAYS */ - SQL_MONTHS = 405, /* MONTHS */ - SQL_YEARS = 406, /* YEARS */ - SQL_INTERVAL = 407, /* INTERVAL */ - SQL_TRUE = 408, /* TRUE */ - SQL_FALSE = 409, /* FALSE */ - SQL_BOOLEAN = 410, /* BOOLEAN */ - SQL_TRANSACTION = 411, /* TRANSACTION */ - SQL_BEGIN = 412, /* BEGIN */ - SQL_COMMIT = 413, /* COMMIT */ - SQL_ROLLBACK = 414, /* ROLLBACK */ - SQL_NOWAIT = 415, /* NOWAIT */ - SQL_SKIP = 416, /* SKIP */ - SQL_LOCKED = 417, /* LOCKED */ - SQL_SHARE = 418, /* SHARE */ - SQL_RANGE = 419, /* RANGE */ - SQL_ROWS = 420, /* ROWS */ - SQL_GROUPS = 421, /* GROUPS */ - SQL_UNBOUNDED = 422, /* UNBOUNDED */ - SQL_FOLLOWING = 423, /* FOLLOWING */ - SQL_PRECEDING = 424, /* PRECEDING */ - SQL_CURRENT_ROW = 425, /* CURRENT_ROW */ - SQL_EQUALS = 426, /* EQUALS */ - SQL_NOTEQUALS = 427, /* NOTEQUALS */ - SQL_LESS = 428, /* LESS */ - SQL_GREATER = 429, /* GREATER */ - SQL_LESSEQ = 430, /* LESSEQ */ - SQL_GREATEREQ = 431, /* GREATEREQ */ - SQL_NOTNULL = 432, /* NOTNULL */ - SQL_UMINUS = 433 /* UMINUS */ -}; -typedef enum hsql_tokentype hsql_token_kind_t; +# define HSQL_TOKENTYPE + enum hsql_tokentype + { + SQL_HSQL_EMPTY = -2, + SQL_YYEOF = 0, /* "end of file" */ + SQL_HSQL_error = 256, /* error */ + SQL_HSQL_UNDEF = 257, /* "invalid token" */ + SQL_IDENTIFIER = 258, /* IDENTIFIER */ + SQL_STRING = 259, /* STRING */ + SQL_FLOATVAL = 260, /* FLOATVAL */ + SQL_INTVAL = 261, /* INTVAL */ + SQL_DEALLOCATE = 262, /* DEALLOCATE */ + SQL_PARAMETERS = 263, /* PARAMETERS */ + SQL_INTERSECT = 264, /* INTERSECT */ + SQL_TEMPORARY = 265, /* TEMPORARY */ + SQL_TIMESTAMP = 266, /* TIMESTAMP */ + SQL_DISTINCT = 267, /* DISTINCT */ + SQL_NVARCHAR = 268, /* NVARCHAR */ + SQL_RESTRICT = 269, /* RESTRICT */ + SQL_TRUNCATE = 270, /* TRUNCATE */ + SQL_ANALYZE = 271, /* ANALYZE */ + SQL_BETWEEN = 272, /* BETWEEN */ + SQL_CASCADE = 273, /* CASCADE */ + SQL_COLUMNS = 274, /* COLUMNS */ + SQL_CONTROL = 275, /* CONTROL */ + SQL_DEFAULT = 276, /* DEFAULT */ + SQL_EXECUTE = 277, /* EXECUTE */ + SQL_EXPLAIN = 278, /* EXPLAIN */ + SQL_INTEGER = 279, /* INTEGER */ + SQL_NATURAL = 280, /* NATURAL */ + SQL_PREPARE = 281, /* PREPARE */ + SQL_PRIMARY = 282, /* PRIMARY */ + SQL_SCHEMAS = 283, /* SCHEMAS */ + SQL_CHARACTER_VARYING = 284, /* CHARACTER_VARYING */ + SQL_REAL = 285, /* REAL */ + SQL_DECIMAL = 286, /* DECIMAL */ + SQL_SMALLINT = 287, /* SMALLINT */ + SQL_BIGINT = 288, /* BIGINT */ + SQL_SPATIAL = 289, /* SPATIAL */ + SQL_VARCHAR = 290, /* VARCHAR */ + SQL_VIRTUAL = 291, /* VIRTUAL */ + SQL_DESCRIBE = 292, /* DESCRIBE */ + SQL_BEFORE = 293, /* BEFORE */ + SQL_COLUMN = 294, /* COLUMN */ + SQL_CREATE = 295, /* CREATE */ + SQL_DELETE = 296, /* DELETE */ + SQL_DIRECT = 297, /* DIRECT */ + SQL_DOUBLE = 298, /* DOUBLE */ + SQL_ESCAPE = 299, /* ESCAPE */ + SQL_EXCEPT = 300, /* EXCEPT */ + SQL_EXISTS = 301, /* EXISTS */ + SQL_EXTRACT = 302, /* EXTRACT */ + SQL_CAST = 303, /* CAST */ + SQL_FORMAT = 304, /* FORMAT */ + SQL_GLOBAL = 305, /* GLOBAL */ + SQL_HAVING = 306, /* HAVING */ + SQL_IMPORT = 307, /* IMPORT */ + SQL_INSERT = 308, /* INSERT */ + SQL_ISNULL = 309, /* ISNULL */ + SQL_OFFSET = 310, /* OFFSET */ + SQL_RENAME = 311, /* RENAME */ + SQL_SCHEMA = 312, /* SCHEMA */ + SQL_SELECT = 313, /* SELECT */ + SQL_SORTED = 314, /* SORTED */ + SQL_TABLES = 315, /* TABLES */ + SQL_UNIQUE = 316, /* UNIQUE */ + SQL_UNLOAD = 317, /* UNLOAD */ + SQL_UPDATE = 318, /* UPDATE */ + SQL_VALUES = 319, /* VALUES */ + SQL_AFTER = 320, /* AFTER */ + SQL_ALTER = 321, /* ALTER */ + SQL_CROSS = 322, /* CROSS */ + SQL_DELTA = 323, /* DELTA */ + SQL_FLOAT = 324, /* FLOAT */ + SQL_GROUP = 325, /* GROUP */ + SQL_INDEX = 326, /* INDEX */ + SQL_INNER = 327, /* INNER */ + SQL_LIMIT = 328, /* LIMIT */ + SQL_LOCAL = 329, /* LOCAL */ + SQL_MERGE = 330, /* MERGE */ + SQL_MINUS = 331, /* MINUS */ + SQL_ORDER = 332, /* ORDER */ + SQL_OVER = 333, /* OVER */ + SQL_OUTER = 334, /* OUTER */ + SQL_RIGHT = 335, /* RIGHT */ + SQL_TABLE = 336, /* TABLE */ + SQL_UNION = 337, /* UNION */ + SQL_USING = 338, /* USING */ + SQL_WHERE = 339, /* WHERE */ + SQL_CALL = 340, /* CALL */ + SQL_CASE = 341, /* CASE */ + SQL_CHAR = 342, /* CHAR */ + SQL_COPY = 343, /* COPY */ + SQL_DATE = 344, /* DATE */ + SQL_DATETIME = 345, /* DATETIME */ + SQL_DESC = 346, /* DESC */ + SQL_DROP = 347, /* DROP */ + SQL_ELSE = 348, /* ELSE */ + SQL_FILE = 349, /* FILE */ + SQL_FROM = 350, /* FROM */ + SQL_FULL = 351, /* FULL */ + SQL_HASH = 352, /* HASH */ + SQL_HINT = 353, /* HINT */ + SQL_INTO = 354, /* INTO */ + SQL_JOIN = 355, /* JOIN */ + SQL_LEFT = 356, /* LEFT */ + SQL_LIKE = 357, /* LIKE */ + SQL_LOAD = 358, /* LOAD */ + SQL_LONG = 359, /* LONG */ + SQL_NULL = 360, /* NULL */ + SQL_PARTITION = 361, /* PARTITION */ + SQL_PLAN = 362, /* PLAN */ + SQL_SHOW = 363, /* SHOW */ + SQL_TEXT = 364, /* TEXT */ + SQL_THEN = 365, /* THEN */ + SQL_TIME = 366, /* TIME */ + SQL_VIEW = 367, /* VIEW */ + SQL_WHEN = 368, /* WHEN */ + SQL_WITH = 369, /* WITH */ + SQL_ADD = 370, /* ADD */ + SQL_ALL = 371, /* ALL */ + SQL_AND = 372, /* AND */ + SQL_ASC = 373, /* ASC */ + SQL_END = 374, /* END */ + SQL_FOR = 375, /* FOR */ + SQL_INT = 376, /* INT */ + SQL_KEY = 377, /* KEY */ + SQL_NOT = 378, /* NOT */ + SQL_OFF = 379, /* OFF */ + SQL_SET = 380, /* SET */ + SQL_TOP = 381, /* TOP */ + SQL_AS = 382, /* AS */ + SQL_BY = 383, /* BY */ + SQL_IF = 384, /* IF */ + SQL_IN = 385, /* IN */ + SQL_IS = 386, /* IS */ + SQL_OF = 387, /* OF */ + SQL_ON = 388, /* ON */ + SQL_OR = 389, /* OR */ + SQL_TO = 390, /* TO */ + SQL_NO = 391, /* NO */ + SQL_ARRAY = 392, /* ARRAY */ + SQL_CONCAT = 393, /* CONCAT */ + SQL_ILIKE = 394, /* ILIKE */ + SQL_SECOND = 395, /* SECOND */ + SQL_MINUTE = 396, /* MINUTE */ + SQL_HOUR = 397, /* HOUR */ + SQL_DAY = 398, /* DAY */ + SQL_MONTH = 399, /* MONTH */ + SQL_YEAR = 400, /* YEAR */ + SQL_SECONDS = 401, /* SECONDS */ + SQL_MINUTES = 402, /* MINUTES */ + SQL_HOURS = 403, /* HOURS */ + SQL_DAYS = 404, /* DAYS */ + SQL_MONTHS = 405, /* MONTHS */ + SQL_YEARS = 406, /* YEARS */ + SQL_INTERVAL = 407, /* INTERVAL */ + SQL_TRUE = 408, /* TRUE */ + SQL_FALSE = 409, /* FALSE */ + SQL_BOOLEAN = 410, /* BOOLEAN */ + SQL_TRANSACTION = 411, /* TRANSACTION */ + SQL_BEGIN = 412, /* BEGIN */ + SQL_COMMIT = 413, /* COMMIT */ + SQL_ROLLBACK = 414, /* ROLLBACK */ + SQL_NOWAIT = 415, /* NOWAIT */ + SQL_SKIP = 416, /* SKIP */ + SQL_LOCKED = 417, /* LOCKED */ + SQL_SHARE = 418, /* SHARE */ + SQL_RANGE = 419, /* RANGE */ + SQL_ROWS = 420, /* ROWS */ + SQL_GROUPS = 421, /* GROUPS */ + SQL_UNBOUNDED = 422, /* UNBOUNDED */ + SQL_FOLLOWING = 423, /* FOLLOWING */ + SQL_PRECEDING = 424, /* PRECEDING */ + SQL_CURRENT_ROW = 425, /* CURRENT_ROW */ + SQL_EQUALS = 426, /* EQUALS */ + SQL_NOTEQUALS = 427, /* NOTEQUALS */ + SQL_LESS = 428, /* LESS */ + SQL_GREATER = 429, /* GREATER */ + SQL_LESSEQ = 430, /* LESSEQ */ + SQL_GREATEREQ = 431, /* GREATEREQ */ + SQL_NOTNULL = 432, /* NOTNULL */ + SQL_UMINUS = 433 /* UMINUS */ + }; + typedef enum hsql_tokentype hsql_token_kind_t; #endif /* Value type. */ -#if !defined HSQL_STYPE && !defined HSQL_STYPE_IS_DECLARED -union HSQL_STYPE { +#if ! defined HSQL_STYPE && ! defined HSQL_STYPE_IS_DECLARED +union HSQL_STYPE +{ #line 97 "bison_parser.y" // clang-format on diff --git a/src/parser/bison_parser.y b/src/parser/bison_parser.y index f3048c70..20f8750d 100644 --- a/src/parser/bison_parser.y +++ b/src/parser/bison_parser.y @@ -257,7 +257,7 @@ %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 array_expr array_index null_literal extended_literal casted_extended_literal %type opt_limit opt_top %type order_desc %type opt_order_type @@ -284,7 +284,7 @@ %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 expr_list select_list opt_extended_literal_list extended_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 @@ -397,7 +397,7 @@ hint : IDENTIFIER { $$ = Expr::make(kExprHint); $$->name = $1; } -| IDENTIFIER '(' literal_list ')' { +| IDENTIFIER '(' extended_literal_list ')' { $$ = Expr::make(kExprHint); $$->name = $1; $$->exprList = $3; @@ -423,13 +423,13 @@ prepare_statement : PREPARE IDENTIFIER FROM prepare_target_query { $$->query = $4; }; -prepare_target_query : STRING +prepare_target_query : STRING; - execute_statement : EXECUTE IDENTIFIER { +execute_statement : EXECUTE IDENTIFIER { $$ = new ExecuteStatement(); $$->name = $2; } -| EXECUTE IDENTIFIER '(' opt_literal_list ')' { +| EXECUTE IDENTIFIER '(' opt_extended_literal_list ')' { $$ = new ExecuteStatement(); $$->name = $2; $$->parameters = $4; @@ -708,7 +708,7 @@ truncate_statement : TRUNCATE table_name { * INSERT INTO students VALUES ('Max', 1112233, 'Musterhausen', 2.3) * INSERT INTO employees SELECT * FROM stundents ******************************/ -insert_statement : INSERT INTO table_name opt_column_list VALUES '(' literal_list ')' { +insert_statement : INSERT INTO table_name opt_column_list VALUES '(' extended_literal_list ')' { $$ = new InsertStatement(kInsertValues); $$->schema = $3.schema; $$->tableName = $3.name; @@ -914,18 +914,34 @@ expr_list : expr_alias { $$ = $1; }; -opt_literal_list : literal_list { $$ = $1; } +// Literals, casted literals, and negative numbers/intervals are allowed for INSERT and EXECUTE statements or hints. +opt_extended_literal_list : extended_literal_list { $$ = $1; } | /* empty */ { $$ = nullptr; }; -literal_list : literal { +extended_literal_list : casted_extended_literal { $$ = new std::vector(); $$->push_back($1); } -| literal_list ',' literal { +| extended_literal_list ',' casted_extended_literal { $1->push_back($3); $$ = $1; }; +casted_extended_literal : extended_literal | CAST '(' extended_literal AS column_type ')' { + $$ = Expr::makeCast($3, $5); +}; + +extended_literal : literal { + if ($1->type == ExprType::kExprParameter) { + delete $1; + yyerror(&yyloc, result, scanner, "Parameter ? is not a valid literal."); + YYERROR; + } + $$ = $1; +} +| '-' num_literal { $$ = Expr::makeOpUnary(kOpUnaryMinus, $2); }; +| '-' interval_literal { $$ = Expr::makeOpUnary(kOpUnaryMinus, $2); }; + expr_alias : expr opt_alias { $$ = $1; if ($2) { @@ -1078,10 +1094,7 @@ date_literal : DATE STRING { $$ = Expr::makeDateLiteral($2); }; -interval_literal : int_literal duration_field { - $$ = Expr::makeIntervalLiteral($1->ival, $2); - delete $1; -} +interval_literal : INTVAL duration_field { $$ = Expr::makeIntervalLiteral($1, $2); } | INTERVAL STRING datetime_field { int duration{0}, chars_parsed{0}; // If the whole string is parsed, chars_parsed points to the terminating null byte after the last character @@ -1314,9 +1327,11 @@ ident_commalist : IDENTIFIER { // clang-format off %% - // clang-format on - /********************************* + +/********************************* ** Section 4: Additional C code *********************************/ - /* empty */ +/* empty */ + + // clang-format on diff --git a/src/sql/Table.h b/src/sql/Table.h index c4197cfb..841856bd 100755 --- a/src/sql/Table.h +++ b/src/sql/Table.h @@ -60,9 +60,9 @@ struct JoinDefinition { TableRef* left; TableRef* right; Expr* condition; + std::vector* namedColumns; JoinType type; - std::vector* namedColumns; }; } // namespace hsql diff --git a/src/sql/statements.cpp b/src/sql/statements.cpp index c1394b15..45a6bb5f 100644 --- a/src/sql/statements.cpp +++ b/src/sql/statements.cpp @@ -368,12 +368,20 @@ const char* TableRef::getName() const { } // JoinDefinition -JoinDefinition::JoinDefinition() : left(nullptr), right(nullptr), condition(nullptr), type(kJoinInner) {} +JoinDefinition::JoinDefinition() + : left(nullptr), right(nullptr), condition(nullptr), namedColumns(nullptr), type(kJoinInner) {} JoinDefinition::~JoinDefinition() { delete left; delete right; delete condition; + + if (namedColumns) { + for (auto* column : *namedColumns) { + free(column); + } + delete namedColumns; + } } SetOperation::SetOperation() : nestedSelectStatement(nullptr), resultOrder(nullptr), resultLimit(nullptr) {} diff --git a/test/queries/queries-bad.sql b/test/queries/queries-bad.sql index 59517c32..e56e8b38 100644 --- a/test/queries/queries-bad.sql +++ b/test/queries/queries-bad.sql @@ -68,3 +68,13 @@ !SELECT * FROM foo INNER JOIN bar USING (a b); !SELECT * FROM foo INNER JOIN bar USING (a AS b); !SELECT * FROM foo INNER JOIN bar USING (1); +# INSERT, EXECUTE, and HINTS only allow specific expressions. +!INSERT INTO foo VALUES (?); +!INSERT INTO foo VALUES (CAST(column_a AS INT)); +!INSERT INTO foo VALUES (AVG(another_column)); +!EXECUTE statement_a(?); +!EXECUTE statement_a(CAST(column_a AS INT)); +!EXECUTE statement_a(AVG(another_column)); +!SELECT * FROM foo WITH HINT (?); +!SELECT * FROM foo WITH HINT (CAST(column_a AS INT)); +!SELECT * FROM foo WITH HINT (AVG(another_column)); diff --git a/test/queries/queries-good.sql b/test/queries/queries-good.sql index 3a412510..612d433d 100755 --- a/test/queries/queries-good.sql +++ b/test/queries/queries-good.sql @@ -61,7 +61,7 @@ DROP INDEX IF EXISTS myindex; # PREPARE PREPARE prep_inst FROM 'INSERT INTO test VALUES (?, ?, ?)'; PREPARE prep2 FROM 'INSERT INTO test VALUES (?, 0, 0); INSERT INTO test VALUES (0, ?, 0); INSERT INTO test VALUES (0, 0, ?);'; -EXECUTE prep_inst(1, 2, 3); +EXECUTE prep_another_inst(1, 2, 3, CAST(1 AS LONG), -2.5, INTERVAL '3 HOURS', -2 SECONDS, TRUE, NULL, DATE '2000-01-01'); EXECUTE prep; DEALLOCATE PREPARE prep; # COPY @@ -80,7 +80,8 @@ COPY (SELECT firstname, COUNT(*) FROM students GROUP BY firstname) TO 'student_n # HINTS SELECT * FROM test WITH HINT(NO_CACHE); SELECT * FROM test WITH HINT(NO_CACHE, NO_SAMPLING); -SELECT * FROM test WITH HINT(NO_CACHE, SAMPLE_RATE(0.1), OMW(1.0, 'test')); +SELECT * FROM test WITH HINT(NO_CACHE, SAMPLE_RATE(0.1), OMW(1.0, 'test'), START_DATE(CAST('2000-01-01' AS DATE))); +SELECT * FROM test WITH HINT(TIME_DIFFERENCE(-3 HOURS), ALLOW_RESULT_CACHE(FALSE), DEFAULT_VALUE(NULL), TIMETRAVEL_TO(DATE '2000-01-01')); SHOW TABLES; SHOW COLUMNS students; DESCRIBE students; diff --git a/test/select_tests.cpp b/test/select_tests.cpp index e3d8c670..42df3d53 100644 --- a/test/select_tests.cpp +++ b/test/select_tests.cpp @@ -803,7 +803,7 @@ TEST(WithClauseSingle) { "WITH " "a AS (SELECT name FROM peopleA)" "SELECT name FROM a;", - kStmtSelect, SelectStatement, result, stmt) + kStmtSelect, SelectStatement, result, stmt); // with_description_list – count ASSERT_EQ(stmt->withDescriptions->size(), 1); @@ -828,7 +828,7 @@ TEST(WithClauseDouble) { "a AS (SELECT nameA FROM peopleA), " "b AS (SELECT nameB, cityB FROM peopleB) " "SELECT nameA FROM a;", - kStmtSelect, SelectStatement, result, stmt) + kStmtSelect, SelectStatement, result, stmt); // with_description_list – count ASSERT_EQ(stmt->withDescriptions->size(), 2); diff --git a/test/sql_asserts.h b/test/sql_asserts.h index 6f73def2..aa493bba 100644 --- a/test/sql_asserts.h +++ b/test/sql_asserts.h @@ -5,15 +5,15 @@ hsql::SQLParserResult result; \ hsql::SQLParser::parse(query, &result); \ ASSERT(result.isValid()); \ - ASSERT_EQ(result.size(), numStatements); + ASSERT_EQ(result.size(), numStatements) #define TEST_PARSE_SINGLE_SQL(query, stmtType, stmtClass, result, outputVar) \ TEST_PARSE_SQL_QUERY(query, result, 1); \ ASSERT_EQ(result.getStatement(0)->type(), stmtType); \ - const stmtClass* outputVar = (const stmtClass*)result.getStatement(0); + const stmtClass* outputVar = (const stmtClass*)result.getStatement(0) #define TEST_CAST_STMT(result, stmt_index, stmtType, stmtClass, outputVar) \ ASSERT_EQ(result.getStatement(stmt_index)->type(), stmtType); \ - const stmtClass* outputVar = (const stmtClass*)result.getStatement(stmt_index); + const stmtClass* outputVar = (const stmtClass*)result.getStatement(stmt_index) #endif diff --git a/test/sql_tests.cpp b/test/sql_tests.cpp index 70a89583..3036d79c 100644 --- a/test/sql_tests.cpp +++ b/test/sql_tests.cpp @@ -224,11 +224,45 @@ TEST(UpdateStatementTest) { } TEST(InsertStatementTest) { - TEST_PARSE_SINGLE_SQL("INSERT INTO students VALUES ('Max Mustermann', 12345, 'Musterhausen', 2.0)", kStmtInsert, - InsertStatement, result, stmt); - - ASSERT_EQ(stmt->values->size(), 4); - // TODO + TEST_PARSE_SINGLE_SQL( + "INSERT INTO students VALUES ('Max Mustermann', 12345, 'Musterhausen', 2.0, -1, 1 month, " + " CAST('2000-02-02' AS DATE), - INTERVAL '3 seconds', DATE '2000-02-02', FALSE, NULL)", + kStmtInsert, InsertStatement, result, stmt); + + ASSERT_EQ(stmt->values->size(), 11); + ASSERT_EQ(stmt->values->at(0)->type, kExprLiteralString); + ASSERT_STREQ(stmt->values->at(0)->name, "Max Mustermann"); + ASSERT_EQ(stmt->values->at(1)->type, kExprLiteralInt); + ASSERT_EQ(stmt->values->at(1)->ival, 12345); + ASSERT_EQ(stmt->values->at(2)->type, kExprLiteralString); + ASSERT_STREQ(stmt->values->at(2)->name, "Musterhausen"); + ASSERT_EQ(stmt->values->at(3)->type, kExprLiteralFloat); + ASSERT_EQ(stmt->values->at(3)->fval, 2.0); + ASSERT_EQ(stmt->values->at(4)->type, kExprOperator); + ASSERT_EQ(stmt->values->at(4)->opType, kOpUnaryMinus); + ASSERT(stmt->values->at(4)->expr); + ASSERT_EQ(stmt->values->at(4)->expr->type, kExprLiteralInt); + ASSERT_EQ(stmt->values->at(4)->expr->ival, 1); + ASSERT_EQ(stmt->values->at(5)->type, kExprLiteralInterval); + ASSERT_EQ(stmt->values->at(5)->ival, 1); + ASSERT_EQ(stmt->values->at(5)->datetimeField, kDatetimeMonth); + ASSERT_EQ(stmt->values->at(6)->type, kExprCast); + ASSERT_EQ(stmt->values->at(6)->columnType, ColumnType{DataType::DATE}); + ASSERT(stmt->values->at(6)->expr); + ASSERT_EQ(stmt->values->at(6)->expr->type, kExprLiteralString); + ASSERT_STREQ(stmt->values->at(6)->expr->name, "2000-02-02"); + ASSERT_EQ(stmt->values->at(7)->type, kExprOperator); + ASSERT_EQ(stmt->values->at(7)->opType, kOpUnaryMinus); + ASSERT(stmt->values->at(7)->expr); + ASSERT_EQ(stmt->values->at(7)->expr->type, kExprLiteralInterval); + ASSERT_EQ(stmt->values->at(7)->expr->ival, 3); + ASSERT_EQ(stmt->values->at(7)->expr->datetimeField, kDatetimeSecond); + ASSERT_EQ(stmt->values->at(8)->type, kExprLiteralDate); + ASSERT_STREQ(stmt->values->at(8)->name, "2000-02-02"); + ASSERT_EQ(stmt->values->at(9)->type, kExprLiteralInt); + ASSERT_EQ(stmt->values->at(9)->ival, 0); + ASSERT_TRUE(stmt->values->at(9)->isBoolLiteral); + ASSERT_EQ(stmt->values->at(10)->type, kExprLiteralNull); } TEST(AlterStatementDropActionTest) { diff --git a/test/test.sh b/test/test.sh index f240a934..550f1bdb 100755 --- a/test/test.sh +++ b/test/test.sh @@ -11,10 +11,10 @@ NC='\033[0m' BOLD='\033[1;39m' RET=0 -SQL_TEST_RET=0 -MEM_LEAK_EXECUTED=$? -MEM_LEAK_RET=0 -CONFLICT_RET=0 +SQL_TEST_RET=1 +MEM_LEAK_EXECUTED=false +MEM_LEAK_RET=1 +CONFLICT_RET=1 ################################################# # Running SQL parser tests. @@ -25,7 +25,6 @@ SQL_TEST_RET=$? if [ $SQL_TEST_RET -eq 0 ]; then printf "${GREEN}SQL parser tests succeeded!${NC}\n" else - RET=1 printf "${RED}SQL parser tests failed!${NC}\n" fi @@ -38,14 +37,11 @@ if [[ "$unamestr" == 'Linux' ]]; then bin/tests -f "test/queries/queries-good.sql" -f "test/queries/queries-bad.sql" \ 3>&1>/dev/null; - MEM_LEAK_EXECUTED=true MEM_LEAK_RET=$? - RET=1 + MEM_LEAK_EXECUTED=true if [ $MEM_LEAK_RET -eq 0 ]; then printf "${GREEN}Memory leak check succeeded!${NC}\n" - MEM_LEAK_RET=0 - RET=0 elif [ $MEM_LEAK_RET -eq 200 ]; then printf "${RED}Memory leak check failed!${NC}\n" elif [ $MEM_LEAK_RET -eq 127 ]; then @@ -55,7 +51,6 @@ if [[ "$unamestr" == 'Linux' ]]; then fi else printf "\n${YELLOW}Skipping memory leak checks (can only be executed on Linux)!${NC}\n" - MEM_LEAK_EXECUTED=false fi ################################################# @@ -68,7 +63,6 @@ CONFLICT_RET=$? if [ $CONFLICT_RET -eq 0 ]; then printf "${GREEN}Conflict check succeeded!${NC}\n" else - RET=1 printf "${RED}Conflict check failed!${NC}\n" fi @@ -86,9 +80,22 @@ fi if [ $CONFLICT_RET -eq 0 ]; then printf "Grammar Conflict Check: ${GREEN}Success${BOLD}\n"; else printf "Grammar Conflict Check: ${RED}Failure${BOLD}\n"; fi -if [ $RET -ne 0 ]; then printf "${RED}Some tests failed!${NC}\n" -elif [ "$MEM_LEAK_EXECUTED" = false ]; then printf "${YELLOW}Some tests were skipped!${NC}\n" -else printf "${GREEN}All tests passed!${NC}\n" +if [[ $SQL_TEST_RET -ne 0 || $CONFLICT_RET -ne 0 ]]; then + RET=1 +fi + +if [ $MEM_LEAK_RET -ne 0 ]; then + if [ "$MEM_LEAK_EXECUTED" = true ]; then + RET=1 + fi +fi + + +if [ $RET -eq 0 ]; then + if [ "$MEM_LEAK_EXECUTED" = true ]; then printf "${GREEN}All tests passed!${NC}\n" + else printf "${YELLOW}Some tests were skipped!${NC}\n" + fi +else printf "${RED}Some tests failed!${NC}\n" fi printf "${NC}----------------------------------\n"