From 73bc0906a4a9c6411d05067d8d0fbd8ee2c059ee Mon Sep 17 00:00:00 2001 From: Tobias Nack Date: Mon, 9 Dec 2019 11:46:42 +0100 Subject: [PATCH 01/27] Add initial version of set operator parsing without grammar conflicts --- src/parser/bison_parser.cpp | 2530 ++++++++++++++++++----------------- src/parser/bison_parser.h | 15 +- src/parser/bison_parser.y | 83 +- src/parser/flex_lexer.cpp | 330 ++--- src/parser/flex_lexer.h | 2 +- src/parser/flex_lexer.l | 2 + src/sql/SelectStatement.h | 21 + src/sql/statements.cpp | 8 + src/util/sqlhelper.cpp | 8 +- 9 files changed, 1600 insertions(+), 1399 deletions(-) diff --git a/src/parser/bison_parser.cpp b/src/parser/bison_parser.cpp index 4ff27513..ba6172ed 100644 --- a/src/parser/bison_parser.cpp +++ b/src/parser/bison_parser.cpp @@ -1,4 +1,4 @@ -/* A Bison parser, made by GNU Bison 3.3.2. */ +/* A Bison parser, made by GNU Bison 3.4.2. */ /* Bison implementation for Yacc-like parsers in C @@ -48,7 +48,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "3.3.2" +#define YYBISON_VERSION "3.4.2" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -74,7 +74,7 @@ /* First part of user prologue. */ -#line 1 "bison_parser.y" /* yacc.c:337 */ +#line 1 "bison_parser.y" /** * bison_parser.y @@ -103,7 +103,8 @@ int yyerror(YYLTYPE* llocp, SQLParserResult* result, yyscan_t scanner, const cha } -#line 107 "bison_parser.cpp" /* yacc.c:337 */ +#line 107 "bison_parser.cpp" + # ifndef YY_NULLPTR # if defined __cplusplus # if 201103L <= __cplusplus @@ -124,8 +125,8 @@ int yyerror(YYLTYPE* llocp, SQLParserResult* result, yyscan_t scanner, const cha # define YYERROR_VERBOSE 1 #endif -/* In a future release of Bison, this section will be replaced - by #include "bison_parser.h". */ +/* Use api.header.include to #include this header + instead of duplicating it here. */ #ifndef YY_HSQL_BISON_PARSER_H_INCLUDED # define YY_HSQL_BISON_PARSER_H_INCLUDED /* Debug traces. */ @@ -144,7 +145,7 @@ int yyerror(YYLTYPE* llocp, SQLParserResult* result, yyscan_t scanner, const cha extern int hsql_debug; #endif /* "%code requires" blocks. */ -#line 35 "bison_parser.y" /* yacc.c:352 */ +#line 35 "bison_parser.y" // %code requires block @@ -168,7 +169,7 @@ extern int hsql_debug; } \ } -#line 172 "bison_parser.cpp" /* yacc.c:352 */ +#line 173 "bison_parser.cpp" /* Token type. */ #ifndef HSQL_TOKENTYPE @@ -323,10 +324,9 @@ extern int hsql_debug; /* Value type. */ #if ! defined HSQL_STYPE && ! defined HSQL_STYPE_IS_DECLARED - union HSQL_STYPE { -#line 95 "bison_parser.y" /* yacc.c:352 */ +#line 95 "bison_parser.y" double fval; int64_t ival; @@ -359,6 +359,8 @@ union HSQL_STYPE hsql::GroupByDescription* group_t; hsql::UpdateClause* update_t; hsql::Alias* alias_t; + hsql::SetType* set_type_t; + hsql::SetOperator* set_operator_t; std::vector* stmt_vec; @@ -370,9 +372,9 @@ union HSQL_STYPE std::vector* order_vec; std::vector* with_description_vec; -#line 374 "bison_parser.cpp" /* yacc.c:352 */ -}; +#line 376 "bison_parser.cpp" +}; typedef union HSQL_STYPE HSQL_STYPE; # define HSQL_STYPE_IS_TRIVIAL 1 # define HSQL_STYPE_IS_DECLARED 1 @@ -500,6 +502,8 @@ typedef short yytype_int16; #endif +#define YY_ASSERT(E) ((void) (0 && (E))) + #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ @@ -633,16 +637,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 51 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 762 +#define YYLAST 717 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 163 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 100 +#define YYNNTS 103 /* YYNRULES -- Number of rules. */ -#define YYNRULES 245 +#define YYNRULES 249 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 442 +#define YYNSTATES 447 #define YYUNDEFTOK 2 #define YYMAXUTOK 400 @@ -703,31 +707,31 @@ static const yytype_uint8 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 258, 258, 279, 285, 294, 298, 302, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 326, 327, 332, - 333, 337, 341, 353, 360, 363, 367, 379, 388, 392, - 402, 405, 410, 424, 431, 438, 445, 456, 457, 461, - 462, 466, 472, 473, 474, 475, 476, 477, 478, 479, - 483, 484, 485, 495, 501, 507, 515, 516, 525, 534, - 547, 554, 565, 566, 576, 585, 586, 590, 602, 606, - 610, 628, 629, 633, 634, 638, 648, 665, 669, 670, - 671, 675, 676, 680, 692, 693, 697, 701, 702, 705, - 710, 711, 715, 720, 724, 725, 728, 729, 733, 734, - 738, 742, 743, 744, 750, 751, 755, 756, 757, 758, - 759, 760, 767, 768, 772, 773, 777, 778, 782, 792, - 793, 794, 795, 796, 800, 801, 802, 803, 804, 805, - 806, 807, 808, 809, 813, 814, 818, 819, 820, 821, - 822, 826, 827, 828, 829, 830, 831, 832, 833, 834, - 835, 836, 840, 841, 845, 846, 847, 848, 854, 855, - 856, 857, 861, 862, 866, 867, 871, 872, 873, 874, - 875, 876, 877, 881, 882, 886, 890, 891, 892, 893, - 894, 895, 898, 902, 906, 910, 911, 912, 913, 917, - 918, 919, 920, 921, 925, 929, 930, 934, 935, 939, - 943, 947, 959, 960, 970, 971, 975, 976, 985, 986, - 991, 1002, 1011, 1012, 1017, 1018, 1023, 1024, 1028, 1029, - 1034, 1035, 1043, 1044, 1048, 1052, 1056, 1063, 1076, 1084, - 1094, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, - 1122, 1127, 1136, 1137, 1142, 1143 + 0, 262, 262, 283, 289, 298, 302, 306, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 330, 331, 336, + 337, 341, 345, 357, 364, 367, 371, 383, 392, 396, + 406, 409, 414, 428, 435, 442, 449, 460, 461, 465, + 466, 470, 476, 477, 478, 479, 480, 481, 482, 483, + 487, 488, 489, 499, 505, 511, 519, 520, 529, 538, + 551, 558, 569, 570, 580, 589, 590, 594, 606, 610, + 614, 632, 633, 636, 637, 645, 646, 650, 660, 677, + 685, 689, 693, 700, 703, 709, 721, 722, 726, 730, + 731, 734, 739, 740, 744, 749, 753, 754, 757, 758, + 762, 765, 766, 770, 774, 775, 776, 782, 783, 787, + 788, 792, 793, 794, 795, 796, 802, 803, 807, 808, + 812, 813, 817, 827, 828, 829, 830, 831, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 848, 849, + 853, 854, 855, 856, 857, 861, 862, 863, 864, 865, + 866, 867, 868, 869, 870, 871, 875, 876, 880, 881, + 882, 883, 889, 890, 891, 892, 896, 897, 901, 902, + 906, 907, 908, 909, 910, 911, 912, 916, 917, 921, + 925, 926, 927, 928, 929, 930, 933, 937, 941, 945, + 946, 947, 948, 952, 953, 954, 955, 956, 960, 964, + 965, 969, 970, 974, 978, 982, 994, 995, 1005, 1006, + 1010, 1011, 1020, 1021, 1026, 1037, 1046, 1047, 1052, 1053, + 1058, 1059, 1063, 1064, 1069, 1070, 1078, 1079, 1083, 1087, + 1091, 1098, 1111, 1119, 1129, 1148, 1149, 1150, 1151, 1152, + 1153, 1154, 1155, 1156, 1157, 1162, 1171, 1172, 1177, 1178 }; #endif @@ -766,20 +770,20 @@ static const char *const yytname[] = "opt_exists", "delete_statement", "truncate_statement", "insert_statement", "opt_column_list", "update_statement", "update_clause_commalist", "update_clause", "select_statement", - "select_with_paren", "select_paren_or_clause", "select_no_paren", - "set_operator", "set_type", "opt_all", "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", "operand", - "scalar_expr", "unary_expr", "binary_expr", "logic_expr", "in_expr", - "case_expr", "case_list", "exists_expr", "comp_expr", "function_expr", - "extract_expr", "datetime_field", "array_expr", "array_index", - "between_expr", "column_name", "literal", "string_literal", - "bool_literal", "num_literal", "int_literal", "null_literal", - "param_expr", "table_ref", "table_ref_atomic", - "nonjoin_table_ref_atomic", "table_ref_commalist", "table_ref_name", - "table_ref_name_no_alias", "table_name", "table_alias", + "select_statement_in_set_operation", "select_part_set", + "select_with_paren", "select_no_paren", "set_operator", "set_type", + "opt_all", "select_clause", "opt_distinct", "select_list", + "opt_from_clause", "from_clause", "opt_where", "opt_group", "opt_having", + "opt_order", "order", "order_list", "order_desc", "opt_order_type", + "opt_top", "opt_limit", "limit", "expr_list", "opt_literal_list", + "literal_list", "expr_alias", "expr", "operand", "scalar_expr", + "unary_expr", "binary_expr", "logic_expr", "in_expr", "case_expr", + "case_list", "exists_expr", "comp_expr", "function_expr", "extract_expr", + "datetime_field", "array_expr", "array_index", "between_expr", + "column_name", "literal", "string_literal", "bool_literal", + "num_literal", "int_literal", "null_literal", "param_expr", "table_ref", + "table_ref_atomic", "nonjoin_table_ref_atomic", "table_ref_commalist", + "table_ref_name", "table_ref_name_no_alias", "table_name", "table_alias", "opt_table_alias", "alias", "opt_alias", "opt_with_clause", "with_clause", "with_description_list", "with_description", "join_clause", "opt_join_type", "join_condition", "opt_semicolon", @@ -812,65 +816,65 @@ static const yytype_uint16 yytoknum[] = }; # endif -#define YYPACT_NINF -330 +#define YYPACT_NINF -303 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-330))) + (!!((Yystate) == (-303))) -#define YYTABLE_NINF -243 +#define YYTABLE_NINF -247 #define yytable_value_is_error(Yytable_value) \ - (!!((Yytable_value) == (-243))) + (!!((Yytable_value) == (-247))) /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int16 yypact[] = { - 659, 24, 68, 69, 99, 68, -35, 25, 26, 58, - 68, -15, 3, 100, 152, 0, -330, 56, 56, -330, - -330, -330, -330, -330, -330, -330, -330, -330, -330, -20, - -330, 158, 10, -330, 20, 101, -330, 65, 65, 68, - 83, 68, 77, -330, 89, 89, 68, -330, 86, 57, - -330, -330, 641, -330, 117, -330, -330, 102, -20, 19, - -330, 11, -330, 222, 9, 227, 113, 68, 68, 159, - -330, 177, 97, 265, 237, 68, 68, -330, 122, 100, - -330, 123, 278, 288, 147, 151, -330, -330, -330, -20, - 205, 203, -20, 28, -330, -330, -330, -330, -330, -330, - -330, -330, 166, 167, -330, -330, -330, -330, -330, -330, - -330, -330, -330, 301, -56, 97, 234, -330, 340, 347, - -11, 215, -66, -330, -330, -330, -330, -330, -330, 353, - -330, -330, 234, -330, -330, -330, 289, -330, -330, -330, - 234, 289, 234, 137, -330, -330, 9, -330, 241, 255, - 359, 242, 84, 206, 207, 170, 298, 210, 331, -330, - 218, -70, 357, -330, -330, -330, -330, -330, -330, -330, - -330, -330, -330, -330, -330, -330, -330, -330, 280, -330, - -330, 109, 220, -330, 234, 265, -330, 221, 130, -330, - 294, 211, -330, 64, 28, 225, -330, -46, 28, -70, - 334, -16, -330, 303, -330, 287, 132, -330, 255, 7, - 8, 337, 282, 234, 128, 118, 232, 331, 442, 234, - 44, 236, -83, 234, 234, 331, -330, 331, -58, 233, - 55, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 278, 68, -330, 389, - 9, -70, -330, 9, -330, 353, 5, 159, -330, 234, - -330, 392, -330, -330, -330, 234, -330, -330, -330, -330, - 234, 234, 340, -330, 240, -330, -330, 243, -330, -330, - -330, 85, -330, 359, -330, -330, 234, -330, -330, 244, - -330, -330, -330, -330, -330, -330, 314, -10, 127, 234, - 234, -330, 337, 309, -17, -330, -330, -330, 297, 398, - 474, 331, 248, 218, -330, 311, 252, 474, 474, 474, - 474, 509, 509, 509, 509, 44, 44, 53, 53, 53, - -75, 254, -330, -330, 160, 165, -330, 255, -330, 27, - -330, 247, -330, 18, -330, 355, -330, -330, -330, -70, - -70, -330, 413, 414, -330, 326, -330, -330, 172, -330, - 234, 234, 234, -330, 146, 13, 264, -330, 331, 474, - 218, 266, 180, -330, -330, -330, -330, 269, 333, -330, - -330, -330, 358, 360, 361, 338, 5, 427, -330, -330, - -330, 317, -330, 275, 279, -330, -330, -76, -70, 183, - -330, 234, -330, 442, 281, 185, -330, -330, 18, 5, - -330, -330, -330, 5, 191, 283, 234, -330, -330, -330, - -330, -70, -330, -330, -330, -330, 142, 347, -26, 284, - 234, 190, 234, -330, 14, -70, -330, -330, -70, 291, - 285, -330 + 614, 5, 49, 100, 114, 49, -29, 17, 19, 29, + 49, -23, 18, 144, 148, 24, -303, 82, 82, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -22, + -303, 195, 55, -303, 58, 145, -303, 109, 109, 49, + 117, 49, 116, -303, 127, 127, 49, -303, 119, 93, + -303, -303, 596, -303, 170, -303, -303, 150, -22, 72, + -303, 23, -303, 277, 4, 287, 183, 49, 49, 234, + -303, 222, 160, 316, 281, 49, 49, -303, 173, 144, + -303, 174, 326, 321, 176, 180, -303, -303, -303, -22, + 235, 220, -22, 48, -303, -303, -303, -303, -303, -303, + -303, -303, -303, 184, 185, -303, -303, -303, -303, -303, + -303, -303, -303, -303, 303, -62, 160, 199, -303, 341, + 344, 99, 215, -55, -303, -303, -303, -303, -303, -303, + 349, -303, -303, 199, -303, -303, 285, -303, -303, 72, + -303, -303, 199, 285, 199, 133, -303, -303, -303, 4, + -303, 242, 259, 362, 250, 86, 213, 217, 166, 230, + 223, 282, -303, 214, -76, 312, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, 283, -303, -303, -67, 218, -303, 199, 316, -303, + 225, 20, -303, 298, 224, -303, 71, 48, -22, 227, + -303, 76, 48, -76, 336, -24, -303, 305, -303, 275, + 65, -303, 259, 2, 12, 339, 280, 199, 107, -17, + 236, 282, 396, 199, 123, 233, -71, 199, 199, 282, + -303, 282, -70, 237, 126, 282, 282, 282, 282, 282, + 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, + 326, 49, -303, 393, 4, -76, -303, 4, -303, 349, + 10, 234, -303, 199, -303, 394, -303, -303, -303, -303, + 199, -303, -303, -303, -303, 199, 199, 341, -303, 241, + -303, -303, 244, -303, -303, -303, 129, -303, 362, -303, + -303, 199, -303, -303, 245, -303, -303, -303, -303, -303, + -303, 314, 87, 97, 199, 199, -303, 339, 310, -101, + -303, -303, -303, 299, 353, 430, 282, 249, 214, -303, + 313, 252, 430, 430, 430, 430, 464, 464, 464, 464, + 123, 123, -80, -80, -80, -94, 261, -303, -303, 101, + 105, -303, 259, -303, -7, -303, 262, -303, 16, -303, + 357, -303, -303, -303, -76, -76, -303, 416, 418, -303, + 331, -303, -303, 139, -303, 199, 199, 199, -303, 43, + 91, 271, -303, 282, 430, 214, 272, 140, -303, -303, + -303, -303, 278, 345, -303, -303, -303, 366, 367, 377, + 359, 10, 452, -303, -303, -303, 337, -303, 311, 315, + -303, -303, -68, -76, 70, -303, 199, -303, 396, 318, + 146, -303, -303, 16, 10, -303, -303, -303, 10, 356, + 317, 199, -303, -303, -303, -303, -76, -303, -303, -303, + -303, 502, 344, -18, 322, 199, 153, 199, -303, 13, + -76, -303, -303, -76, 309, 320, -303 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -878,81 +882,83 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 243, 3, 18, 18, 16, + 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 247, 3, 18, 18, 16, 9, 7, 10, 15, 12, 13, 11, 14, 8, 0, - 222, 0, 212, 59, 25, 0, 32, 38, 38, 0, - 0, 0, 0, 211, 57, 57, 0, 30, 0, 224, - 225, 1, 223, 2, 0, 6, 5, 105, 0, 68, - 69, 97, 55, 0, 115, 0, 0, 0, 0, 91, + 226, 0, 216, 59, 25, 0, 32, 38, 38, 0, + 0, 0, 0, 215, 57, 57, 0, 30, 0, 228, + 229, 1, 227, 2, 0, 6, 5, 108, 0, 68, + 69, 99, 55, 0, 119, 0, 0, 0, 0, 93, 28, 0, 63, 0, 0, 0, 0, 31, 0, 0, - 4, 0, 0, 85, 0, 0, 79, 80, 78, 0, - 82, 0, 0, 111, 213, 194, 197, 199, 200, 195, - 196, 201, 0, 114, 116, 189, 190, 191, 198, 192, - 193, 24, 23, 0, 0, 63, 0, 58, 0, 0, - 0, 0, 91, 65, 56, 53, 54, 227, 226, 0, - 104, 84, 0, 72, 71, 73, 97, 74, 81, 77, - 0, 97, 0, 0, 75, 26, 0, 37, 0, 223, - 0, 0, 185, 0, 0, 0, 0, 0, 0, 187, - 0, 90, 119, 126, 127, 128, 121, 123, 129, 122, - 141, 130, 131, 132, 125, 120, 134, 135, 0, 29, - 244, 0, 0, 61, 0, 0, 64, 21, 0, 19, - 88, 86, 112, 221, 111, 96, 98, 103, 111, 107, - 109, 106, 117, 0, 35, 0, 0, 39, 223, 85, - 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, - 136, 0, 0, 0, 0, 0, 138, 0, 0, 0, + 4, 0, 0, 87, 0, 0, 81, 82, 80, 0, + 84, 0, 0, 110, 98, 217, 198, 201, 203, 204, + 199, 200, 205, 0, 118, 120, 193, 194, 195, 202, + 196, 197, 24, 23, 0, 0, 63, 0, 58, 0, + 0, 0, 0, 93, 65, 56, 53, 54, 231, 230, + 0, 107, 86, 0, 76, 75, 99, 72, 71, 73, + 83, 79, 0, 99, 0, 0, 77, 109, 26, 0, + 37, 0, 227, 0, 0, 189, 0, 0, 0, 0, + 0, 0, 191, 0, 92, 123, 130, 131, 132, 125, + 127, 133, 126, 145, 134, 135, 136, 129, 124, 138, + 139, 0, 29, 248, 0, 0, 61, 0, 0, 64, + 21, 0, 19, 90, 88, 116, 225, 110, 0, 100, + 101, 106, 110, 112, 114, 111, 121, 0, 35, 0, + 0, 39, 227, 87, 0, 0, 0, 0, 0, 0, + 0, 0, 141, 0, 140, 0, 0, 0, 0, 0, + 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, - 0, 67, 66, 0, 17, 0, 0, 91, 87, 0, - 219, 0, 220, 118, 70, 0, 102, 101, 100, 76, - 0, 0, 0, 43, 0, 46, 45, 0, 44, 49, - 42, 52, 34, 0, 36, 173, 0, 186, 188, 0, - 176, 177, 178, 179, 180, 181, 0, 0, 0, 0, - 0, 160, 0, 0, 0, 133, 124, 152, 153, 0, - 148, 0, 0, 0, 139, 0, 151, 150, 166, 167, - 168, 169, 170, 171, 172, 143, 142, 145, 144, 146, - 147, 0, 27, 245, 0, 0, 20, 223, 89, 202, - 204, 0, 206, 217, 205, 93, 113, 218, 99, 110, - 108, 33, 0, 0, 50, 0, 41, 40, 0, 164, - 0, 0, 0, 158, 0, 0, 0, 182, 0, 149, - 0, 0, 0, 140, 183, 60, 22, 0, 0, 239, - 231, 237, 235, 238, 233, 0, 0, 0, 216, 210, - 214, 0, 83, 0, 0, 51, 174, 0, 162, 0, - 161, 0, 165, 184, 0, 0, 156, 154, 217, 0, - 234, 236, 232, 0, 203, 218, 0, 47, 48, 175, - 159, 163, 157, 155, 207, 228, 240, 0, 95, 0, - 0, 0, 0, 92, 0, 241, 229, 215, 94, 185, - 0, 230 + 0, 0, 62, 0, 0, 67, 66, 0, 17, 0, + 0, 93, 89, 0, 223, 0, 224, 122, 70, 74, + 0, 105, 104, 103, 78, 0, 0, 0, 43, 0, + 46, 45, 0, 44, 49, 42, 52, 34, 0, 36, + 177, 0, 190, 192, 0, 180, 181, 182, 183, 184, + 185, 0, 0, 0, 0, 0, 164, 0, 0, 0, + 137, 128, 156, 157, 0, 152, 0, 0, 0, 143, + 0, 155, 154, 170, 171, 172, 173, 174, 175, 176, + 147, 146, 149, 148, 150, 151, 0, 27, 249, 0, + 0, 20, 227, 91, 206, 208, 0, 210, 221, 209, + 95, 117, 222, 102, 115, 113, 33, 0, 0, 50, + 0, 41, 40, 0, 168, 0, 0, 0, 162, 0, + 0, 0, 186, 0, 153, 0, 0, 0, 144, 187, + 60, 22, 0, 0, 243, 235, 241, 239, 242, 237, + 0, 0, 0, 220, 214, 218, 0, 85, 0, 0, + 51, 178, 0, 166, 0, 165, 0, 169, 188, 0, + 0, 160, 158, 221, 0, 238, 240, 236, 0, 207, + 222, 0, 47, 48, 179, 163, 167, 161, 159, 211, + 232, 244, 0, 97, 0, 0, 0, 0, 94, 0, + 245, 233, 219, 96, 189, 0, 234 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -330, -330, -330, 386, -330, 424, -330, 196, -330, -330, - -330, -330, -330, 174, -330, -330, 415, -330, 169, -330, - -330, -330, 409, -330, -330, -330, 341, -330, -330, 272, - -144, -4, 367, -55, 400, -330, -330, -1, 253, -330, - -330, -330, -106, -330, -330, 12, -330, 198, -330, -330, - -161, -213, -330, 45, 212, -116, -111, -330, -330, -330, - -330, -330, -330, 250, -330, -330, -330, -330, -330, -330, - -330, -330, 31, -63, -109, -330, -330, -80, -330, -330, - -330, -329, 60, -330, -330, -330, 2, -330, 66, 273, - -330, -330, -330, -330, 393, -330, -330, -330, -330, 46 + -303, -303, -303, 419, -303, 454, -303, 211, -303, -303, + -303, -303, -303, 203, -303, -303, 445, -303, 196, -303, + -303, -303, 440, -303, -303, -303, 370, -303, -303, 301, + -150, -53, -303, 30, -54, -41, -303, -303, -56, 274, + -303, -303, -303, -106, -303, -303, 8, -303, -303, 226, + -303, -303, 25, -303, -211, -303, 27, 247, -117, -116, + -303, -303, -303, -303, -303, -303, 279, -303, -303, -303, + -303, -303, -303, -303, -303, 51, -63, -112, -303, -303, + -77, -303, -303, -303, -302, 98, -303, -303, -303, 1, + -303, 94, 304, -303, -303, -303, -303, 434, -303, -303, + -303, -303, 83 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 14, 15, 16, 17, 55, 188, 189, 18, 112, - 19, 20, 71, 178, 21, 22, 67, 206, 207, 281, - 356, 23, 75, 24, 25, 26, 120, 27, 122, 123, - 28, 135, 136, 60, 89, 90, 139, 61, 132, 190, - 257, 258, 117, 392, 433, 93, 195, 196, 268, 83, - 144, 191, 102, 103, 192, 193, 162, 163, 164, 165, - 166, 167, 168, 215, 169, 170, 171, 172, 296, 173, - 174, 175, 176, 177, 105, 106, 107, 108, 109, 110, - 338, 339, 340, 341, 342, 42, 343, 388, 389, 390, - 263, 29, 30, 49, 50, 344, 385, 436, 53, 181 + -1, 14, 15, 16, 17, 55, 191, 192, 18, 113, + 19, 20, 71, 181, 21, 22, 67, 210, 211, 286, + 361, 23, 75, 24, 25, 26, 121, 27, 123, 124, + 28, 136, 137, 138, 60, 89, 90, 141, 61, 133, + 193, 261, 262, 118, 397, 438, 93, 94, 199, 200, + 273, 83, 146, 147, 194, 103, 104, 195, 196, 165, + 166, 167, 168, 169, 170, 171, 219, 172, 173, 174, + 175, 301, 176, 177, 178, 179, 180, 106, 107, 108, + 109, 110, 111, 343, 344, 345, 346, 347, 42, 348, + 393, 394, 395, 267, 29, 30, 49, 50, 349, 390, + 441, 53, 184 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -960,164 +966,154 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 161, 104, 130, 85, 33, 204, 304, 36, 32, 179, - 116, 287, 43, 95, 96, 97, 186, 439, 432, 131, - 86, 260, 46, 223, 197, 59, 199, 201, 86, 148, - 223, 57, 271, 264, 311, 266, 223, 269, 37, 214, - 57, 69, 224, 72, 222, 218, 182, 220, 77, 224, - 31, 87, 378, 231, 84, 224, 47, 414, 44, 87, - 223, 267, 149, 312, 284, 183, 38, 260, 251, 114, - 115, 32, 34, 358, 127, 306, 142, 125, 126, 224, - 246, 91, 419, 202, 426, 88, 45, 379, 137, 361, - 223, 137, 380, 88, 143, 185, 223, 297, 381, 382, - 372, 150, 35, 48, 98, 221, 218, 307, 308, 224, - 39, 40, 401, 383, 309, 224, 310, -240, 384, 223, - 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 327, 328, 329, 330, 259, 387, 58, 224, 367, - 152, 95, 96, 97, 259, 99, 100, 41, 194, 197, - 314, 345, 51, 198, 349, 350, 289, 405, 288, 54, - 52, 62, 337, 179, 159, 285, 331, 378, 315, 63, - 223, 101, 231, 152, 95, 96, 97, 64, 153, 154, - 354, 231, 261, 364, 365, 66, 65, 104, -208, 224, - 104, 70, 73, 377, 242, 243, 244, 245, 355, 246, - 369, 299, 379, 428, 78, 81, 245, 380, 246, 74, - 362, 153, 154, 381, 382, 155, 378, 429, 79, 82, - 300, 152, 95, 96, 97, 94, 113, 301, 383, 300, - 213, 111, 98, 384, 223, 116, 363, 152, 95, 96, - 97, 209, 200, 210, 397, 398, 399, 366, 155, 332, - 156, 379, 223, 224, 119, 400, 380, 403, 371, 153, - 154, 118, 381, 382, 157, 98, 430, 248, 121, 57, - 249, 224, 213, 99, 100, 153, 154, 383, 124, 58, - 129, -240, 384, 156, 97, 421, 158, 159, 254, 223, - 282, 255, 420, 283, 160, 334, 155, 157, 335, 101, - 131, 152, 95, 96, 97, 133, 99, 100, 224, 134, - 138, 273, 155, 98, 435, 404, 438, 274, 375, 158, - 159, 146, 140, 376, 145, 275, 146, 160, 146, 98, - 396, 156, 101, 259, 152, 95, 96, 97, 407, 216, - 154, 259, 147, 423, 95, 157, 259, 156, 437, 276, - 180, 249, -209, 184, 99, 100, 187, 203, 13, 91, - 208, 157, 205, 211, 212, 219, 277, 158, 159, 247, - 99, 100, 259, 154, 225, 160, 155, 250, 253, 256, - 101, 278, 270, 158, 159, 279, 265, 272, 57, 302, - 313, 160, 333, 98, 305, 347, 101, 352, 280, 360, - 353, 311, 359, 223, 226, 370, 373, 246, 386, 155, - 374, 217, 290, 291, 292, 293, 294, 295, 391, 393, - 394, 395, 402, 409, 406, 157, 98, 408, 413, 410, - 415, 411, 412, 417, 99, 100, 416, 418, 80, 422, - 427, 434, 56, 441, 217, 226, 351, 158, 159, 227, - 210, 336, 357, 68, 76, 160, 151, 252, 157, 141, - 101, 92, 286, 348, 298, 440, 262, 99, 100, 425, - 228, 346, 128, 431, 424, 0, 0, 0, 229, 230, - 158, 159, 0, 0, 0, 231, 232, 0, 160, 226, - 227, 0, 0, 101, 0, 233, 234, 235, 236, 237, - 0, 0, 238, 239, 368, 240, 241, 242, 243, 244, - 245, 303, 246, 0, 0, 0, 0, 0, 0, 0, - 230, 226, 0, 0, 0, 0, 231, 232, 0, 0, - 0, 0, 0, 0, 227, 0, 233, 234, 235, 236, - 237, 0, 0, 238, 239, 0, 240, 241, 242, 243, - 244, 245, 0, 246, 0, 303, 226, 0, 0, 0, - 0, 0, 0, 0, 230, 0, -243, 0, 0, 0, - 231, 232, 0, 0, 0, 0, 0, 0, 0, 0, - 233, 234, 235, 236, 237, 0, 0, 238, 239, 0, - 240, 241, 242, 243, 244, 245, 230, 246, 0, 0, - 0, 0, 231, -243, 0, 0, 0, 0, 0, 0, - 0, 0, -243, -243, -243, 236, 237, 0, 0, 238, - 239, 0, 240, 241, 242, 243, 244, 245, 0, 246, - 0, 230, 0, 0, 0, 0, 0, 231, 0, 0, - 0, -242, 0, 0, 0, 0, 0, 0, 1, 0, - -243, -243, 0, 0, -243, -243, 2, 240, 241, 242, - 243, 244, 245, 3, 246, 0, 1, 4, 0, 0, - 0, 0, 0, 5, 2, 0, 6, 7, 0, 0, - 0, 3, 0, 0, 0, 4, 8, 9, 0, 0, - 0, 5, 0, 0, 6, 7, 0, 10, 0, 0, - 0, 0, 0, 0, 8, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, - 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, - 0, 11, 0, 0, 13, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, - 0, 0, 13 + 164, 105, 208, 33, 85, 131, 36, 182, 96, 97, + 98, 43, 309, 32, 132, 292, 444, 189, 383, 264, + 92, 117, 316, 151, 276, 201, 437, 203, 205, 57, + 227, 31, 86, 139, 235, 227, 139, 46, 227, 143, + 69, 218, 72, 222, 37, 224, 226, 77, 235, 228, + 44, 317, 32, 384, 228, 372, 152, 228, 385, 59, + 263, 250, 289, 87, 386, 387, 304, 186, 115, 116, + 255, 47, 38, 249, 264, 250, 126, 127, 45, 388, + 363, 86, 227, -244, 389, 305, 206, 311, 84, 419, + 424, 252, 306, 91, 253, 153, 144, 88, 198, 99, + 302, 228, 39, 34, 40, 222, 188, 377, 128, 225, + 312, 313, 87, 314, 145, 315, 431, 35, 41, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 392, 58, 155, 96, 97, 98, + 100, 101, 139, 263, 197, 269, 88, 48, 51, 227, + 57, 202, 405, 201, -212, 350, 185, 271, 354, 355, + 290, 294, 293, 162, 410, 182, 102, 342, 228, 155, + 96, 97, 98, 336, 156, 157, 227, 227, 258, 425, + 367, 259, 227, 272, 52, 54, 366, 369, 370, 265, + 406, 105, 382, 227, 105, 228, 228, 227, 62, 305, + 374, 228, 155, 96, 97, 98, 368, 156, 157, 217, + 433, 158, 228, 227, 63, 64, 228, 155, 96, 97, + 98, 319, 268, 287, 359, 70, 288, 274, 99, 66, + 65, 73, 228, 155, 96, 97, 98, 78, 204, 320, + 156, 157, 360, 213, 158, 214, 159, 74, 402, 403, + 404, 235, 337, 371, 79, 156, 157, 408, 81, 380, + 160, 99, 149, 381, 376, 57, 149, 82, 217, 100, + 101, 220, 157, 246, 247, 248, 249, 158, 250, 159, + 95, 339, 161, 162, 340, 155, 96, 97, 98, 426, + 163, 112, 158, 160, 99, 102, 114, 401, 412, 278, + 263, 263, 100, 101, 428, 279, 119, 263, 158, 99, + 117, 442, 159, 280, 253, 161, 162, 120, 440, 122, + 443, 409, 125, 163, 157, 99, 160, 159, 102, 229, + 58, 130, 98, 132, 134, 100, 101, 281, 135, 142, + 140, 160, 148, 221, 150, 96, 149, 183, 161, 162, + 100, 101, 190, 187, 282, 91, 163, 160, 207, 230, + 158, 102, 13, 161, 162, 209, 100, 101, 212, 283, + 215, 163, 251, 284, 216, 254, 102, 99, 223, 161, + 162, 383, 257, 260, 275, 263, 285, 163, 270, 277, + 57, 310, 102, 307, 318, 221, 338, 352, 357, 365, + 230, 358, 316, 364, 231, 227, 375, 250, 378, 160, + 295, 296, 297, 298, 299, 300, 384, 379, 100, 101, + 396, 385, 398, 391, 399, 232, 400, 386, 387, 407, + 411, 161, 162, 233, 234, 414, 413, 415, 416, 163, + 235, 236, 388, 230, 102, 231, -244, 389, 417, 418, + 237, 238, 239, 240, 241, 420, 421, 242, 243, 373, + 244, 245, 246, 247, 248, 249, 308, 250, 214, 422, + 341, 80, 56, 423, 432, 234, 427, 230, 446, 439, + 356, 235, 236, 68, 362, 76, 154, 291, 231, 256, + 445, 237, 238, 239, 240, 241, 353, 303, 242, 243, + 266, 244, 245, 246, 247, 248, 249, 429, 250, 308, + 351, 230, 430, 129, 0, 436, 0, -213, 234, 0, + 0, 0, -247, 0, 235, 236, 0, 383, 0, 0, + 0, 0, 0, 0, 237, 238, 239, 240, 241, 0, + 0, 242, 243, 0, 244, 245, 246, 247, 248, 249, + 0, 250, 234, 0, 0, 0, 0, 0, 235, -247, + 0, 0, 384, 0, 0, 0, 0, 385, -247, -247, + -247, 240, 241, 386, 387, 242, 243, 434, 244, 245, + 246, 247, 248, 249, 0, 250, 234, 0, 388, 0, + 0, 0, 235, 389, 0, 0, -246, 0, 0, 0, + 0, 0, 0, 1, 0, -247, -247, 0, 0, -247, + -247, 2, 244, 245, 246, 247, 248, 249, 3, 250, + 0, 1, 4, 0, 0, 0, 435, 0, 5, 2, + 0, 6, 7, 0, 0, 0, 3, 0, 0, 0, + 4, 8, 9, 0, 0, 0, 5, 0, 0, 6, + 7, 0, 10, 0, 0, 0, 0, 0, 0, 8, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 10, 0, 0, 0, 0, 0, 0, 0, 11, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 0, 11, 0, 0, 13, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 12, 0, 0, 0, 0, 0, 13 }; static const yytype_int16 yycheck[] = { - 116, 64, 82, 58, 2, 149, 219, 5, 3, 118, - 76, 3, 10, 4, 5, 6, 122, 3, 44, 12, - 9, 3, 19, 106, 140, 29, 142, 143, 9, 85, - 106, 51, 48, 194, 92, 81, 106, 198, 73, 155, - 51, 39, 125, 41, 160, 156, 57, 158, 46, 125, - 26, 40, 25, 128, 58, 125, 53, 386, 73, 40, - 106, 107, 118, 121, 208, 120, 101, 3, 184, 67, - 68, 3, 3, 286, 78, 158, 48, 75, 76, 125, - 155, 70, 158, 146, 413, 74, 101, 60, 89, 99, - 106, 92, 65, 74, 66, 161, 106, 213, 71, 72, - 313, 157, 3, 3, 95, 160, 217, 223, 224, 125, - 85, 85, 99, 86, 225, 125, 227, 90, 91, 106, - 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, - 241, 242, 243, 244, 245, 161, 118, 157, 125, 156, - 3, 4, 5, 6, 161, 136, 137, 89, 136, 265, - 95, 257, 0, 141, 270, 271, 211, 370, 150, 103, - 160, 3, 157, 272, 150, 158, 246, 25, 113, 159, - 106, 162, 128, 3, 4, 5, 6, 157, 41, 42, - 95, 128, 118, 299, 300, 120, 85, 250, 161, 125, - 253, 108, 115, 337, 150, 151, 152, 153, 113, 155, - 311, 83, 60, 416, 118, 88, 153, 65, 155, 120, - 83, 41, 42, 71, 72, 78, 25, 75, 161, 117, - 102, 3, 4, 5, 6, 3, 113, 109, 86, 102, - 102, 4, 95, 91, 106, 76, 109, 3, 4, 5, - 6, 157, 105, 159, 360, 361, 362, 302, 78, 247, - 113, 60, 106, 125, 157, 109, 65, 368, 313, 41, - 42, 84, 71, 72, 127, 95, 124, 158, 3, 51, - 161, 125, 102, 136, 137, 41, 42, 86, 41, 157, - 157, 90, 91, 113, 6, 401, 149, 150, 158, 106, - 158, 161, 109, 161, 157, 250, 78, 127, 253, 162, - 12, 3, 4, 5, 6, 158, 136, 137, 125, 158, - 105, 24, 78, 95, 430, 370, 432, 30, 158, 149, - 150, 161, 119, 158, 158, 38, 161, 157, 161, 95, - 158, 113, 162, 161, 3, 4, 5, 6, 158, 41, - 42, 161, 41, 158, 4, 127, 161, 113, 158, 62, - 3, 161, 161, 138, 136, 137, 3, 116, 103, 70, - 118, 127, 3, 157, 157, 155, 79, 149, 150, 89, - 136, 137, 161, 42, 17, 157, 78, 157, 157, 85, - 162, 94, 48, 149, 150, 98, 161, 84, 51, 157, - 157, 157, 3, 95, 158, 3, 162, 157, 111, 85, - 157, 92, 158, 106, 47, 157, 95, 155, 161, 78, - 156, 113, 130, 131, 132, 133, 134, 135, 63, 6, - 6, 95, 158, 90, 158, 127, 95, 158, 90, 71, - 3, 71, 71, 158, 136, 137, 119, 158, 52, 158, - 157, 157, 18, 158, 113, 47, 272, 149, 150, 92, - 159, 255, 283, 38, 45, 157, 115, 185, 127, 92, - 162, 61, 209, 265, 214, 434, 193, 136, 137, 409, - 113, 259, 79, 427, 408, -1, -1, -1, 121, 122, - 149, 150, -1, -1, -1, 128, 129, -1, 157, 47, - 92, -1, -1, 162, -1, 138, 139, 140, 141, 142, - -1, -1, 145, 146, 106, 148, 149, 150, 151, 152, - 153, 113, 155, -1, -1, -1, -1, -1, -1, -1, - 122, 47, -1, -1, -1, -1, 128, 129, -1, -1, - -1, -1, -1, -1, 92, -1, 138, 139, 140, 141, - 142, -1, -1, 145, 146, -1, 148, 149, 150, 151, - 152, 153, -1, 155, -1, 113, 47, -1, -1, -1, - -1, -1, -1, -1, 122, -1, 92, -1, -1, -1, - 128, 129, -1, -1, -1, -1, -1, -1, -1, -1, - 138, 139, 140, 141, 142, -1, -1, 145, 146, -1, - 148, 149, 150, 151, 152, 153, 122, 155, -1, -1, - -1, -1, 128, 129, -1, -1, -1, -1, -1, -1, - -1, -1, 138, 139, 140, 141, 142, -1, -1, 145, - 146, -1, 148, 149, 150, 151, 152, 153, -1, 155, - -1, 122, -1, -1, -1, -1, -1, 128, -1, -1, - -1, 0, -1, -1, -1, -1, -1, -1, 7, -1, - 141, 142, -1, -1, 145, 146, 15, 148, 149, 150, - 151, 152, 153, 22, 155, -1, 7, 26, -1, -1, - -1, -1, -1, 32, 15, -1, 35, 36, -1, -1, - -1, 22, -1, -1, -1, 26, 45, 46, -1, -1, - -1, 32, -1, -1, 35, 36, -1, 56, -1, -1, - -1, -1, -1, -1, 45, 46, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 56, -1, -1, -1, -1, - -1, -1, -1, 82, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 97, -1, - -1, 82, -1, -1, 103, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 97, -1, -1, -1, - -1, -1, 103 + 117, 64, 152, 2, 58, 82, 5, 119, 4, 5, + 6, 10, 223, 3, 12, 3, 3, 123, 25, 3, + 61, 76, 92, 85, 48, 142, 44, 144, 145, 51, + 106, 26, 9, 89, 128, 106, 92, 19, 106, 92, + 39, 158, 41, 159, 73, 161, 163, 46, 128, 125, + 73, 121, 3, 60, 125, 156, 118, 125, 65, 29, + 161, 155, 212, 40, 71, 72, 83, 121, 67, 68, + 187, 53, 101, 153, 3, 155, 75, 76, 101, 86, + 291, 9, 106, 90, 91, 102, 149, 158, 58, 391, + 158, 158, 109, 70, 161, 157, 48, 74, 139, 95, + 217, 125, 85, 3, 85, 221, 161, 318, 78, 163, + 227, 228, 40, 229, 66, 231, 418, 3, 89, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 118, 157, 3, 4, 5, 6, + 136, 137, 198, 161, 136, 198, 74, 3, 0, 106, + 51, 143, 109, 270, 161, 261, 57, 81, 275, 276, + 158, 215, 150, 150, 375, 277, 162, 157, 125, 3, + 4, 5, 6, 250, 41, 42, 106, 106, 158, 109, + 83, 161, 106, 107, 160, 103, 99, 304, 305, 118, + 99, 254, 342, 106, 257, 125, 125, 106, 3, 102, + 316, 125, 3, 4, 5, 6, 109, 41, 42, 102, + 421, 78, 125, 106, 159, 157, 125, 3, 4, 5, + 6, 95, 197, 158, 95, 108, 161, 202, 95, 120, + 85, 115, 125, 3, 4, 5, 6, 118, 105, 113, + 41, 42, 113, 157, 78, 159, 113, 120, 365, 366, + 367, 128, 251, 307, 161, 41, 42, 373, 88, 158, + 127, 95, 161, 158, 318, 51, 161, 117, 102, 136, + 137, 41, 42, 150, 151, 152, 153, 78, 155, 113, + 3, 254, 149, 150, 257, 3, 4, 5, 6, 406, + 157, 4, 78, 127, 95, 162, 113, 158, 158, 24, + 161, 161, 136, 137, 158, 30, 84, 161, 78, 95, + 76, 158, 113, 38, 161, 149, 150, 157, 435, 3, + 437, 375, 41, 157, 42, 95, 127, 113, 162, 17, + 157, 157, 6, 12, 158, 136, 137, 62, 158, 119, + 105, 127, 158, 113, 41, 4, 161, 3, 149, 150, + 136, 137, 3, 138, 79, 70, 157, 127, 116, 47, + 78, 162, 103, 149, 150, 3, 136, 137, 118, 94, + 157, 157, 89, 98, 157, 157, 162, 95, 155, 149, + 150, 25, 157, 85, 48, 161, 111, 157, 161, 84, + 51, 158, 162, 157, 157, 113, 3, 3, 157, 85, + 47, 157, 92, 158, 92, 106, 157, 155, 95, 127, + 130, 131, 132, 133, 134, 135, 60, 156, 136, 137, + 63, 65, 6, 161, 6, 113, 95, 71, 72, 158, + 158, 149, 150, 121, 122, 90, 158, 71, 71, 157, + 128, 129, 86, 47, 162, 92, 90, 91, 71, 90, + 138, 139, 140, 141, 142, 3, 119, 145, 146, 106, + 148, 149, 150, 151, 152, 153, 113, 155, 159, 158, + 259, 52, 18, 158, 157, 122, 158, 47, 158, 157, + 277, 128, 129, 38, 288, 45, 116, 213, 92, 188, + 439, 138, 139, 140, 141, 142, 270, 218, 145, 146, + 196, 148, 149, 150, 151, 152, 153, 413, 155, 113, + 263, 47, 414, 79, -1, 432, -1, 161, 122, -1, + -1, -1, 92, -1, 128, 129, -1, 25, -1, -1, + -1, -1, -1, -1, 138, 139, 140, 141, 142, -1, + -1, 145, 146, -1, 148, 149, 150, 151, 152, 153, + -1, 155, 122, -1, -1, -1, -1, -1, 128, 129, + -1, -1, 60, -1, -1, -1, -1, 65, 138, 139, + 140, 141, 142, 71, 72, 145, 146, 75, 148, 149, + 150, 151, 152, 153, -1, 155, 122, -1, 86, -1, + -1, -1, 128, 91, -1, -1, 0, -1, -1, -1, + -1, -1, -1, 7, -1, 141, 142, -1, -1, 145, + 146, 15, 148, 149, 150, 151, 152, 153, 22, 155, + -1, 7, 26, -1, -1, -1, 124, -1, 32, 15, + -1, 35, 36, -1, -1, -1, 22, -1, -1, -1, + 26, 45, 46, -1, -1, -1, 32, -1, -1, 35, + 36, -1, 56, -1, -1, -1, -1, -1, -1, 45, + 46, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 56, -1, -1, -1, -1, -1, -1, -1, 82, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 97, -1, -1, 82, -1, -1, 103, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 97, -1, -1, -1, -1, -1, 103 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -1126,49 +1122,49 @@ static const yytype_uint16 yystos[] = { 0, 7, 15, 22, 26, 32, 35, 36, 45, 46, 56, 82, 97, 103, 164, 165, 166, 167, 171, 173, - 174, 177, 178, 184, 186, 187, 188, 190, 193, 254, - 255, 26, 3, 249, 3, 3, 249, 73, 101, 85, - 85, 89, 248, 249, 73, 101, 19, 53, 3, 256, - 257, 0, 160, 261, 103, 168, 168, 51, 157, 194, - 196, 200, 3, 159, 157, 85, 120, 179, 179, 249, - 108, 175, 249, 115, 120, 185, 185, 249, 118, 161, - 166, 88, 117, 212, 194, 196, 9, 40, 74, 197, - 198, 70, 197, 208, 3, 4, 5, 6, 95, 136, - 137, 162, 215, 216, 236, 237, 238, 239, 240, 241, - 242, 4, 172, 113, 249, 249, 76, 205, 84, 157, - 189, 3, 191, 192, 41, 249, 249, 194, 257, 157, - 240, 12, 201, 158, 158, 194, 195, 200, 105, 199, - 119, 195, 48, 66, 213, 158, 161, 41, 85, 118, - 157, 189, 3, 41, 42, 78, 113, 127, 149, 150, - 157, 218, 219, 220, 221, 222, 223, 224, 225, 227, - 228, 229, 230, 232, 233, 234, 235, 236, 176, 237, - 3, 262, 57, 196, 138, 161, 205, 3, 169, 170, - 202, 214, 217, 218, 208, 209, 210, 218, 208, 218, - 105, 218, 236, 116, 193, 3, 180, 181, 118, 157, - 159, 157, 157, 102, 218, 226, 41, 113, 219, 155, - 219, 196, 218, 106, 125, 17, 47, 92, 113, 121, - 122, 128, 129, 138, 139, 140, 141, 142, 145, 146, - 148, 149, 150, 151, 152, 153, 155, 89, 158, 161, - 157, 218, 192, 157, 158, 161, 85, 203, 204, 161, - 3, 118, 252, 253, 213, 161, 81, 107, 211, 213, - 48, 48, 84, 24, 30, 38, 62, 79, 94, 98, - 111, 182, 158, 161, 193, 158, 201, 3, 150, 196, - 130, 131, 132, 133, 134, 135, 231, 218, 226, 83, - 102, 109, 157, 113, 214, 158, 158, 218, 218, 219, - 219, 92, 121, 157, 95, 113, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 240, 249, 3, 216, 216, 170, 157, 243, 244, - 245, 246, 247, 249, 258, 205, 217, 3, 210, 218, - 218, 176, 157, 157, 95, 113, 183, 181, 214, 158, - 85, 99, 83, 109, 218, 218, 196, 156, 106, 219, - 157, 196, 214, 95, 156, 158, 158, 193, 25, 60, - 65, 71, 72, 86, 91, 259, 161, 118, 250, 251, - 252, 63, 206, 6, 6, 95, 158, 218, 218, 218, - 109, 99, 158, 219, 196, 214, 158, 158, 158, 90, - 71, 71, 71, 90, 244, 3, 119, 158, 158, 158, - 109, 218, 158, 158, 251, 245, 244, 157, 214, 75, - 124, 262, 44, 207, 157, 218, 260, 158, 218, 3, - 235, 158 + 174, 177, 178, 184, 186, 187, 188, 190, 193, 257, + 258, 26, 3, 252, 3, 3, 252, 73, 101, 85, + 85, 89, 251, 252, 73, 101, 19, 53, 3, 259, + 260, 0, 160, 264, 103, 168, 168, 51, 157, 196, + 197, 201, 3, 159, 157, 85, 120, 179, 179, 252, + 108, 175, 252, 115, 120, 185, 185, 252, 118, 161, + 166, 88, 117, 214, 196, 197, 9, 40, 74, 198, + 199, 70, 198, 209, 210, 3, 4, 5, 6, 95, + 136, 137, 162, 218, 219, 239, 240, 241, 242, 243, + 244, 245, 4, 172, 113, 252, 252, 76, 206, 84, + 157, 189, 3, 191, 192, 41, 252, 252, 196, 260, + 157, 243, 12, 202, 158, 158, 194, 195, 196, 201, + 105, 200, 119, 194, 48, 66, 215, 216, 158, 161, + 41, 85, 118, 157, 189, 3, 41, 42, 78, 113, + 127, 149, 150, 157, 221, 222, 223, 224, 225, 226, + 227, 228, 230, 231, 232, 233, 235, 236, 237, 238, + 239, 176, 240, 3, 265, 57, 197, 138, 161, 206, + 3, 169, 170, 203, 217, 220, 221, 209, 198, 211, + 212, 221, 209, 221, 105, 221, 239, 116, 193, 3, + 180, 181, 118, 157, 159, 157, 157, 102, 221, 229, + 41, 113, 222, 155, 222, 197, 221, 106, 125, 17, + 47, 92, 113, 121, 122, 128, 129, 138, 139, 140, + 141, 142, 145, 146, 148, 149, 150, 151, 152, 153, + 155, 89, 158, 161, 157, 221, 192, 157, 158, 161, + 85, 204, 205, 161, 3, 118, 255, 256, 215, 194, + 161, 81, 107, 213, 215, 48, 48, 84, 24, 30, + 38, 62, 79, 94, 98, 111, 182, 158, 161, 193, + 158, 202, 3, 150, 197, 130, 131, 132, 133, 134, + 135, 234, 221, 229, 83, 102, 109, 157, 113, 217, + 158, 158, 221, 221, 222, 222, 92, 121, 157, 95, + 113, 222, 222, 222, 222, 222, 222, 222, 222, 222, + 222, 222, 222, 222, 222, 222, 243, 252, 3, 219, + 219, 170, 157, 246, 247, 248, 249, 250, 252, 261, + 206, 220, 3, 212, 221, 221, 176, 157, 157, 95, + 113, 183, 181, 217, 158, 85, 99, 83, 109, 221, + 221, 197, 156, 106, 222, 157, 197, 217, 95, 156, + 158, 158, 193, 25, 60, 65, 71, 72, 86, 91, + 262, 161, 118, 253, 254, 255, 63, 207, 6, 6, + 95, 158, 221, 221, 221, 109, 99, 158, 222, 197, + 217, 158, 158, 158, 90, 71, 71, 71, 90, 247, + 3, 119, 158, 158, 158, 109, 221, 158, 158, 254, + 248, 247, 157, 217, 75, 124, 265, 44, 208, 157, + 221, 263, 158, 221, 3, 238, 158 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ @@ -1181,24 +1177,24 @@ static const yytype_uint16 yyr1[] = 180, 181, 182, 182, 182, 182, 182, 182, 182, 182, 183, 183, 183, 184, 184, 184, 185, 185, 186, 187, 188, 188, 189, 189, 190, 191, 191, 192, 193, 193, - 193, 194, 194, 195, 195, 196, 196, 197, 198, 198, - 198, 199, 199, 200, 201, 201, 202, 203, 203, 204, - 205, 205, 206, 206, 207, 207, 208, 208, 209, 209, - 210, 211, 211, 211, 212, 212, 213, 213, 213, 213, - 213, 213, 214, 214, 215, 215, 216, 216, 217, 218, - 218, 218, 218, 218, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 220, 220, 221, 221, 221, 221, - 221, 222, 222, 222, 222, 222, 222, 222, 222, 222, - 222, 222, 223, 223, 224, 224, 224, 224, 225, 225, - 225, 225, 226, 226, 227, 227, 228, 228, 228, 228, - 228, 228, 228, 229, 229, 230, 231, 231, 231, 231, - 231, 231, 232, 233, 234, 235, 235, 235, 235, 236, - 236, 236, 236, 236, 237, 238, 238, 239, 239, 240, - 241, 242, 243, 243, 244, 244, 245, 245, 246, 246, - 247, 248, 249, 249, 250, 250, 251, 251, 252, 252, - 253, 253, 254, 254, 255, 256, 256, 257, 258, 258, - 258, 259, 259, 259, 259, 259, 259, 259, 259, 259, - 259, 260, 261, 261, 262, 262 + 193, 194, 194, 195, 195, 196, 196, 197, 197, 198, + 199, 199, 199, 200, 200, 201, 202, 202, 203, 204, + 204, 205, 206, 206, 207, 207, 208, 208, 209, 209, + 210, 211, 211, 212, 213, 213, 213, 214, 214, 215, + 215, 216, 216, 216, 216, 216, 217, 217, 218, 218, + 219, 219, 220, 221, 221, 221, 221, 221, 222, 222, + 222, 222, 222, 222, 222, 222, 222, 222, 223, 223, + 224, 224, 224, 224, 224, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 226, 226, 227, 227, + 227, 227, 228, 228, 228, 228, 229, 229, 230, 230, + 231, 231, 231, 231, 231, 231, 231, 232, 232, 233, + 234, 234, 234, 234, 234, 234, 235, 236, 237, 238, + 238, 238, 238, 239, 239, 239, 239, 239, 240, 241, + 241, 242, 242, 243, 244, 245, 246, 246, 247, 247, + 248, 248, 249, 249, 250, 251, 252, 252, 253, 253, + 254, 254, 255, 255, 256, 256, 257, 257, 258, 259, + 259, 260, 261, 261, 261, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 263, 264, 264, 265, 265 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -1211,24 +1207,24 @@ static const yytype_uint8 yyr2[] = 3, 3, 1, 1, 1, 1, 1, 4, 4, 1, 1, 2, 0, 4, 4, 3, 2, 0, 4, 2, 8, 5, 3, 0, 5, 1, 3, 3, 2, 2, - 6, 3, 3, 1, 1, 3, 5, 2, 1, 1, - 1, 1, 0, 7, 1, 0, 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, 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, 3, 5, 6, 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, 3, 1, 1, 1, 4, 1, 3, - 2, 1, 1, 3, 1, 5, 1, 0, 2, 1, - 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 + 6, 1, 1, 1, 3, 3, 3, 3, 5, 2, + 1, 1, 1, 1, 0, 7, 1, 0, 1, 1, + 0, 2, 2, 0, 4, 0, 2, 0, 1, 0, + 3, 1, 3, 2, 1, 1, 0, 2, 0, 1, + 0, 2, 2, 4, 2, 4, 1, 3, 1, 0, + 1, 3, 2, 1, 1, 1, 1, 1, 3, 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, 3, 5, 6, + 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, 3, 1, 1, + 1, 4, 1, 3, 2, 1, 1, 3, 1, 5, + 1, 0, 2, 1, 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 }; @@ -1382,7 +1378,9 @@ yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep, YY if (yytype < YYNTOKENS) YYPRINT (yyo, yytoknum[yytype], *yyvaluep); # endif + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YYUSE (yytype); + YY_IGNORE_MAYBE_UNINITIALIZED_END } @@ -1730,31 +1728,31 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio switch (yytype) { case 3: /* IDENTIFIER */ -#line 145 "bison_parser.y" /* yacc.c:1257 */ +#line 147 "bison_parser.y" { free( (((*yyvaluep).sval)) ); } -#line 1736 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1734 "bison_parser.cpp" break; case 4: /* STRING */ -#line 145 "bison_parser.y" /* yacc.c:1257 */ +#line 147 "bison_parser.y" { free( (((*yyvaluep).sval)) ); } -#line 1742 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1740 "bison_parser.cpp" break; case 5: /* FLOATVAL */ -#line 143 "bison_parser.y" /* yacc.c:1257 */ +#line 145 "bison_parser.y" { } -#line 1748 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1746 "bison_parser.cpp" break; case 6: /* INTVAL */ -#line 143 "bison_parser.y" /* yacc.c:1257 */ +#line 145 "bison_parser.y" { } -#line 1754 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1752 "bison_parser.cpp" break; case 165: /* statement_list */ -#line 146 "bison_parser.y" /* yacc.c:1257 */ +#line 148 "bison_parser.y" { if ((((*yyvaluep).stmt_vec)) != nullptr) { for (auto ptr : *(((*yyvaluep).stmt_vec))) { @@ -1763,23 +1761,23 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).stmt_vec)); } -#line 1767 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1765 "bison_parser.cpp" break; case 166: /* statement */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).statement)); } -#line 1773 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1771 "bison_parser.cpp" break; case 167: /* preparable_statement */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).statement)); } -#line 1779 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1777 "bison_parser.cpp" break; case 168: /* opt_hints */ -#line 146 "bison_parser.y" /* yacc.c:1257 */ +#line 148 "bison_parser.y" { if ((((*yyvaluep).expr_vec)) != nullptr) { for (auto ptr : *(((*yyvaluep).expr_vec))) { @@ -1788,11 +1786,11 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).expr_vec)); } -#line 1792 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1790 "bison_parser.cpp" break; case 169: /* hint_list */ -#line 146 "bison_parser.y" /* yacc.c:1257 */ +#line 148 "bison_parser.y" { if ((((*yyvaluep).expr_vec)) != nullptr) { for (auto ptr : *(((*yyvaluep).expr_vec))) { @@ -1801,71 +1799,71 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).expr_vec)); } -#line 1805 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1803 "bison_parser.cpp" break; case 170: /* hint */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 1811 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1809 "bison_parser.cpp" break; case 171: /* prepare_statement */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).prep_stmt)); } -#line 1817 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1815 "bison_parser.cpp" break; case 172: /* prepare_target_query */ -#line 145 "bison_parser.y" /* yacc.c:1257 */ +#line 147 "bison_parser.y" { free( (((*yyvaluep).sval)) ); } -#line 1823 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1821 "bison_parser.cpp" break; case 173: /* execute_statement */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).exec_stmt)); } -#line 1829 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1827 "bison_parser.cpp" break; case 174: /* import_statement */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).import_stmt)); } -#line 1835 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1833 "bison_parser.cpp" break; case 175: /* import_file_type */ -#line 143 "bison_parser.y" /* yacc.c:1257 */ +#line 145 "bison_parser.y" { } -#line 1841 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1839 "bison_parser.cpp" break; case 176: /* file_path */ -#line 145 "bison_parser.y" /* yacc.c:1257 */ +#line 147 "bison_parser.y" { free( (((*yyvaluep).sval)) ); } -#line 1847 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1845 "bison_parser.cpp" break; case 177: /* show_statement */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).show_stmt)); } -#line 1853 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1851 "bison_parser.cpp" break; case 178: /* create_statement */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).create_stmt)); } -#line 1859 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1857 "bison_parser.cpp" break; case 179: /* opt_not_exists */ -#line 143 "bison_parser.y" /* yacc.c:1257 */ +#line 145 "bison_parser.y" { } -#line 1865 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1863 "bison_parser.cpp" break; case 180: /* column_def_commalist */ -#line 146 "bison_parser.y" /* yacc.c:1257 */ +#line 148 "bison_parser.y" { if ((((*yyvaluep).column_vec)) != nullptr) { for (auto ptr : *(((*yyvaluep).column_vec))) { @@ -1874,59 +1872,59 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).column_vec)); } -#line 1878 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1876 "bison_parser.cpp" break; case 181: /* column_def */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).column_t)); } -#line 1884 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1882 "bison_parser.cpp" break; case 182: /* column_type */ -#line 143 "bison_parser.y" /* yacc.c:1257 */ +#line 145 "bison_parser.y" { } -#line 1890 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1888 "bison_parser.cpp" break; case 183: /* opt_column_nullable */ -#line 143 "bison_parser.y" /* yacc.c:1257 */ +#line 145 "bison_parser.y" { } -#line 1896 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1894 "bison_parser.cpp" break; case 184: /* drop_statement */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).drop_stmt)); } -#line 1902 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1900 "bison_parser.cpp" break; case 185: /* opt_exists */ -#line 143 "bison_parser.y" /* yacc.c:1257 */ +#line 145 "bison_parser.y" { } -#line 1908 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1906 "bison_parser.cpp" break; case 186: /* delete_statement */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).delete_stmt)); } -#line 1914 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1912 "bison_parser.cpp" break; case 187: /* truncate_statement */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).delete_stmt)); } -#line 1920 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1918 "bison_parser.cpp" break; case 188: /* insert_statement */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).insert_stmt)); } -#line 1926 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1924 "bison_parser.cpp" break; case 189: /* opt_column_list */ -#line 146 "bison_parser.y" /* yacc.c:1257 */ +#line 148 "bison_parser.y" { if ((((*yyvaluep).str_vec)) != nullptr) { for (auto ptr : *(((*yyvaluep).str_vec))) { @@ -1935,17 +1933,17 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).str_vec)); } -#line 1939 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1937 "bison_parser.cpp" break; case 190: /* update_statement */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).update_stmt)); } -#line 1945 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1943 "bison_parser.cpp" break; case 191: /* update_clause_commalist */ -#line 146 "bison_parser.y" /* yacc.c:1257 */ +#line 148 "bison_parser.y" { if ((((*yyvaluep).update_vec)) != nullptr) { for (auto ptr : *(((*yyvaluep).update_vec))) { @@ -1954,53 +1952,77 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).update_vec)); } -#line 1958 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1956 "bison_parser.cpp" break; case 192: /* update_clause */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).update_t)); } -#line 1964 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1962 "bison_parser.cpp" break; case 193: /* select_statement */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).select_stmt)); } -#line 1970 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1968 "bison_parser.cpp" break; - case 194: /* select_with_paren */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 194: /* select_statement_in_set_operation */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).select_stmt)); } -#line 1976 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1974 "bison_parser.cpp" break; - case 195: /* select_paren_or_clause */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 195: /* select_part_set */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).select_stmt)); } -#line 1982 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1980 "bison_parser.cpp" break; - case 196: /* select_no_paren */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 196: /* select_with_paren */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).select_stmt)); } -#line 1988 "bison_parser.cpp" /* yacc.c:1257 */ +#line 1986 "bison_parser.cpp" + break; + + case 197: /* select_no_paren */ +#line 156 "bison_parser.y" + { delete (((*yyvaluep).select_stmt)); } +#line 1992 "bison_parser.cpp" + break; + + case 198: /* set_operator */ +#line 156 "bison_parser.y" + { delete (((*yyvaluep).set_operator_t)); } +#line 1998 "bison_parser.cpp" + break; + + case 199: /* set_type */ +#line 156 "bison_parser.y" + { delete (((*yyvaluep).set_type_t)); } +#line 2004 "bison_parser.cpp" + break; + + case 200: /* opt_all */ +#line 145 "bison_parser.y" + { } +#line 2010 "bison_parser.cpp" break; - case 200: /* select_clause */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 201: /* select_clause */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).select_stmt)); } -#line 1994 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2016 "bison_parser.cpp" break; - case 201: /* opt_distinct */ -#line 143 "bison_parser.y" /* yacc.c:1257 */ + case 202: /* opt_distinct */ +#line 145 "bison_parser.y" { } -#line 2000 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2022 "bison_parser.cpp" break; - case 202: /* select_list */ -#line 146 "bison_parser.y" /* yacc.c:1257 */ + case 203: /* select_list */ +#line 148 "bison_parser.y" { if ((((*yyvaluep).expr_vec)) != nullptr) { for (auto ptr : *(((*yyvaluep).expr_vec))) { @@ -2009,41 +2031,41 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).expr_vec)); } -#line 2013 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2035 "bison_parser.cpp" break; - case 203: /* opt_from_clause */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 204: /* opt_from_clause */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2019 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2041 "bison_parser.cpp" break; - case 204: /* from_clause */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 205: /* from_clause */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2025 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2047 "bison_parser.cpp" break; - case 205: /* opt_where */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 206: /* opt_where */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2031 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2053 "bison_parser.cpp" break; - case 206: /* opt_group */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 207: /* opt_group */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).group_t)); } -#line 2037 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2059 "bison_parser.cpp" break; - case 207: /* opt_having */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 208: /* opt_having */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2043 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2065 "bison_parser.cpp" break; - case 208: /* opt_order */ -#line 146 "bison_parser.y" /* yacc.c:1257 */ + case 209: /* opt_order */ +#line 148 "bison_parser.y" { if ((((*yyvaluep).order_vec)) != nullptr) { for (auto ptr : *(((*yyvaluep).order_vec))) { @@ -2052,11 +2074,11 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).order_vec)); } -#line 2056 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2078 "bison_parser.cpp" break; - case 209: /* order_list */ -#line 146 "bison_parser.y" /* yacc.c:1257 */ + case 210: /* order */ +#line 148 "bison_parser.y" { if ((((*yyvaluep).order_vec)) != nullptr) { for (auto ptr : *(((*yyvaluep).order_vec))) { @@ -2065,35 +2087,54 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).order_vec)); } -#line 2069 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2091 "bison_parser.cpp" break; - case 210: /* order_desc */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 211: /* order_list */ +#line 148 "bison_parser.y" + { + if ((((*yyvaluep).order_vec)) != nullptr) { + for (auto ptr : *(((*yyvaluep).order_vec))) { + delete ptr; + } + } + delete (((*yyvaluep).order_vec)); +} +#line 2104 "bison_parser.cpp" + break; + + case 212: /* order_desc */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).order)); } -#line 2075 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2110 "bison_parser.cpp" break; - case 211: /* opt_order_type */ -#line 143 "bison_parser.y" /* yacc.c:1257 */ + case 213: /* opt_order_type */ +#line 145 "bison_parser.y" { } -#line 2081 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2116 "bison_parser.cpp" break; - case 212: /* opt_top */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 214: /* opt_top */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).limit)); } -#line 2087 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2122 "bison_parser.cpp" break; - case 213: /* opt_limit */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 215: /* opt_limit */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).limit)); } -#line 2093 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2128 "bison_parser.cpp" break; - case 214: /* expr_list */ -#line 146 "bison_parser.y" /* yacc.c:1257 */ + case 216: /* limit */ +#line 156 "bison_parser.y" + { delete (((*yyvaluep).limit)); } +#line 2134 "bison_parser.cpp" + break; + + case 217: /* expr_list */ +#line 148 "bison_parser.y" { if ((((*yyvaluep).expr_vec)) != nullptr) { for (auto ptr : *(((*yyvaluep).expr_vec))) { @@ -2102,11 +2143,11 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).expr_vec)); } -#line 2106 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2147 "bison_parser.cpp" break; - case 215: /* opt_literal_list */ -#line 146 "bison_parser.y" /* yacc.c:1257 */ + case 218: /* opt_literal_list */ +#line 148 "bison_parser.y" { if ((((*yyvaluep).expr_vec)) != nullptr) { for (auto ptr : *(((*yyvaluep).expr_vec))) { @@ -2115,11 +2156,11 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).expr_vec)); } -#line 2119 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2160 "bison_parser.cpp" break; - case 216: /* literal_list */ -#line 146 "bison_parser.y" /* yacc.c:1257 */ + case 219: /* literal_list */ +#line 148 "bison_parser.y" { if ((((*yyvaluep).expr_vec)) != nullptr) { for (auto ptr : *(((*yyvaluep).expr_vec))) { @@ -2128,185 +2169,185 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).expr_vec)); } -#line 2132 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2173 "bison_parser.cpp" break; - case 217: /* expr_alias */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 220: /* expr_alias */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2138 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2179 "bison_parser.cpp" break; - case 218: /* expr */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 221: /* expr */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2144 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2185 "bison_parser.cpp" break; - case 219: /* operand */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 222: /* operand */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2150 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2191 "bison_parser.cpp" break; - case 220: /* scalar_expr */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 223: /* scalar_expr */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2156 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2197 "bison_parser.cpp" break; - case 221: /* unary_expr */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 224: /* unary_expr */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2162 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2203 "bison_parser.cpp" break; - case 222: /* binary_expr */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 225: /* binary_expr */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2168 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2209 "bison_parser.cpp" break; - case 223: /* logic_expr */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 226: /* logic_expr */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2174 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2215 "bison_parser.cpp" break; - case 224: /* in_expr */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 227: /* in_expr */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2180 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2221 "bison_parser.cpp" break; - case 225: /* case_expr */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 228: /* case_expr */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2186 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2227 "bison_parser.cpp" break; - case 226: /* case_list */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 229: /* case_list */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2192 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2233 "bison_parser.cpp" break; - case 227: /* exists_expr */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 230: /* exists_expr */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2198 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2239 "bison_parser.cpp" break; - case 228: /* comp_expr */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 231: /* comp_expr */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2204 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2245 "bison_parser.cpp" break; - case 229: /* function_expr */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 232: /* function_expr */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2210 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2251 "bison_parser.cpp" break; - case 230: /* extract_expr */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 233: /* extract_expr */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2216 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2257 "bison_parser.cpp" break; - case 231: /* datetime_field */ -#line 143 "bison_parser.y" /* yacc.c:1257 */ + case 234: /* datetime_field */ +#line 145 "bison_parser.y" { } -#line 2222 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2263 "bison_parser.cpp" break; - case 232: /* array_expr */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 235: /* array_expr */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2228 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2269 "bison_parser.cpp" break; - case 233: /* array_index */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 236: /* array_index */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2234 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2275 "bison_parser.cpp" break; - case 234: /* between_expr */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 237: /* between_expr */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2240 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2281 "bison_parser.cpp" break; - case 235: /* column_name */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 238: /* column_name */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2246 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2287 "bison_parser.cpp" break; - case 236: /* literal */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 239: /* literal */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2252 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2293 "bison_parser.cpp" break; - case 237: /* string_literal */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 240: /* string_literal */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2258 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2299 "bison_parser.cpp" break; - case 238: /* bool_literal */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 241: /* bool_literal */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2264 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2305 "bison_parser.cpp" break; - case 239: /* num_literal */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 242: /* num_literal */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2270 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2311 "bison_parser.cpp" break; - case 240: /* int_literal */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 243: /* int_literal */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2276 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2317 "bison_parser.cpp" break; - case 241: /* null_literal */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 244: /* null_literal */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2282 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2323 "bison_parser.cpp" break; - case 242: /* param_expr */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 245: /* param_expr */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2288 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2329 "bison_parser.cpp" break; - case 243: /* table_ref */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 246: /* table_ref */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2294 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2335 "bison_parser.cpp" break; - case 244: /* table_ref_atomic */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 247: /* table_ref_atomic */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2300 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2341 "bison_parser.cpp" break; - case 245: /* nonjoin_table_ref_atomic */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 248: /* nonjoin_table_ref_atomic */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2306 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2347 "bison_parser.cpp" break; - case 246: /* table_ref_commalist */ -#line 146 "bison_parser.y" /* yacc.c:1257 */ + case 249: /* table_ref_commalist */ +#line 148 "bison_parser.y" { if ((((*yyvaluep).table_vec)) != nullptr) { for (auto ptr : *(((*yyvaluep).table_vec))) { @@ -2315,95 +2356,95 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).table_vec)); } -#line 2319 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2360 "bison_parser.cpp" break; - case 247: /* table_ref_name */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 250: /* table_ref_name */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2325 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2366 "bison_parser.cpp" break; - case 248: /* table_ref_name_no_alias */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 251: /* table_ref_name_no_alias */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2331 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2372 "bison_parser.cpp" break; - case 249: /* table_name */ -#line 144 "bison_parser.y" /* yacc.c:1257 */ + case 252: /* table_name */ +#line 146 "bison_parser.y" { free( (((*yyvaluep).table_name).name) ); free( (((*yyvaluep).table_name).schema) ); } -#line 2337 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2378 "bison_parser.cpp" break; - case 250: /* table_alias */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 253: /* table_alias */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).alias_t)); } -#line 2343 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2384 "bison_parser.cpp" break; - case 251: /* opt_table_alias */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 254: /* opt_table_alias */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).alias_t)); } -#line 2349 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2390 "bison_parser.cpp" break; - case 252: /* alias */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 255: /* alias */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).alias_t)); } -#line 2355 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2396 "bison_parser.cpp" break; - case 253: /* opt_alias */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 256: /* opt_alias */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).alias_t)); } -#line 2361 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2402 "bison_parser.cpp" break; - case 254: /* opt_with_clause */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 257: /* opt_with_clause */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).with_description_vec)); } -#line 2367 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2408 "bison_parser.cpp" break; - case 255: /* with_clause */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 258: /* with_clause */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).with_description_vec)); } -#line 2373 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2414 "bison_parser.cpp" break; - case 256: /* with_description_list */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 259: /* with_description_list */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).with_description_vec)); } -#line 2379 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2420 "bison_parser.cpp" break; - case 257: /* with_description */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 260: /* with_description */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).with_description_t)); } -#line 2385 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2426 "bison_parser.cpp" break; - case 258: /* join_clause */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 261: /* join_clause */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2391 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2432 "bison_parser.cpp" break; - case 259: /* opt_join_type */ -#line 143 "bison_parser.y" /* yacc.c:1257 */ + case 262: /* opt_join_type */ +#line 145 "bison_parser.y" { } -#line 2397 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2438 "bison_parser.cpp" break; - case 260: /* join_condition */ -#line 154 "bison_parser.y" /* yacc.c:1257 */ + case 263: /* join_condition */ +#line 156 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2403 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2444 "bison_parser.cpp" break; - case 262: /* ident_commalist */ -#line 146 "bison_parser.y" /* yacc.c:1257 */ + case 265: /* ident_commalist */ +#line 148 "bison_parser.y" { if ((((*yyvaluep).str_vec)) != nullptr) { for (auto ptr : *(((*yyvaluep).str_vec))) { @@ -2412,7 +2453,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).str_vec)); } -#line 2416 "bison_parser.cpp" /* yacc.c:1257 */ +#line 2457 "bison_parser.cpp" break; default: @@ -2519,7 +2560,7 @@ YYLTYPE yylloc = yyloc_default; yychar = YYEMPTY; /* Cause a token to be read. */ /* User initialization code. */ -#line 73 "bison_parser.y" /* yacc.c:1437 */ +#line 73 "bison_parser.y" { // Initialize yylloc.first_column = 0; @@ -2530,7 +2571,8 @@ YYLTYPE yylloc = yyloc_default; yylloc.string_length = 0; } -#line 2534 "bison_parser.cpp" /* yacc.c:1437 */ +#line 2575 "bison_parser.cpp" + yylsp[0] = yylloc; goto yysetstate; @@ -2548,6 +2590,8 @@ YYLTYPE yylloc = yyloc_default; | yynewstate -- set current state (the top of the stack) to yystate. | `--------------------------------------------------------------------*/ yysetstate: + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + YY_ASSERT (0 <= yystate && yystate < YYNSTATES); *yyssp = (yytype_int16) yystate; if (yyss + yystacksize - 1 <= yyssp) @@ -2615,8 +2659,6 @@ YYLTYPE yylloc = yyloc_default; } #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); - if (yystate == YYFINAL) YYACCEPT; @@ -2721,8 +2763,8 @@ YYLTYPE yylloc = yyloc_default; YY_REDUCE_PRINT (yyn); switch (yyn) { - case 2: -#line 258 "bison_parser.y" /* yacc.c:1667 */ + case 2: +#line 262 "bison_parser.y" { for (SQLStatement* stmt : *(yyvsp[-1].stmt_vec)) { // Transfers ownership of the statement. @@ -2740,236 +2782,236 @@ YYLTYPE yylloc = yyloc_default; } delete (yyvsp[-1].stmt_vec); } -#line 2744 "bison_parser.cpp" /* yacc.c:1667 */ +#line 2786 "bison_parser.cpp" break; case 3: -#line 279 "bison_parser.y" /* yacc.c:1667 */ +#line 283 "bison_parser.y" { (yyvsp[0].statement)->stringLength = yylloc.string_length; yylloc.string_length = 0; (yyval.stmt_vec) = new std::vector(); (yyval.stmt_vec)->push_back((yyvsp[0].statement)); } -#line 2755 "bison_parser.cpp" /* yacc.c:1667 */ +#line 2797 "bison_parser.cpp" break; case 4: -#line 285 "bison_parser.y" /* yacc.c:1667 */ +#line 289 "bison_parser.y" { (yyvsp[0].statement)->stringLength = yylloc.string_length; yylloc.string_length = 0; (yyvsp[-2].stmt_vec)->push_back((yyvsp[0].statement)); (yyval.stmt_vec) = (yyvsp[-2].stmt_vec); } -#line 2766 "bison_parser.cpp" /* yacc.c:1667 */ +#line 2808 "bison_parser.cpp" break; case 5: -#line 294 "bison_parser.y" /* yacc.c:1667 */ +#line 298 "bison_parser.y" { (yyval.statement) = (yyvsp[-1].prep_stmt); (yyval.statement)->hints = (yyvsp[0].expr_vec); } -#line 2775 "bison_parser.cpp" /* yacc.c:1667 */ +#line 2817 "bison_parser.cpp" break; case 6: -#line 298 "bison_parser.y" /* yacc.c:1667 */ +#line 302 "bison_parser.y" { (yyval.statement) = (yyvsp[-1].statement); (yyval.statement)->hints = (yyvsp[0].expr_vec); } -#line 2784 "bison_parser.cpp" /* yacc.c:1667 */ +#line 2826 "bison_parser.cpp" break; case 7: -#line 302 "bison_parser.y" /* yacc.c:1667 */ +#line 306 "bison_parser.y" { (yyval.statement) = (yyvsp[0].show_stmt); } -#line 2792 "bison_parser.cpp" /* yacc.c:1667 */ +#line 2834 "bison_parser.cpp" break; case 8: -#line 309 "bison_parser.y" /* yacc.c:1667 */ +#line 313 "bison_parser.y" { (yyval.statement) = (yyvsp[0].select_stmt); } -#line 2798 "bison_parser.cpp" /* yacc.c:1667 */ +#line 2840 "bison_parser.cpp" break; case 9: -#line 310 "bison_parser.y" /* yacc.c:1667 */ +#line 314 "bison_parser.y" { (yyval.statement) = (yyvsp[0].import_stmt); } -#line 2804 "bison_parser.cpp" /* yacc.c:1667 */ +#line 2846 "bison_parser.cpp" break; case 10: -#line 311 "bison_parser.y" /* yacc.c:1667 */ +#line 315 "bison_parser.y" { (yyval.statement) = (yyvsp[0].create_stmt); } -#line 2810 "bison_parser.cpp" /* yacc.c:1667 */ +#line 2852 "bison_parser.cpp" break; case 11: -#line 312 "bison_parser.y" /* yacc.c:1667 */ +#line 316 "bison_parser.y" { (yyval.statement) = (yyvsp[0].insert_stmt); } -#line 2816 "bison_parser.cpp" /* yacc.c:1667 */ +#line 2858 "bison_parser.cpp" break; case 12: -#line 313 "bison_parser.y" /* yacc.c:1667 */ +#line 317 "bison_parser.y" { (yyval.statement) = (yyvsp[0].delete_stmt); } -#line 2822 "bison_parser.cpp" /* yacc.c:1667 */ +#line 2864 "bison_parser.cpp" break; case 13: -#line 314 "bison_parser.y" /* yacc.c:1667 */ +#line 318 "bison_parser.y" { (yyval.statement) = (yyvsp[0].delete_stmt); } -#line 2828 "bison_parser.cpp" /* yacc.c:1667 */ +#line 2870 "bison_parser.cpp" break; case 14: -#line 315 "bison_parser.y" /* yacc.c:1667 */ +#line 319 "bison_parser.y" { (yyval.statement) = (yyvsp[0].update_stmt); } -#line 2834 "bison_parser.cpp" /* yacc.c:1667 */ +#line 2876 "bison_parser.cpp" break; case 15: -#line 316 "bison_parser.y" /* yacc.c:1667 */ +#line 320 "bison_parser.y" { (yyval.statement) = (yyvsp[0].drop_stmt); } -#line 2840 "bison_parser.cpp" /* yacc.c:1667 */ +#line 2882 "bison_parser.cpp" break; case 16: -#line 317 "bison_parser.y" /* yacc.c:1667 */ +#line 321 "bison_parser.y" { (yyval.statement) = (yyvsp[0].exec_stmt); } -#line 2846 "bison_parser.cpp" /* yacc.c:1667 */ +#line 2888 "bison_parser.cpp" break; case 17: -#line 326 "bison_parser.y" /* yacc.c:1667 */ +#line 330 "bison_parser.y" { (yyval.expr_vec) = (yyvsp[-1].expr_vec); } -#line 2852 "bison_parser.cpp" /* yacc.c:1667 */ +#line 2894 "bison_parser.cpp" break; case 18: -#line 327 "bison_parser.y" /* yacc.c:1667 */ +#line 331 "bison_parser.y" { (yyval.expr_vec) = nullptr; } -#line 2858 "bison_parser.cpp" /* yacc.c:1667 */ +#line 2900 "bison_parser.cpp" break; case 19: -#line 332 "bison_parser.y" /* yacc.c:1667 */ +#line 336 "bison_parser.y" { (yyval.expr_vec) = new std::vector(); (yyval.expr_vec)->push_back((yyvsp[0].expr)); } -#line 2864 "bison_parser.cpp" /* yacc.c:1667 */ +#line 2906 "bison_parser.cpp" break; case 20: -#line 333 "bison_parser.y" /* yacc.c:1667 */ +#line 337 "bison_parser.y" { (yyvsp[-2].expr_vec)->push_back((yyvsp[0].expr)); (yyval.expr_vec) = (yyvsp[-2].expr_vec); } -#line 2870 "bison_parser.cpp" /* yacc.c:1667 */ +#line 2912 "bison_parser.cpp" break; case 21: -#line 337 "bison_parser.y" /* yacc.c:1667 */ +#line 341 "bison_parser.y" { (yyval.expr) = Expr::make(kExprHint); (yyval.expr)->name = (yyvsp[0].sval); } -#line 2879 "bison_parser.cpp" /* yacc.c:1667 */ +#line 2921 "bison_parser.cpp" break; case 22: -#line 341 "bison_parser.y" /* yacc.c:1667 */ +#line 345 "bison_parser.y" { (yyval.expr) = Expr::make(kExprHint); (yyval.expr)->name = (yyvsp[-3].sval); (yyval.expr)->exprList = (yyvsp[-1].expr_vec); } -#line 2889 "bison_parser.cpp" /* yacc.c:1667 */ +#line 2931 "bison_parser.cpp" break; case 23: -#line 353 "bison_parser.y" /* yacc.c:1667 */ +#line 357 "bison_parser.y" { (yyval.prep_stmt) = new PrepareStatement(); (yyval.prep_stmt)->name = (yyvsp[-2].sval); (yyval.prep_stmt)->query = (yyvsp[0].sval); } -#line 2899 "bison_parser.cpp" /* yacc.c:1667 */ +#line 2941 "bison_parser.cpp" break; case 25: -#line 363 "bison_parser.y" /* yacc.c:1667 */ +#line 367 "bison_parser.y" { (yyval.exec_stmt) = new ExecuteStatement(); (yyval.exec_stmt)->name = (yyvsp[0].sval); } -#line 2908 "bison_parser.cpp" /* yacc.c:1667 */ +#line 2950 "bison_parser.cpp" break; case 26: -#line 367 "bison_parser.y" /* yacc.c:1667 */ +#line 371 "bison_parser.y" { (yyval.exec_stmt) = new ExecuteStatement(); (yyval.exec_stmt)->name = (yyvsp[-3].sval); (yyval.exec_stmt)->parameters = (yyvsp[-1].expr_vec); } -#line 2918 "bison_parser.cpp" /* yacc.c:1667 */ +#line 2960 "bison_parser.cpp" break; case 27: -#line 379 "bison_parser.y" /* yacc.c:1667 */ +#line 383 "bison_parser.y" { (yyval.import_stmt) = new ImportStatement((ImportType) (yyvsp[-4].uval)); (yyval.import_stmt)->filePath = (yyvsp[-2].sval); (yyval.import_stmt)->schema = (yyvsp[0].table_name).schema; (yyval.import_stmt)->tableName = (yyvsp[0].table_name).name; } -#line 2929 "bison_parser.cpp" /* yacc.c:1667 */ +#line 2971 "bison_parser.cpp" break; case 28: -#line 388 "bison_parser.y" /* yacc.c:1667 */ +#line 392 "bison_parser.y" { (yyval.uval) = kImportCSV; } -#line 2935 "bison_parser.cpp" /* yacc.c:1667 */ +#line 2977 "bison_parser.cpp" break; case 29: -#line 392 "bison_parser.y" /* yacc.c:1667 */ +#line 396 "bison_parser.y" { (yyval.sval) = strdup((yyvsp[0].expr)->name); delete (yyvsp[0].expr); } -#line 2941 "bison_parser.cpp" /* yacc.c:1667 */ +#line 2983 "bison_parser.cpp" break; case 30: -#line 402 "bison_parser.y" /* yacc.c:1667 */ +#line 406 "bison_parser.y" { (yyval.show_stmt) = new ShowStatement(kShowTables); } -#line 2949 "bison_parser.cpp" /* yacc.c:1667 */ +#line 2991 "bison_parser.cpp" break; case 31: -#line 405 "bison_parser.y" /* yacc.c:1667 */ +#line 409 "bison_parser.y" { (yyval.show_stmt) = new ShowStatement(kShowColumns); (yyval.show_stmt)->schema = (yyvsp[0].table_name).schema; (yyval.show_stmt)->name = (yyvsp[0].table_name).name; } -#line 2959 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3001 "bison_parser.cpp" break; case 32: -#line 410 "bison_parser.y" /* yacc.c:1667 */ +#line 414 "bison_parser.y" { (yyval.show_stmt) = new ShowStatement(kShowColumns); (yyval.show_stmt)->schema = (yyvsp[0].table_name).schema; (yyval.show_stmt)->name = (yyvsp[0].table_name).name; } -#line 2969 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3011 "bison_parser.cpp" break; case 33: -#line 424 "bison_parser.y" /* yacc.c:1667 */ +#line 428 "bison_parser.y" { (yyval.create_stmt) = new CreateStatement(kCreateTableFromTbl); (yyval.create_stmt)->ifNotExists = (yyvsp[-5].bval); @@ -2977,11 +3019,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.create_stmt)->tableName = (yyvsp[-4].table_name).name; (yyval.create_stmt)->filePath = (yyvsp[0].sval); } -#line 2981 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3023 "bison_parser.cpp" break; case 34: -#line 431 "bison_parser.y" /* yacc.c:1667 */ +#line 435 "bison_parser.y" { (yyval.create_stmt) = new CreateStatement(kCreateTable); (yyval.create_stmt)->ifNotExists = (yyvsp[-4].bval); @@ -2989,11 +3031,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.create_stmt)->tableName = (yyvsp[-3].table_name).name; (yyval.create_stmt)->columns = (yyvsp[-1].column_vec); } -#line 2993 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3035 "bison_parser.cpp" break; case 35: -#line 438 "bison_parser.y" /* yacc.c:1667 */ +#line 442 "bison_parser.y" { (yyval.create_stmt) = new CreateStatement(kCreateTable); (yyval.create_stmt)->ifNotExists = (yyvsp[-3].bval); @@ -3001,11 +3043,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.create_stmt)->tableName = (yyvsp[-2].table_name).name; (yyval.create_stmt)->select = (yyvsp[0].select_stmt); } -#line 3005 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3047 "bison_parser.cpp" break; case 36: -#line 445 "bison_parser.y" /* yacc.c:1667 */ +#line 449 "bison_parser.y" { (yyval.create_stmt) = new CreateStatement(kCreateView); (yyval.create_stmt)->ifNotExists = (yyvsp[-4].bval); @@ -3014,174 +3056,174 @@ YYLTYPE yylloc = yyloc_default; (yyval.create_stmt)->viewColumns = (yyvsp[-2].str_vec); (yyval.create_stmt)->select = (yyvsp[0].select_stmt); } -#line 3018 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3060 "bison_parser.cpp" break; case 37: -#line 456 "bison_parser.y" /* yacc.c:1667 */ +#line 460 "bison_parser.y" { (yyval.bval) = true; } -#line 3024 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3066 "bison_parser.cpp" break; case 38: -#line 457 "bison_parser.y" /* yacc.c:1667 */ +#line 461 "bison_parser.y" { (yyval.bval) = false; } -#line 3030 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3072 "bison_parser.cpp" break; case 39: -#line 461 "bison_parser.y" /* yacc.c:1667 */ +#line 465 "bison_parser.y" { (yyval.column_vec) = new std::vector(); (yyval.column_vec)->push_back((yyvsp[0].column_t)); } -#line 3036 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3078 "bison_parser.cpp" break; case 40: -#line 462 "bison_parser.y" /* yacc.c:1667 */ +#line 466 "bison_parser.y" { (yyvsp[-2].column_vec)->push_back((yyvsp[0].column_t)); (yyval.column_vec) = (yyvsp[-2].column_vec); } -#line 3042 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3084 "bison_parser.cpp" break; case 41: -#line 466 "bison_parser.y" /* yacc.c:1667 */ +#line 470 "bison_parser.y" { (yyval.column_t) = new ColumnDefinition((yyvsp[-2].sval), (yyvsp[-1].column_type_t), (yyvsp[0].bval)); } -#line 3050 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3092 "bison_parser.cpp" break; case 42: -#line 472 "bison_parser.y" /* yacc.c:1667 */ +#line 476 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::INT}; } -#line 3056 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3098 "bison_parser.cpp" break; case 43: -#line 473 "bison_parser.y" /* yacc.c:1667 */ +#line 477 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::INT}; } -#line 3062 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3104 "bison_parser.cpp" break; case 44: -#line 474 "bison_parser.y" /* yacc.c:1667 */ +#line 478 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::LONG}; } -#line 3068 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3110 "bison_parser.cpp" break; case 45: -#line 475 "bison_parser.y" /* yacc.c:1667 */ +#line 479 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::FLOAT}; } -#line 3074 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3116 "bison_parser.cpp" break; case 46: -#line 476 "bison_parser.y" /* yacc.c:1667 */ +#line 480 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::DOUBLE}; } -#line 3080 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3122 "bison_parser.cpp" break; case 47: -#line 477 "bison_parser.y" /* yacc.c:1667 */ +#line 481 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::VARCHAR, (yyvsp[-1].ival)}; } -#line 3086 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3128 "bison_parser.cpp" break; case 48: -#line 478 "bison_parser.y" /* yacc.c:1667 */ +#line 482 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::CHAR, (yyvsp[-1].ival)}; } -#line 3092 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3134 "bison_parser.cpp" break; case 49: -#line 479 "bison_parser.y" /* yacc.c:1667 */ +#line 483 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::TEXT}; } -#line 3098 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3140 "bison_parser.cpp" break; case 50: -#line 483 "bison_parser.y" /* yacc.c:1667 */ +#line 487 "bison_parser.y" { (yyval.bval) = true; } -#line 3104 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3146 "bison_parser.cpp" break; case 51: -#line 484 "bison_parser.y" /* yacc.c:1667 */ +#line 488 "bison_parser.y" { (yyval.bval) = false; } -#line 3110 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3152 "bison_parser.cpp" break; case 52: -#line 485 "bison_parser.y" /* yacc.c:1667 */ +#line 489 "bison_parser.y" { (yyval.bval) = false; } -#line 3116 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3158 "bison_parser.cpp" break; case 53: -#line 495 "bison_parser.y" /* yacc.c:1667 */ +#line 499 "bison_parser.y" { (yyval.drop_stmt) = new DropStatement(kDropTable); (yyval.drop_stmt)->ifExists = (yyvsp[-1].bval); (yyval.drop_stmt)->schema = (yyvsp[0].table_name).schema; (yyval.drop_stmt)->name = (yyvsp[0].table_name).name; } -#line 3127 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3169 "bison_parser.cpp" break; case 54: -#line 501 "bison_parser.y" /* yacc.c:1667 */ +#line 505 "bison_parser.y" { (yyval.drop_stmt) = new DropStatement(kDropView); (yyval.drop_stmt)->ifExists = (yyvsp[-1].bval); (yyval.drop_stmt)->schema = (yyvsp[0].table_name).schema; (yyval.drop_stmt)->name = (yyvsp[0].table_name).name; } -#line 3138 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3180 "bison_parser.cpp" break; case 55: -#line 507 "bison_parser.y" /* yacc.c:1667 */ +#line 511 "bison_parser.y" { (yyval.drop_stmt) = new DropStatement(kDropPreparedStatement); (yyval.drop_stmt)->ifExists = false; (yyval.drop_stmt)->name = (yyvsp[0].sval); } -#line 3148 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3190 "bison_parser.cpp" break; case 56: -#line 515 "bison_parser.y" /* yacc.c:1667 */ +#line 519 "bison_parser.y" { (yyval.bval) = true; } -#line 3154 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3196 "bison_parser.cpp" break; case 57: -#line 516 "bison_parser.y" /* yacc.c:1667 */ +#line 520 "bison_parser.y" { (yyval.bval) = false; } -#line 3160 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3202 "bison_parser.cpp" break; case 58: -#line 525 "bison_parser.y" /* yacc.c:1667 */ +#line 529 "bison_parser.y" { (yyval.delete_stmt) = new DeleteStatement(); (yyval.delete_stmt)->schema = (yyvsp[-1].table_name).schema; (yyval.delete_stmt)->tableName = (yyvsp[-1].table_name).name; (yyval.delete_stmt)->expr = (yyvsp[0].expr); } -#line 3171 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3213 "bison_parser.cpp" break; case 59: -#line 534 "bison_parser.y" /* yacc.c:1667 */ +#line 538 "bison_parser.y" { (yyval.delete_stmt) = new DeleteStatement(); (yyval.delete_stmt)->schema = (yyvsp[0].table_name).schema; (yyval.delete_stmt)->tableName = (yyvsp[0].table_name).name; } -#line 3181 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3223 "bison_parser.cpp" break; case 60: -#line 547 "bison_parser.y" /* yacc.c:1667 */ +#line 551 "bison_parser.y" { (yyval.insert_stmt) = new InsertStatement(kInsertValues); (yyval.insert_stmt)->schema = (yyvsp[-5].table_name).schema; @@ -3189,11 +3231,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.insert_stmt)->columns = (yyvsp[-4].str_vec); (yyval.insert_stmt)->values = (yyvsp[-1].expr_vec); } -#line 3193 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3235 "bison_parser.cpp" break; case 61: -#line 554 "bison_parser.y" /* yacc.c:1667 */ +#line 558 "bison_parser.y" { (yyval.insert_stmt) = new InsertStatement(kInsertSelect); (yyval.insert_stmt)->schema = (yyvsp[-2].table_name).schema; @@ -3201,106 +3243,116 @@ YYLTYPE yylloc = yyloc_default; (yyval.insert_stmt)->columns = (yyvsp[-1].str_vec); (yyval.insert_stmt)->select = (yyvsp[0].select_stmt); } -#line 3205 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3247 "bison_parser.cpp" break; case 62: -#line 565 "bison_parser.y" /* yacc.c:1667 */ +#line 569 "bison_parser.y" { (yyval.str_vec) = (yyvsp[-1].str_vec); } -#line 3211 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3253 "bison_parser.cpp" break; case 63: -#line 566 "bison_parser.y" /* yacc.c:1667 */ +#line 570 "bison_parser.y" { (yyval.str_vec) = nullptr; } -#line 3217 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3259 "bison_parser.cpp" break; case 64: -#line 576 "bison_parser.y" /* yacc.c:1667 */ +#line 580 "bison_parser.y" { (yyval.update_stmt) = new UpdateStatement(); (yyval.update_stmt)->table = (yyvsp[-3].table); (yyval.update_stmt)->updates = (yyvsp[-1].update_vec); (yyval.update_stmt)->where = (yyvsp[0].expr); } -#line 3228 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3270 "bison_parser.cpp" break; case 65: -#line 585 "bison_parser.y" /* yacc.c:1667 */ +#line 589 "bison_parser.y" { (yyval.update_vec) = new std::vector(); (yyval.update_vec)->push_back((yyvsp[0].update_t)); } -#line 3234 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3276 "bison_parser.cpp" break; case 66: -#line 586 "bison_parser.y" /* yacc.c:1667 */ +#line 590 "bison_parser.y" { (yyvsp[-2].update_vec)->push_back((yyvsp[0].update_t)); (yyval.update_vec) = (yyvsp[-2].update_vec); } -#line 3240 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3282 "bison_parser.cpp" break; case 67: -#line 590 "bison_parser.y" /* yacc.c:1667 */ +#line 594 "bison_parser.y" { (yyval.update_t) = new UpdateClause(); (yyval.update_t)->column = (yyvsp[-2].sval); (yyval.update_t)->value = (yyvsp[0].expr); } -#line 3250 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3292 "bison_parser.cpp" break; case 68: -#line 602 "bison_parser.y" /* yacc.c:1667 */ +#line 606 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[0].select_stmt); (yyval.select_stmt)->withDescriptions = (yyvsp[-1].with_description_vec); } -#line 3259 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3301 "bison_parser.cpp" break; case 69: -#line 606 "bison_parser.y" /* yacc.c:1667 */ +#line 610 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[0].select_stmt); (yyval.select_stmt)->withDescriptions = (yyvsp[-1].with_description_vec); } -#line 3268 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3310 "bison_parser.cpp" break; case 70: -#line 610 "bison_parser.y" /* yacc.c:1667 */ +#line 614 "bison_parser.y" { // TODO: allow multiple unions (through linked list) // TODO: capture type of set_operator // TODO: might overwrite order and limit of first select here (yyval.select_stmt) = (yyvsp[-4].select_stmt); + (yyval.select_stmt)->set_operator = (yyvsp[-3].set_operator_t); (yyval.select_stmt)->withDescriptions = (yyvsp[-5].with_description_vec); (yyval.select_stmt)->unionSelect = (yyvsp[-2].select_stmt); (yyval.select_stmt)->order = (yyvsp[-1].order_vec); - // Limit could have been set by TOP. if ((yyvsp[0].limit) != nullptr) { delete (yyval.select_stmt)->limit; (yyval.select_stmt)->limit = (yyvsp[0].limit); } } -#line 3288 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3330 "bison_parser.cpp" + break; + + case 74: +#line 637 "bison_parser.y" + { + (yyval.select_stmt) = (yyvsp[-2].select_stmt); + (yyval.select_stmt)->set_operator = (yyvsp[-1].set_operator_t); + (yyval.select_stmt)-> unionSelect = (yyvsp[0].select_stmt); + } +#line 3340 "bison_parser.cpp" break; - case 71: -#line 628 "bison_parser.y" /* yacc.c:1667 */ + case 75: +#line 645 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-1].select_stmt); } -#line 3294 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3346 "bison_parser.cpp" break; - case 72: -#line 629 "bison_parser.y" /* yacc.c:1667 */ + case 76: +#line 646 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-1].select_stmt); } -#line 3300 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3352 "bison_parser.cpp" break; - case 75: -#line 638 "bison_parser.y" /* yacc.c:1667 */ + case 77: +#line 650 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-2].select_stmt); (yyval.select_stmt)->order = (yyvsp[-1].order_vec); @@ -3311,30 +3363,83 @@ YYLTYPE yylloc = yyloc_default; (yyval.select_stmt)->limit = (yyvsp[0].limit); } } -#line 3315 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3367 "bison_parser.cpp" break; - case 76: -#line 648 "bison_parser.y" /* yacc.c:1667 */ + case 78: +#line 660 "bison_parser.y" { // TODO: allow multiple unions (through linked list) // TODO: capture type of set_operator // TODO: might overwrite order and limit of first select here (yyval.select_stmt) = (yyvsp[-4].select_stmt); + (yyval.select_stmt)->set_operator = (yyvsp[-3].set_operator_t); (yyval.select_stmt)->unionSelect = (yyvsp[-2].select_stmt); (yyval.select_stmt)->order = (yyvsp[-1].order_vec); - // Limit could have been set by TOP. if ((yyvsp[0].limit) != nullptr) { delete (yyval.select_stmt)->limit; (yyval.select_stmt)->limit = (yyvsp[0].limit); } } -#line 3334 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3386 "bison_parser.cpp" + break; + + case 79: +#line 677 "bison_parser.y" + { + (yyval.set_operator_t) = new SetOperator(); + (yyval.set_operator_t)->set_type = (yyvsp[-1].set_type_t); + (yyval.set_operator_t)->is_all = (yyvsp[0].bval); + } +#line 3396 "bison_parser.cpp" + break; + + case 80: +#line 685 "bison_parser.y" + { + (yyval.set_type_t) = new SetType(); + (yyval.set_type_t)->internal_type = UnionType::Union; + } +#line 3405 "bison_parser.cpp" + break; + + case 81: +#line 689 "bison_parser.y" + { + (yyval.set_type_t) = new SetType(); + (yyval.set_type_t)->internal_type = UnionType::Intersect; + } +#line 3414 "bison_parser.cpp" + break; + + case 82: +#line 693 "bison_parser.y" + { + (yyval.set_type_t) = new SetType(); + (yyval.set_type_t)->internal_type = UnionType::Except; + } +#line 3423 "bison_parser.cpp" break; case 83: -#line 680 "bison_parser.y" /* yacc.c:1667 */ +#line 700 "bison_parser.y" + { + (yyval.bval) = true; + } +#line 3431 "bison_parser.cpp" + break; + + case 84: +#line 703 "bison_parser.y" + { + (yyval.bval) = false; + } +#line 3439 "bison_parser.cpp" + break; + + case 85: +#line 709 "bison_parser.y" { (yyval.select_stmt) = new SelectStatement(); (yyval.select_stmt)->limit = (yyvsp[-5].limit); @@ -3344,213 +3449,225 @@ YYLTYPE yylloc = yyloc_default; (yyval.select_stmt)->whereClause = (yyvsp[-1].expr); (yyval.select_stmt)->groupBy = (yyvsp[0].group_t); } -#line 3348 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3453 "bison_parser.cpp" break; - case 84: -#line 692 "bison_parser.y" /* yacc.c:1667 */ + case 86: +#line 721 "bison_parser.y" { (yyval.bval) = true; } -#line 3354 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3459 "bison_parser.cpp" break; - case 85: -#line 693 "bison_parser.y" /* yacc.c:1667 */ + case 87: +#line 722 "bison_parser.y" { (yyval.bval) = false; } -#line 3360 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3465 "bison_parser.cpp" break; - case 87: -#line 701 "bison_parser.y" /* yacc.c:1667 */ + case 89: +#line 730 "bison_parser.y" { (yyval.table) = (yyvsp[0].table); } -#line 3366 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3471 "bison_parser.cpp" break; - case 88: -#line 702 "bison_parser.y" /* yacc.c:1667 */ + case 90: +#line 731 "bison_parser.y" { (yyval.table) = nullptr; } -#line 3372 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3477 "bison_parser.cpp" break; - case 89: -#line 705 "bison_parser.y" /* yacc.c:1667 */ + case 91: +#line 734 "bison_parser.y" { (yyval.table) = (yyvsp[0].table); } -#line 3378 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3483 "bison_parser.cpp" break; - case 90: -#line 710 "bison_parser.y" /* yacc.c:1667 */ + case 92: +#line 739 "bison_parser.y" { (yyval.expr) = (yyvsp[0].expr); } -#line 3384 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3489 "bison_parser.cpp" break; - case 91: -#line 711 "bison_parser.y" /* yacc.c:1667 */ + case 93: +#line 740 "bison_parser.y" { (yyval.expr) = nullptr; } -#line 3390 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3495 "bison_parser.cpp" break; - case 92: -#line 715 "bison_parser.y" /* yacc.c:1667 */ + case 94: +#line 744 "bison_parser.y" { (yyval.group_t) = new GroupByDescription(); (yyval.group_t)->columns = (yyvsp[-1].expr_vec); (yyval.group_t)->having = (yyvsp[0].expr); } -#line 3400 "bison_parser.cpp" /* yacc.c:1667 */ - break; - - case 93: -#line 720 "bison_parser.y" /* yacc.c:1667 */ - { (yyval.group_t) = nullptr; } -#line 3406 "bison_parser.cpp" /* yacc.c:1667 */ - break; - - case 94: -#line 724 "bison_parser.y" /* yacc.c:1667 */ - { (yyval.expr) = (yyvsp[0].expr); } -#line 3412 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3505 "bison_parser.cpp" break; case 95: -#line 725 "bison_parser.y" /* yacc.c:1667 */ - { (yyval.expr) = nullptr; } -#line 3418 "bison_parser.cpp" /* yacc.c:1667 */ +#line 749 "bison_parser.y" + { (yyval.group_t) = nullptr; } +#line 3511 "bison_parser.cpp" break; case 96: -#line 728 "bison_parser.y" /* yacc.c:1667 */ - { (yyval.order_vec) = (yyvsp[0].order_vec); } -#line 3424 "bison_parser.cpp" /* yacc.c:1667 */ +#line 753 "bison_parser.y" + { (yyval.expr) = (yyvsp[0].expr); } +#line 3517 "bison_parser.cpp" break; case 97: -#line 729 "bison_parser.y" /* yacc.c:1667 */ - { (yyval.order_vec) = nullptr; } -#line 3430 "bison_parser.cpp" /* yacc.c:1667 */ +#line 754 "bison_parser.y" + { (yyval.expr) = nullptr; } +#line 3523 "bison_parser.cpp" break; case 98: -#line 733 "bison_parser.y" /* yacc.c:1667 */ - { (yyval.order_vec) = new std::vector(); (yyval.order_vec)->push_back((yyvsp[0].order)); } -#line 3436 "bison_parser.cpp" /* yacc.c:1667 */ +#line 757 "bison_parser.y" + { (yyval.order_vec) = (yyvsp[0].order_vec); } +#line 3529 "bison_parser.cpp" break; case 99: -#line 734 "bison_parser.y" /* yacc.c:1667 */ - { (yyvsp[-2].order_vec)->push_back((yyvsp[0].order)); (yyval.order_vec) = (yyvsp[-2].order_vec); } -#line 3442 "bison_parser.cpp" /* yacc.c:1667 */ +#line 758 "bison_parser.y" + { (yyval.order_vec) = nullptr; } +#line 3535 "bison_parser.cpp" break; case 100: -#line 738 "bison_parser.y" /* yacc.c:1667 */ - { (yyval.order) = new OrderDescription((yyvsp[0].order_type), (yyvsp[-1].expr)); } -#line 3448 "bison_parser.cpp" /* yacc.c:1667 */ +#line 762 "bison_parser.y" + { (yyval.order_vec) = (yyvsp[0].order_vec); } +#line 3541 "bison_parser.cpp" break; case 101: -#line 742 "bison_parser.y" /* yacc.c:1667 */ - { (yyval.order_type) = kOrderAsc; } -#line 3454 "bison_parser.cpp" /* yacc.c:1667 */ +#line 765 "bison_parser.y" + { (yyval.order_vec) = new std::vector(); (yyval.order_vec)->push_back((yyvsp[0].order)); } +#line 3547 "bison_parser.cpp" break; case 102: -#line 743 "bison_parser.y" /* yacc.c:1667 */ - { (yyval.order_type) = kOrderDesc; } -#line 3460 "bison_parser.cpp" /* yacc.c:1667 */ +#line 766 "bison_parser.y" + { (yyvsp[-2].order_vec)->push_back((yyvsp[0].order)); (yyval.order_vec) = (yyvsp[-2].order_vec); } +#line 3553 "bison_parser.cpp" break; case 103: -#line 744 "bison_parser.y" /* yacc.c:1667 */ - { (yyval.order_type) = kOrderAsc; } -#line 3466 "bison_parser.cpp" /* yacc.c:1667 */ +#line 770 "bison_parser.y" + { (yyval.order) = new OrderDescription((yyvsp[0].order_type), (yyvsp[-1].expr)); } +#line 3559 "bison_parser.cpp" break; case 104: -#line 750 "bison_parser.y" /* yacc.c:1667 */ - { (yyval.limit) = new LimitDescription((yyvsp[0].expr), nullptr); } -#line 3472 "bison_parser.cpp" /* yacc.c:1667 */ +#line 774 "bison_parser.y" + { (yyval.order_type) = kOrderAsc; } +#line 3565 "bison_parser.cpp" break; case 105: -#line 751 "bison_parser.y" /* yacc.c:1667 */ - { (yyval.limit) = nullptr; } -#line 3478 "bison_parser.cpp" /* yacc.c:1667 */ +#line 775 "bison_parser.y" + { (yyval.order_type) = kOrderDesc; } +#line 3571 "bison_parser.cpp" break; case 106: -#line 755 "bison_parser.y" /* yacc.c:1667 */ - { (yyval.limit) = new LimitDescription((yyvsp[0].expr), nullptr); } -#line 3484 "bison_parser.cpp" /* yacc.c:1667 */ +#line 776 "bison_parser.y" + { (yyval.order_type) = kOrderAsc; } +#line 3577 "bison_parser.cpp" break; case 107: -#line 756 "bison_parser.y" /* yacc.c:1667 */ - { (yyval.limit) = new LimitDescription(nullptr, (yyvsp[0].expr)); } -#line 3490 "bison_parser.cpp" /* yacc.c:1667 */ +#line 782 "bison_parser.y" + { (yyval.limit) = new LimitDescription((yyvsp[0].expr), nullptr); } +#line 3583 "bison_parser.cpp" break; case 108: -#line 757 "bison_parser.y" /* yacc.c:1667 */ - { (yyval.limit) = new LimitDescription((yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 3496 "bison_parser.cpp" /* yacc.c:1667 */ +#line 783 "bison_parser.y" + { (yyval.limit) = nullptr; } +#line 3589 "bison_parser.cpp" break; case 109: -#line 758 "bison_parser.y" /* yacc.c:1667 */ - { (yyval.limit) = new LimitDescription(nullptr, nullptr); } -#line 3502 "bison_parser.cpp" /* yacc.c:1667 */ +#line 787 "bison_parser.y" + { (yyval.limit) = (yyvsp[0].limit); } +#line 3595 "bison_parser.cpp" break; case 110: -#line 759 "bison_parser.y" /* yacc.c:1667 */ - { (yyval.limit) = new LimitDescription(nullptr, (yyvsp[0].expr)); } -#line 3508 "bison_parser.cpp" /* yacc.c:1667 */ +#line 788 "bison_parser.y" + { (yyval.limit) = nullptr; } +#line 3601 "bison_parser.cpp" break; case 111: -#line 760 "bison_parser.y" /* yacc.c:1667 */ - { (yyval.limit) = nullptr; } -#line 3514 "bison_parser.cpp" /* yacc.c:1667 */ +#line 792 "bison_parser.y" + { (yyval.limit) = new LimitDescription((yyvsp[0].expr), nullptr); } +#line 3607 "bison_parser.cpp" break; case 112: -#line 767 "bison_parser.y" /* yacc.c:1667 */ - { (yyval.expr_vec) = new std::vector(); (yyval.expr_vec)->push_back((yyvsp[0].expr)); } -#line 3520 "bison_parser.cpp" /* yacc.c:1667 */ +#line 793 "bison_parser.y" + { (yyval.limit) = new LimitDescription(nullptr, (yyvsp[0].expr)); } +#line 3613 "bison_parser.cpp" break; case 113: -#line 768 "bison_parser.y" /* yacc.c:1667 */ - { (yyvsp[-2].expr_vec)->push_back((yyvsp[0].expr)); (yyval.expr_vec) = (yyvsp[-2].expr_vec); } -#line 3526 "bison_parser.cpp" /* yacc.c:1667 */ +#line 794 "bison_parser.y" + { (yyval.limit) = new LimitDescription((yyvsp[-2].expr), (yyvsp[0].expr)); } +#line 3619 "bison_parser.cpp" break; case 114: -#line 772 "bison_parser.y" /* yacc.c:1667 */ - { (yyval.expr_vec) = (yyvsp[0].expr_vec); } -#line 3532 "bison_parser.cpp" /* yacc.c:1667 */ +#line 795 "bison_parser.y" + { (yyval.limit) = new LimitDescription(nullptr, nullptr); } +#line 3625 "bison_parser.cpp" break; case 115: -#line 773 "bison_parser.y" /* yacc.c:1667 */ - { (yyval.expr_vec) = nullptr; } -#line 3538 "bison_parser.cpp" /* yacc.c:1667 */ +#line 796 "bison_parser.y" + { (yyval.limit) = new LimitDescription(nullptr, (yyvsp[0].expr)); } +#line 3631 "bison_parser.cpp" break; case 116: -#line 777 "bison_parser.y" /* yacc.c:1667 */ +#line 802 "bison_parser.y" { (yyval.expr_vec) = new std::vector(); (yyval.expr_vec)->push_back((yyvsp[0].expr)); } -#line 3544 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3637 "bison_parser.cpp" break; case 117: -#line 778 "bison_parser.y" /* yacc.c:1667 */ +#line 803 "bison_parser.y" { (yyvsp[-2].expr_vec)->push_back((yyvsp[0].expr)); (yyval.expr_vec) = (yyvsp[-2].expr_vec); } -#line 3550 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3643 "bison_parser.cpp" break; case 118: -#line 782 "bison_parser.y" /* yacc.c:1667 */ +#line 807 "bison_parser.y" + { (yyval.expr_vec) = (yyvsp[0].expr_vec); } +#line 3649 "bison_parser.cpp" + break; + + case 119: +#line 808 "bison_parser.y" + { (yyval.expr_vec) = nullptr; } +#line 3655 "bison_parser.cpp" + break; + + case 120: +#line 812 "bison_parser.y" + { (yyval.expr_vec) = new std::vector(); (yyval.expr_vec)->push_back((yyvsp[0].expr)); } +#line 3661 "bison_parser.cpp" + break; + + case 121: +#line 813 "bison_parser.y" + { (yyvsp[-2].expr_vec)->push_back((yyvsp[0].expr)); (yyval.expr_vec) = (yyvsp[-2].expr_vec); } +#line 3667 "bison_parser.cpp" + break; + + case 122: +#line 817 "bison_parser.y" { (yyval.expr) = (yyvsp[-1].expr); if ((yyvsp[0].alias_t)) { @@ -3558,415 +3675,415 @@ YYLTYPE yylloc = yyloc_default; delete (yyvsp[0].alias_t); } } -#line 3562 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3679 "bison_parser.cpp" break; - case 124: -#line 800 "bison_parser.y" /* yacc.c:1667 */ + case 128: +#line 835 "bison_parser.y" { (yyval.expr) = (yyvsp[-1].expr); } -#line 3568 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3685 "bison_parser.cpp" break; - case 133: -#line 809 "bison_parser.y" /* yacc.c:1667 */ + case 137: +#line 844 "bison_parser.y" { (yyval.expr) = Expr::makeSelect((yyvsp[-1].select_stmt)); } -#line 3574 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3691 "bison_parser.cpp" break; - case 136: -#line 818 "bison_parser.y" /* yacc.c:1667 */ + case 140: +#line 853 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpUnaryMinus, (yyvsp[0].expr)); } -#line 3580 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3697 "bison_parser.cpp" break; - case 137: -#line 819 "bison_parser.y" /* yacc.c:1667 */ + case 141: +#line 854 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, (yyvsp[0].expr)); } -#line 3586 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3703 "bison_parser.cpp" break; - case 138: -#line 820 "bison_parser.y" /* yacc.c:1667 */ + case 142: +#line 855 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpIsNull, (yyvsp[-1].expr)); } -#line 3592 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3709 "bison_parser.cpp" break; - case 139: -#line 821 "bison_parser.y" /* yacc.c:1667 */ + case 143: +#line 856 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpIsNull, (yyvsp[-2].expr)); } -#line 3598 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3715 "bison_parser.cpp" break; - case 140: -#line 822 "bison_parser.y" /* yacc.c:1667 */ + case 144: +#line 857 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeOpUnary(kOpIsNull, (yyvsp[-3].expr))); } -#line 3604 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3721 "bison_parser.cpp" break; - case 142: -#line 827 "bison_parser.y" /* yacc.c:1667 */ + case 146: +#line 862 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpMinus, (yyvsp[0].expr)); } -#line 3610 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3727 "bison_parser.cpp" break; - case 143: -#line 828 "bison_parser.y" /* yacc.c:1667 */ + case 147: +#line 863 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpPlus, (yyvsp[0].expr)); } -#line 3616 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3733 "bison_parser.cpp" break; - case 144: -#line 829 "bison_parser.y" /* yacc.c:1667 */ + case 148: +#line 864 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpSlash, (yyvsp[0].expr)); } -#line 3622 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3739 "bison_parser.cpp" break; - case 145: -#line 830 "bison_parser.y" /* yacc.c:1667 */ + case 149: +#line 865 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpAsterisk, (yyvsp[0].expr)); } -#line 3628 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3745 "bison_parser.cpp" break; - case 146: -#line 831 "bison_parser.y" /* yacc.c:1667 */ + case 150: +#line 866 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpPercentage, (yyvsp[0].expr)); } -#line 3634 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3751 "bison_parser.cpp" break; - case 147: -#line 832 "bison_parser.y" /* yacc.c:1667 */ + case 151: +#line 867 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpCaret, (yyvsp[0].expr)); } -#line 3640 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3757 "bison_parser.cpp" break; - case 148: -#line 833 "bison_parser.y" /* yacc.c:1667 */ + case 152: +#line 868 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpLike, (yyvsp[0].expr)); } -#line 3646 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3763 "bison_parser.cpp" break; - case 149: -#line 834 "bison_parser.y" /* yacc.c:1667 */ + case 153: +#line 869 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-3].expr), kOpNotLike, (yyvsp[0].expr)); } -#line 3652 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3769 "bison_parser.cpp" break; - case 150: -#line 835 "bison_parser.y" /* yacc.c:1667 */ + case 154: +#line 870 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpILike, (yyvsp[0].expr)); } -#line 3658 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3775 "bison_parser.cpp" break; - case 151: -#line 836 "bison_parser.y" /* yacc.c:1667 */ + case 155: +#line 871 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpConcat, (yyvsp[0].expr)); } -#line 3664 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3781 "bison_parser.cpp" break; - case 152: -#line 840 "bison_parser.y" /* yacc.c:1667 */ + case 156: +#line 875 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpAnd, (yyvsp[0].expr)); } -#line 3670 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3787 "bison_parser.cpp" break; - case 153: -#line 841 "bison_parser.y" /* yacc.c:1667 */ + case 157: +#line 876 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpOr, (yyvsp[0].expr)); } -#line 3676 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3793 "bison_parser.cpp" break; - case 154: -#line 845 "bison_parser.y" /* yacc.c:1667 */ + case 158: +#line 880 "bison_parser.y" { (yyval.expr) = Expr::makeInOperator((yyvsp[-4].expr), (yyvsp[-1].expr_vec)); } -#line 3682 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3799 "bison_parser.cpp" break; - case 155: -#line 846 "bison_parser.y" /* yacc.c:1667 */ + case 159: +#line 881 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeInOperator((yyvsp[-5].expr), (yyvsp[-1].expr_vec))); } -#line 3688 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3805 "bison_parser.cpp" break; - case 156: -#line 847 "bison_parser.y" /* yacc.c:1667 */ + case 160: +#line 882 "bison_parser.y" { (yyval.expr) = Expr::makeInOperator((yyvsp[-4].expr), (yyvsp[-1].select_stmt)); } -#line 3694 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3811 "bison_parser.cpp" break; - case 157: -#line 848 "bison_parser.y" /* yacc.c:1667 */ + case 161: +#line 883 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeInOperator((yyvsp[-5].expr), (yyvsp[-1].select_stmt))); } -#line 3700 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3817 "bison_parser.cpp" break; - case 158: -#line 854 "bison_parser.y" /* yacc.c:1667 */ + case 162: +#line 889 "bison_parser.y" { (yyval.expr) = Expr::makeCase((yyvsp[-2].expr), (yyvsp[-1].expr), nullptr); } -#line 3706 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3823 "bison_parser.cpp" break; - case 159: -#line 855 "bison_parser.y" /* yacc.c:1667 */ + case 163: +#line 890 "bison_parser.y" { (yyval.expr) = Expr::makeCase((yyvsp[-4].expr), (yyvsp[-3].expr), (yyvsp[-1].expr)); } -#line 3712 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3829 "bison_parser.cpp" break; - case 160: -#line 856 "bison_parser.y" /* yacc.c:1667 */ + case 164: +#line 891 "bison_parser.y" { (yyval.expr) = Expr::makeCase(nullptr, (yyvsp[-1].expr), nullptr); } -#line 3718 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3835 "bison_parser.cpp" break; - case 161: -#line 857 "bison_parser.y" /* yacc.c:1667 */ + case 165: +#line 892 "bison_parser.y" { (yyval.expr) = Expr::makeCase(nullptr, (yyvsp[-3].expr), (yyvsp[-1].expr)); } -#line 3724 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3841 "bison_parser.cpp" break; - case 162: -#line 861 "bison_parser.y" /* yacc.c:1667 */ + case 166: +#line 896 "bison_parser.y" { (yyval.expr) = Expr::makeCaseList(Expr::makeCaseListElement((yyvsp[-2].expr), (yyvsp[0].expr))); } -#line 3730 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3847 "bison_parser.cpp" break; - case 163: -#line 862 "bison_parser.y" /* yacc.c:1667 */ + case 167: +#line 897 "bison_parser.y" { (yyval.expr) = Expr::caseListAppend((yyvsp[-4].expr), Expr::makeCaseListElement((yyvsp[-2].expr), (yyvsp[0].expr))); } -#line 3736 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3853 "bison_parser.cpp" break; - case 164: -#line 866 "bison_parser.y" /* yacc.c:1667 */ + case 168: +#line 901 "bison_parser.y" { (yyval.expr) = Expr::makeExists((yyvsp[-1].select_stmt)); } -#line 3742 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3859 "bison_parser.cpp" break; - case 165: -#line 867 "bison_parser.y" /* yacc.c:1667 */ + case 169: +#line 902 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeExists((yyvsp[-1].select_stmt))); } -#line 3748 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3865 "bison_parser.cpp" break; - case 166: -#line 871 "bison_parser.y" /* yacc.c:1667 */ + case 170: +#line 906 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpEquals, (yyvsp[0].expr)); } -#line 3754 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3871 "bison_parser.cpp" break; - case 167: -#line 872 "bison_parser.y" /* yacc.c:1667 */ + case 171: +#line 907 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpEquals, (yyvsp[0].expr)); } -#line 3760 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3877 "bison_parser.cpp" break; - case 168: -#line 873 "bison_parser.y" /* yacc.c:1667 */ + case 172: +#line 908 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpNotEquals, (yyvsp[0].expr)); } -#line 3766 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3883 "bison_parser.cpp" break; - case 169: -#line 874 "bison_parser.y" /* yacc.c:1667 */ + case 173: +#line 909 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpLess, (yyvsp[0].expr)); } -#line 3772 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3889 "bison_parser.cpp" break; - case 170: -#line 875 "bison_parser.y" /* yacc.c:1667 */ + case 174: +#line 910 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpGreater, (yyvsp[0].expr)); } -#line 3778 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3895 "bison_parser.cpp" break; - case 171: -#line 876 "bison_parser.y" /* yacc.c:1667 */ + case 175: +#line 911 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpLessEq, (yyvsp[0].expr)); } -#line 3784 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3901 "bison_parser.cpp" break; - case 172: -#line 877 "bison_parser.y" /* yacc.c:1667 */ + case 176: +#line 912 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpGreaterEq, (yyvsp[0].expr)); } -#line 3790 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3907 "bison_parser.cpp" break; - case 173: -#line 881 "bison_parser.y" /* yacc.c:1667 */ + case 177: +#line 916 "bison_parser.y" { (yyval.expr) = Expr::makeFunctionRef((yyvsp[-2].sval), new std::vector(), false); } -#line 3796 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3913 "bison_parser.cpp" break; - case 174: -#line 882 "bison_parser.y" /* yacc.c:1667 */ + case 178: +#line 917 "bison_parser.y" { (yyval.expr) = Expr::makeFunctionRef((yyvsp[-4].sval), (yyvsp[-1].expr_vec), (yyvsp[-2].bval)); } -#line 3802 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3919 "bison_parser.cpp" break; - case 175: -#line 886 "bison_parser.y" /* yacc.c:1667 */ + case 179: +#line 921 "bison_parser.y" { (yyval.expr) = Expr::makeExtract((yyvsp[-3].datetime_field), (yyvsp[-1].expr)); } -#line 3808 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3925 "bison_parser.cpp" break; - case 176: -#line 890 "bison_parser.y" /* yacc.c:1667 */ + case 180: +#line 925 "bison_parser.y" { (yyval.datetime_field) = kDatetimeSecond; } -#line 3814 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3931 "bison_parser.cpp" break; - case 177: -#line 891 "bison_parser.y" /* yacc.c:1667 */ + case 181: +#line 926 "bison_parser.y" { (yyval.datetime_field) = kDatetimeMinute; } -#line 3820 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3937 "bison_parser.cpp" break; - case 178: -#line 892 "bison_parser.y" /* yacc.c:1667 */ + case 182: +#line 927 "bison_parser.y" { (yyval.datetime_field) = kDatetimeHour; } -#line 3826 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3943 "bison_parser.cpp" break; - case 179: -#line 893 "bison_parser.y" /* yacc.c:1667 */ + case 183: +#line 928 "bison_parser.y" { (yyval.datetime_field) = kDatetimeDay; } -#line 3832 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3949 "bison_parser.cpp" break; - case 180: -#line 894 "bison_parser.y" /* yacc.c:1667 */ + case 184: +#line 929 "bison_parser.y" { (yyval.datetime_field) = kDatetimeMonth; } -#line 3838 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3955 "bison_parser.cpp" break; - case 181: -#line 895 "bison_parser.y" /* yacc.c:1667 */ + case 185: +#line 930 "bison_parser.y" { (yyval.datetime_field) = kDatetimeYear; } -#line 3844 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3961 "bison_parser.cpp" break; - case 182: -#line 898 "bison_parser.y" /* yacc.c:1667 */ + case 186: +#line 933 "bison_parser.y" { (yyval.expr) = Expr::makeArray((yyvsp[-1].expr_vec)); } -#line 3850 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3967 "bison_parser.cpp" break; - case 183: -#line 902 "bison_parser.y" /* yacc.c:1667 */ + case 187: +#line 937 "bison_parser.y" { (yyval.expr) = Expr::makeArrayIndex((yyvsp[-3].expr), (yyvsp[-1].expr)->ival); } -#line 3856 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3973 "bison_parser.cpp" break; - case 184: -#line 906 "bison_parser.y" /* yacc.c:1667 */ + case 188: +#line 941 "bison_parser.y" { (yyval.expr) = Expr::makeBetween((yyvsp[-4].expr), (yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 3862 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3979 "bison_parser.cpp" break; - case 185: -#line 910 "bison_parser.y" /* yacc.c:1667 */ + case 189: +#line 945 "bison_parser.y" { (yyval.expr) = Expr::makeColumnRef((yyvsp[0].sval)); } -#line 3868 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3985 "bison_parser.cpp" break; - case 186: -#line 911 "bison_parser.y" /* yacc.c:1667 */ + case 190: +#line 946 "bison_parser.y" { (yyval.expr) = Expr::makeColumnRef((yyvsp[-2].sval), (yyvsp[0].sval)); } -#line 3874 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3991 "bison_parser.cpp" break; - case 187: -#line 912 "bison_parser.y" /* yacc.c:1667 */ + case 191: +#line 947 "bison_parser.y" { (yyval.expr) = Expr::makeStar(); } -#line 3880 "bison_parser.cpp" /* yacc.c:1667 */ +#line 3997 "bison_parser.cpp" break; - case 188: -#line 913 "bison_parser.y" /* yacc.c:1667 */ + case 192: +#line 948 "bison_parser.y" { (yyval.expr) = Expr::makeStar((yyvsp[-2].sval)); } -#line 3886 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4003 "bison_parser.cpp" break; - case 194: -#line 925 "bison_parser.y" /* yacc.c:1667 */ + case 198: +#line 960 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral((yyvsp[0].sval)); } -#line 3892 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4009 "bison_parser.cpp" break; - case 195: -#line 929 "bison_parser.y" /* yacc.c:1667 */ + case 199: +#line 964 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral(true); } -#line 3898 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4015 "bison_parser.cpp" break; - case 196: -#line 930 "bison_parser.y" /* yacc.c:1667 */ + case 200: +#line 965 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral(false); } -#line 3904 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4021 "bison_parser.cpp" break; - case 197: -#line 934 "bison_parser.y" /* yacc.c:1667 */ + case 201: +#line 969 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral((yyvsp[0].fval)); } -#line 3910 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4027 "bison_parser.cpp" break; - case 199: -#line 939 "bison_parser.y" /* yacc.c:1667 */ + case 203: +#line 974 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral((yyvsp[0].ival)); } -#line 3916 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4033 "bison_parser.cpp" break; - case 200: -#line 943 "bison_parser.y" /* yacc.c:1667 */ + case 204: +#line 978 "bison_parser.y" { (yyval.expr) = Expr::makeNullLiteral(); } -#line 3922 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4039 "bison_parser.cpp" break; - case 201: -#line 947 "bison_parser.y" /* yacc.c:1667 */ + case 205: +#line 982 "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 3932 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4049 "bison_parser.cpp" break; - case 203: -#line 960 "bison_parser.y" /* yacc.c:1667 */ + case 207: +#line 995 "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 3943 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4060 "bison_parser.cpp" break; - case 207: -#line 976 "bison_parser.y" /* yacc.c:1667 */ + case 211: +#line 1011 "bison_parser.y" { auto tbl = new TableRef(kTableSelect); tbl->select = (yyvsp[-2].select_stmt); tbl->alias = (yyvsp[0].alias_t); (yyval.table) = tbl; } -#line 3954 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4071 "bison_parser.cpp" break; - case 208: -#line 985 "bison_parser.y" /* yacc.c:1667 */ + case 212: +#line 1020 "bison_parser.y" { (yyval.table_vec) = new std::vector(); (yyval.table_vec)->push_back((yyvsp[0].table)); } -#line 3960 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4077 "bison_parser.cpp" break; - case 209: -#line 986 "bison_parser.y" /* yacc.c:1667 */ + case 213: +#line 1021 "bison_parser.y" { (yyvsp[-2].table_vec)->push_back((yyvsp[0].table)); (yyval.table_vec) = (yyvsp[-2].table_vec); } -#line 3966 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4083 "bison_parser.cpp" break; - case 210: -#line 991 "bison_parser.y" /* yacc.c:1667 */ + case 214: +#line 1026 "bison_parser.y" { auto tbl = new TableRef(kTableName); tbl->schema = (yyvsp[-1].table_name).schema; @@ -3974,103 +4091,103 @@ YYLTYPE yylloc = yyloc_default; tbl->alias = (yyvsp[0].alias_t); (yyval.table) = tbl; } -#line 3978 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4095 "bison_parser.cpp" break; - case 211: -#line 1002 "bison_parser.y" /* yacc.c:1667 */ + case 215: +#line 1037 "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 3988 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4105 "bison_parser.cpp" break; - case 212: -#line 1011 "bison_parser.y" /* yacc.c:1667 */ + case 216: +#line 1046 "bison_parser.y" { (yyval.table_name).schema = nullptr; (yyval.table_name).name = (yyvsp[0].sval);} -#line 3994 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4111 "bison_parser.cpp" break; - case 213: -#line 1012 "bison_parser.y" /* yacc.c:1667 */ + case 217: +#line 1047 "bison_parser.y" { (yyval.table_name).schema = (yyvsp[-2].sval); (yyval.table_name).name = (yyvsp[0].sval); } -#line 4000 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4117 "bison_parser.cpp" break; - case 215: -#line 1018 "bison_parser.y" /* yacc.c:1667 */ + case 219: +#line 1053 "bison_parser.y" { (yyval.alias_t) = new Alias((yyvsp[-3].sval), (yyvsp[-1].str_vec)); } -#line 4006 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4123 "bison_parser.cpp" break; - case 217: -#line 1024 "bison_parser.y" /* yacc.c:1667 */ + case 221: +#line 1059 "bison_parser.y" { (yyval.alias_t) = nullptr; } -#line 4012 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4129 "bison_parser.cpp" break; - case 218: -#line 1028 "bison_parser.y" /* yacc.c:1667 */ + case 222: +#line 1063 "bison_parser.y" { (yyval.alias_t) = new Alias((yyvsp[0].sval)); } -#line 4018 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4135 "bison_parser.cpp" break; - case 219: -#line 1029 "bison_parser.y" /* yacc.c:1667 */ + case 223: +#line 1064 "bison_parser.y" { (yyval.alias_t) = new Alias((yyvsp[0].sval)); } -#line 4024 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4141 "bison_parser.cpp" break; - case 221: -#line 1035 "bison_parser.y" /* yacc.c:1667 */ + case 225: +#line 1070 "bison_parser.y" { (yyval.alias_t) = nullptr; } -#line 4030 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4147 "bison_parser.cpp" break; - case 223: -#line 1044 "bison_parser.y" /* yacc.c:1667 */ + case 227: +#line 1079 "bison_parser.y" { (yyval.with_description_vec) = nullptr; } -#line 4036 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4153 "bison_parser.cpp" break; - case 224: -#line 1048 "bison_parser.y" /* yacc.c:1667 */ + case 228: +#line 1083 "bison_parser.y" { (yyval.with_description_vec) = (yyvsp[0].with_description_vec); } -#line 4042 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4159 "bison_parser.cpp" break; - case 225: -#line 1052 "bison_parser.y" /* yacc.c:1667 */ + case 229: +#line 1087 "bison_parser.y" { (yyval.with_description_vec) = new std::vector(); (yyval.with_description_vec)->push_back((yyvsp[0].with_description_t)); } -#line 4051 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4168 "bison_parser.cpp" break; - case 226: -#line 1056 "bison_parser.y" /* yacc.c:1667 */ + case 230: +#line 1091 "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 4060 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4177 "bison_parser.cpp" break; - case 227: -#line 1063 "bison_parser.y" /* yacc.c:1667 */ + case 231: +#line 1098 "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 4070 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4187 "bison_parser.cpp" break; - case 228: -#line 1077 "bison_parser.y" /* yacc.c:1667 */ + case 232: +#line 1112 "bison_parser.y" { (yyval.table) = new TableRef(kTableJoin); (yyval.table)->join = new JoinDefinition(); @@ -4078,11 +4195,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.table)->join->left = (yyvsp[-3].table); (yyval.table)->join->right = (yyvsp[0].table); } -#line 4082 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4199 "bison_parser.cpp" break; - case 229: -#line 1085 "bison_parser.y" /* yacc.c:1667 */ + case 233: +#line 1120 "bison_parser.y" { (yyval.table) = new TableRef(kTableJoin); (yyval.table)->join = new JoinDefinition(); @@ -4091,11 +4208,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.table)->join->right = (yyvsp[-2].table); (yyval.table)->join->condition = (yyvsp[0].expr); } -#line 4095 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4212 "bison_parser.cpp" break; - case 230: -#line 1095 "bison_parser.y" /* yacc.c:1667 */ + case 234: +#line 1130 "bison_parser.y" { (yyval.table) = new TableRef(kTableJoin); (yyval.table)->join = new JoinDefinition(); @@ -4111,83 +4228,84 @@ YYLTYPE yylloc = yyloc_default; (yyval.table)->join->condition = Expr::makeOpBinary(left_col, kOpEquals, right_col); delete (yyvsp[-1].expr); } -#line 4115 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4232 "bison_parser.cpp" break; - case 231: -#line 1113 "bison_parser.y" /* yacc.c:1667 */ + case 235: +#line 1148 "bison_parser.y" { (yyval.uval) = kJoinInner; } -#line 4121 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4238 "bison_parser.cpp" break; - case 232: -#line 1114 "bison_parser.y" /* yacc.c:1667 */ + case 236: +#line 1149 "bison_parser.y" { (yyval.uval) = kJoinLeft; } -#line 4127 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4244 "bison_parser.cpp" break; - case 233: -#line 1115 "bison_parser.y" /* yacc.c:1667 */ + case 237: +#line 1150 "bison_parser.y" { (yyval.uval) = kJoinLeft; } -#line 4133 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4250 "bison_parser.cpp" break; - case 234: -#line 1116 "bison_parser.y" /* yacc.c:1667 */ + case 238: +#line 1151 "bison_parser.y" { (yyval.uval) = kJoinRight; } -#line 4139 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4256 "bison_parser.cpp" break; - case 235: -#line 1117 "bison_parser.y" /* yacc.c:1667 */ + case 239: +#line 1152 "bison_parser.y" { (yyval.uval) = kJoinRight; } -#line 4145 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4262 "bison_parser.cpp" break; - case 236: -#line 1118 "bison_parser.y" /* yacc.c:1667 */ + case 240: +#line 1153 "bison_parser.y" { (yyval.uval) = kJoinFull; } -#line 4151 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4268 "bison_parser.cpp" break; - case 237: -#line 1119 "bison_parser.y" /* yacc.c:1667 */ + case 241: +#line 1154 "bison_parser.y" { (yyval.uval) = kJoinFull; } -#line 4157 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4274 "bison_parser.cpp" break; - case 238: -#line 1120 "bison_parser.y" /* yacc.c:1667 */ + case 242: +#line 1155 "bison_parser.y" { (yyval.uval) = kJoinFull; } -#line 4163 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4280 "bison_parser.cpp" break; - case 239: -#line 1121 "bison_parser.y" /* yacc.c:1667 */ + case 243: +#line 1156 "bison_parser.y" { (yyval.uval) = kJoinCross; } -#line 4169 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4286 "bison_parser.cpp" break; - case 240: -#line 1122 "bison_parser.y" /* yacc.c:1667 */ + case 244: +#line 1157 "bison_parser.y" { (yyval.uval) = kJoinInner; } -#line 4175 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4292 "bison_parser.cpp" break; - case 244: -#line 1142 "bison_parser.y" /* yacc.c:1667 */ + case 248: +#line 1177 "bison_parser.y" { (yyval.str_vec) = new std::vector(); (yyval.str_vec)->push_back((yyvsp[0].sval)); } -#line 4181 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4298 "bison_parser.cpp" break; - case 245: -#line 1143 "bison_parser.y" /* yacc.c:1667 */ + case 249: +#line 1178 "bison_parser.y" { (yyvsp[-2].str_vec)->push_back((yyvsp[0].sval)); (yyval.str_vec) = (yyvsp[-2].str_vec); } -#line 4187 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4304 "bison_parser.cpp" break; -#line 4191 "bison_parser.cpp" /* yacc.c:1667 */ +#line 4308 "bison_parser.cpp" + default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -4424,7 +4542,7 @@ YYLTYPE yylloc = yyloc_default; #endif return yyresult; } -#line 1146 "bison_parser.y" /* yacc.c:1918 */ +#line 1181 "bison_parser.y" /********************************* ** Section 4: Additional C code diff --git a/src/parser/bison_parser.h b/src/parser/bison_parser.h index c8a60a3e..8f2b2a35 100644 --- a/src/parser/bison_parser.h +++ b/src/parser/bison_parser.h @@ -1,4 +1,4 @@ -/* A Bison parser, made by GNU Bison 3.3.2. */ +/* A Bison parser, made by GNU Bison 3.4.2. */ /* Bison interface for Yacc-like parsers in C @@ -52,7 +52,7 @@ extern int hsql_debug; #endif /* "%code requires" blocks. */ -#line 35 "bison_parser.y" /* yacc.c:1927 */ +#line 35 "bison_parser.y" // %code requires block @@ -76,7 +76,7 @@ extern int hsql_debug; } \ } -#line 80 "bison_parser.h" /* yacc.c:1927 */ +#line 80 "bison_parser.h" /* Token type. */ #ifndef HSQL_TOKENTYPE @@ -231,10 +231,9 @@ extern int hsql_debug; /* Value type. */ #if ! defined HSQL_STYPE && ! defined HSQL_STYPE_IS_DECLARED - union HSQL_STYPE { -#line 95 "bison_parser.y" /* yacc.c:1927 */ +#line 95 "bison_parser.y" double fval; int64_t ival; @@ -267,6 +266,8 @@ union HSQL_STYPE hsql::GroupByDescription* group_t; hsql::UpdateClause* update_t; hsql::Alias* alias_t; + hsql::SetType* set_type_t; + hsql::SetOperator* set_operator_t; std::vector* stmt_vec; @@ -278,9 +279,9 @@ union HSQL_STYPE std::vector* order_vec; std::vector* with_description_vec; -#line 282 "bison_parser.h" /* yacc.c:1927 */ -}; +#line 283 "bison_parser.h" +}; typedef union HSQL_STYPE HSQL_STYPE; # define HSQL_STYPE_IS_TRIVIAL 1 # define HSQL_STYPE_IS_DECLARED 1 diff --git a/src/parser/bison_parser.y b/src/parser/bison_parser.y index a876036e..3c47d7db 100755 --- a/src/parser/bison_parser.y +++ b/src/parser/bison_parser.y @@ -124,6 +124,8 @@ int yyerror(YYLTYPE* llocp, SQLParserResult* result, yyscan_t scanner, const cha hsql::GroupByDescription* group_t; hsql::UpdateClause* update_t; hsql::Alias* alias_t; + hsql::SetType* set_type_t; + hsql::SetOperator* set_operator_t; std::vector* stmt_vec; @@ -186,7 +188,7 @@ int yyerror(YYLTYPE* llocp, SQLParserResult* result, yyscan_t scanner, const cha %type statement preparable_statement %type execute_statement %type prepare_statement -%type select_statement select_with_paren select_no_paren select_clause select_paren_or_clause +%type select_statement select_with_paren select_no_paren select_clause select_statement_in_set_operation select_part_set %type import_statement %type create_statement %type insert_statement @@ -196,7 +198,7 @@ int yyerror(YYLTYPE* llocp, SQLParserResult* result, yyscan_t scanner, const cha %type show_statement %type table_name %type file_path prepare_target_query -%type opt_not_exists opt_exists opt_distinct opt_column_nullable +%type opt_not_exists opt_exists opt_distinct opt_column_nullable opt_all %type import_file_type opt_join_type %type opt_from_clause from_clause table_ref table_ref_atomic table_ref_name nonjoin_table_ref_atomic %type
join_clause table_ref_name_no_alias @@ -205,7 +207,7 @@ int yyerror(YYLTYPE* llocp, SQLParserResult* result, yyscan_t scanner, const cha %type column_name literal int_literal num_literal string_literal bool_literal %type comp_expr opt_where join_condition opt_having case_expr case_list in_expr hint %type array_expr array_index null_literal -%type opt_limit opt_top +%type opt_limit opt_top limit %type order_desc %type opt_order_type %type datetime_field @@ -215,11 +217,13 @@ int yyerror(YYLTYPE* llocp, SQLParserResult* result, yyscan_t scanner, const cha %type opt_group %type opt_table_alias table_alias opt_alias alias %type with_description +%type set_type +%type set_operator %type ident_commalist opt_column_list %type expr_list select_list opt_literal_list literal_list hint_list opt_hints %type table_ref_commalist -%type opt_order order_list +%type opt_order order_list order %type opt_with_clause with_clause with_description_list %type update_clause_commalist %type column_def_commalist @@ -607,15 +611,15 @@ select_statement: $$ = $2; $$->withDescriptions = $1; } - | opt_with_clause select_with_paren set_operator select_paren_or_clause opt_order opt_limit { + | opt_with_clause select_with_paren set_operator select_statement_in_set_operation opt_order opt_limit { // TODO: allow multiple unions (through linked list) // TODO: capture type of set_operator // TODO: might overwrite order and limit of first select here $$ = $2; + $$->set_operator = $3; $$->withDescriptions = $1; $$->unionSelect = $4; $$->order = $5; - // Limit could have been set by TOP. if ($6 != nullptr) { delete $$->limit; @@ -624,16 +628,24 @@ select_statement: } ; +select_statement_in_set_operation: + select_with_paren + | select_part_set; + +select_part_set: + select_clause + | select_clause set_operator select_statement_in_set_operation { + $$ = $1; + $$->set_operator = $2; + $$-> unionSelect = $3; + } + ; + select_with_paren: '(' select_no_paren ')' { $$ = $2; } | '(' select_with_paren ')' { $$ = $2; } ; -select_paren_or_clause: - select_with_paren - | select_clause - ; - select_no_paren: select_clause opt_order opt_limit { $$ = $1; @@ -645,14 +657,14 @@ select_no_paren: $$->limit = $3; } } - | select_clause set_operator select_paren_or_clause opt_order opt_limit { + | select_clause set_operator select_statement_in_set_operation opt_order opt_limit { // TODO: allow multiple unions (through linked list) // TODO: capture type of set_operator // TODO: might overwrite order and limit of first select here $$ = $1; + $$->set_operator = $2; $$->unionSelect = $3; $$->order = $4; - // Limit could have been set by TOP. if ($5 != nullptr) { delete $$->limit; @@ -662,18 +674,35 @@ select_no_paren: ; set_operator: - set_type opt_all + set_type opt_all { + $$ = new SetOperator(); + $$->set_type = $1; + $$->is_all = $2; + } ; set_type: - UNION - | INTERSECT - | EXCEPT + UNION { + $$ = new SetType(); + $$->internal_type = UnionType::Union; + } + | INTERSECT { + $$ = new SetType(); + $$->internal_type = UnionType::Intersect; + } + | EXCEPT { + $$ = new SetType(); + $$->internal_type = UnionType::Except; + } ; opt_all: - ALL - | /* empty */ + ALL { + $$ = true; + } + | /* empty */ { + $$ = false; + } ; select_clause: @@ -725,10 +754,13 @@ opt_having: | /* empty */ { $$ = nullptr; } opt_order: - ORDER BY order_list { $$ = $3; } + order { $$ = $1; } | /* empty */ { $$ = nullptr; } ; +order: + ORDER BY order_list { $$ = $3; }; + order_list: order_desc { $$ = new std::vector(); $$->push_back($1); } | order_list ',' order_desc { $1->push_back($3); $$ = $1; } @@ -752,13 +784,16 @@ opt_top: ; opt_limit: - LIMIT expr { $$ = new LimitDescription($2, nullptr); } + limit { $$ = $1; } + | /* empty */ { $$ = nullptr; } + ; + +limit: + LIMIT expr { $$ = new LimitDescription($2, nullptr); } | OFFSET expr { $$ = new LimitDescription(nullptr, $2); } | LIMIT expr OFFSET expr { $$ = new LimitDescription($2, $4); } | LIMIT ALL { $$ = new LimitDescription(nullptr, nullptr); } - | LIMIT ALL OFFSET expr { $$ = new LimitDescription(nullptr, $4); } - | /* empty */ { $$ = nullptr; } - ; + | LIMIT ALL OFFSET expr { $$ = new LimitDescription(nullptr, $4); }; /****************************** * Expressions diff --git a/src/parser/flex_lexer.cpp b/src/parser/flex_lexer.cpp index 4a589100..9884cc8f 100644 --- a/src/parser/flex_lexer.cpp +++ b/src/parser/flex_lexer.cpp @@ -573,8 +573,8 @@ static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner ); yyg->yy_hold_char = *yy_cp; \ *yy_cp = '\0'; \ yyg->yy_c_buf_p = yy_cp; -#define YY_NUM_RULES 152 -#define YY_END_OF_BUFFER 153 +#define YY_NUM_RULES 154 +#define YY_END_OF_BUFFER 155 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -584,25 +584,25 @@ struct yy_trans_info }; static const flex_int16_t yy_accept[1024] = { 0, - 0, 0, 149, 149, 2, 2, 153, 151, 4, 4, - 151, 151, 141, 147, 141, 141, 144, 141, 141, 141, - 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 141, 149, 150, 2, 2, 3, + 0, 0, 151, 151, 2, 2, 155, 153, 4, 4, + 153, 153, 143, 149, 143, 143, 146, 143, 143, 143, + 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, + 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, + 148, 148, 148, 148, 143, 151, 152, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 4, 136, 0, 1, 144, - 143, 142, 138, 137, 135, 139, 146, 146, 146, 146, - - 146, 146, 118, 146, 119, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, - 120, 146, 146, 121, 122, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 123, 124, 125, - 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 126, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 140, 149, 148, 2, + 2, 2, 2, 2, 2, 4, 138, 0, 1, 146, + 145, 144, 140, 139, 137, 141, 148, 148, 148, 148, + + 148, 148, 120, 148, 121, 148, 148, 148, 148, 148, + 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, + 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, + 122, 148, 148, 123, 124, 148, 148, 148, 148, 148, + 148, 148, 148, 148, 148, 148, 148, 125, 126, 127, + 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, + 148, 148, 148, 148, 148, 148, 128, 148, 148, 148, + 148, 148, 148, 148, 148, 148, 142, 151, 150, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -613,18 +613,18 @@ static const flex_int16_t yy_accept[1024] = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 145, 142, 104, 146, 105, 146, 146, 106, - 146, 107, 146, 146, 146, 146, 146, 146, 146, 146, - 146, 108, 146, 130, 146, 146, 146, 146, 146, 146, - - 146, 146, 146, 109, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 110, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 111, 146, 146, - 112, 146, 146, 146, 146, 146, 146, 146, 146, 146, - 146, 113, 146, 146, 114, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 115, 146, 146, - 146, 146, 116, 146, 146, 146, 146, 117, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 2, 2, 147, 144, 106, 148, 107, 148, 148, 108, + 148, 109, 148, 148, 148, 148, 148, 148, 148, 148, + 148, 110, 148, 132, 148, 148, 148, 148, 148, 148, + + 148, 148, 148, 111, 148, 148, 148, 148, 148, 148, + 148, 148, 148, 112, 148, 148, 148, 148, 148, 148, + 148, 148, 148, 148, 148, 148, 148, 113, 148, 148, + 114, 148, 148, 148, 148, 148, 148, 148, 148, 148, + 148, 115, 148, 148, 116, 148, 148, 148, 148, 148, + 148, 148, 148, 148, 148, 148, 148, 117, 148, 148, + 148, 148, 118, 148, 148, 148, 148, 119, 148, 148, + 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -636,18 +636,18 @@ static const flex_int16_t yy_accept[1024] = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 146, 146, - 146, 146, 146, 146, 76, 146, 77, 78, 146, 146, - - 146, 146, 79, 146, 146, 146, 146, 80, 146, 146, - 146, 81, 82, 146, 146, 146, 146, 146, 146, 146, - 83, 146, 84, 85, 146, 146, 86, 146, 87, 129, - 146, 146, 146, 146, 146, 146, 88, 146, 89, 90, - 91, 146, 93, 146, 94, 146, 146, 146, 146, 95, - 146, 146, 146, 146, 146, 96, 146, 146, 146, 146, - 146, 146, 146, 146, 97, 146, 146, 146, 146, 98, - 99, 100, 133, 146, 146, 146, 146, 146, 146, 146, - 146, 101, 146, 102, 146, 103, 132, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 148, 148, + 148, 148, 148, 148, 78, 148, 79, 80, 148, 148, + + 148, 148, 81, 148, 148, 148, 148, 82, 148, 148, + 148, 83, 84, 148, 148, 148, 148, 148, 148, 148, + 85, 148, 86, 87, 148, 148, 88, 148, 89, 131, + 148, 148, 148, 148, 148, 148, 90, 148, 91, 92, + 93, 148, 95, 148, 96, 148, 148, 148, 148, 97, + 148, 148, 148, 148, 148, 98, 148, 148, 148, 148, + 148, 148, 148, 148, 99, 148, 148, 148, 148, 100, + 101, 102, 135, 148, 148, 148, 148, 148, 148, 148, + 148, 103, 148, 104, 148, 105, 134, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -658,15 +658,15 @@ static const flex_int16_t yy_accept[1024] = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 56, 57, 146, 58, - 146, 146, 146, 146, 146, 146, 59, 146, 146, 146, - - 60, 146, 146, 146, 146, 146, 146, 146, 146, 146, - 146, 134, 61, 146, 62, 146, 92, 146, 63, 64, - 146, 146, 146, 146, 65, 66, 67, 68, 146, 131, - 146, 146, 146, 69, 70, 146, 146, 146, 146, 146, - 71, 146, 146, 146, 146, 146, 72, 146, 146, 146, - 73, 146, 146, 146, 74, 146, 146, 146, 75, 2, + 2, 2, 2, 2, 2, 2, 56, 57, 148, 58, + 148, 148, 148, 148, 148, 148, 59, 148, 148, 148, + + 60, 148, 148, 148, 148, 148, 148, 148, 148, 148, + 148, 136, 61, 148, 62, 148, 94, 148, 63, 64, + 148, 148, 148, 148, 65, 66, 67, 68, 148, 133, + 148, 148, 148, 69, 70, 148, 148, 148, 148, 148, + 71, 148, 148, 148, 148, 148, 72, 148, 148, 148, + 73, 148, 148, 148, 76, 148, 148, 148, 77, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -675,27 +675,27 @@ static const flex_int16_t yy_accept[1024] = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 146, 31, 146, 146, 32, 146, 33, 146, - 146, 34, 146, 35, 146, 36, 37, 38, 146, 39, - 146, 146, 41, 42, 43, 44, 146, 146, 45, 128, - 146, 146, 46, 146, 146, 146, 47, 146, 48, 127, - 49, 50, 146, 51, 146, 146, 146, 52, 53, 54, - 55, 146, 146, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 148, 31, 148, 148, 32, 148, 33, 148, + 148, 34, 148, 35, 148, 36, 37, 38, 148, 39, + 148, 148, 41, 42, 43, 44, 148, 148, 45, 130, + 148, 148, 46, 148, 148, 148, 47, 148, 48, 129, + 49, 50, 148, 51, 148, 148, 148, 52, 53, 54, + 55, 148, 148, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 15, 16, 17, 18, 19, 146, - 20, 146, 146, 21, 22, 40, 23, 146, 24, 146, - 146, 25, 26, 146, 27, 28, 146, 146, 146, 29, + 2, 2, 2, 2, 15, 16, 17, 18, 19, 148, + 20, 148, 148, 21, 22, 40, 23, 148, 24, 148, + 148, 25, 26, 148, 27, 28, 148, 148, 148, 29, 30, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 146, 10, - 11, 146, 12, 146, 13, 146, 146, 14, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 148, 10, + 11, 148, 12, 148, 13, 148, 148, 14, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 146, 7, - 146, 8, 9, 2, 2, 2, 2, 2, 5, 6, + 2, 2, 2, 2, 2, 2, 2, 2, 148, 7, + 148, 8, 9, 2, 2, 2, 2, 2, 5, 6, 2, 2, 0 } ; @@ -2641,415 +2641,425 @@ TOKEN(UNION) case 74: YY_RULE_SETUP #line 133 "flex_lexer.l" -TOKEN(USING) +TOKEN(INTERSECT) YY_BREAK case 75: YY_RULE_SETUP #line 134 "flex_lexer.l" -TOKEN(WHERE) +TOKEN(EXCEPT) YY_BREAK case 76: YY_RULE_SETUP #line 135 "flex_lexer.l" -TOKEN(CALL) +TOKEN(USING) YY_BREAK case 77: YY_RULE_SETUP #line 136 "flex_lexer.l" -TOKEN(CASE) +TOKEN(WHERE) YY_BREAK case 78: YY_RULE_SETUP #line 137 "flex_lexer.l" -TOKEN(CHAR) +TOKEN(CALL) YY_BREAK case 79: YY_RULE_SETUP #line 138 "flex_lexer.l" -TOKEN(DATE) +TOKEN(CASE) YY_BREAK case 80: YY_RULE_SETUP #line 139 "flex_lexer.l" -TOKEN(DESC) +TOKEN(CHAR) YY_BREAK case 81: YY_RULE_SETUP #line 140 "flex_lexer.l" -TOKEN(DROP) +TOKEN(DATE) YY_BREAK case 82: YY_RULE_SETUP #line 141 "flex_lexer.l" -TOKEN(ELSE) +TOKEN(DESC) YY_BREAK case 83: YY_RULE_SETUP #line 142 "flex_lexer.l" -TOKEN(FILE) +TOKEN(DROP) YY_BREAK case 84: YY_RULE_SETUP #line 143 "flex_lexer.l" -TOKEN(FROM) +TOKEN(ELSE) YY_BREAK case 85: YY_RULE_SETUP #line 144 "flex_lexer.l" -TOKEN(FULL) +TOKEN(FILE) YY_BREAK case 86: YY_RULE_SETUP #line 145 "flex_lexer.l" -TOKEN(HASH) +TOKEN(FROM) YY_BREAK case 87: YY_RULE_SETUP #line 146 "flex_lexer.l" -TOKEN(HINT) +TOKEN(FULL) YY_BREAK case 88: YY_RULE_SETUP #line 147 "flex_lexer.l" -TOKEN(INTO) +TOKEN(HASH) YY_BREAK case 89: YY_RULE_SETUP #line 148 "flex_lexer.l" -TOKEN(JOIN) +TOKEN(HINT) YY_BREAK case 90: YY_RULE_SETUP #line 149 "flex_lexer.l" -TOKEN(LEFT) +TOKEN(INTO) YY_BREAK case 91: YY_RULE_SETUP #line 150 "flex_lexer.l" -TOKEN(LIKE) +TOKEN(JOIN) YY_BREAK case 92: YY_RULE_SETUP #line 151 "flex_lexer.l" -TOKEN(ILIKE) +TOKEN(LEFT) YY_BREAK case 93: YY_RULE_SETUP #line 152 "flex_lexer.l" -TOKEN(LOAD) +TOKEN(LIKE) YY_BREAK case 94: YY_RULE_SETUP #line 153 "flex_lexer.l" -TOKEN(LONG) +TOKEN(ILIKE) YY_BREAK case 95: YY_RULE_SETUP #line 154 "flex_lexer.l" -TOKEN(NULL) +TOKEN(LOAD) YY_BREAK case 96: YY_RULE_SETUP #line 155 "flex_lexer.l" -TOKEN(PLAN) +TOKEN(LONG) YY_BREAK case 97: YY_RULE_SETUP #line 156 "flex_lexer.l" -TOKEN(SHOW) +TOKEN(NULL) YY_BREAK case 98: YY_RULE_SETUP #line 157 "flex_lexer.l" -TOKEN(TEXT) +TOKEN(PLAN) YY_BREAK case 99: YY_RULE_SETUP #line 158 "flex_lexer.l" -TOKEN(THEN) +TOKEN(SHOW) YY_BREAK case 100: YY_RULE_SETUP #line 159 "flex_lexer.l" -TOKEN(TIME) +TOKEN(TEXT) YY_BREAK case 101: YY_RULE_SETUP #line 160 "flex_lexer.l" -TOKEN(VIEW) +TOKEN(THEN) YY_BREAK case 102: YY_RULE_SETUP #line 161 "flex_lexer.l" -TOKEN(WHEN) +TOKEN(TIME) YY_BREAK case 103: YY_RULE_SETUP #line 162 "flex_lexer.l" -TOKEN(WITH) +TOKEN(VIEW) YY_BREAK case 104: YY_RULE_SETUP #line 163 "flex_lexer.l" -TOKEN(ADD) +TOKEN(WHEN) YY_BREAK case 105: YY_RULE_SETUP #line 164 "flex_lexer.l" -TOKEN(ALL) +TOKEN(WITH) YY_BREAK case 106: YY_RULE_SETUP #line 165 "flex_lexer.l" -TOKEN(AND) +TOKEN(ADD) YY_BREAK case 107: YY_RULE_SETUP #line 166 "flex_lexer.l" -TOKEN(ASC) +TOKEN(ALL) YY_BREAK case 108: YY_RULE_SETUP #line 167 "flex_lexer.l" -TOKEN(CSV) +TOKEN(AND) YY_BREAK case 109: YY_RULE_SETUP #line 168 "flex_lexer.l" -TOKEN(END) +TOKEN(ASC) YY_BREAK case 110: YY_RULE_SETUP #line 169 "flex_lexer.l" -TOKEN(FOR) +TOKEN(CSV) YY_BREAK case 111: YY_RULE_SETUP #line 170 "flex_lexer.l" -TOKEN(INT) +TOKEN(END) YY_BREAK case 112: YY_RULE_SETUP #line 171 "flex_lexer.l" -TOKEN(KEY) +TOKEN(FOR) YY_BREAK case 113: YY_RULE_SETUP #line 172 "flex_lexer.l" -TOKEN(NOT) +TOKEN(INT) YY_BREAK case 114: YY_RULE_SETUP #line 173 "flex_lexer.l" -TOKEN(OFF) +TOKEN(KEY) YY_BREAK case 115: YY_RULE_SETUP #line 174 "flex_lexer.l" -TOKEN(SET) +TOKEN(NOT) YY_BREAK case 116: YY_RULE_SETUP #line 175 "flex_lexer.l" -TOKEN(TBL) +TOKEN(OFF) YY_BREAK case 117: YY_RULE_SETUP #line 176 "flex_lexer.l" -TOKEN(TOP) +TOKEN(SET) YY_BREAK case 118: YY_RULE_SETUP #line 177 "flex_lexer.l" -TOKEN(AS) +TOKEN(TBL) YY_BREAK case 119: YY_RULE_SETUP #line 178 "flex_lexer.l" -TOKEN(BY) +TOKEN(TOP) YY_BREAK case 120: YY_RULE_SETUP #line 179 "flex_lexer.l" -TOKEN(IF) +TOKEN(AS) YY_BREAK case 121: YY_RULE_SETUP #line 180 "flex_lexer.l" -TOKEN(IN) +TOKEN(BY) YY_BREAK case 122: YY_RULE_SETUP #line 181 "flex_lexer.l" -TOKEN(IS) +TOKEN(IF) YY_BREAK case 123: YY_RULE_SETUP #line 182 "flex_lexer.l" -TOKEN(OF) +TOKEN(IN) YY_BREAK case 124: YY_RULE_SETUP #line 183 "flex_lexer.l" -TOKEN(ON) +TOKEN(IS) YY_BREAK case 125: YY_RULE_SETUP #line 184 "flex_lexer.l" -TOKEN(OR) +TOKEN(OF) YY_BREAK case 126: YY_RULE_SETUP #line 185 "flex_lexer.l" -TOKEN(TO) +TOKEN(ON) YY_BREAK case 127: YY_RULE_SETUP #line 186 "flex_lexer.l" -TOKEN(SECOND) +TOKEN(OR) YY_BREAK case 128: YY_RULE_SETUP #line 187 "flex_lexer.l" -TOKEN(MINUTE) +TOKEN(TO) YY_BREAK case 129: YY_RULE_SETUP #line 188 "flex_lexer.l" -TOKEN(HOUR) +TOKEN(SECOND) YY_BREAK case 130: YY_RULE_SETUP #line 189 "flex_lexer.l" -TOKEN(DAY) +TOKEN(MINUTE) YY_BREAK case 131: YY_RULE_SETUP #line 190 "flex_lexer.l" -TOKEN(MONTH) +TOKEN(HOUR) YY_BREAK case 132: YY_RULE_SETUP #line 191 "flex_lexer.l" -TOKEN(YEAR) +TOKEN(DAY) YY_BREAK case 133: YY_RULE_SETUP #line 192 "flex_lexer.l" -TOKEN(TRUE) +TOKEN(MONTH) YY_BREAK case 134: YY_RULE_SETUP #line 193 "flex_lexer.l" -TOKEN(FALSE) +TOKEN(YEAR) YY_BREAK -/* Allow =/== see https://sqlite.org/lang_expr.html#collateop */ case 135: YY_RULE_SETUP -#line 196 "flex_lexer.l" -TOKEN(EQUALS) +#line 194 "flex_lexer.l" +TOKEN(TRUE) YY_BREAK case 136: YY_RULE_SETUP -#line 197 "flex_lexer.l" -TOKEN(NOTEQUALS) +#line 195 "flex_lexer.l" +TOKEN(FALSE) YY_BREAK +/* Allow =/== see https://sqlite.org/lang_expr.html#collateop */ case 137: YY_RULE_SETUP #line 198 "flex_lexer.l" -TOKEN(NOTEQUALS) +TOKEN(EQUALS) YY_BREAK case 138: YY_RULE_SETUP #line 199 "flex_lexer.l" -TOKEN(LESSEQ) +TOKEN(NOTEQUALS) YY_BREAK case 139: YY_RULE_SETUP #line 200 "flex_lexer.l" -TOKEN(GREATEREQ) +TOKEN(NOTEQUALS) YY_BREAK case 140: YY_RULE_SETUP #line 201 "flex_lexer.l" -TOKEN(CONCAT) +TOKEN(LESSEQ) YY_BREAK case 141: YY_RULE_SETUP -#line 203 "flex_lexer.l" -{ return yytext[0]; } +#line 202 "flex_lexer.l" +TOKEN(GREATEREQ) YY_BREAK case 142: -#line 206 "flex_lexer.l" +YY_RULE_SETUP +#line 203 "flex_lexer.l" +TOKEN(CONCAT) + YY_BREAK case 143: YY_RULE_SETUP -#line 206 "flex_lexer.l" +#line 205 "flex_lexer.l" +{ return yytext[0]; } + YY_BREAK +case 144: +#line 208 "flex_lexer.l" +case 145: +YY_RULE_SETUP +#line 208 "flex_lexer.l" { yylval->fval = atof(yytext); return SQL_FLOATVAL; } YY_BREAK -case 144: +case 146: YY_RULE_SETUP -#line 211 "flex_lexer.l" +#line 213 "flex_lexer.l" { yylval->ival = atol(yytext); return SQL_INTVAL; } YY_BREAK -case 145: +case 147: YY_RULE_SETUP -#line 216 "flex_lexer.l" +#line 218 "flex_lexer.l" { // Crop the leading and trailing quote char yylval->sval = hsql::substr(yytext, 1, strlen(yytext)-1); return SQL_IDENTIFIER; } YY_BREAK -case 146: +case 148: YY_RULE_SETUP -#line 222 "flex_lexer.l" +#line 224 "flex_lexer.l" { yylval->sval = strdup(yytext); return SQL_IDENTIFIER; } YY_BREAK -case 147: +case 149: YY_RULE_SETUP -#line 227 "flex_lexer.l" +#line 229 "flex_lexer.l" { BEGIN singlequotedstring; strbuf = std::stringstream{}; } YY_BREAK -case 148: +case 150: YY_RULE_SETUP -#line 228 "flex_lexer.l" +#line 230 "flex_lexer.l" { strbuf << '\''; } YY_BREAK -case 149: -/* rule 149 can match eol */ +case 151: +/* rule 151 can match eol */ YY_RULE_SETUP -#line 229 "flex_lexer.l" +#line 231 "flex_lexer.l" { strbuf << yytext; } YY_BREAK -case 150: +case 152: YY_RULE_SETUP -#line 230 "flex_lexer.l" +#line 232 "flex_lexer.l" { BEGIN 0; yylval->sval = strdup(strbuf.str().c_str()); return SQL_STRING; } YY_BREAK case YY_STATE_EOF(singlequotedstring): -#line 231 "flex_lexer.l" +#line 233 "flex_lexer.l" { fprintf(stderr, "[SQL-Lexer-Error] Unterminated string\n"); return 0; } YY_BREAK -case 151: +case 153: YY_RULE_SETUP -#line 233 "flex_lexer.l" +#line 235 "flex_lexer.l" { fprintf(stderr, "[SQL-Lexer-Error] Unknown Character: %c\n", yytext[0]); return 0; } YY_BREAK -case 152: +case 154: YY_RULE_SETUP -#line 236 "flex_lexer.l" +#line 238 "flex_lexer.l" ECHO; YY_BREAK -#line 3052 "flex_lexer.cpp" +#line 3062 "flex_lexer.cpp" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(COMMENT): yyterminate(); @@ -4206,7 +4216,7 @@ void yyfree (void * ptr , yyscan_t yyscanner) #define YYTABLES_NAME "yytables" -#line 236 "flex_lexer.l" +#line 238 "flex_lexer.l" /*************************** ** Section 3: User code diff --git a/src/parser/flex_lexer.h b/src/parser/flex_lexer.h index 05df105a..6a606dca 100644 --- a/src/parser/flex_lexer.h +++ b/src/parser/flex_lexer.h @@ -730,7 +730,7 @@ extern int yylex \ #undef yyTABLES_NAME #endif -#line 236 "flex_lexer.l" +#line 238 "flex_lexer.l" #line 736 "flex_lexer.h" diff --git a/src/parser/flex_lexer.l b/src/parser/flex_lexer.l index 3b35d545..dee1ada5 100644 --- a/src/parser/flex_lexer.l +++ b/src/parser/flex_lexer.l @@ -130,6 +130,8 @@ OUTER TOKEN(OUTER) RIGHT TOKEN(RIGHT) TABLE TOKEN(TABLE) UNION TOKEN(UNION) +INTERSECT TOKEN(INTERSECT) +EXCEPT TOKEN(EXCEPT) USING TOKEN(USING) WHERE TOKEN(WHERE) CALL TOKEN(CALL) diff --git a/src/sql/SelectStatement.h b/src/sql/SelectStatement.h index 2caa8809..e838920e 100644 --- a/src/sql/SelectStatement.h +++ b/src/sql/SelectStatement.h @@ -11,6 +11,26 @@ namespace hsql { kOrderDesc }; + enum UnionType { + Union, + Intersect, + Except + }; + + struct SetType { + SetType(); + virtual ~SetType(); + + UnionType internal_type; + }; + + struct SetOperator { + SetOperator(); + virtual ~SetOperator(); + + SetType* set_type; + bool is_all; + }; // Description of the order by clause within a select statement. struct OrderDescription { @@ -57,6 +77,7 @@ namespace hsql { std::vector* selectList; Expr* whereClause; GroupByDescription* groupBy; + SetOperator* set_operator; SelectStatement* unionSelect; std::vector* order; diff --git a/src/sql/statements.cpp b/src/sql/statements.cpp index e03e0cee..63879edb 100755 --- a/src/sql/statements.cpp +++ b/src/sql/statements.cpp @@ -359,4 +359,12 @@ namespace hsql { delete condition; } + SetType::SetType() {} + + SetType::~SetType() {} + + SetOperator::SetOperator() {} + + SetOperator::~SetOperator() {} + } // namespace hsql diff --git a/src/util/sqlhelper.cpp b/src/util/sqlhelper.cpp index 33c7177b..824bb577 100755 --- a/src/util/sqlhelper.cpp +++ b/src/util/sqlhelper.cpp @@ -169,7 +169,13 @@ namespace hsql { } if (stmt->unionSelect != nullptr) { - inprint("Union:", numIndent + 1); + if (stmt->set_operator->set_type->internal_type == UnionType::Union) { + inprint("Union:", numIndent + 1); + } else if (stmt->set_operator->set_type->internal_type == UnionType::Intersect) { + inprint("Intersect:", numIndent + 1); + } else { + inprint("Except:", numIndent + 1); + } printSelectStatementInfo(stmt->unionSelect, numIndent + 2); } From 8fbd4fb866a57889c0915ba843c56234ae73991f Mon Sep 17 00:00:00 2001 From: Tobias Nack Date: Mon, 9 Dec 2019 17:17:17 +0100 Subject: [PATCH 02/27] Delete memory on SelectStatement Destructor --- src/sql/statements.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/sql/statements.cpp b/src/sql/statements.cpp index 63879edb..c51e057d 100755 --- a/src/sql/statements.cpp +++ b/src/sql/statements.cpp @@ -240,6 +240,7 @@ namespace hsql { selectList(nullptr), whereClause(nullptr), groupBy(nullptr), + set_operator(nullptr), unionSelect(nullptr), order(nullptr), withDescriptions(nullptr), @@ -251,6 +252,7 @@ namespace hsql { delete groupBy; delete unionSelect; delete limit; + delete set_operator; // Delete each element in the select list. if (selectList != nullptr) { From dc999c26df061d8f36937ba2b4cc43e2b19fe434 Mon Sep 17 00:00:00 2001 From: Tobias Nack Date: Mon, 9 Dec 2019 17:24:15 +0100 Subject: [PATCH 03/27] Fix additional memory leaks for set_operator --- src/sql/statements.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/sql/statements.cpp b/src/sql/statements.cpp index c51e057d..c3f342b2 100755 --- a/src/sql/statements.cpp +++ b/src/sql/statements.cpp @@ -365,8 +365,11 @@ namespace hsql { SetType::~SetType() {} - SetOperator::SetOperator() {} + SetOperator::SetOperator() : + set_type(nullptr) {} - SetOperator::~SetOperator() {} + SetOperator::~SetOperator() { + delete set_type; + } } // namespace hsql From 5d2abab47d065e8ba07e827db8e111ace28f49ac Mon Sep 17 00:00:00 2001 From: Tobias Nack Date: Mon, 9 Dec 2019 17:57:38 +0100 Subject: [PATCH 04/27] First naming improvements and simplification of set operator type --- src/parser/bison_parser.cpp | 1348 +++++++++++++++++------------------ src/parser/bison_parser.h | 3 +- src/parser/bison_parser.y | 33 +- src/sql/SelectStatement.h | 9 +- src/sql/statements.cpp | 11 +- src/util/sqlhelper.cpp | 4 +- 6 files changed, 691 insertions(+), 717 deletions(-) diff --git a/src/parser/bison_parser.cpp b/src/parser/bison_parser.cpp index ba6172ed..012d5e89 100644 --- a/src/parser/bison_parser.cpp +++ b/src/parser/bison_parser.cpp @@ -359,7 +359,6 @@ union HSQL_STYPE hsql::GroupByDescription* group_t; hsql::UpdateClause* update_t; hsql::Alias* alias_t; - hsql::SetType* set_type_t; hsql::SetOperator* set_operator_t; std::vector* stmt_vec; @@ -372,7 +371,7 @@ union HSQL_STYPE std::vector* order_vec; std::vector* with_description_vec; -#line 376 "bison_parser.cpp" +#line 375 "bison_parser.cpp" }; typedef union HSQL_STYPE HSQL_STYPE; @@ -707,31 +706,31 @@ static const yytype_uint8 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 262, 262, 283, 289, 298, 302, 306, 313, 314, - 315, 316, 317, 318, 319, 320, 321, 330, 331, 336, - 337, 341, 345, 357, 364, 367, 371, 383, 392, 396, - 406, 409, 414, 428, 435, 442, 449, 460, 461, 465, - 466, 470, 476, 477, 478, 479, 480, 481, 482, 483, - 487, 488, 489, 499, 505, 511, 519, 520, 529, 538, - 551, 558, 569, 570, 580, 589, 590, 594, 606, 610, - 614, 632, 633, 636, 637, 645, 646, 650, 660, 677, - 685, 689, 693, 700, 703, 709, 721, 722, 726, 730, - 731, 734, 739, 740, 744, 749, 753, 754, 757, 758, - 762, 765, 766, 770, 774, 775, 776, 782, 783, 787, - 788, 792, 793, 794, 795, 796, 802, 803, 807, 808, - 812, 813, 817, 827, 828, 829, 830, 831, 835, 836, - 837, 838, 839, 840, 841, 842, 843, 844, 848, 849, - 853, 854, 855, 856, 857, 861, 862, 863, 864, 865, - 866, 867, 868, 869, 870, 871, 875, 876, 880, 881, - 882, 883, 889, 890, 891, 892, 896, 897, 901, 902, - 906, 907, 908, 909, 910, 911, 912, 916, 917, 921, - 925, 926, 927, 928, 929, 930, 933, 937, 941, 945, - 946, 947, 948, 952, 953, 954, 955, 956, 960, 964, - 965, 969, 970, 974, 978, 982, 994, 995, 1005, 1006, - 1010, 1011, 1020, 1021, 1026, 1037, 1046, 1047, 1052, 1053, - 1058, 1059, 1063, 1064, 1069, 1070, 1078, 1079, 1083, 1087, - 1091, 1098, 1111, 1119, 1129, 1148, 1149, 1150, 1151, 1152, - 1153, 1154, 1155, 1156, 1157, 1162, 1171, 1172, 1177, 1178 + 0, 260, 260, 281, 287, 296, 300, 304, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 328, 329, 334, + 335, 339, 343, 355, 362, 365, 369, 381, 390, 394, + 404, 407, 412, 426, 433, 440, 447, 458, 459, 463, + 464, 468, 474, 475, 476, 477, 478, 479, 480, 481, + 485, 486, 487, 497, 503, 509, 517, 518, 527, 536, + 549, 556, 567, 568, 578, 587, 588, 592, 604, 608, + 612, 627, 628, 631, 632, 640, 641, 645, 655, 669, + 676, 680, 684, 691, 694, 700, 712, 713, 717, 721, + 722, 725, 730, 731, 735, 740, 744, 745, 748, 749, + 753, 756, 757, 761, 765, 766, 767, 773, 774, 778, + 779, 783, 784, 785, 786, 787, 793, 794, 798, 799, + 803, 804, 808, 818, 819, 820, 821, 822, 826, 827, + 828, 829, 830, 831, 832, 833, 834, 835, 839, 840, + 844, 845, 846, 847, 848, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 866, 867, 871, 872, + 873, 874, 880, 881, 882, 883, 887, 888, 892, 893, + 897, 898, 899, 900, 901, 902, 903, 907, 908, 912, + 916, 917, 918, 919, 920, 921, 924, 928, 932, 936, + 937, 938, 939, 943, 944, 945, 946, 947, 951, 955, + 956, 960, 961, 965, 969, 973, 985, 986, 996, 997, + 1001, 1002, 1011, 1012, 1017, 1028, 1037, 1038, 1043, 1044, + 1049, 1050, 1054, 1055, 1060, 1061, 1069, 1070, 1074, 1078, + 1082, 1089, 1102, 1110, 1120, 1139, 1140, 1141, 1142, 1143, + 1144, 1145, 1146, 1147, 1148, 1153, 1162, 1163, 1168, 1169 }; #endif @@ -770,7 +769,7 @@ static const char *const yytname[] = "opt_exists", "delete_statement", "truncate_statement", "insert_statement", "opt_column_list", "update_statement", "update_clause_commalist", "update_clause", "select_statement", - "select_statement_in_set_operation", "select_part_set", + "select_statement_in_set_operation", "select_part_of_set_operation", "select_with_paren", "select_no_paren", "set_operator", "set_type", "opt_all", "select_clause", "opt_distinct", "select_list", "opt_from_clause", "from_clause", "opt_where", "opt_group", "opt_having", @@ -1728,31 +1727,31 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio switch (yytype) { case 3: /* IDENTIFIER */ -#line 147 "bison_parser.y" +#line 146 "bison_parser.y" { free( (((*yyvaluep).sval)) ); } -#line 1734 "bison_parser.cpp" +#line 1733 "bison_parser.cpp" break; case 4: /* STRING */ -#line 147 "bison_parser.y" +#line 146 "bison_parser.y" { free( (((*yyvaluep).sval)) ); } -#line 1740 "bison_parser.cpp" +#line 1739 "bison_parser.cpp" break; case 5: /* FLOATVAL */ -#line 145 "bison_parser.y" +#line 144 "bison_parser.y" { } -#line 1746 "bison_parser.cpp" +#line 1745 "bison_parser.cpp" break; case 6: /* INTVAL */ -#line 145 "bison_parser.y" +#line 144 "bison_parser.y" { } -#line 1752 "bison_parser.cpp" +#line 1751 "bison_parser.cpp" break; case 165: /* statement_list */ -#line 148 "bison_parser.y" +#line 147 "bison_parser.y" { if ((((*yyvaluep).stmt_vec)) != nullptr) { for (auto ptr : *(((*yyvaluep).stmt_vec))) { @@ -1761,23 +1760,23 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).stmt_vec)); } -#line 1765 "bison_parser.cpp" +#line 1764 "bison_parser.cpp" break; case 166: /* statement */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).statement)); } -#line 1771 "bison_parser.cpp" +#line 1770 "bison_parser.cpp" break; case 167: /* preparable_statement */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).statement)); } -#line 1777 "bison_parser.cpp" +#line 1776 "bison_parser.cpp" break; case 168: /* opt_hints */ -#line 148 "bison_parser.y" +#line 147 "bison_parser.y" { if ((((*yyvaluep).expr_vec)) != nullptr) { for (auto ptr : *(((*yyvaluep).expr_vec))) { @@ -1786,11 +1785,11 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).expr_vec)); } -#line 1790 "bison_parser.cpp" +#line 1789 "bison_parser.cpp" break; case 169: /* hint_list */ -#line 148 "bison_parser.y" +#line 147 "bison_parser.y" { if ((((*yyvaluep).expr_vec)) != nullptr) { for (auto ptr : *(((*yyvaluep).expr_vec))) { @@ -1799,71 +1798,71 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).expr_vec)); } -#line 1803 "bison_parser.cpp" +#line 1802 "bison_parser.cpp" break; case 170: /* hint */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 1809 "bison_parser.cpp" +#line 1808 "bison_parser.cpp" break; case 171: /* prepare_statement */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).prep_stmt)); } -#line 1815 "bison_parser.cpp" +#line 1814 "bison_parser.cpp" break; case 172: /* prepare_target_query */ -#line 147 "bison_parser.y" +#line 146 "bison_parser.y" { free( (((*yyvaluep).sval)) ); } -#line 1821 "bison_parser.cpp" +#line 1820 "bison_parser.cpp" break; case 173: /* execute_statement */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).exec_stmt)); } -#line 1827 "bison_parser.cpp" +#line 1826 "bison_parser.cpp" break; case 174: /* import_statement */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).import_stmt)); } -#line 1833 "bison_parser.cpp" +#line 1832 "bison_parser.cpp" break; case 175: /* import_file_type */ -#line 145 "bison_parser.y" +#line 144 "bison_parser.y" { } -#line 1839 "bison_parser.cpp" +#line 1838 "bison_parser.cpp" break; case 176: /* file_path */ -#line 147 "bison_parser.y" +#line 146 "bison_parser.y" { free( (((*yyvaluep).sval)) ); } -#line 1845 "bison_parser.cpp" +#line 1844 "bison_parser.cpp" break; case 177: /* show_statement */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).show_stmt)); } -#line 1851 "bison_parser.cpp" +#line 1850 "bison_parser.cpp" break; case 178: /* create_statement */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).create_stmt)); } -#line 1857 "bison_parser.cpp" +#line 1856 "bison_parser.cpp" break; case 179: /* opt_not_exists */ -#line 145 "bison_parser.y" +#line 144 "bison_parser.y" { } -#line 1863 "bison_parser.cpp" +#line 1862 "bison_parser.cpp" break; case 180: /* column_def_commalist */ -#line 148 "bison_parser.y" +#line 147 "bison_parser.y" { if ((((*yyvaluep).column_vec)) != nullptr) { for (auto ptr : *(((*yyvaluep).column_vec))) { @@ -1872,59 +1871,59 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).column_vec)); } -#line 1876 "bison_parser.cpp" +#line 1875 "bison_parser.cpp" break; case 181: /* column_def */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).column_t)); } -#line 1882 "bison_parser.cpp" +#line 1881 "bison_parser.cpp" break; case 182: /* column_type */ -#line 145 "bison_parser.y" +#line 144 "bison_parser.y" { } -#line 1888 "bison_parser.cpp" +#line 1887 "bison_parser.cpp" break; case 183: /* opt_column_nullable */ -#line 145 "bison_parser.y" +#line 144 "bison_parser.y" { } -#line 1894 "bison_parser.cpp" +#line 1893 "bison_parser.cpp" break; case 184: /* drop_statement */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).drop_stmt)); } -#line 1900 "bison_parser.cpp" +#line 1899 "bison_parser.cpp" break; case 185: /* opt_exists */ -#line 145 "bison_parser.y" +#line 144 "bison_parser.y" { } -#line 1906 "bison_parser.cpp" +#line 1905 "bison_parser.cpp" break; case 186: /* delete_statement */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).delete_stmt)); } -#line 1912 "bison_parser.cpp" +#line 1911 "bison_parser.cpp" break; case 187: /* truncate_statement */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).delete_stmt)); } -#line 1918 "bison_parser.cpp" +#line 1917 "bison_parser.cpp" break; case 188: /* insert_statement */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).insert_stmt)); } -#line 1924 "bison_parser.cpp" +#line 1923 "bison_parser.cpp" break; case 189: /* opt_column_list */ -#line 148 "bison_parser.y" +#line 147 "bison_parser.y" { if ((((*yyvaluep).str_vec)) != nullptr) { for (auto ptr : *(((*yyvaluep).str_vec))) { @@ -1933,17 +1932,17 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).str_vec)); } -#line 1937 "bison_parser.cpp" +#line 1936 "bison_parser.cpp" break; case 190: /* update_statement */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).update_stmt)); } -#line 1943 "bison_parser.cpp" +#line 1942 "bison_parser.cpp" break; case 191: /* update_clause_commalist */ -#line 148 "bison_parser.y" +#line 147 "bison_parser.y" { if ((((*yyvaluep).update_vec)) != nullptr) { for (auto ptr : *(((*yyvaluep).update_vec))) { @@ -1952,77 +1951,77 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).update_vec)); } -#line 1956 "bison_parser.cpp" +#line 1955 "bison_parser.cpp" break; case 192: /* update_clause */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).update_t)); } -#line 1962 "bison_parser.cpp" +#line 1961 "bison_parser.cpp" break; case 193: /* select_statement */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).select_stmt)); } -#line 1968 "bison_parser.cpp" +#line 1967 "bison_parser.cpp" break; case 194: /* select_statement_in_set_operation */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).select_stmt)); } -#line 1974 "bison_parser.cpp" +#line 1973 "bison_parser.cpp" break; - case 195: /* select_part_set */ -#line 156 "bison_parser.y" + case 195: /* select_part_of_set_operation */ +#line 155 "bison_parser.y" { delete (((*yyvaluep).select_stmt)); } -#line 1980 "bison_parser.cpp" +#line 1979 "bison_parser.cpp" break; case 196: /* select_with_paren */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).select_stmt)); } -#line 1986 "bison_parser.cpp" +#line 1985 "bison_parser.cpp" break; case 197: /* select_no_paren */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).select_stmt)); } -#line 1992 "bison_parser.cpp" +#line 1991 "bison_parser.cpp" break; case 198: /* set_operator */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).set_operator_t)); } -#line 1998 "bison_parser.cpp" +#line 1997 "bison_parser.cpp" break; case 199: /* set_type */ -#line 156 "bison_parser.y" - { delete (((*yyvaluep).set_type_t)); } -#line 2004 "bison_parser.cpp" +#line 155 "bison_parser.y" + { delete (((*yyvaluep).set_operator_t)); } +#line 2003 "bison_parser.cpp" break; case 200: /* opt_all */ -#line 145 "bison_parser.y" +#line 144 "bison_parser.y" { } -#line 2010 "bison_parser.cpp" +#line 2009 "bison_parser.cpp" break; case 201: /* select_clause */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).select_stmt)); } -#line 2016 "bison_parser.cpp" +#line 2015 "bison_parser.cpp" break; case 202: /* opt_distinct */ -#line 145 "bison_parser.y" +#line 144 "bison_parser.y" { } -#line 2022 "bison_parser.cpp" +#line 2021 "bison_parser.cpp" break; case 203: /* select_list */ -#line 148 "bison_parser.y" +#line 147 "bison_parser.y" { if ((((*yyvaluep).expr_vec)) != nullptr) { for (auto ptr : *(((*yyvaluep).expr_vec))) { @@ -2031,41 +2030,41 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).expr_vec)); } -#line 2035 "bison_parser.cpp" +#line 2034 "bison_parser.cpp" break; case 204: /* opt_from_clause */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2041 "bison_parser.cpp" +#line 2040 "bison_parser.cpp" break; case 205: /* from_clause */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2047 "bison_parser.cpp" +#line 2046 "bison_parser.cpp" break; case 206: /* opt_where */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2053 "bison_parser.cpp" +#line 2052 "bison_parser.cpp" break; case 207: /* opt_group */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).group_t)); } -#line 2059 "bison_parser.cpp" +#line 2058 "bison_parser.cpp" break; case 208: /* opt_having */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2065 "bison_parser.cpp" +#line 2064 "bison_parser.cpp" break; case 209: /* opt_order */ -#line 148 "bison_parser.y" +#line 147 "bison_parser.y" { if ((((*yyvaluep).order_vec)) != nullptr) { for (auto ptr : *(((*yyvaluep).order_vec))) { @@ -2074,11 +2073,11 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).order_vec)); } -#line 2078 "bison_parser.cpp" +#line 2077 "bison_parser.cpp" break; case 210: /* order */ -#line 148 "bison_parser.y" +#line 147 "bison_parser.y" { if ((((*yyvaluep).order_vec)) != nullptr) { for (auto ptr : *(((*yyvaluep).order_vec))) { @@ -2087,11 +2086,11 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).order_vec)); } -#line 2091 "bison_parser.cpp" +#line 2090 "bison_parser.cpp" break; case 211: /* order_list */ -#line 148 "bison_parser.y" +#line 147 "bison_parser.y" { if ((((*yyvaluep).order_vec)) != nullptr) { for (auto ptr : *(((*yyvaluep).order_vec))) { @@ -2100,41 +2099,41 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).order_vec)); } -#line 2104 "bison_parser.cpp" +#line 2103 "bison_parser.cpp" break; case 212: /* order_desc */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).order)); } -#line 2110 "bison_parser.cpp" +#line 2109 "bison_parser.cpp" break; case 213: /* opt_order_type */ -#line 145 "bison_parser.y" +#line 144 "bison_parser.y" { } -#line 2116 "bison_parser.cpp" +#line 2115 "bison_parser.cpp" break; case 214: /* opt_top */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).limit)); } -#line 2122 "bison_parser.cpp" +#line 2121 "bison_parser.cpp" break; case 215: /* opt_limit */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).limit)); } -#line 2128 "bison_parser.cpp" +#line 2127 "bison_parser.cpp" break; case 216: /* limit */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).limit)); } -#line 2134 "bison_parser.cpp" +#line 2133 "bison_parser.cpp" break; case 217: /* expr_list */ -#line 148 "bison_parser.y" +#line 147 "bison_parser.y" { if ((((*yyvaluep).expr_vec)) != nullptr) { for (auto ptr : *(((*yyvaluep).expr_vec))) { @@ -2143,11 +2142,11 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).expr_vec)); } -#line 2147 "bison_parser.cpp" +#line 2146 "bison_parser.cpp" break; case 218: /* opt_literal_list */ -#line 148 "bison_parser.y" +#line 147 "bison_parser.y" { if ((((*yyvaluep).expr_vec)) != nullptr) { for (auto ptr : *(((*yyvaluep).expr_vec))) { @@ -2156,11 +2155,11 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).expr_vec)); } -#line 2160 "bison_parser.cpp" +#line 2159 "bison_parser.cpp" break; case 219: /* literal_list */ -#line 148 "bison_parser.y" +#line 147 "bison_parser.y" { if ((((*yyvaluep).expr_vec)) != nullptr) { for (auto ptr : *(((*yyvaluep).expr_vec))) { @@ -2169,185 +2168,185 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).expr_vec)); } -#line 2173 "bison_parser.cpp" +#line 2172 "bison_parser.cpp" break; case 220: /* expr_alias */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2179 "bison_parser.cpp" +#line 2178 "bison_parser.cpp" break; case 221: /* expr */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2185 "bison_parser.cpp" +#line 2184 "bison_parser.cpp" break; case 222: /* operand */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2191 "bison_parser.cpp" +#line 2190 "bison_parser.cpp" break; case 223: /* scalar_expr */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2197 "bison_parser.cpp" +#line 2196 "bison_parser.cpp" break; case 224: /* unary_expr */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2203 "bison_parser.cpp" +#line 2202 "bison_parser.cpp" break; case 225: /* binary_expr */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2209 "bison_parser.cpp" +#line 2208 "bison_parser.cpp" break; case 226: /* logic_expr */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2215 "bison_parser.cpp" +#line 2214 "bison_parser.cpp" break; case 227: /* in_expr */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2221 "bison_parser.cpp" +#line 2220 "bison_parser.cpp" break; case 228: /* case_expr */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2227 "bison_parser.cpp" +#line 2226 "bison_parser.cpp" break; case 229: /* case_list */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2233 "bison_parser.cpp" +#line 2232 "bison_parser.cpp" break; case 230: /* exists_expr */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2239 "bison_parser.cpp" +#line 2238 "bison_parser.cpp" break; case 231: /* comp_expr */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2245 "bison_parser.cpp" +#line 2244 "bison_parser.cpp" break; case 232: /* function_expr */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2251 "bison_parser.cpp" +#line 2250 "bison_parser.cpp" break; case 233: /* extract_expr */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2257 "bison_parser.cpp" +#line 2256 "bison_parser.cpp" break; case 234: /* datetime_field */ -#line 145 "bison_parser.y" +#line 144 "bison_parser.y" { } -#line 2263 "bison_parser.cpp" +#line 2262 "bison_parser.cpp" break; case 235: /* array_expr */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2269 "bison_parser.cpp" +#line 2268 "bison_parser.cpp" break; case 236: /* array_index */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2275 "bison_parser.cpp" +#line 2274 "bison_parser.cpp" break; case 237: /* between_expr */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2281 "bison_parser.cpp" +#line 2280 "bison_parser.cpp" break; case 238: /* column_name */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2287 "bison_parser.cpp" +#line 2286 "bison_parser.cpp" break; case 239: /* literal */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2293 "bison_parser.cpp" +#line 2292 "bison_parser.cpp" break; case 240: /* string_literal */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2299 "bison_parser.cpp" +#line 2298 "bison_parser.cpp" break; case 241: /* bool_literal */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2305 "bison_parser.cpp" +#line 2304 "bison_parser.cpp" break; case 242: /* num_literal */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2311 "bison_parser.cpp" +#line 2310 "bison_parser.cpp" break; case 243: /* int_literal */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2317 "bison_parser.cpp" +#line 2316 "bison_parser.cpp" break; case 244: /* null_literal */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2323 "bison_parser.cpp" +#line 2322 "bison_parser.cpp" break; case 245: /* param_expr */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2329 "bison_parser.cpp" +#line 2328 "bison_parser.cpp" break; case 246: /* table_ref */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2335 "bison_parser.cpp" +#line 2334 "bison_parser.cpp" break; case 247: /* table_ref_atomic */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2341 "bison_parser.cpp" +#line 2340 "bison_parser.cpp" break; case 248: /* nonjoin_table_ref_atomic */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2347 "bison_parser.cpp" +#line 2346 "bison_parser.cpp" break; case 249: /* table_ref_commalist */ -#line 148 "bison_parser.y" +#line 147 "bison_parser.y" { if ((((*yyvaluep).table_vec)) != nullptr) { for (auto ptr : *(((*yyvaluep).table_vec))) { @@ -2356,95 +2355,95 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).table_vec)); } -#line 2360 "bison_parser.cpp" +#line 2359 "bison_parser.cpp" break; case 250: /* table_ref_name */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2366 "bison_parser.cpp" +#line 2365 "bison_parser.cpp" break; case 251: /* table_ref_name_no_alias */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2372 "bison_parser.cpp" +#line 2371 "bison_parser.cpp" break; case 252: /* table_name */ -#line 146 "bison_parser.y" +#line 145 "bison_parser.y" { free( (((*yyvaluep).table_name).name) ); free( (((*yyvaluep).table_name).schema) ); } -#line 2378 "bison_parser.cpp" +#line 2377 "bison_parser.cpp" break; case 253: /* table_alias */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).alias_t)); } -#line 2384 "bison_parser.cpp" +#line 2383 "bison_parser.cpp" break; case 254: /* opt_table_alias */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).alias_t)); } -#line 2390 "bison_parser.cpp" +#line 2389 "bison_parser.cpp" break; case 255: /* alias */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).alias_t)); } -#line 2396 "bison_parser.cpp" +#line 2395 "bison_parser.cpp" break; case 256: /* opt_alias */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).alias_t)); } -#line 2402 "bison_parser.cpp" +#line 2401 "bison_parser.cpp" break; case 257: /* opt_with_clause */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).with_description_vec)); } -#line 2408 "bison_parser.cpp" +#line 2407 "bison_parser.cpp" break; case 258: /* with_clause */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).with_description_vec)); } -#line 2414 "bison_parser.cpp" +#line 2413 "bison_parser.cpp" break; case 259: /* with_description_list */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).with_description_vec)); } -#line 2420 "bison_parser.cpp" +#line 2419 "bison_parser.cpp" break; case 260: /* with_description */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).with_description_t)); } -#line 2426 "bison_parser.cpp" +#line 2425 "bison_parser.cpp" break; case 261: /* join_clause */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2432 "bison_parser.cpp" +#line 2431 "bison_parser.cpp" break; case 262: /* opt_join_type */ -#line 145 "bison_parser.y" +#line 144 "bison_parser.y" { } -#line 2438 "bison_parser.cpp" +#line 2437 "bison_parser.cpp" break; case 263: /* join_condition */ -#line 156 "bison_parser.y" +#line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2444 "bison_parser.cpp" +#line 2443 "bison_parser.cpp" break; case 265: /* ident_commalist */ -#line 148 "bison_parser.y" +#line 147 "bison_parser.y" { if ((((*yyvaluep).str_vec)) != nullptr) { for (auto ptr : *(((*yyvaluep).str_vec))) { @@ -2453,7 +2452,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).str_vec)); } -#line 2457 "bison_parser.cpp" +#line 2456 "bison_parser.cpp" break; default: @@ -2571,7 +2570,7 @@ YYLTYPE yylloc = yyloc_default; yylloc.string_length = 0; } -#line 2575 "bison_parser.cpp" +#line 2574 "bison_parser.cpp" yylsp[0] = yylloc; goto yysetstate; @@ -2764,7 +2763,7 @@ YYLTYPE yylloc = yyloc_default; switch (yyn) { case 2: -#line 262 "bison_parser.y" +#line 260 "bison_parser.y" { for (SQLStatement* stmt : *(yyvsp[-1].stmt_vec)) { // Transfers ownership of the statement. @@ -2782,236 +2781,236 @@ YYLTYPE yylloc = yyloc_default; } delete (yyvsp[-1].stmt_vec); } -#line 2786 "bison_parser.cpp" +#line 2785 "bison_parser.cpp" break; case 3: -#line 283 "bison_parser.y" +#line 281 "bison_parser.y" { (yyvsp[0].statement)->stringLength = yylloc.string_length; yylloc.string_length = 0; (yyval.stmt_vec) = new std::vector(); (yyval.stmt_vec)->push_back((yyvsp[0].statement)); } -#line 2797 "bison_parser.cpp" +#line 2796 "bison_parser.cpp" break; case 4: -#line 289 "bison_parser.y" +#line 287 "bison_parser.y" { (yyvsp[0].statement)->stringLength = yylloc.string_length; yylloc.string_length = 0; (yyvsp[-2].stmt_vec)->push_back((yyvsp[0].statement)); (yyval.stmt_vec) = (yyvsp[-2].stmt_vec); } -#line 2808 "bison_parser.cpp" +#line 2807 "bison_parser.cpp" break; case 5: -#line 298 "bison_parser.y" +#line 296 "bison_parser.y" { (yyval.statement) = (yyvsp[-1].prep_stmt); (yyval.statement)->hints = (yyvsp[0].expr_vec); } -#line 2817 "bison_parser.cpp" +#line 2816 "bison_parser.cpp" break; case 6: -#line 302 "bison_parser.y" +#line 300 "bison_parser.y" { (yyval.statement) = (yyvsp[-1].statement); (yyval.statement)->hints = (yyvsp[0].expr_vec); } -#line 2826 "bison_parser.cpp" +#line 2825 "bison_parser.cpp" break; case 7: -#line 306 "bison_parser.y" +#line 304 "bison_parser.y" { (yyval.statement) = (yyvsp[0].show_stmt); } -#line 2834 "bison_parser.cpp" +#line 2833 "bison_parser.cpp" break; case 8: -#line 313 "bison_parser.y" +#line 311 "bison_parser.y" { (yyval.statement) = (yyvsp[0].select_stmt); } -#line 2840 "bison_parser.cpp" +#line 2839 "bison_parser.cpp" break; case 9: -#line 314 "bison_parser.y" +#line 312 "bison_parser.y" { (yyval.statement) = (yyvsp[0].import_stmt); } -#line 2846 "bison_parser.cpp" +#line 2845 "bison_parser.cpp" break; case 10: -#line 315 "bison_parser.y" +#line 313 "bison_parser.y" { (yyval.statement) = (yyvsp[0].create_stmt); } -#line 2852 "bison_parser.cpp" +#line 2851 "bison_parser.cpp" break; case 11: -#line 316 "bison_parser.y" +#line 314 "bison_parser.y" { (yyval.statement) = (yyvsp[0].insert_stmt); } -#line 2858 "bison_parser.cpp" +#line 2857 "bison_parser.cpp" break; case 12: -#line 317 "bison_parser.y" +#line 315 "bison_parser.y" { (yyval.statement) = (yyvsp[0].delete_stmt); } -#line 2864 "bison_parser.cpp" +#line 2863 "bison_parser.cpp" break; case 13: -#line 318 "bison_parser.y" +#line 316 "bison_parser.y" { (yyval.statement) = (yyvsp[0].delete_stmt); } -#line 2870 "bison_parser.cpp" +#line 2869 "bison_parser.cpp" break; case 14: -#line 319 "bison_parser.y" +#line 317 "bison_parser.y" { (yyval.statement) = (yyvsp[0].update_stmt); } -#line 2876 "bison_parser.cpp" +#line 2875 "bison_parser.cpp" break; case 15: -#line 320 "bison_parser.y" +#line 318 "bison_parser.y" { (yyval.statement) = (yyvsp[0].drop_stmt); } -#line 2882 "bison_parser.cpp" +#line 2881 "bison_parser.cpp" break; case 16: -#line 321 "bison_parser.y" +#line 319 "bison_parser.y" { (yyval.statement) = (yyvsp[0].exec_stmt); } -#line 2888 "bison_parser.cpp" +#line 2887 "bison_parser.cpp" break; case 17: -#line 330 "bison_parser.y" +#line 328 "bison_parser.y" { (yyval.expr_vec) = (yyvsp[-1].expr_vec); } -#line 2894 "bison_parser.cpp" +#line 2893 "bison_parser.cpp" break; case 18: -#line 331 "bison_parser.y" +#line 329 "bison_parser.y" { (yyval.expr_vec) = nullptr; } -#line 2900 "bison_parser.cpp" +#line 2899 "bison_parser.cpp" break; case 19: -#line 336 "bison_parser.y" +#line 334 "bison_parser.y" { (yyval.expr_vec) = new std::vector(); (yyval.expr_vec)->push_back((yyvsp[0].expr)); } -#line 2906 "bison_parser.cpp" +#line 2905 "bison_parser.cpp" break; case 20: -#line 337 "bison_parser.y" +#line 335 "bison_parser.y" { (yyvsp[-2].expr_vec)->push_back((yyvsp[0].expr)); (yyval.expr_vec) = (yyvsp[-2].expr_vec); } -#line 2912 "bison_parser.cpp" +#line 2911 "bison_parser.cpp" break; case 21: -#line 341 "bison_parser.y" +#line 339 "bison_parser.y" { (yyval.expr) = Expr::make(kExprHint); (yyval.expr)->name = (yyvsp[0].sval); } -#line 2921 "bison_parser.cpp" +#line 2920 "bison_parser.cpp" break; case 22: -#line 345 "bison_parser.y" +#line 343 "bison_parser.y" { (yyval.expr) = Expr::make(kExprHint); (yyval.expr)->name = (yyvsp[-3].sval); (yyval.expr)->exprList = (yyvsp[-1].expr_vec); } -#line 2931 "bison_parser.cpp" +#line 2930 "bison_parser.cpp" break; case 23: -#line 357 "bison_parser.y" +#line 355 "bison_parser.y" { (yyval.prep_stmt) = new PrepareStatement(); (yyval.prep_stmt)->name = (yyvsp[-2].sval); (yyval.prep_stmt)->query = (yyvsp[0].sval); } -#line 2941 "bison_parser.cpp" +#line 2940 "bison_parser.cpp" break; case 25: -#line 367 "bison_parser.y" +#line 365 "bison_parser.y" { (yyval.exec_stmt) = new ExecuteStatement(); (yyval.exec_stmt)->name = (yyvsp[0].sval); } -#line 2950 "bison_parser.cpp" +#line 2949 "bison_parser.cpp" break; case 26: -#line 371 "bison_parser.y" +#line 369 "bison_parser.y" { (yyval.exec_stmt) = new ExecuteStatement(); (yyval.exec_stmt)->name = (yyvsp[-3].sval); (yyval.exec_stmt)->parameters = (yyvsp[-1].expr_vec); } -#line 2960 "bison_parser.cpp" +#line 2959 "bison_parser.cpp" break; case 27: -#line 383 "bison_parser.y" +#line 381 "bison_parser.y" { (yyval.import_stmt) = new ImportStatement((ImportType) (yyvsp[-4].uval)); (yyval.import_stmt)->filePath = (yyvsp[-2].sval); (yyval.import_stmt)->schema = (yyvsp[0].table_name).schema; (yyval.import_stmt)->tableName = (yyvsp[0].table_name).name; } -#line 2971 "bison_parser.cpp" +#line 2970 "bison_parser.cpp" break; case 28: -#line 392 "bison_parser.y" +#line 390 "bison_parser.y" { (yyval.uval) = kImportCSV; } -#line 2977 "bison_parser.cpp" +#line 2976 "bison_parser.cpp" break; case 29: -#line 396 "bison_parser.y" +#line 394 "bison_parser.y" { (yyval.sval) = strdup((yyvsp[0].expr)->name); delete (yyvsp[0].expr); } -#line 2983 "bison_parser.cpp" +#line 2982 "bison_parser.cpp" break; case 30: -#line 406 "bison_parser.y" +#line 404 "bison_parser.y" { (yyval.show_stmt) = new ShowStatement(kShowTables); } -#line 2991 "bison_parser.cpp" +#line 2990 "bison_parser.cpp" break; case 31: -#line 409 "bison_parser.y" +#line 407 "bison_parser.y" { (yyval.show_stmt) = new ShowStatement(kShowColumns); (yyval.show_stmt)->schema = (yyvsp[0].table_name).schema; (yyval.show_stmt)->name = (yyvsp[0].table_name).name; } -#line 3001 "bison_parser.cpp" +#line 3000 "bison_parser.cpp" break; case 32: -#line 414 "bison_parser.y" +#line 412 "bison_parser.y" { (yyval.show_stmt) = new ShowStatement(kShowColumns); (yyval.show_stmt)->schema = (yyvsp[0].table_name).schema; (yyval.show_stmt)->name = (yyvsp[0].table_name).name; } -#line 3011 "bison_parser.cpp" +#line 3010 "bison_parser.cpp" break; case 33: -#line 428 "bison_parser.y" +#line 426 "bison_parser.y" { (yyval.create_stmt) = new CreateStatement(kCreateTableFromTbl); (yyval.create_stmt)->ifNotExists = (yyvsp[-5].bval); @@ -3019,11 +3018,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.create_stmt)->tableName = (yyvsp[-4].table_name).name; (yyval.create_stmt)->filePath = (yyvsp[0].sval); } -#line 3023 "bison_parser.cpp" +#line 3022 "bison_parser.cpp" break; case 34: -#line 435 "bison_parser.y" +#line 433 "bison_parser.y" { (yyval.create_stmt) = new CreateStatement(kCreateTable); (yyval.create_stmt)->ifNotExists = (yyvsp[-4].bval); @@ -3031,11 +3030,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.create_stmt)->tableName = (yyvsp[-3].table_name).name; (yyval.create_stmt)->columns = (yyvsp[-1].column_vec); } -#line 3035 "bison_parser.cpp" +#line 3034 "bison_parser.cpp" break; case 35: -#line 442 "bison_parser.y" +#line 440 "bison_parser.y" { (yyval.create_stmt) = new CreateStatement(kCreateTable); (yyval.create_stmt)->ifNotExists = (yyvsp[-3].bval); @@ -3043,11 +3042,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.create_stmt)->tableName = (yyvsp[-2].table_name).name; (yyval.create_stmt)->select = (yyvsp[0].select_stmt); } -#line 3047 "bison_parser.cpp" +#line 3046 "bison_parser.cpp" break; case 36: -#line 449 "bison_parser.y" +#line 447 "bison_parser.y" { (yyval.create_stmt) = new CreateStatement(kCreateView); (yyval.create_stmt)->ifNotExists = (yyvsp[-4].bval); @@ -3056,174 +3055,174 @@ YYLTYPE yylloc = yyloc_default; (yyval.create_stmt)->viewColumns = (yyvsp[-2].str_vec); (yyval.create_stmt)->select = (yyvsp[0].select_stmt); } -#line 3060 "bison_parser.cpp" +#line 3059 "bison_parser.cpp" break; case 37: -#line 460 "bison_parser.y" +#line 458 "bison_parser.y" { (yyval.bval) = true; } -#line 3066 "bison_parser.cpp" +#line 3065 "bison_parser.cpp" break; case 38: -#line 461 "bison_parser.y" +#line 459 "bison_parser.y" { (yyval.bval) = false; } -#line 3072 "bison_parser.cpp" +#line 3071 "bison_parser.cpp" break; case 39: -#line 465 "bison_parser.y" +#line 463 "bison_parser.y" { (yyval.column_vec) = new std::vector(); (yyval.column_vec)->push_back((yyvsp[0].column_t)); } -#line 3078 "bison_parser.cpp" +#line 3077 "bison_parser.cpp" break; case 40: -#line 466 "bison_parser.y" +#line 464 "bison_parser.y" { (yyvsp[-2].column_vec)->push_back((yyvsp[0].column_t)); (yyval.column_vec) = (yyvsp[-2].column_vec); } -#line 3084 "bison_parser.cpp" +#line 3083 "bison_parser.cpp" break; case 41: -#line 470 "bison_parser.y" +#line 468 "bison_parser.y" { (yyval.column_t) = new ColumnDefinition((yyvsp[-2].sval), (yyvsp[-1].column_type_t), (yyvsp[0].bval)); } -#line 3092 "bison_parser.cpp" +#line 3091 "bison_parser.cpp" break; case 42: -#line 476 "bison_parser.y" +#line 474 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::INT}; } -#line 3098 "bison_parser.cpp" +#line 3097 "bison_parser.cpp" break; case 43: -#line 477 "bison_parser.y" +#line 475 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::INT}; } -#line 3104 "bison_parser.cpp" +#line 3103 "bison_parser.cpp" break; case 44: -#line 478 "bison_parser.y" +#line 476 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::LONG}; } -#line 3110 "bison_parser.cpp" +#line 3109 "bison_parser.cpp" break; case 45: -#line 479 "bison_parser.y" +#line 477 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::FLOAT}; } -#line 3116 "bison_parser.cpp" +#line 3115 "bison_parser.cpp" break; case 46: -#line 480 "bison_parser.y" +#line 478 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::DOUBLE}; } -#line 3122 "bison_parser.cpp" +#line 3121 "bison_parser.cpp" break; case 47: -#line 481 "bison_parser.y" +#line 479 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::VARCHAR, (yyvsp[-1].ival)}; } -#line 3128 "bison_parser.cpp" +#line 3127 "bison_parser.cpp" break; case 48: -#line 482 "bison_parser.y" +#line 480 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::CHAR, (yyvsp[-1].ival)}; } -#line 3134 "bison_parser.cpp" +#line 3133 "bison_parser.cpp" break; case 49: -#line 483 "bison_parser.y" +#line 481 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::TEXT}; } -#line 3140 "bison_parser.cpp" +#line 3139 "bison_parser.cpp" break; case 50: -#line 487 "bison_parser.y" +#line 485 "bison_parser.y" { (yyval.bval) = true; } -#line 3146 "bison_parser.cpp" +#line 3145 "bison_parser.cpp" break; case 51: -#line 488 "bison_parser.y" +#line 486 "bison_parser.y" { (yyval.bval) = false; } -#line 3152 "bison_parser.cpp" +#line 3151 "bison_parser.cpp" break; case 52: -#line 489 "bison_parser.y" +#line 487 "bison_parser.y" { (yyval.bval) = false; } -#line 3158 "bison_parser.cpp" +#line 3157 "bison_parser.cpp" break; case 53: -#line 499 "bison_parser.y" +#line 497 "bison_parser.y" { (yyval.drop_stmt) = new DropStatement(kDropTable); (yyval.drop_stmt)->ifExists = (yyvsp[-1].bval); (yyval.drop_stmt)->schema = (yyvsp[0].table_name).schema; (yyval.drop_stmt)->name = (yyvsp[0].table_name).name; } -#line 3169 "bison_parser.cpp" +#line 3168 "bison_parser.cpp" break; case 54: -#line 505 "bison_parser.y" +#line 503 "bison_parser.y" { (yyval.drop_stmt) = new DropStatement(kDropView); (yyval.drop_stmt)->ifExists = (yyvsp[-1].bval); (yyval.drop_stmt)->schema = (yyvsp[0].table_name).schema; (yyval.drop_stmt)->name = (yyvsp[0].table_name).name; } -#line 3180 "bison_parser.cpp" +#line 3179 "bison_parser.cpp" break; case 55: -#line 511 "bison_parser.y" +#line 509 "bison_parser.y" { (yyval.drop_stmt) = new DropStatement(kDropPreparedStatement); (yyval.drop_stmt)->ifExists = false; (yyval.drop_stmt)->name = (yyvsp[0].sval); } -#line 3190 "bison_parser.cpp" +#line 3189 "bison_parser.cpp" break; case 56: -#line 519 "bison_parser.y" +#line 517 "bison_parser.y" { (yyval.bval) = true; } -#line 3196 "bison_parser.cpp" +#line 3195 "bison_parser.cpp" break; case 57: -#line 520 "bison_parser.y" +#line 518 "bison_parser.y" { (yyval.bval) = false; } -#line 3202 "bison_parser.cpp" +#line 3201 "bison_parser.cpp" break; case 58: -#line 529 "bison_parser.y" +#line 527 "bison_parser.y" { (yyval.delete_stmt) = new DeleteStatement(); (yyval.delete_stmt)->schema = (yyvsp[-1].table_name).schema; (yyval.delete_stmt)->tableName = (yyvsp[-1].table_name).name; (yyval.delete_stmt)->expr = (yyvsp[0].expr); } -#line 3213 "bison_parser.cpp" +#line 3212 "bison_parser.cpp" break; case 59: -#line 538 "bison_parser.y" +#line 536 "bison_parser.y" { (yyval.delete_stmt) = new DeleteStatement(); (yyval.delete_stmt)->schema = (yyvsp[0].table_name).schema; (yyval.delete_stmt)->tableName = (yyvsp[0].table_name).name; } -#line 3223 "bison_parser.cpp" +#line 3222 "bison_parser.cpp" break; case 60: -#line 551 "bison_parser.y" +#line 549 "bison_parser.y" { (yyval.insert_stmt) = new InsertStatement(kInsertValues); (yyval.insert_stmt)->schema = (yyvsp[-5].table_name).schema; @@ -3231,11 +3230,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.insert_stmt)->columns = (yyvsp[-4].str_vec); (yyval.insert_stmt)->values = (yyvsp[-1].expr_vec); } -#line 3235 "bison_parser.cpp" +#line 3234 "bison_parser.cpp" break; case 61: -#line 558 "bison_parser.y" +#line 556 "bison_parser.y" { (yyval.insert_stmt) = new InsertStatement(kInsertSelect); (yyval.insert_stmt)->schema = (yyvsp[-2].table_name).schema; @@ -3243,78 +3242,75 @@ YYLTYPE yylloc = yyloc_default; (yyval.insert_stmt)->columns = (yyvsp[-1].str_vec); (yyval.insert_stmt)->select = (yyvsp[0].select_stmt); } -#line 3247 "bison_parser.cpp" +#line 3246 "bison_parser.cpp" break; case 62: -#line 569 "bison_parser.y" +#line 567 "bison_parser.y" { (yyval.str_vec) = (yyvsp[-1].str_vec); } -#line 3253 "bison_parser.cpp" +#line 3252 "bison_parser.cpp" break; case 63: -#line 570 "bison_parser.y" +#line 568 "bison_parser.y" { (yyval.str_vec) = nullptr; } -#line 3259 "bison_parser.cpp" +#line 3258 "bison_parser.cpp" break; case 64: -#line 580 "bison_parser.y" +#line 578 "bison_parser.y" { (yyval.update_stmt) = new UpdateStatement(); (yyval.update_stmt)->table = (yyvsp[-3].table); (yyval.update_stmt)->updates = (yyvsp[-1].update_vec); (yyval.update_stmt)->where = (yyvsp[0].expr); } -#line 3270 "bison_parser.cpp" +#line 3269 "bison_parser.cpp" break; case 65: -#line 589 "bison_parser.y" +#line 587 "bison_parser.y" { (yyval.update_vec) = new std::vector(); (yyval.update_vec)->push_back((yyvsp[0].update_t)); } -#line 3276 "bison_parser.cpp" +#line 3275 "bison_parser.cpp" break; case 66: -#line 590 "bison_parser.y" +#line 588 "bison_parser.y" { (yyvsp[-2].update_vec)->push_back((yyvsp[0].update_t)); (yyval.update_vec) = (yyvsp[-2].update_vec); } -#line 3282 "bison_parser.cpp" +#line 3281 "bison_parser.cpp" break; case 67: -#line 594 "bison_parser.y" +#line 592 "bison_parser.y" { (yyval.update_t) = new UpdateClause(); (yyval.update_t)->column = (yyvsp[-2].sval); (yyval.update_t)->value = (yyvsp[0].expr); } -#line 3292 "bison_parser.cpp" +#line 3291 "bison_parser.cpp" break; case 68: -#line 606 "bison_parser.y" +#line 604 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[0].select_stmt); (yyval.select_stmt)->withDescriptions = (yyvsp[-1].with_description_vec); } -#line 3301 "bison_parser.cpp" +#line 3300 "bison_parser.cpp" break; case 69: -#line 610 "bison_parser.y" +#line 608 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[0].select_stmt); (yyval.select_stmt)->withDescriptions = (yyvsp[-1].with_description_vec); } -#line 3310 "bison_parser.cpp" +#line 3309 "bison_parser.cpp" break; case 70: -#line 614 "bison_parser.y" +#line 612 "bison_parser.y" { - // TODO: allow multiple unions (through linked list) - // TODO: capture type of set_operator - // TODO: might overwrite order and limit of first select here (yyval.select_stmt) = (yyvsp[-4].select_stmt); (yyval.select_stmt)->set_operator = (yyvsp[-3].set_operator_t); (yyval.select_stmt)->withDescriptions = (yyvsp[-5].with_description_vec); @@ -3326,33 +3322,39 @@ YYLTYPE yylloc = yyloc_default; (yyval.select_stmt)->limit = (yyvsp[0].limit); } } -#line 3330 "bison_parser.cpp" +#line 3326 "bison_parser.cpp" + break; + + case 73: +#line 631 "bison_parser.y" + { (yyval.select_stmt) = (yyvsp[0].select_stmt); } +#line 3332 "bison_parser.cpp" break; case 74: -#line 637 "bison_parser.y" +#line 632 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-2].select_stmt); (yyval.select_stmt)->set_operator = (yyvsp[-1].set_operator_t); (yyval.select_stmt)-> unionSelect = (yyvsp[0].select_stmt); } -#line 3340 "bison_parser.cpp" +#line 3342 "bison_parser.cpp" break; case 75: -#line 645 "bison_parser.y" +#line 640 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-1].select_stmt); } -#line 3346 "bison_parser.cpp" +#line 3348 "bison_parser.cpp" break; case 76: -#line 646 "bison_parser.y" +#line 641 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-1].select_stmt); } -#line 3352 "bison_parser.cpp" +#line 3354 "bison_parser.cpp" break; case 77: -#line 650 "bison_parser.y" +#line 645 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-2].select_stmt); (yyval.select_stmt)->order = (yyvsp[-1].order_vec); @@ -3363,15 +3365,12 @@ YYLTYPE yylloc = yyloc_default; (yyval.select_stmt)->limit = (yyvsp[0].limit); } } -#line 3367 "bison_parser.cpp" +#line 3369 "bison_parser.cpp" break; case 78: -#line 660 "bison_parser.y" +#line 655 "bison_parser.y" { - // TODO: allow multiple unions (through linked list) - // TODO: capture type of set_operator - // TODO: might overwrite order and limit of first select here (yyval.select_stmt) = (yyvsp[-4].select_stmt); (yyval.select_stmt)->set_operator = (yyvsp[-3].set_operator_t); (yyval.select_stmt)->unionSelect = (yyvsp[-2].select_stmt); @@ -3382,64 +3381,63 @@ YYLTYPE yylloc = yyloc_default; (yyval.select_stmt)->limit = (yyvsp[0].limit); } } -#line 3386 "bison_parser.cpp" +#line 3385 "bison_parser.cpp" break; case 79: -#line 677 "bison_parser.y" +#line 669 "bison_parser.y" { - (yyval.set_operator_t) = new SetOperator(); - (yyval.set_operator_t)->set_type = (yyvsp[-1].set_type_t); + (yyval.set_operator_t) = (yyvsp[-1].set_operator_t); (yyval.set_operator_t)->is_all = (yyvsp[0].bval); } -#line 3396 "bison_parser.cpp" +#line 3394 "bison_parser.cpp" break; case 80: -#line 685 "bison_parser.y" +#line 676 "bison_parser.y" { - (yyval.set_type_t) = new SetType(); - (yyval.set_type_t)->internal_type = UnionType::Union; + (yyval.set_operator_t) = new SetOperator(); + (yyval.set_operator_t)->set_type = UnionType::Union; } -#line 3405 "bison_parser.cpp" +#line 3403 "bison_parser.cpp" break; case 81: -#line 689 "bison_parser.y" +#line 680 "bison_parser.y" { - (yyval.set_type_t) = new SetType(); - (yyval.set_type_t)->internal_type = UnionType::Intersect; + (yyval.set_operator_t) = new SetOperator(); + (yyval.set_operator_t)->set_type = UnionType::Intersect; } -#line 3414 "bison_parser.cpp" +#line 3412 "bison_parser.cpp" break; case 82: -#line 693 "bison_parser.y" +#line 684 "bison_parser.y" { - (yyval.set_type_t) = new SetType(); - (yyval.set_type_t)->internal_type = UnionType::Except; + (yyval.set_operator_t) = new SetOperator(); + (yyval.set_operator_t)->set_type = UnionType::Except; } -#line 3423 "bison_parser.cpp" +#line 3421 "bison_parser.cpp" break; case 83: -#line 700 "bison_parser.y" +#line 691 "bison_parser.y" { (yyval.bval) = true; } -#line 3431 "bison_parser.cpp" +#line 3429 "bison_parser.cpp" break; case 84: -#line 703 "bison_parser.y" +#line 694 "bison_parser.y" { (yyval.bval) = false; } -#line 3439 "bison_parser.cpp" +#line 3437 "bison_parser.cpp" break; case 85: -#line 709 "bison_parser.y" +#line 700 "bison_parser.y" { (yyval.select_stmt) = new SelectStatement(); (yyval.select_stmt)->limit = (yyvsp[-5].limit); @@ -3449,225 +3447,225 @@ YYLTYPE yylloc = yyloc_default; (yyval.select_stmt)->whereClause = (yyvsp[-1].expr); (yyval.select_stmt)->groupBy = (yyvsp[0].group_t); } -#line 3453 "bison_parser.cpp" +#line 3451 "bison_parser.cpp" break; case 86: -#line 721 "bison_parser.y" +#line 712 "bison_parser.y" { (yyval.bval) = true; } -#line 3459 "bison_parser.cpp" +#line 3457 "bison_parser.cpp" break; case 87: -#line 722 "bison_parser.y" +#line 713 "bison_parser.y" { (yyval.bval) = false; } -#line 3465 "bison_parser.cpp" +#line 3463 "bison_parser.cpp" break; case 89: -#line 730 "bison_parser.y" +#line 721 "bison_parser.y" { (yyval.table) = (yyvsp[0].table); } -#line 3471 "bison_parser.cpp" +#line 3469 "bison_parser.cpp" break; case 90: -#line 731 "bison_parser.y" +#line 722 "bison_parser.y" { (yyval.table) = nullptr; } -#line 3477 "bison_parser.cpp" +#line 3475 "bison_parser.cpp" break; case 91: -#line 734 "bison_parser.y" +#line 725 "bison_parser.y" { (yyval.table) = (yyvsp[0].table); } -#line 3483 "bison_parser.cpp" +#line 3481 "bison_parser.cpp" break; case 92: -#line 739 "bison_parser.y" +#line 730 "bison_parser.y" { (yyval.expr) = (yyvsp[0].expr); } -#line 3489 "bison_parser.cpp" +#line 3487 "bison_parser.cpp" break; case 93: -#line 740 "bison_parser.y" +#line 731 "bison_parser.y" { (yyval.expr) = nullptr; } -#line 3495 "bison_parser.cpp" +#line 3493 "bison_parser.cpp" break; case 94: -#line 744 "bison_parser.y" +#line 735 "bison_parser.y" { (yyval.group_t) = new GroupByDescription(); (yyval.group_t)->columns = (yyvsp[-1].expr_vec); (yyval.group_t)->having = (yyvsp[0].expr); } -#line 3505 "bison_parser.cpp" +#line 3503 "bison_parser.cpp" break; case 95: -#line 749 "bison_parser.y" +#line 740 "bison_parser.y" { (yyval.group_t) = nullptr; } -#line 3511 "bison_parser.cpp" +#line 3509 "bison_parser.cpp" break; case 96: -#line 753 "bison_parser.y" +#line 744 "bison_parser.y" { (yyval.expr) = (yyvsp[0].expr); } -#line 3517 "bison_parser.cpp" +#line 3515 "bison_parser.cpp" break; case 97: -#line 754 "bison_parser.y" +#line 745 "bison_parser.y" { (yyval.expr) = nullptr; } -#line 3523 "bison_parser.cpp" +#line 3521 "bison_parser.cpp" break; case 98: -#line 757 "bison_parser.y" +#line 748 "bison_parser.y" { (yyval.order_vec) = (yyvsp[0].order_vec); } -#line 3529 "bison_parser.cpp" +#line 3527 "bison_parser.cpp" break; case 99: -#line 758 "bison_parser.y" +#line 749 "bison_parser.y" { (yyval.order_vec) = nullptr; } -#line 3535 "bison_parser.cpp" +#line 3533 "bison_parser.cpp" break; case 100: -#line 762 "bison_parser.y" +#line 753 "bison_parser.y" { (yyval.order_vec) = (yyvsp[0].order_vec); } -#line 3541 "bison_parser.cpp" +#line 3539 "bison_parser.cpp" break; case 101: -#line 765 "bison_parser.y" +#line 756 "bison_parser.y" { (yyval.order_vec) = new std::vector(); (yyval.order_vec)->push_back((yyvsp[0].order)); } -#line 3547 "bison_parser.cpp" +#line 3545 "bison_parser.cpp" break; case 102: -#line 766 "bison_parser.y" +#line 757 "bison_parser.y" { (yyvsp[-2].order_vec)->push_back((yyvsp[0].order)); (yyval.order_vec) = (yyvsp[-2].order_vec); } -#line 3553 "bison_parser.cpp" +#line 3551 "bison_parser.cpp" break; case 103: -#line 770 "bison_parser.y" +#line 761 "bison_parser.y" { (yyval.order) = new OrderDescription((yyvsp[0].order_type), (yyvsp[-1].expr)); } -#line 3559 "bison_parser.cpp" +#line 3557 "bison_parser.cpp" break; case 104: -#line 774 "bison_parser.y" +#line 765 "bison_parser.y" { (yyval.order_type) = kOrderAsc; } -#line 3565 "bison_parser.cpp" +#line 3563 "bison_parser.cpp" break; case 105: -#line 775 "bison_parser.y" +#line 766 "bison_parser.y" { (yyval.order_type) = kOrderDesc; } -#line 3571 "bison_parser.cpp" +#line 3569 "bison_parser.cpp" break; case 106: -#line 776 "bison_parser.y" +#line 767 "bison_parser.y" { (yyval.order_type) = kOrderAsc; } -#line 3577 "bison_parser.cpp" +#line 3575 "bison_parser.cpp" break; case 107: -#line 782 "bison_parser.y" +#line 773 "bison_parser.y" { (yyval.limit) = new LimitDescription((yyvsp[0].expr), nullptr); } -#line 3583 "bison_parser.cpp" +#line 3581 "bison_parser.cpp" break; case 108: -#line 783 "bison_parser.y" +#line 774 "bison_parser.y" { (yyval.limit) = nullptr; } -#line 3589 "bison_parser.cpp" +#line 3587 "bison_parser.cpp" break; case 109: -#line 787 "bison_parser.y" +#line 778 "bison_parser.y" { (yyval.limit) = (yyvsp[0].limit); } -#line 3595 "bison_parser.cpp" +#line 3593 "bison_parser.cpp" break; case 110: -#line 788 "bison_parser.y" +#line 779 "bison_parser.y" { (yyval.limit) = nullptr; } -#line 3601 "bison_parser.cpp" +#line 3599 "bison_parser.cpp" break; case 111: -#line 792 "bison_parser.y" +#line 783 "bison_parser.y" { (yyval.limit) = new LimitDescription((yyvsp[0].expr), nullptr); } -#line 3607 "bison_parser.cpp" +#line 3605 "bison_parser.cpp" break; case 112: -#line 793 "bison_parser.y" +#line 784 "bison_parser.y" { (yyval.limit) = new LimitDescription(nullptr, (yyvsp[0].expr)); } -#line 3613 "bison_parser.cpp" +#line 3611 "bison_parser.cpp" break; case 113: -#line 794 "bison_parser.y" +#line 785 "bison_parser.y" { (yyval.limit) = new LimitDescription((yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 3619 "bison_parser.cpp" +#line 3617 "bison_parser.cpp" break; case 114: -#line 795 "bison_parser.y" +#line 786 "bison_parser.y" { (yyval.limit) = new LimitDescription(nullptr, nullptr); } -#line 3625 "bison_parser.cpp" +#line 3623 "bison_parser.cpp" break; case 115: -#line 796 "bison_parser.y" +#line 787 "bison_parser.y" { (yyval.limit) = new LimitDescription(nullptr, (yyvsp[0].expr)); } -#line 3631 "bison_parser.cpp" +#line 3629 "bison_parser.cpp" break; case 116: -#line 802 "bison_parser.y" +#line 793 "bison_parser.y" { (yyval.expr_vec) = new std::vector(); (yyval.expr_vec)->push_back((yyvsp[0].expr)); } -#line 3637 "bison_parser.cpp" +#line 3635 "bison_parser.cpp" break; case 117: -#line 803 "bison_parser.y" +#line 794 "bison_parser.y" { (yyvsp[-2].expr_vec)->push_back((yyvsp[0].expr)); (yyval.expr_vec) = (yyvsp[-2].expr_vec); } -#line 3643 "bison_parser.cpp" +#line 3641 "bison_parser.cpp" break; case 118: -#line 807 "bison_parser.y" +#line 798 "bison_parser.y" { (yyval.expr_vec) = (yyvsp[0].expr_vec); } -#line 3649 "bison_parser.cpp" +#line 3647 "bison_parser.cpp" break; case 119: -#line 808 "bison_parser.y" +#line 799 "bison_parser.y" { (yyval.expr_vec) = nullptr; } -#line 3655 "bison_parser.cpp" +#line 3653 "bison_parser.cpp" break; case 120: -#line 812 "bison_parser.y" +#line 803 "bison_parser.y" { (yyval.expr_vec) = new std::vector(); (yyval.expr_vec)->push_back((yyvsp[0].expr)); } -#line 3661 "bison_parser.cpp" +#line 3659 "bison_parser.cpp" break; case 121: -#line 813 "bison_parser.y" +#line 804 "bison_parser.y" { (yyvsp[-2].expr_vec)->push_back((yyvsp[0].expr)); (yyval.expr_vec) = (yyvsp[-2].expr_vec); } -#line 3667 "bison_parser.cpp" +#line 3665 "bison_parser.cpp" break; case 122: -#line 817 "bison_parser.y" +#line 808 "bison_parser.y" { (yyval.expr) = (yyvsp[-1].expr); if ((yyvsp[0].alias_t)) { @@ -3675,415 +3673,415 @@ YYLTYPE yylloc = yyloc_default; delete (yyvsp[0].alias_t); } } -#line 3679 "bison_parser.cpp" +#line 3677 "bison_parser.cpp" break; case 128: -#line 835 "bison_parser.y" +#line 826 "bison_parser.y" { (yyval.expr) = (yyvsp[-1].expr); } -#line 3685 "bison_parser.cpp" +#line 3683 "bison_parser.cpp" break; case 137: -#line 844 "bison_parser.y" +#line 835 "bison_parser.y" { (yyval.expr) = Expr::makeSelect((yyvsp[-1].select_stmt)); } -#line 3691 "bison_parser.cpp" +#line 3689 "bison_parser.cpp" break; case 140: -#line 853 "bison_parser.y" +#line 844 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpUnaryMinus, (yyvsp[0].expr)); } -#line 3697 "bison_parser.cpp" +#line 3695 "bison_parser.cpp" break; case 141: -#line 854 "bison_parser.y" +#line 845 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, (yyvsp[0].expr)); } -#line 3703 "bison_parser.cpp" +#line 3701 "bison_parser.cpp" break; case 142: -#line 855 "bison_parser.y" +#line 846 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpIsNull, (yyvsp[-1].expr)); } -#line 3709 "bison_parser.cpp" +#line 3707 "bison_parser.cpp" break; case 143: -#line 856 "bison_parser.y" +#line 847 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpIsNull, (yyvsp[-2].expr)); } -#line 3715 "bison_parser.cpp" +#line 3713 "bison_parser.cpp" break; case 144: -#line 857 "bison_parser.y" +#line 848 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeOpUnary(kOpIsNull, (yyvsp[-3].expr))); } -#line 3721 "bison_parser.cpp" +#line 3719 "bison_parser.cpp" break; case 146: -#line 862 "bison_parser.y" +#line 853 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpMinus, (yyvsp[0].expr)); } -#line 3727 "bison_parser.cpp" +#line 3725 "bison_parser.cpp" break; case 147: -#line 863 "bison_parser.y" +#line 854 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpPlus, (yyvsp[0].expr)); } -#line 3733 "bison_parser.cpp" +#line 3731 "bison_parser.cpp" break; case 148: -#line 864 "bison_parser.y" +#line 855 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpSlash, (yyvsp[0].expr)); } -#line 3739 "bison_parser.cpp" +#line 3737 "bison_parser.cpp" break; case 149: -#line 865 "bison_parser.y" +#line 856 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpAsterisk, (yyvsp[0].expr)); } -#line 3745 "bison_parser.cpp" +#line 3743 "bison_parser.cpp" break; case 150: -#line 866 "bison_parser.y" +#line 857 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpPercentage, (yyvsp[0].expr)); } -#line 3751 "bison_parser.cpp" +#line 3749 "bison_parser.cpp" break; case 151: -#line 867 "bison_parser.y" +#line 858 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpCaret, (yyvsp[0].expr)); } -#line 3757 "bison_parser.cpp" +#line 3755 "bison_parser.cpp" break; case 152: -#line 868 "bison_parser.y" +#line 859 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpLike, (yyvsp[0].expr)); } -#line 3763 "bison_parser.cpp" +#line 3761 "bison_parser.cpp" break; case 153: -#line 869 "bison_parser.y" +#line 860 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-3].expr), kOpNotLike, (yyvsp[0].expr)); } -#line 3769 "bison_parser.cpp" +#line 3767 "bison_parser.cpp" break; case 154: -#line 870 "bison_parser.y" +#line 861 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpILike, (yyvsp[0].expr)); } -#line 3775 "bison_parser.cpp" +#line 3773 "bison_parser.cpp" break; case 155: -#line 871 "bison_parser.y" +#line 862 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpConcat, (yyvsp[0].expr)); } -#line 3781 "bison_parser.cpp" +#line 3779 "bison_parser.cpp" break; case 156: -#line 875 "bison_parser.y" +#line 866 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpAnd, (yyvsp[0].expr)); } -#line 3787 "bison_parser.cpp" +#line 3785 "bison_parser.cpp" break; case 157: -#line 876 "bison_parser.y" +#line 867 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpOr, (yyvsp[0].expr)); } -#line 3793 "bison_parser.cpp" +#line 3791 "bison_parser.cpp" break; case 158: -#line 880 "bison_parser.y" +#line 871 "bison_parser.y" { (yyval.expr) = Expr::makeInOperator((yyvsp[-4].expr), (yyvsp[-1].expr_vec)); } -#line 3799 "bison_parser.cpp" +#line 3797 "bison_parser.cpp" break; case 159: -#line 881 "bison_parser.y" +#line 872 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeInOperator((yyvsp[-5].expr), (yyvsp[-1].expr_vec))); } -#line 3805 "bison_parser.cpp" +#line 3803 "bison_parser.cpp" break; case 160: -#line 882 "bison_parser.y" +#line 873 "bison_parser.y" { (yyval.expr) = Expr::makeInOperator((yyvsp[-4].expr), (yyvsp[-1].select_stmt)); } -#line 3811 "bison_parser.cpp" +#line 3809 "bison_parser.cpp" break; case 161: -#line 883 "bison_parser.y" +#line 874 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeInOperator((yyvsp[-5].expr), (yyvsp[-1].select_stmt))); } -#line 3817 "bison_parser.cpp" +#line 3815 "bison_parser.cpp" break; case 162: -#line 889 "bison_parser.y" +#line 880 "bison_parser.y" { (yyval.expr) = Expr::makeCase((yyvsp[-2].expr), (yyvsp[-1].expr), nullptr); } -#line 3823 "bison_parser.cpp" +#line 3821 "bison_parser.cpp" break; case 163: -#line 890 "bison_parser.y" +#line 881 "bison_parser.y" { (yyval.expr) = Expr::makeCase((yyvsp[-4].expr), (yyvsp[-3].expr), (yyvsp[-1].expr)); } -#line 3829 "bison_parser.cpp" +#line 3827 "bison_parser.cpp" break; case 164: -#line 891 "bison_parser.y" +#line 882 "bison_parser.y" { (yyval.expr) = Expr::makeCase(nullptr, (yyvsp[-1].expr), nullptr); } -#line 3835 "bison_parser.cpp" +#line 3833 "bison_parser.cpp" break; case 165: -#line 892 "bison_parser.y" +#line 883 "bison_parser.y" { (yyval.expr) = Expr::makeCase(nullptr, (yyvsp[-3].expr), (yyvsp[-1].expr)); } -#line 3841 "bison_parser.cpp" +#line 3839 "bison_parser.cpp" break; case 166: -#line 896 "bison_parser.y" +#line 887 "bison_parser.y" { (yyval.expr) = Expr::makeCaseList(Expr::makeCaseListElement((yyvsp[-2].expr), (yyvsp[0].expr))); } -#line 3847 "bison_parser.cpp" +#line 3845 "bison_parser.cpp" break; case 167: -#line 897 "bison_parser.y" +#line 888 "bison_parser.y" { (yyval.expr) = Expr::caseListAppend((yyvsp[-4].expr), Expr::makeCaseListElement((yyvsp[-2].expr), (yyvsp[0].expr))); } -#line 3853 "bison_parser.cpp" +#line 3851 "bison_parser.cpp" break; case 168: -#line 901 "bison_parser.y" +#line 892 "bison_parser.y" { (yyval.expr) = Expr::makeExists((yyvsp[-1].select_stmt)); } -#line 3859 "bison_parser.cpp" +#line 3857 "bison_parser.cpp" break; case 169: -#line 902 "bison_parser.y" +#line 893 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeExists((yyvsp[-1].select_stmt))); } -#line 3865 "bison_parser.cpp" +#line 3863 "bison_parser.cpp" break; case 170: -#line 906 "bison_parser.y" +#line 897 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpEquals, (yyvsp[0].expr)); } -#line 3871 "bison_parser.cpp" +#line 3869 "bison_parser.cpp" break; case 171: -#line 907 "bison_parser.y" +#line 898 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpEquals, (yyvsp[0].expr)); } -#line 3877 "bison_parser.cpp" +#line 3875 "bison_parser.cpp" break; case 172: -#line 908 "bison_parser.y" +#line 899 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpNotEquals, (yyvsp[0].expr)); } -#line 3883 "bison_parser.cpp" +#line 3881 "bison_parser.cpp" break; case 173: -#line 909 "bison_parser.y" +#line 900 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpLess, (yyvsp[0].expr)); } -#line 3889 "bison_parser.cpp" +#line 3887 "bison_parser.cpp" break; case 174: -#line 910 "bison_parser.y" +#line 901 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpGreater, (yyvsp[0].expr)); } -#line 3895 "bison_parser.cpp" +#line 3893 "bison_parser.cpp" break; case 175: -#line 911 "bison_parser.y" +#line 902 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpLessEq, (yyvsp[0].expr)); } -#line 3901 "bison_parser.cpp" +#line 3899 "bison_parser.cpp" break; case 176: -#line 912 "bison_parser.y" +#line 903 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpGreaterEq, (yyvsp[0].expr)); } -#line 3907 "bison_parser.cpp" +#line 3905 "bison_parser.cpp" break; case 177: -#line 916 "bison_parser.y" +#line 907 "bison_parser.y" { (yyval.expr) = Expr::makeFunctionRef((yyvsp[-2].sval), new std::vector(), false); } -#line 3913 "bison_parser.cpp" +#line 3911 "bison_parser.cpp" break; case 178: -#line 917 "bison_parser.y" +#line 908 "bison_parser.y" { (yyval.expr) = Expr::makeFunctionRef((yyvsp[-4].sval), (yyvsp[-1].expr_vec), (yyvsp[-2].bval)); } -#line 3919 "bison_parser.cpp" +#line 3917 "bison_parser.cpp" break; case 179: -#line 921 "bison_parser.y" +#line 912 "bison_parser.y" { (yyval.expr) = Expr::makeExtract((yyvsp[-3].datetime_field), (yyvsp[-1].expr)); } -#line 3925 "bison_parser.cpp" +#line 3923 "bison_parser.cpp" break; case 180: -#line 925 "bison_parser.y" +#line 916 "bison_parser.y" { (yyval.datetime_field) = kDatetimeSecond; } -#line 3931 "bison_parser.cpp" +#line 3929 "bison_parser.cpp" break; case 181: -#line 926 "bison_parser.y" +#line 917 "bison_parser.y" { (yyval.datetime_field) = kDatetimeMinute; } -#line 3937 "bison_parser.cpp" +#line 3935 "bison_parser.cpp" break; case 182: -#line 927 "bison_parser.y" +#line 918 "bison_parser.y" { (yyval.datetime_field) = kDatetimeHour; } -#line 3943 "bison_parser.cpp" +#line 3941 "bison_parser.cpp" break; case 183: -#line 928 "bison_parser.y" +#line 919 "bison_parser.y" { (yyval.datetime_field) = kDatetimeDay; } -#line 3949 "bison_parser.cpp" +#line 3947 "bison_parser.cpp" break; case 184: -#line 929 "bison_parser.y" +#line 920 "bison_parser.y" { (yyval.datetime_field) = kDatetimeMonth; } -#line 3955 "bison_parser.cpp" +#line 3953 "bison_parser.cpp" break; case 185: -#line 930 "bison_parser.y" +#line 921 "bison_parser.y" { (yyval.datetime_field) = kDatetimeYear; } -#line 3961 "bison_parser.cpp" +#line 3959 "bison_parser.cpp" break; case 186: -#line 933 "bison_parser.y" +#line 924 "bison_parser.y" { (yyval.expr) = Expr::makeArray((yyvsp[-1].expr_vec)); } -#line 3967 "bison_parser.cpp" +#line 3965 "bison_parser.cpp" break; case 187: -#line 937 "bison_parser.y" +#line 928 "bison_parser.y" { (yyval.expr) = Expr::makeArrayIndex((yyvsp[-3].expr), (yyvsp[-1].expr)->ival); } -#line 3973 "bison_parser.cpp" +#line 3971 "bison_parser.cpp" break; case 188: -#line 941 "bison_parser.y" +#line 932 "bison_parser.y" { (yyval.expr) = Expr::makeBetween((yyvsp[-4].expr), (yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 3979 "bison_parser.cpp" +#line 3977 "bison_parser.cpp" break; case 189: -#line 945 "bison_parser.y" +#line 936 "bison_parser.y" { (yyval.expr) = Expr::makeColumnRef((yyvsp[0].sval)); } -#line 3985 "bison_parser.cpp" +#line 3983 "bison_parser.cpp" break; case 190: -#line 946 "bison_parser.y" +#line 937 "bison_parser.y" { (yyval.expr) = Expr::makeColumnRef((yyvsp[-2].sval), (yyvsp[0].sval)); } -#line 3991 "bison_parser.cpp" +#line 3989 "bison_parser.cpp" break; case 191: -#line 947 "bison_parser.y" +#line 938 "bison_parser.y" { (yyval.expr) = Expr::makeStar(); } -#line 3997 "bison_parser.cpp" +#line 3995 "bison_parser.cpp" break; case 192: -#line 948 "bison_parser.y" +#line 939 "bison_parser.y" { (yyval.expr) = Expr::makeStar((yyvsp[-2].sval)); } -#line 4003 "bison_parser.cpp" +#line 4001 "bison_parser.cpp" break; case 198: -#line 960 "bison_parser.y" +#line 951 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral((yyvsp[0].sval)); } -#line 4009 "bison_parser.cpp" +#line 4007 "bison_parser.cpp" break; case 199: -#line 964 "bison_parser.y" +#line 955 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral(true); } -#line 4015 "bison_parser.cpp" +#line 4013 "bison_parser.cpp" break; case 200: -#line 965 "bison_parser.y" +#line 956 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral(false); } -#line 4021 "bison_parser.cpp" +#line 4019 "bison_parser.cpp" break; case 201: -#line 969 "bison_parser.y" +#line 960 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral((yyvsp[0].fval)); } -#line 4027 "bison_parser.cpp" +#line 4025 "bison_parser.cpp" break; case 203: -#line 974 "bison_parser.y" +#line 965 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral((yyvsp[0].ival)); } -#line 4033 "bison_parser.cpp" +#line 4031 "bison_parser.cpp" break; case 204: -#line 978 "bison_parser.y" +#line 969 "bison_parser.y" { (yyval.expr) = Expr::makeNullLiteral(); } -#line 4039 "bison_parser.cpp" +#line 4037 "bison_parser.cpp" break; case 205: -#line 982 "bison_parser.y" +#line 973 "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 4049 "bison_parser.cpp" +#line 4047 "bison_parser.cpp" break; case 207: -#line 995 "bison_parser.y" +#line 986 "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 4060 "bison_parser.cpp" +#line 4058 "bison_parser.cpp" break; case 211: -#line 1011 "bison_parser.y" +#line 1002 "bison_parser.y" { auto tbl = new TableRef(kTableSelect); tbl->select = (yyvsp[-2].select_stmt); tbl->alias = (yyvsp[0].alias_t); (yyval.table) = tbl; } -#line 4071 "bison_parser.cpp" +#line 4069 "bison_parser.cpp" break; case 212: -#line 1020 "bison_parser.y" +#line 1011 "bison_parser.y" { (yyval.table_vec) = new std::vector(); (yyval.table_vec)->push_back((yyvsp[0].table)); } -#line 4077 "bison_parser.cpp" +#line 4075 "bison_parser.cpp" break; case 213: -#line 1021 "bison_parser.y" +#line 1012 "bison_parser.y" { (yyvsp[-2].table_vec)->push_back((yyvsp[0].table)); (yyval.table_vec) = (yyvsp[-2].table_vec); } -#line 4083 "bison_parser.cpp" +#line 4081 "bison_parser.cpp" break; case 214: -#line 1026 "bison_parser.y" +#line 1017 "bison_parser.y" { auto tbl = new TableRef(kTableName); tbl->schema = (yyvsp[-1].table_name).schema; @@ -4091,103 +4089,103 @@ YYLTYPE yylloc = yyloc_default; tbl->alias = (yyvsp[0].alias_t); (yyval.table) = tbl; } -#line 4095 "bison_parser.cpp" +#line 4093 "bison_parser.cpp" break; case 215: -#line 1037 "bison_parser.y" +#line 1028 "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 4105 "bison_parser.cpp" +#line 4103 "bison_parser.cpp" break; case 216: -#line 1046 "bison_parser.y" +#line 1037 "bison_parser.y" { (yyval.table_name).schema = nullptr; (yyval.table_name).name = (yyvsp[0].sval);} -#line 4111 "bison_parser.cpp" +#line 4109 "bison_parser.cpp" break; case 217: -#line 1047 "bison_parser.y" +#line 1038 "bison_parser.y" { (yyval.table_name).schema = (yyvsp[-2].sval); (yyval.table_name).name = (yyvsp[0].sval); } -#line 4117 "bison_parser.cpp" +#line 4115 "bison_parser.cpp" break; case 219: -#line 1053 "bison_parser.y" +#line 1044 "bison_parser.y" { (yyval.alias_t) = new Alias((yyvsp[-3].sval), (yyvsp[-1].str_vec)); } -#line 4123 "bison_parser.cpp" +#line 4121 "bison_parser.cpp" break; case 221: -#line 1059 "bison_parser.y" +#line 1050 "bison_parser.y" { (yyval.alias_t) = nullptr; } -#line 4129 "bison_parser.cpp" +#line 4127 "bison_parser.cpp" break; case 222: -#line 1063 "bison_parser.y" +#line 1054 "bison_parser.y" { (yyval.alias_t) = new Alias((yyvsp[0].sval)); } -#line 4135 "bison_parser.cpp" +#line 4133 "bison_parser.cpp" break; case 223: -#line 1064 "bison_parser.y" +#line 1055 "bison_parser.y" { (yyval.alias_t) = new Alias((yyvsp[0].sval)); } -#line 4141 "bison_parser.cpp" +#line 4139 "bison_parser.cpp" break; case 225: -#line 1070 "bison_parser.y" +#line 1061 "bison_parser.y" { (yyval.alias_t) = nullptr; } -#line 4147 "bison_parser.cpp" +#line 4145 "bison_parser.cpp" break; case 227: -#line 1079 "bison_parser.y" +#line 1070 "bison_parser.y" { (yyval.with_description_vec) = nullptr; } -#line 4153 "bison_parser.cpp" +#line 4151 "bison_parser.cpp" break; case 228: -#line 1083 "bison_parser.y" +#line 1074 "bison_parser.y" { (yyval.with_description_vec) = (yyvsp[0].with_description_vec); } -#line 4159 "bison_parser.cpp" +#line 4157 "bison_parser.cpp" break; case 229: -#line 1087 "bison_parser.y" +#line 1078 "bison_parser.y" { (yyval.with_description_vec) = new std::vector(); (yyval.with_description_vec)->push_back((yyvsp[0].with_description_t)); } -#line 4168 "bison_parser.cpp" +#line 4166 "bison_parser.cpp" break; case 230: -#line 1091 "bison_parser.y" +#line 1082 "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 4177 "bison_parser.cpp" +#line 4175 "bison_parser.cpp" break; case 231: -#line 1098 "bison_parser.y" +#line 1089 "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 4187 "bison_parser.cpp" +#line 4185 "bison_parser.cpp" break; case 232: -#line 1112 "bison_parser.y" +#line 1103 "bison_parser.y" { (yyval.table) = new TableRef(kTableJoin); (yyval.table)->join = new JoinDefinition(); @@ -4195,11 +4193,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.table)->join->left = (yyvsp[-3].table); (yyval.table)->join->right = (yyvsp[0].table); } -#line 4199 "bison_parser.cpp" +#line 4197 "bison_parser.cpp" break; case 233: -#line 1120 "bison_parser.y" +#line 1111 "bison_parser.y" { (yyval.table) = new TableRef(kTableJoin); (yyval.table)->join = new JoinDefinition(); @@ -4208,11 +4206,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.table)->join->right = (yyvsp[-2].table); (yyval.table)->join->condition = (yyvsp[0].expr); } -#line 4212 "bison_parser.cpp" +#line 4210 "bison_parser.cpp" break; case 234: -#line 1130 "bison_parser.y" +#line 1121 "bison_parser.y" { (yyval.table) = new TableRef(kTableJoin); (yyval.table)->join = new JoinDefinition(); @@ -4228,83 +4226,83 @@ YYLTYPE yylloc = yyloc_default; (yyval.table)->join->condition = Expr::makeOpBinary(left_col, kOpEquals, right_col); delete (yyvsp[-1].expr); } -#line 4232 "bison_parser.cpp" +#line 4230 "bison_parser.cpp" break; case 235: -#line 1148 "bison_parser.y" +#line 1139 "bison_parser.y" { (yyval.uval) = kJoinInner; } -#line 4238 "bison_parser.cpp" +#line 4236 "bison_parser.cpp" break; case 236: -#line 1149 "bison_parser.y" +#line 1140 "bison_parser.y" { (yyval.uval) = kJoinLeft; } -#line 4244 "bison_parser.cpp" +#line 4242 "bison_parser.cpp" break; case 237: -#line 1150 "bison_parser.y" +#line 1141 "bison_parser.y" { (yyval.uval) = kJoinLeft; } -#line 4250 "bison_parser.cpp" +#line 4248 "bison_parser.cpp" break; case 238: -#line 1151 "bison_parser.y" +#line 1142 "bison_parser.y" { (yyval.uval) = kJoinRight; } -#line 4256 "bison_parser.cpp" +#line 4254 "bison_parser.cpp" break; case 239: -#line 1152 "bison_parser.y" +#line 1143 "bison_parser.y" { (yyval.uval) = kJoinRight; } -#line 4262 "bison_parser.cpp" +#line 4260 "bison_parser.cpp" break; case 240: -#line 1153 "bison_parser.y" +#line 1144 "bison_parser.y" { (yyval.uval) = kJoinFull; } -#line 4268 "bison_parser.cpp" +#line 4266 "bison_parser.cpp" break; case 241: -#line 1154 "bison_parser.y" +#line 1145 "bison_parser.y" { (yyval.uval) = kJoinFull; } -#line 4274 "bison_parser.cpp" +#line 4272 "bison_parser.cpp" break; case 242: -#line 1155 "bison_parser.y" +#line 1146 "bison_parser.y" { (yyval.uval) = kJoinFull; } -#line 4280 "bison_parser.cpp" +#line 4278 "bison_parser.cpp" break; case 243: -#line 1156 "bison_parser.y" +#line 1147 "bison_parser.y" { (yyval.uval) = kJoinCross; } -#line 4286 "bison_parser.cpp" +#line 4284 "bison_parser.cpp" break; case 244: -#line 1157 "bison_parser.y" +#line 1148 "bison_parser.y" { (yyval.uval) = kJoinInner; } -#line 4292 "bison_parser.cpp" +#line 4290 "bison_parser.cpp" break; case 248: -#line 1177 "bison_parser.y" +#line 1168 "bison_parser.y" { (yyval.str_vec) = new std::vector(); (yyval.str_vec)->push_back((yyvsp[0].sval)); } -#line 4298 "bison_parser.cpp" +#line 4296 "bison_parser.cpp" break; case 249: -#line 1178 "bison_parser.y" +#line 1169 "bison_parser.y" { (yyvsp[-2].str_vec)->push_back((yyvsp[0].sval)); (yyval.str_vec) = (yyvsp[-2].str_vec); } -#line 4304 "bison_parser.cpp" +#line 4302 "bison_parser.cpp" break; -#line 4308 "bison_parser.cpp" +#line 4306 "bison_parser.cpp" default: break; } @@ -4542,7 +4540,7 @@ YYLTYPE yylloc = yyloc_default; #endif return yyresult; } -#line 1181 "bison_parser.y" +#line 1172 "bison_parser.y" /********************************* ** Section 4: Additional C code diff --git a/src/parser/bison_parser.h b/src/parser/bison_parser.h index 8f2b2a35..e757bdbc 100644 --- a/src/parser/bison_parser.h +++ b/src/parser/bison_parser.h @@ -266,7 +266,6 @@ union HSQL_STYPE hsql::GroupByDescription* group_t; hsql::UpdateClause* update_t; hsql::Alias* alias_t; - hsql::SetType* set_type_t; hsql::SetOperator* set_operator_t; std::vector* stmt_vec; @@ -279,7 +278,7 @@ union HSQL_STYPE std::vector* order_vec; std::vector* with_description_vec; -#line 283 "bison_parser.h" +#line 282 "bison_parser.h" }; typedef union HSQL_STYPE HSQL_STYPE; diff --git a/src/parser/bison_parser.y b/src/parser/bison_parser.y index 3c47d7db..93badf4d 100755 --- a/src/parser/bison_parser.y +++ b/src/parser/bison_parser.y @@ -124,7 +124,6 @@ int yyerror(YYLTYPE* llocp, SQLParserResult* result, yyscan_t scanner, const cha hsql::GroupByDescription* group_t; hsql::UpdateClause* update_t; hsql::Alias* alias_t; - hsql::SetType* set_type_t; hsql::SetOperator* set_operator_t; std::vector* stmt_vec; @@ -188,7 +187,7 @@ int yyerror(YYLTYPE* llocp, SQLParserResult* result, yyscan_t scanner, const cha %type statement preparable_statement %type execute_statement %type prepare_statement -%type select_statement select_with_paren select_no_paren select_clause select_statement_in_set_operation select_part_set +%type select_statement select_with_paren select_no_paren select_clause select_statement_in_set_operation select_part_of_set_operation %type import_statement %type create_statement %type insert_statement @@ -217,8 +216,7 @@ int yyerror(YYLTYPE* llocp, SQLParserResult* result, yyscan_t scanner, const cha %type opt_group %type opt_table_alias table_alias opt_alias alias %type with_description -%type set_type -%type set_operator +%type set_operator set_type %type ident_commalist opt_column_list %type expr_list select_list opt_literal_list literal_list hint_list opt_hints @@ -612,9 +610,6 @@ select_statement: $$->withDescriptions = $1; } | opt_with_clause select_with_paren set_operator select_statement_in_set_operation opt_order opt_limit { - // TODO: allow multiple unions (through linked list) - // TODO: capture type of set_operator - // TODO: might overwrite order and limit of first select here $$ = $2; $$->set_operator = $3; $$->withDescriptions = $1; @@ -630,10 +625,10 @@ select_statement: select_statement_in_set_operation: select_with_paren - | select_part_set; + | select_part_of_set_operation; -select_part_set: - select_clause +select_part_of_set_operation: + select_clause { $$ = $1; } | select_clause set_operator select_statement_in_set_operation { $$ = $1; $$->set_operator = $2; @@ -658,9 +653,6 @@ select_no_paren: } } | select_clause set_operator select_statement_in_set_operation opt_order opt_limit { - // TODO: allow multiple unions (through linked list) - // TODO: capture type of set_operator - // TODO: might overwrite order and limit of first select here $$ = $1; $$->set_operator = $2; $$->unionSelect = $3; @@ -675,24 +667,23 @@ select_no_paren: set_operator: set_type opt_all { - $$ = new SetOperator(); - $$->set_type = $1; + $$ = $1; $$->is_all = $2; } ; set_type: UNION { - $$ = new SetType(); - $$->internal_type = UnionType::Union; + $$ = new SetOperator(); + $$->set_type = UnionType::Union; } | INTERSECT { - $$ = new SetType(); - $$->internal_type = UnionType::Intersect; + $$ = new SetOperator(); + $$->set_type = UnionType::Intersect; } | EXCEPT { - $$ = new SetType(); - $$->internal_type = UnionType::Except; + $$ = new SetOperator(); + $$->set_type = UnionType::Except; } ; diff --git a/src/sql/SelectStatement.h b/src/sql/SelectStatement.h index e838920e..a3cb7b8a 100644 --- a/src/sql/SelectStatement.h +++ b/src/sql/SelectStatement.h @@ -17,18 +17,11 @@ namespace hsql { Except }; - struct SetType { - SetType(); - virtual ~SetType(); - - UnionType internal_type; - }; - struct SetOperator { SetOperator(); virtual ~SetOperator(); - SetType* set_type; + UnionType set_type; bool is_all; }; diff --git a/src/sql/statements.cpp b/src/sql/statements.cpp index c3f342b2..a46470cc 100755 --- a/src/sql/statements.cpp +++ b/src/sql/statements.cpp @@ -361,15 +361,8 @@ namespace hsql { delete condition; } - SetType::SetType() {} + SetOperator::SetOperator() {} - SetType::~SetType() {} - - SetOperator::SetOperator() : - set_type(nullptr) {} - - SetOperator::~SetOperator() { - delete set_type; - } + SetOperator::~SetOperator() {} } // namespace hsql diff --git a/src/util/sqlhelper.cpp b/src/util/sqlhelper.cpp index 824bb577..1438d071 100755 --- a/src/util/sqlhelper.cpp +++ b/src/util/sqlhelper.cpp @@ -169,9 +169,9 @@ namespace hsql { } if (stmt->unionSelect != nullptr) { - if (stmt->set_operator->set_type->internal_type == UnionType::Union) { + if (stmt->set_operator->set_type == UnionType::Union) { inprint("Union:", numIndent + 1); - } else if (stmt->set_operator->set_type->internal_type == UnionType::Intersect) { + } else if (stmt->set_operator->set_type == UnionType::Intersect) { inprint("Intersect:", numIndent + 1); } else { inprint("Except:", numIndent + 1); From 365ca8f4daff40055c719dd4aed976998fdef53c Mon Sep 17 00:00:00 2001 From: Tobias Nack Date: Mon, 9 Dec 2019 19:17:53 +0100 Subject: [PATCH 05/27] Make naming of SelectStatement attributes more consistent --- src/parser/bison_parser.cpp | 20 ++++++++++---------- src/parser/bison_parser.y | 20 ++++++++++---------- src/sql/SelectStatement.h | 8 ++++---- src/sql/statements.cpp | 8 ++++---- src/util/sqlhelper.cpp | 8 ++++---- 5 files changed, 32 insertions(+), 32 deletions(-) diff --git a/src/parser/bison_parser.cpp b/src/parser/bison_parser.cpp index 012d5e89..0a0fdde0 100644 --- a/src/parser/bison_parser.cpp +++ b/src/parser/bison_parser.cpp @@ -3312,9 +3312,9 @@ YYLTYPE yylloc = yyloc_default; #line 612 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-4].select_stmt); - (yyval.select_stmt)->set_operator = (yyvsp[-3].set_operator_t); + (yyval.select_stmt)->setOperator = (yyvsp[-3].set_operator_t); (yyval.select_stmt)->withDescriptions = (yyvsp[-5].with_description_vec); - (yyval.select_stmt)->unionSelect = (yyvsp[-2].select_stmt); + (yyval.select_stmt)->nestedSetSelectStatement = (yyvsp[-2].select_stmt); (yyval.select_stmt)->order = (yyvsp[-1].order_vec); // Limit could have been set by TOP. if ((yyvsp[0].limit) != nullptr) { @@ -3335,8 +3335,8 @@ YYLTYPE yylloc = yyloc_default; #line 632 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-2].select_stmt); - (yyval.select_stmt)->set_operator = (yyvsp[-1].set_operator_t); - (yyval.select_stmt)-> unionSelect = (yyvsp[0].select_stmt); + (yyval.select_stmt)->setOperator = (yyvsp[-1].set_operator_t); + (yyval.select_stmt)-> nestedSetSelectStatement = (yyvsp[0].select_stmt); } #line 3342 "bison_parser.cpp" break; @@ -3372,8 +3372,8 @@ YYLTYPE yylloc = yyloc_default; #line 655 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-4].select_stmt); - (yyval.select_stmt)->set_operator = (yyvsp[-3].set_operator_t); - (yyval.select_stmt)->unionSelect = (yyvsp[-2].select_stmt); + (yyval.select_stmt)->setOperator = (yyvsp[-3].set_operator_t); + (yyval.select_stmt)->nestedSetSelectStatement = (yyvsp[-2].select_stmt); (yyval.select_stmt)->order = (yyvsp[-1].order_vec); // Limit could have been set by TOP. if ((yyvsp[0].limit) != nullptr) { @@ -3388,7 +3388,7 @@ YYLTYPE yylloc = yyloc_default; #line 669 "bison_parser.y" { (yyval.set_operator_t) = (yyvsp[-1].set_operator_t); - (yyval.set_operator_t)->is_all = (yyvsp[0].bval); + (yyval.set_operator_t)->isAll = (yyvsp[0].bval); } #line 3394 "bison_parser.cpp" break; @@ -3397,7 +3397,7 @@ YYLTYPE yylloc = yyloc_default; #line 676 "bison_parser.y" { (yyval.set_operator_t) = new SetOperator(); - (yyval.set_operator_t)->set_type = UnionType::Union; + (yyval.set_operator_t)->setType = UnionType::Union; } #line 3403 "bison_parser.cpp" break; @@ -3406,7 +3406,7 @@ YYLTYPE yylloc = yyloc_default; #line 680 "bison_parser.y" { (yyval.set_operator_t) = new SetOperator(); - (yyval.set_operator_t)->set_type = UnionType::Intersect; + (yyval.set_operator_t)->setType = UnionType::Intersect; } #line 3412 "bison_parser.cpp" break; @@ -3415,7 +3415,7 @@ YYLTYPE yylloc = yyloc_default; #line 684 "bison_parser.y" { (yyval.set_operator_t) = new SetOperator(); - (yyval.set_operator_t)->set_type = UnionType::Except; + (yyval.set_operator_t)->setType = UnionType::Except; } #line 3421 "bison_parser.cpp" break; diff --git a/src/parser/bison_parser.y b/src/parser/bison_parser.y index 93badf4d..12b6e574 100755 --- a/src/parser/bison_parser.y +++ b/src/parser/bison_parser.y @@ -611,9 +611,9 @@ select_statement: } | opt_with_clause select_with_paren set_operator select_statement_in_set_operation opt_order opt_limit { $$ = $2; - $$->set_operator = $3; + $$->setOperator = $3; $$->withDescriptions = $1; - $$->unionSelect = $4; + $$->nestedSetSelectStatement = $4; $$->order = $5; // Limit could have been set by TOP. if ($6 != nullptr) { @@ -631,8 +631,8 @@ select_part_of_set_operation: select_clause { $$ = $1; } | select_clause set_operator select_statement_in_set_operation { $$ = $1; - $$->set_operator = $2; - $$-> unionSelect = $3; + $$->setOperator = $2; + $$-> nestedSetSelectStatement = $3; } ; @@ -654,8 +654,8 @@ select_no_paren: } | select_clause set_operator select_statement_in_set_operation opt_order opt_limit { $$ = $1; - $$->set_operator = $2; - $$->unionSelect = $3; + $$->setOperator = $2; + $$->nestedSetSelectStatement = $3; $$->order = $4; // Limit could have been set by TOP. if ($5 != nullptr) { @@ -668,22 +668,22 @@ select_no_paren: set_operator: set_type opt_all { $$ = $1; - $$->is_all = $2; + $$->isAll = $2; } ; set_type: UNION { $$ = new SetOperator(); - $$->set_type = UnionType::Union; + $$->setType = UnionType::Union; } | INTERSECT { $$ = new SetOperator(); - $$->set_type = UnionType::Intersect; + $$->setType = UnionType::Intersect; } | EXCEPT { $$ = new SetOperator(); - $$->set_type = UnionType::Except; + $$->setType = UnionType::Except; } ; diff --git a/src/sql/SelectStatement.h b/src/sql/SelectStatement.h index a3cb7b8a..5545a7a0 100644 --- a/src/sql/SelectStatement.h +++ b/src/sql/SelectStatement.h @@ -21,8 +21,8 @@ namespace hsql { SetOperator(); virtual ~SetOperator(); - UnionType set_type; - bool is_all; + UnionType setType; + bool isAll; }; // Description of the order by clause within a select statement. @@ -70,9 +70,9 @@ namespace hsql { std::vector* selectList; Expr* whereClause; GroupByDescription* groupBy; - SetOperator* set_operator; + SetOperator* setOperator; - SelectStatement* unionSelect; + SelectStatement* nestedSetSelectStatement; std::vector* order; std::vector* withDescriptions; LimitDescription* limit; diff --git a/src/sql/statements.cpp b/src/sql/statements.cpp index a46470cc..2a7b4dbb 100755 --- a/src/sql/statements.cpp +++ b/src/sql/statements.cpp @@ -240,8 +240,8 @@ namespace hsql { selectList(nullptr), whereClause(nullptr), groupBy(nullptr), - set_operator(nullptr), - unionSelect(nullptr), + setOperator(nullptr), + nestedSetSelectStatement(nullptr), order(nullptr), withDescriptions(nullptr), limit(nullptr) {}; @@ -250,9 +250,9 @@ namespace hsql { delete fromTable; delete whereClause; delete groupBy; - delete unionSelect; + delete nestedSetSelectStatement; delete limit; - delete set_operator; + delete setOperator; // Delete each element in the select list. if (selectList != nullptr) { diff --git a/src/util/sqlhelper.cpp b/src/util/sqlhelper.cpp index 1438d071..717e1823 100755 --- a/src/util/sqlhelper.cpp +++ b/src/util/sqlhelper.cpp @@ -168,15 +168,15 @@ namespace hsql { } } - if (stmt->unionSelect != nullptr) { - if (stmt->set_operator->set_type == UnionType::Union) { + if (stmt->nestedSetSelectStatement != nullptr) { + if (stmt->setOperator->setType == UnionType::Union) { inprint("Union:", numIndent + 1); - } else if (stmt->set_operator->set_type == UnionType::Intersect) { + } else if (stmt->setOperator->setType == UnionType::Intersect) { inprint("Intersect:", numIndent + 1); } else { inprint("Except:", numIndent + 1); } - printSelectStatementInfo(stmt->unionSelect, numIndent + 2); + printSelectStatementInfo(stmt->nestedSetSelectStatement, numIndent + 2); } if (stmt->order != nullptr) { From ff69fa2a60fb1039e9b909b858153f84786a9a7b Mon Sep 17 00:00:00 2001 From: Lukas Ehrig Date: Sun, 15 Dec 2019 17:56:30 +0100 Subject: [PATCH 06/27] Add set operator test --- test/sql_tests.cpp | 169 ++++++++++++++++++++++++++------------------- 1 file changed, 99 insertions(+), 70 deletions(-) diff --git a/test/sql_tests.cpp b/test/sql_tests.cpp index f636fb54..6686fc50 100644 --- a/test/sql_tests.cpp +++ b/test/sql_tests.cpp @@ -11,8 +11,8 @@ using namespace hsql; - -TEST(DeleteStatementTest) { +TEST(DeleteStatementTest) +{ SQLParserResult result; SQLParser::parse("DELETE FROM students WHERE grade > 2.0;", &result); @@ -20,7 +20,7 @@ TEST(DeleteStatementTest) { ASSERT_EQ(result.size(), 1); ASSERT(result.getStatement(0)->type() == kStmtDelete); - const DeleteStatement* stmt = (const DeleteStatement*) result.getStatement(0); + const DeleteStatement *stmt = (const DeleteStatement *)result.getStatement(0); ASSERT_STREQ(stmt->tableName, "students"); ASSERT_NOTNULL(stmt->expr); ASSERT(stmt->expr->isType(kExprOperator)); @@ -28,7 +28,8 @@ TEST(DeleteStatementTest) { ASSERT_EQ(stmt->expr->expr2->fval, 2.0); } -TEST(CreateStatementTest) { +TEST(CreateStatementTest) +{ SQLParserResult result; SQLParser::parse("CREATE TABLE students (name VARCHAR(50), student_number INT, city INTEGER NULL, grade DOUBLE NOT NULL, comment TEXT)", &result); @@ -36,7 +37,7 @@ TEST(CreateStatementTest) { ASSERT_EQ(result.size(), 1); ASSERT_EQ(result.getStatement(0)->type(), kStmtCreate); - const CreateStatement* stmt = (const CreateStatement*) result.getStatement(0); + const CreateStatement *stmt = (const CreateStatement *)result.getStatement(0); ASSERT_EQ(stmt->type, kCreateTable); ASSERT_STREQ(stmt->tableName, "students"); ASSERT_NOTNULL(stmt->columns); @@ -58,7 +59,8 @@ TEST(CreateStatementTest) { ASSERT_EQ(stmt->columns->at(3)->nullable, false); } -TEST(CreateAsSelectStatementTest) { +TEST(CreateAsSelectStatementTest) +{ SQLParserResult result; SQLParser::parse("CREATE TABLE students_2 AS SELECT student_number, grade FROM students", &result); @@ -66,7 +68,7 @@ TEST(CreateAsSelectStatementTest) { ASSERT_EQ(result.size(), 1); ASSERT_EQ(result.getStatement(0)->type(), kStmtCreate); - const CreateStatement* stmt = (const CreateStatement*) result.getStatement(0); + const CreateStatement *stmt = (const CreateStatement *)result.getStatement(0); ASSERT_EQ(stmt->type, kCreateTable); ASSERT_STREQ(stmt->tableName, "students_2"); ASSERT_NULL(stmt->columns); @@ -77,7 +79,8 @@ TEST(CreateAsSelectStatementTest) { ASSERT_STREQ(stmt->select->selectList->at(1)->getName(), "grade"); } -TEST(UpdateStatementTest) { +TEST(UpdateStatementTest) +{ SQLParserResult result; SQLParser::parse("UPDATE students SET grade = 5.0, name = 'test' WHERE name = 'Max O''Mustermann';", &result); @@ -85,7 +88,7 @@ TEST(UpdateStatementTest) { ASSERT_EQ(result.size(), 1); ASSERT_EQ(result.getStatement(0)->type(), kStmtUpdate); - const UpdateStatement* stmt = (const UpdateStatement*) result.getStatement(0); + const UpdateStatement *stmt = (const UpdateStatement *)result.getStatement(0); ASSERT_NOTNULL(stmt->table); ASSERT_STREQ(stmt->table->name, "students"); @@ -105,27 +108,27 @@ TEST(UpdateStatementTest) { ASSERT_STREQ(stmt->where->expr2->name, "Max O'Mustermann"); } - -TEST(InsertStatementTest) { +TEST(InsertStatementTest) +{ TEST_PARSE_SINGLE_SQL( - "INSERT INTO students VALUES ('Max Mustermann', 12345, 'Musterhausen', 2.0)", - kStmtInsert, - InsertStatement, - result, - stmt); + "INSERT INTO students VALUES ('Max Mustermann', 12345, 'Musterhausen', 2.0)", + kStmtInsert, + InsertStatement, + result, + stmt); ASSERT_EQ(stmt->values->size(), 4); // TODO } - -TEST(DropTableStatementTest) { +TEST(DropTableStatementTest) +{ TEST_PARSE_SINGLE_SQL( - "DROP TABLE students", - kStmtDrop, - DropStatement, - result, - stmt); + "DROP TABLE students", + kStmtDrop, + DropStatement, + result, + stmt); ASSERT_FALSE(stmt->ifExists); ASSERT_EQ(stmt->type, kDropTable); @@ -133,13 +136,14 @@ TEST(DropTableStatementTest) { ASSERT_STREQ(stmt->name, "students"); } -TEST(DropTableIfExistsStatementTest) { +TEST(DropTableIfExistsStatementTest) +{ TEST_PARSE_SINGLE_SQL( - "DROP TABLE IF EXISTS students", - kStmtDrop, - DropStatement, - result, - stmt); + "DROP TABLE IF EXISTS students", + kStmtDrop, + DropStatement, + result, + stmt); ASSERT_TRUE(stmt->ifExists); ASSERT_EQ(stmt->type, kDropTable); @@ -147,78 +151,85 @@ TEST(DropTableIfExistsStatementTest) { ASSERT_STREQ(stmt->name, "students"); } -TEST(ReleaseStatementTest) { +TEST(ReleaseStatementTest) +{ TEST_PARSE_SINGLE_SQL( - "SELECT * FROM students;", - kStmtSelect, - SelectStatement, - result, - stmt); + "SELECT * FROM students;", + kStmtSelect, + SelectStatement, + result, + stmt); ASSERT_EQ(1, result.size()); ASSERT_NULL(stmt->whereClause); - std::vector statements = result.releaseStatements(); + std::vector statements = result.releaseStatements(); ASSERT_EQ(0, result.size()); - for (SQLStatement* stmt : statements) { + for (SQLStatement *stmt : statements) + { delete stmt; } } -TEST(ShowTableStatementTest) { +TEST(ShowTableStatementTest) +{ TEST_PARSE_SINGLE_SQL( - "SHOW TABLES;", - kStmtShow, - ShowStatement, - result, - stmt); + "SHOW TABLES;", + kStmtShow, + ShowStatement, + result, + stmt); ASSERT_EQ(stmt->type, kShowTables); ASSERT_NULL(stmt->name); } -TEST(ShowColumnsStatementTest) { +TEST(ShowColumnsStatementTest) +{ TEST_PARSE_SINGLE_SQL( - "SHOW COLUMNS students;", - kStmtShow, - ShowStatement, - result, - stmt); + "SHOW COLUMNS students;", + kStmtShow, + ShowStatement, + result, + stmt); ASSERT_EQ(stmt->type, kShowColumns); ASSERT_NOTNULL(stmt->name); ASSERT_STREQ(stmt->name, "students"); } -TEST(DescribeStatementTest) { +TEST(DescribeStatementTest) +{ TEST_PARSE_SINGLE_SQL( - "DESCRIBE students;", - kStmtShow, - ShowStatement, - result, - stmt); + "DESCRIBE students;", + kStmtShow, + ShowStatement, + result, + stmt); ASSERT_EQ(stmt->type, kShowColumns); ASSERT_NOTNULL(stmt->name); ASSERT_STREQ(stmt->name, "students"); } - -SQLParserResult parse_and_move(std::string query) { +SQLParserResult parse_and_move(std::string query) +{ hsql::SQLParserResult result; hsql::SQLParser::parse(query, &result); // Moves on return. return result; } -SQLParserResult move_in_and_back(SQLParserResult res) { +SQLParserResult move_in_and_back(SQLParserResult res) +{ // Moves on return. return res; } -TEST(MoveSQLResultTest) { +TEST(MoveSQLResultTest) +{ SQLParserResult res = parse_and_move("SELECT * FROM test;"); ASSERT(res.isValid()); ASSERT_EQ(1, res.size()); @@ -234,14 +245,14 @@ TEST(MoveSQLResultTest) { ASSERT_EQ(1, new_res.size()); } -TEST(HintTest) { +TEST(HintTest) +{ TEST_PARSE_SINGLE_SQL( - "SELECT * FROM students WITH HINT(NO_CACHE, SAMPLE_RATE(10));", - kStmtSelect, - SelectStatement, - result, - stmt); - + "SELECT * FROM students WITH HINT(NO_CACHE, SAMPLE_RATE(10));", + kStmtSelect, + SelectStatement, + result, + stmt); ASSERT_NOTNULL(stmt->hints); ASSERT_EQ(2, stmt->hints->size()); @@ -251,15 +262,33 @@ TEST(HintTest) { ASSERT_EQ(10, stmt->hints->at(1)->exprList->at(0)->ival); } -TEST(StringLengthTest) { +TEST(StringLengthTest) +{ TEST_PARSE_SQL_QUERY( - "SELECT * FROM bar; INSERT INTO foo VALUES (4);\t\n SELECT * FROM foo;", - result, - 3); + "SELECT * FROM bar; INSERT INTO foo VALUES (4);\t\n SELECT * FROM foo;", + result, + 3); ASSERT_EQ(result.getStatement(0)->stringLength, 18); ASSERT_EQ(result.getStatement(1)->stringLength, 28); ASSERT_EQ(result.getStatement(2)->stringLength, 21); } +TEST(SetOperatorTest) +{ + TEST_PARSE_SINGLE_SQL( + "SELECT * FROM students INTERSECT SELECT grade FROM students_2 UNION SELECT * FROM employees;", + kStmtSelect, + SelectStatement, + result, + stmt); + + ASSERT_EQ(0, strcmp(stmt->nestedSetSelectStatement->nestedSetSelectStatement->fromTable->name, "employees")); + ASSERT_EQ(0, strcmp(stmt->nestedSetSelectStatement->fromTable->name, "students_2")); + ASSERT_EQ(0, strcmp(stmt->fromTable->name, "students")); + ASSERT_EQ(stmt->setOperator->setType, Intersect); + ASSERT_EQ(stmt->nestedSetSelectStatement->setOperator->setType, Union); + ASSERT_EQ(stmt->selectList->at(0)->name, "grade"); +} + TEST_MAIN(); From dfe35aa8c9e153e8524847e29658e7877e0307a2 Mon Sep 17 00:00:00 2001 From: Lukas Ehrig Date: Mon, 16 Dec 2019 11:24:01 +0100 Subject: [PATCH 07/27] Fix sql-test --- test/sql_tests.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/sql_tests.cpp b/test/sql_tests.cpp index 6686fc50..ff3d135a 100644 --- a/test/sql_tests.cpp +++ b/test/sql_tests.cpp @@ -2,6 +2,7 @@ * sql_tests.cpp */ +#include #include "thirdparty/microtest/microtest.h" #include "SQLParser.h" @@ -288,7 +289,7 @@ TEST(SetOperatorTest) ASSERT_EQ(0, strcmp(stmt->fromTable->name, "students")); ASSERT_EQ(stmt->setOperator->setType, Intersect); ASSERT_EQ(stmt->nestedSetSelectStatement->setOperator->setType, Union); - ASSERT_EQ(stmt->selectList->at(0)->name, "grade"); +// ASSERT_EQ(0, strcmp(stmt->selectList->at(0)->name, "grade")); } TEST_MAIN(); From 9c87c432ccb9eaf7c9239d89914744dddf1b3d47 Mon Sep 17 00:00:00 2001 From: Lukas Ehrig Date: Mon, 16 Dec 2019 11:58:35 +0100 Subject: [PATCH 08/27] Refactor test --- test/sql_tests.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/test/sql_tests.cpp b/test/sql_tests.cpp index ff3d135a..b8cac95c 100644 --- a/test/sql_tests.cpp +++ b/test/sql_tests.cpp @@ -2,7 +2,6 @@ * sql_tests.cpp */ -#include #include "thirdparty/microtest/microtest.h" #include "SQLParser.h" @@ -284,12 +283,12 @@ TEST(SetOperatorTest) result, stmt); - ASSERT_EQ(0, strcmp(stmt->nestedSetSelectStatement->nestedSetSelectStatement->fromTable->name, "employees")); - ASSERT_EQ(0, strcmp(stmt->nestedSetSelectStatement->fromTable->name, "students_2")); - ASSERT_EQ(0, strcmp(stmt->fromTable->name, "students")); + ASSERT_STREQ(stmt->nestedSetSelectStatement->nestedSetSelectStatement->fromTable->name, "employees"); + ASSERT_STREQ(stmt->nestedSetSelectStatement->fromTable->name, "students_2"); + ASSERT_STREQ(stmt->fromTable->name, "students"); ASSERT_EQ(stmt->setOperator->setType, Intersect); ASSERT_EQ(stmt->nestedSetSelectStatement->setOperator->setType, Union); -// ASSERT_EQ(0, strcmp(stmt->selectList->at(0)->name, "grade")); + //ASSERT_STREQ(stmt->selectList->at(0)->name, "grade"); } TEST_MAIN(); From f82db191c97a2b69fd055544ec75251b717704d9 Mon Sep 17 00:00:00 2001 From: Lukas Ehrig Date: Mon, 16 Dec 2019 12:06:13 +0100 Subject: [PATCH 09/27] Add test for each set operator --- test/sql_tests.cpp | 46 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/test/sql_tests.cpp b/test/sql_tests.cpp index b8cac95c..dd33a79c 100644 --- a/test/sql_tests.cpp +++ b/test/sql_tests.cpp @@ -274,7 +274,49 @@ TEST(StringLengthTest) ASSERT_EQ(result.getStatement(2)->stringLength, 21); } -TEST(SetOperatorTest) +TEST(ExceptOperatorTest) +{ + TEST_PARSE_SINGLE_SQL( + "SELECT * FROM students EXCEPT SELECT * FROM students_2;", + kStmtSelect, + SelectStatement, + result, + stmt); + + ASSERT_STREQ(stmt->nestedSetSelectStatement->fromTable->name, "students_2"); + ASSERT_STREQ(stmt->fromTable->name, "students"); + ASSERT_EQ(stmt->setOperator->setType, Except); +} + +TEST(IntersectOperatorTest) +{ + TEST_PARSE_SINGLE_SQL( + "SELECT * FROM students INTERSECT SELECT * FROM students_2;", + kStmtSelect, + SelectStatement, + result, + stmt); + + ASSERT_STREQ(stmt->nestedSetSelectStatement->fromTable->name, "students_2"); + ASSERT_STREQ(stmt->fromTable->name, "students"); + ASSERT_EQ(stmt->setOperator->setType, Intersect); +} + +TEST(UnionOperatorTest) +{ + TEST_PARSE_SINGLE_SQL( + "SELECT * FROM students UNION SELECT * FROM students_2;", + kStmtSelect, + SelectStatement, + result, + stmt); + + ASSERT_STREQ(stmt->nestedSetSelectStatement->fromTable->name, "students_2"); + ASSERT_STREQ(stmt->fromTable->name, "students"); + ASSERT_EQ(stmt->setOperator->setType, Union); +} + +TEST(NestedSetOperatorTest) { TEST_PARSE_SINGLE_SQL( "SELECT * FROM students INTERSECT SELECT grade FROM students_2 UNION SELECT * FROM employees;", @@ -288,7 +330,7 @@ TEST(SetOperatorTest) ASSERT_STREQ(stmt->fromTable->name, "students"); ASSERT_EQ(stmt->setOperator->setType, Intersect); ASSERT_EQ(stmt->nestedSetSelectStatement->setOperator->setType, Union); - //ASSERT_STREQ(stmt->selectList->at(0)->name, "grade"); + //ASSERT_STREQ(stmt->selectList->at(0)->getName(), "grade"); } TEST_MAIN(); From e0c00d0862c04df4e045e369b9f75c16f514fd9d Mon Sep 17 00:00:00 2001 From: Lukas Ehrig Date: Wed, 18 Dec 2019 09:37:08 +0100 Subject: [PATCH 10/27] Add UNION ALL test --- test/sql_tests.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/test/sql_tests.cpp b/test/sql_tests.cpp index dd33a79c..da702edd 100644 --- a/test/sql_tests.cpp +++ b/test/sql_tests.cpp @@ -316,6 +316,20 @@ TEST(UnionOperatorTest) ASSERT_EQ(stmt->setOperator->setType, Union); } +TEST(UnionAllOperatorTest) +{ + TEST_PARSE_SINGLE_SQL( + "SELECT * FROM students UNION ALL SELECT * FROM students_2;", + kStmtSelect, + SelectStatement, + result, + stmt); + + ASSERT_STREQ(stmt->nestedSetSelectStatement->fromTable->name, "students_2"); + ASSERT_STREQ(stmt->fromTable->name, "students"); + ASSERT_TRUE(stmt->setOperator->isAll); +} + TEST(NestedSetOperatorTest) { TEST_PARSE_SINGLE_SQL( From 68508ad4d22e1c0c7080cef7c27e2f7500196577 Mon Sep 17 00:00:00 2001 From: Teresa Lasarow Date: Wed, 18 Dec 2019 11:13:15 +0100 Subject: [PATCH 11/27] testing that order by is at the bottom of f --- example_bin | Bin 0 -> 15340 bytes test/sql_tests.cpp | 72 +++++++++++++++++++++++++++++---------------- 2 files changed, 47 insertions(+), 25 deletions(-) create mode 100755 example_bin diff --git a/example_bin b/example_bin new file mode 100755 index 0000000000000000000000000000000000000000..3b5139e808157ca973b0e9b85915a77ee97223ea GIT binary patch literal 15340 zcmeHOeQXrR6`$jyI40o?p)E~ISxDWIAlY{gCgvlR!CqL0i!nZ^5CWF--P(83eQ~=- z&JnJhI4AjXxztkBib_$05>&OQs`#THQlwN+Q2D4()2NE5+Enfzt@b3Mx>c3XD6RW@ zv$OZHK2B7${F5DNX5M@A<~MKN&g_iOZ-4#q2mfBim}fC#lZzN*tB~1e7|TztCyIRm zSwU9Sp`Cl=!}9PxlGZ0rJ=>5YoQ)VjRS(FA4%Dmg{%!R#CitZgQ-(=Asj8vn48fps z;>|pO$w0nsiKRolAT7ZXHfa%7sj9k>9nmWyC*JjkEWEhTuz9;fi@>YeM|f&fi>I{= zl$>}yD=fUX1OV~m_exq|-&i=TYPqnMHdG@t;>7!hz*{2#h_Az|09%BrhIJzoOO6S- z6YoKOJ=Coed%cJn>z7d`9TKVPSgK~3fNzXv`;9tLe>>6hvg~USD#X{~ zReM@gb-xD&2KUPS1NL6^IpztT(yirIO@60rrww?Ya1|6Zb_?oW)Cy{n=cs@oxhEJq z1d{wi&tew5g!xF=V1GU$!iI9CRD9oi<|r zghTJ2+C<~h)TxcHiDeQXJXKp@Pk7U&4u1!XijDAj0;{SIniAUd6Y+E?qidNCJ;n8U zAg|yu54=~88ywdSEzz+{Ky#e0q9nWDf#0cqOz`v^+~j(|^}zl0z(J+(XXW`@a~SoC z{0WU+n7FMJvU5`tw>{o((Q8I2E*-@2q!fFUQn!L#ex8{@+;N~kk5tH~QI>VQU6i6c zrxepIN@?Pz`2q<_6VvAJ@WLq*GKrN^){;!;Q`Ak!r_J}FHJwk|vX?mdeUCR!x3Ti0 zc=su#r~Zy%{THS$PG9Bvg?!Z3=Oeue45g4iUKKv|p6H@sxzj>aY;C2OC%IBAkx1Ek)jLJEF46Uu+=^vZpWbSpw~032heP;$ zd0};#y5K4BVawlyO5rz3L7ps>PEps@m~ySanjv9)j1k4dx{^1bO9w;w1`0f?H!)%B zQGEzI{MV+hPrqZHMYlqJ2f;#%)K1xIGUocW4=qaJig}ElSs}l%qDaqgAMgB?I@ww- zld7`r^E4VBjZ(DGir*%bVxIaui0gs-MMn_y{|~G=0UT)^)7GC!7avLvq@bc@t?B(Sy zUiR~HH!l@lKF!MjF9&%!#LHonj0H+-_k-9OoNvDd56wi|v3kmX!QzSLi24IjpMzrg zU81%Vb(N^&ME#to?-KQ6qE-Q+e2%C-qRtSNCF(mwy-w82L|rH91)@G8ie3~^fUq*X zrlOZ<+z3(c5_OoUS)%9-5&bJsyFtN6^Pbi07-PpCC@p63SC_oLn9VOaglDgZ#y+DY!o%oycmL@s3v3 zu1gyO?U8Nmk;ibu~>LG~d33V)|k>P03w{T+xm0Pcm0 za8KqvJhQywF#FNuCf5V52V4)h9&kP2dcgI7>jBpTt_NHXxE^pl;CkRw;(-hJoq&E< zI3ns%QKv=yoTy(E^(&%2E$TN!{Xi#VCAFiI0ba9>{Ssmoy(~RTh~)bgeDl{ z>Pa8lpJ6i(Q=4u?v`i+=W_l@FmPgI2BMAIPl=}?&L*?*b(0D>s{eFKq8p^0fCKNOD zfv~(Kt|iBes64bc%=YVtNSiU85$ZuJc6?aVvk472ddn&fv^k34R)05QBY3Puh7{sP zpI<&nN^Q-Q`i0V(TBV*eLNAP<9hWhHSap~)7*zdT7^5PW30j}3hEdL4+j01dHuv?5^fE}W0vwz zQ{}B(IS@+{RRJl;LixY6XBrLenIeiiHDB;UCL475szelhd|bPJ(JA-eUM_?y`DCd zmVG-oZ^bZ?y}K+qg);Fpj1qDyk_q$)2T#7OZNKE;x1h1MJ>=j^4*tA@f6u}H%fV9^ zoF&4*NErwJGY5ae;w$sJ>EQq5;L8sFZw~&S4xVB%@n{%+US;$t4|#eeGQIOD{ zU!VN!xN|e#($(g>J})X=?%zp4L*C^X(M;8OIyBL>&xIx`H77z7t=hAoiCWz$KzesN za{uf1|Gk2VWzy)PRC7hD918YvV4nl_0kGf(b+2~y`3L%wxLe?cb;ji8>ycY~=! zI)ivuEuyAFvCII!JvlEyck@KLRW+lfZ1OqXj92oJ*a$i^7^qLJ=e_IU1{6O$8K&aE==zIG5YCaN;Yd*M>uQJ>~P9ho^ IZ*9i@1Aats+5i9m literal 0 HcmV?d00001 diff --git a/test/sql_tests.cpp b/test/sql_tests.cpp index da702edd..a6fd8add 100644 --- a/test/sql_tests.cpp +++ b/test/sql_tests.cpp @@ -277,11 +277,11 @@ TEST(StringLengthTest) TEST(ExceptOperatorTest) { TEST_PARSE_SINGLE_SQL( - "SELECT * FROM students EXCEPT SELECT * FROM students_2;", - kStmtSelect, - SelectStatement, - result, - stmt); + "SELECT * FROM students EXCEPT SELECT * FROM students_2;", + kStmtSelect, + SelectStatement, + result, + stmt); ASSERT_STREQ(stmt->nestedSetSelectStatement->fromTable->name, "students_2"); ASSERT_STREQ(stmt->fromTable->name, "students"); @@ -291,11 +291,11 @@ TEST(ExceptOperatorTest) TEST(IntersectOperatorTest) { TEST_PARSE_SINGLE_SQL( - "SELECT * FROM students INTERSECT SELECT * FROM students_2;", - kStmtSelect, - SelectStatement, - result, - stmt); + "SELECT * FROM students INTERSECT SELECT * FROM students_2;", + kStmtSelect, + SelectStatement, + result, + stmt); ASSERT_STREQ(stmt->nestedSetSelectStatement->fromTable->name, "students_2"); ASSERT_STREQ(stmt->fromTable->name, "students"); @@ -305,29 +305,30 @@ TEST(IntersectOperatorTest) TEST(UnionOperatorTest) { TEST_PARSE_SINGLE_SQL( - "SELECT * FROM students UNION SELECT * FROM students_2;", - kStmtSelect, - SelectStatement, - result, - stmt); + "SELECT * FROM students UNION SELECT * FROM students_2;", + kStmtSelect, + SelectStatement, + result, + stmt); ASSERT_STREQ(stmt->nestedSetSelectStatement->fromTable->name, "students_2"); ASSERT_STREQ(stmt->fromTable->name, "students"); ASSERT_EQ(stmt->setOperator->setType, Union); + ASSERT_FALSE(stmt->setOperator->isAll); } TEST(UnionAllOperatorTest) { - TEST_PARSE_SINGLE_SQL( - "SELECT * FROM students UNION ALL SELECT * FROM students_2;", - kStmtSelect, - SelectStatement, - result, - stmt); - - ASSERT_STREQ(stmt->nestedSetSelectStatement->fromTable->name, "students_2"); - ASSERT_STREQ(stmt->fromTable->name, "students"); - ASSERT_TRUE(stmt->setOperator->isAll); + TEST_PARSE_SINGLE_SQL( + "SELECT * FROM students UNION ALL SELECT * FROM students_2;", + kStmtSelect, + SelectStatement, + result, + stmt); + + ASSERT_STREQ(stmt->nestedSetSelectStatement->fromTable->name, "students_2"); + ASSERT_STREQ(stmt->fromTable->name, "students"); + ASSERT_TRUE(stmt->setOperator->isAll); } TEST(NestedSetOperatorTest) @@ -344,7 +345,28 @@ TEST(NestedSetOperatorTest) ASSERT_STREQ(stmt->fromTable->name, "students"); ASSERT_EQ(stmt->setOperator->setType, Intersect); ASSERT_EQ(stmt->nestedSetSelectStatement->setOperator->setType, Union); + ASSERT_FALSE(stmt->setOperator->isAll); //ASSERT_STREQ(stmt->selectList->at(0)->getName(), "grade"); } +TEST(OrderByFullStatementTest) +{ + TEST_PARSE_SINGLE_SQL( + "SELECT * FROM students INTERSECT SELECT grade FROM students_2 UNION SELECT * FROM employees ORDER BY grade ASC;", + kStmtSelect, + SelectStatement, + result, + stmt); + + ASSERT_EQ(stmt->order->at(0)->type, kOrderAsc); + ASSERT_STREQ(stmt->order->at(0)->expr->name, "grade"); + ASSERT_FALSE(stmt->setOperator->isAll); +} + +TEST(WrongOrderByStatementTest) +{ + SQLParserResult res = parse_and_move("SELECT * FROM students ORDER BY name INTERSECT SELECT grade FROM students_2;"); + ASSERT_FALSE(res.isValid()); +} + TEST_MAIN(); From 842ec30ddcce4746d31c375f761bd36de138d380 Mon Sep 17 00:00:00 2001 From: Tobias Nack Date: Wed, 18 Dec 2019 14:20:59 +0100 Subject: [PATCH 12/27] Format sql-test back to original code structure --- test/sql_tests.cpp | 73 +++++++++++++++------------------------------- 1 file changed, 24 insertions(+), 49 deletions(-) diff --git a/test/sql_tests.cpp b/test/sql_tests.cpp index a6fd8add..3a8e4ba2 100644 --- a/test/sql_tests.cpp +++ b/test/sql_tests.cpp @@ -11,8 +11,7 @@ using namespace hsql; -TEST(DeleteStatementTest) -{ +TEST(DeleteStatementTest) { SQLParserResult result; SQLParser::parse("DELETE FROM students WHERE grade > 2.0;", &result); @@ -28,8 +27,7 @@ TEST(DeleteStatementTest) ASSERT_EQ(stmt->expr->expr2->fval, 2.0); } -TEST(CreateStatementTest) -{ +TEST(CreateStatementTest) { SQLParserResult result; SQLParser::parse("CREATE TABLE students (name VARCHAR(50), student_number INT, city INTEGER NULL, grade DOUBLE NOT NULL, comment TEXT)", &result); @@ -59,8 +57,7 @@ TEST(CreateStatementTest) ASSERT_EQ(stmt->columns->at(3)->nullable, false); } -TEST(CreateAsSelectStatementTest) -{ +TEST(CreateAsSelectStatementTest) { SQLParserResult result; SQLParser::parse("CREATE TABLE students_2 AS SELECT student_number, grade FROM students", &result); @@ -79,8 +76,7 @@ TEST(CreateAsSelectStatementTest) ASSERT_STREQ(stmt->select->selectList->at(1)->getName(), "grade"); } -TEST(UpdateStatementTest) -{ +TEST(UpdateStatementTest) { SQLParserResult result; SQLParser::parse("UPDATE students SET grade = 5.0, name = 'test' WHERE name = 'Max O''Mustermann';", &result); @@ -108,8 +104,7 @@ TEST(UpdateStatementTest) ASSERT_STREQ(stmt->where->expr2->name, "Max O'Mustermann"); } -TEST(InsertStatementTest) -{ +TEST(InsertStatementTest) { TEST_PARSE_SINGLE_SQL( "INSERT INTO students VALUES ('Max Mustermann', 12345, 'Musterhausen', 2.0)", kStmtInsert, @@ -121,8 +116,7 @@ TEST(InsertStatementTest) // TODO } -TEST(DropTableStatementTest) -{ +TEST(DropTableStatementTest) { TEST_PARSE_SINGLE_SQL( "DROP TABLE students", kStmtDrop, @@ -136,8 +130,7 @@ TEST(DropTableStatementTest) ASSERT_STREQ(stmt->name, "students"); } -TEST(DropTableIfExistsStatementTest) -{ +TEST(DropTableIfExistsStatementTest) { TEST_PARSE_SINGLE_SQL( "DROP TABLE IF EXISTS students", kStmtDrop, @@ -151,8 +144,7 @@ TEST(DropTableIfExistsStatementTest) ASSERT_STREQ(stmt->name, "students"); } -TEST(ReleaseStatementTest) -{ +TEST(ReleaseStatementTest) { TEST_PARSE_SINGLE_SQL( "SELECT * FROM students;", kStmtSelect, @@ -167,14 +159,12 @@ TEST(ReleaseStatementTest) ASSERT_EQ(0, result.size()); - for (SQLStatement *stmt : statements) - { + for (SQLStatement *stmt : statements) { delete stmt; } } -TEST(ShowTableStatementTest) -{ +TEST(ShowTableStatementTest) { TEST_PARSE_SINGLE_SQL( "SHOW TABLES;", kStmtShow, @@ -186,8 +176,7 @@ TEST(ShowTableStatementTest) ASSERT_NULL(stmt->name); } -TEST(ShowColumnsStatementTest) -{ +TEST(ShowColumnsStatementTest) { TEST_PARSE_SINGLE_SQL( "SHOW COLUMNS students;", kStmtShow, @@ -200,8 +189,7 @@ TEST(ShowColumnsStatementTest) ASSERT_STREQ(stmt->name, "students"); } -TEST(DescribeStatementTest) -{ +TEST(DescribeStatementTest) { TEST_PARSE_SINGLE_SQL( "DESCRIBE students;", kStmtShow, @@ -214,22 +202,19 @@ TEST(DescribeStatementTest) ASSERT_STREQ(stmt->name, "students"); } -SQLParserResult parse_and_move(std::string query) -{ +SQLParserResult parse_and_move(std::string query) { hsql::SQLParserResult result; hsql::SQLParser::parse(query, &result); // Moves on return. return result; } -SQLParserResult move_in_and_back(SQLParserResult res) -{ +SQLParserResult move_in_and_back(SQLParserResult res) { // Moves on return. return res; } -TEST(MoveSQLResultTest) -{ +TEST(MoveSQLResultTest) { SQLParserResult res = parse_and_move("SELECT * FROM test;"); ASSERT(res.isValid()); ASSERT_EQ(1, res.size()); @@ -245,8 +230,7 @@ TEST(MoveSQLResultTest) ASSERT_EQ(1, new_res.size()); } -TEST(HintTest) -{ +TEST(HintTest) { TEST_PARSE_SINGLE_SQL( "SELECT * FROM students WITH HINT(NO_CACHE, SAMPLE_RATE(10));", kStmtSelect, @@ -262,8 +246,7 @@ TEST(HintTest) ASSERT_EQ(10, stmt->hints->at(1)->exprList->at(0)->ival); } -TEST(StringLengthTest) -{ +TEST(StringLengthTest) { TEST_PARSE_SQL_QUERY( "SELECT * FROM bar; INSERT INTO foo VALUES (4);\t\n SELECT * FROM foo;", result, @@ -274,8 +257,7 @@ TEST(StringLengthTest) ASSERT_EQ(result.getStatement(2)->stringLength, 21); } -TEST(ExceptOperatorTest) -{ +TEST(ExceptOperatorTest) { TEST_PARSE_SINGLE_SQL( "SELECT * FROM students EXCEPT SELECT * FROM students_2;", kStmtSelect, @@ -288,8 +270,7 @@ TEST(ExceptOperatorTest) ASSERT_EQ(stmt->setOperator->setType, Except); } -TEST(IntersectOperatorTest) -{ +TEST(IntersectOperatorTest) { TEST_PARSE_SINGLE_SQL( "SELECT * FROM students INTERSECT SELECT * FROM students_2;", kStmtSelect, @@ -302,8 +283,7 @@ TEST(IntersectOperatorTest) ASSERT_EQ(stmt->setOperator->setType, Intersect); } -TEST(UnionOperatorTest) -{ +TEST(UnionOperatorTest) { TEST_PARSE_SINGLE_SQL( "SELECT * FROM students UNION SELECT * FROM students_2;", kStmtSelect, @@ -317,8 +297,7 @@ TEST(UnionOperatorTest) ASSERT_FALSE(stmt->setOperator->isAll); } -TEST(UnionAllOperatorTest) -{ +TEST(UnionAllOperatorTest) { TEST_PARSE_SINGLE_SQL( "SELECT * FROM students UNION ALL SELECT * FROM students_2;", kStmtSelect, @@ -331,8 +310,7 @@ TEST(UnionAllOperatorTest) ASSERT_TRUE(stmt->setOperator->isAll); } -TEST(NestedSetOperatorTest) -{ +TEST(NestedSetOperatorTest) { TEST_PARSE_SINGLE_SQL( "SELECT * FROM students INTERSECT SELECT grade FROM students_2 UNION SELECT * FROM employees;", kStmtSelect, @@ -346,11 +324,9 @@ TEST(NestedSetOperatorTest) ASSERT_EQ(stmt->setOperator->setType, Intersect); ASSERT_EQ(stmt->nestedSetSelectStatement->setOperator->setType, Union); ASSERT_FALSE(stmt->setOperator->isAll); - //ASSERT_STREQ(stmt->selectList->at(0)->getName(), "grade"); } -TEST(OrderByFullStatementTest) -{ +TEST(OrderByFullStatementTest) { TEST_PARSE_SINGLE_SQL( "SELECT * FROM students INTERSECT SELECT grade FROM students_2 UNION SELECT * FROM employees ORDER BY grade ASC;", kStmtSelect, @@ -363,8 +339,7 @@ TEST(OrderByFullStatementTest) ASSERT_FALSE(stmt->setOperator->isAll); } -TEST(WrongOrderByStatementTest) -{ +TEST(WrongOrderByStatementTest) { SQLParserResult res = parse_and_move("SELECT * FROM students ORDER BY name INTERSECT SELECT grade FROM students_2;"); ASSERT_FALSE(res.isValid()); } From 41916cb9da74df7affe21070676c1e669caf312a Mon Sep 17 00:00:00 2001 From: Tobias Nack Date: Wed, 18 Dec 2019 14:36:48 +0100 Subject: [PATCH 13/27] Make additional small format changes for easier pull request --- src/parser/bison_parser.cpp | 616 ++++++++++++++++++------------------ src/parser/bison_parser.y | 5 +- test/sql_tests.cpp | 159 +++++----- 3 files changed, 393 insertions(+), 387 deletions(-) diff --git a/src/parser/bison_parser.cpp b/src/parser/bison_parser.cpp index 0a0fdde0..86aa225b 100644 --- a/src/parser/bison_parser.cpp +++ b/src/parser/bison_parser.cpp @@ -713,24 +713,24 @@ static const yytype_uint16 yyrline[] = 464, 468, 474, 475, 476, 477, 478, 479, 480, 481, 485, 486, 487, 497, 503, 509, 517, 518, 527, 536, 549, 556, 567, 568, 578, 587, 588, 592, 604, 608, - 612, 627, 628, 631, 632, 640, 641, 645, 655, 669, - 676, 680, 684, 691, 694, 700, 712, 713, 717, 721, - 722, 725, 730, 731, 735, 740, 744, 745, 748, 749, - 753, 756, 757, 761, 765, 766, 767, 773, 774, 778, - 779, 783, 784, 785, 786, 787, 793, 794, 798, 799, - 803, 804, 808, 818, 819, 820, 821, 822, 826, 827, - 828, 829, 830, 831, 832, 833, 834, 835, 839, 840, - 844, 845, 846, 847, 848, 852, 853, 854, 855, 856, - 857, 858, 859, 860, 861, 862, 866, 867, 871, 872, - 873, 874, 880, 881, 882, 883, 887, 888, 892, 893, - 897, 898, 899, 900, 901, 902, 903, 907, 908, 912, - 916, 917, 918, 919, 920, 921, 924, 928, 932, 936, - 937, 938, 939, 943, 944, 945, 946, 947, 951, 955, - 956, 960, 961, 965, 969, 973, 985, 986, 996, 997, - 1001, 1002, 1011, 1012, 1017, 1028, 1037, 1038, 1043, 1044, - 1049, 1050, 1054, 1055, 1060, 1061, 1069, 1070, 1074, 1078, - 1082, 1089, 1102, 1110, 1120, 1139, 1140, 1141, 1142, 1143, - 1144, 1145, 1146, 1147, 1148, 1153, 1162, 1163, 1168, 1169 + 612, 628, 629, 632, 633, 641, 642, 646, 656, 671, + 678, 682, 686, 693, 696, 702, 714, 715, 719, 723, + 724, 727, 732, 733, 737, 742, 746, 747, 750, 751, + 755, 758, 759, 763, 767, 768, 769, 775, 776, 780, + 781, 785, 786, 787, 788, 789, 796, 797, 801, 802, + 806, 807, 811, 821, 822, 823, 824, 825, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 842, 843, + 847, 848, 849, 850, 851, 855, 856, 857, 858, 859, + 860, 861, 862, 863, 864, 865, 869, 870, 874, 875, + 876, 877, 883, 884, 885, 886, 890, 891, 895, 896, + 900, 901, 902, 903, 904, 905, 906, 910, 911, 915, + 919, 920, 921, 922, 923, 924, 927, 931, 935, 939, + 940, 941, 942, 946, 947, 948, 949, 950, 954, 958, + 959, 963, 964, 968, 972, 976, 988, 989, 999, 1000, + 1004, 1005, 1014, 1015, 1020, 1031, 1040, 1041, 1046, 1047, + 1052, 1053, 1057, 1058, 1063, 1064, 1072, 1073, 1077, 1081, + 1085, 1092, 1105, 1113, 1123, 1142, 1143, 1144, 1145, 1146, + 1147, 1148, 1149, 1150, 1151, 1156, 1165, 1166, 1171, 1172 }; #endif @@ -3316,45 +3316,46 @@ YYLTYPE yylloc = yyloc_default; (yyval.select_stmt)->withDescriptions = (yyvsp[-5].with_description_vec); (yyval.select_stmt)->nestedSetSelectStatement = (yyvsp[-2].select_stmt); (yyval.select_stmt)->order = (yyvsp[-1].order_vec); + // Limit could have been set by TOP. if ((yyvsp[0].limit) != nullptr) { delete (yyval.select_stmt)->limit; (yyval.select_stmt)->limit = (yyvsp[0].limit); } } -#line 3326 "bison_parser.cpp" +#line 3327 "bison_parser.cpp" break; case 73: -#line 631 "bison_parser.y" +#line 632 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[0].select_stmt); } -#line 3332 "bison_parser.cpp" +#line 3333 "bison_parser.cpp" break; case 74: -#line 632 "bison_parser.y" +#line 633 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-2].select_stmt); (yyval.select_stmt)->setOperator = (yyvsp[-1].set_operator_t); (yyval.select_stmt)-> nestedSetSelectStatement = (yyvsp[0].select_stmt); } -#line 3342 "bison_parser.cpp" +#line 3343 "bison_parser.cpp" break; case 75: -#line 640 "bison_parser.y" +#line 641 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-1].select_stmt); } -#line 3348 "bison_parser.cpp" +#line 3349 "bison_parser.cpp" break; case 76: -#line 641 "bison_parser.y" +#line 642 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-1].select_stmt); } -#line 3354 "bison_parser.cpp" +#line 3355 "bison_parser.cpp" break; case 77: -#line 645 "bison_parser.y" +#line 646 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-2].select_stmt); (yyval.select_stmt)->order = (yyvsp[-1].order_vec); @@ -3365,79 +3366,80 @@ YYLTYPE yylloc = yyloc_default; (yyval.select_stmt)->limit = (yyvsp[0].limit); } } -#line 3369 "bison_parser.cpp" +#line 3370 "bison_parser.cpp" break; case 78: -#line 655 "bison_parser.y" +#line 656 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-4].select_stmt); (yyval.select_stmt)->setOperator = (yyvsp[-3].set_operator_t); (yyval.select_stmt)->nestedSetSelectStatement = (yyvsp[-2].select_stmt); (yyval.select_stmt)->order = (yyvsp[-1].order_vec); + // Limit could have been set by TOP. if ((yyvsp[0].limit) != nullptr) { delete (yyval.select_stmt)->limit; (yyval.select_stmt)->limit = (yyvsp[0].limit); } } -#line 3385 "bison_parser.cpp" +#line 3387 "bison_parser.cpp" break; case 79: -#line 669 "bison_parser.y" +#line 671 "bison_parser.y" { (yyval.set_operator_t) = (yyvsp[-1].set_operator_t); (yyval.set_operator_t)->isAll = (yyvsp[0].bval); } -#line 3394 "bison_parser.cpp" +#line 3396 "bison_parser.cpp" break; case 80: -#line 676 "bison_parser.y" +#line 678 "bison_parser.y" { (yyval.set_operator_t) = new SetOperator(); (yyval.set_operator_t)->setType = UnionType::Union; } -#line 3403 "bison_parser.cpp" +#line 3405 "bison_parser.cpp" break; case 81: -#line 680 "bison_parser.y" +#line 682 "bison_parser.y" { (yyval.set_operator_t) = new SetOperator(); (yyval.set_operator_t)->setType = UnionType::Intersect; } -#line 3412 "bison_parser.cpp" +#line 3414 "bison_parser.cpp" break; case 82: -#line 684 "bison_parser.y" +#line 686 "bison_parser.y" { (yyval.set_operator_t) = new SetOperator(); (yyval.set_operator_t)->setType = UnionType::Except; } -#line 3421 "bison_parser.cpp" +#line 3423 "bison_parser.cpp" break; case 83: -#line 691 "bison_parser.y" +#line 693 "bison_parser.y" { (yyval.bval) = true; } -#line 3429 "bison_parser.cpp" +#line 3431 "bison_parser.cpp" break; case 84: -#line 694 "bison_parser.y" +#line 696 "bison_parser.y" { (yyval.bval) = false; } -#line 3437 "bison_parser.cpp" +#line 3439 "bison_parser.cpp" break; case 85: -#line 700 "bison_parser.y" +#line 702 "bison_parser.y" { (yyval.select_stmt) = new SelectStatement(); (yyval.select_stmt)->limit = (yyvsp[-5].limit); @@ -3447,225 +3449,225 @@ YYLTYPE yylloc = yyloc_default; (yyval.select_stmt)->whereClause = (yyvsp[-1].expr); (yyval.select_stmt)->groupBy = (yyvsp[0].group_t); } -#line 3451 "bison_parser.cpp" +#line 3453 "bison_parser.cpp" break; case 86: -#line 712 "bison_parser.y" +#line 714 "bison_parser.y" { (yyval.bval) = true; } -#line 3457 "bison_parser.cpp" +#line 3459 "bison_parser.cpp" break; case 87: -#line 713 "bison_parser.y" +#line 715 "bison_parser.y" { (yyval.bval) = false; } -#line 3463 "bison_parser.cpp" +#line 3465 "bison_parser.cpp" break; case 89: -#line 721 "bison_parser.y" +#line 723 "bison_parser.y" { (yyval.table) = (yyvsp[0].table); } -#line 3469 "bison_parser.cpp" +#line 3471 "bison_parser.cpp" break; case 90: -#line 722 "bison_parser.y" +#line 724 "bison_parser.y" { (yyval.table) = nullptr; } -#line 3475 "bison_parser.cpp" +#line 3477 "bison_parser.cpp" break; case 91: -#line 725 "bison_parser.y" +#line 727 "bison_parser.y" { (yyval.table) = (yyvsp[0].table); } -#line 3481 "bison_parser.cpp" +#line 3483 "bison_parser.cpp" break; case 92: -#line 730 "bison_parser.y" +#line 732 "bison_parser.y" { (yyval.expr) = (yyvsp[0].expr); } -#line 3487 "bison_parser.cpp" +#line 3489 "bison_parser.cpp" break; case 93: -#line 731 "bison_parser.y" +#line 733 "bison_parser.y" { (yyval.expr) = nullptr; } -#line 3493 "bison_parser.cpp" +#line 3495 "bison_parser.cpp" break; case 94: -#line 735 "bison_parser.y" +#line 737 "bison_parser.y" { (yyval.group_t) = new GroupByDescription(); (yyval.group_t)->columns = (yyvsp[-1].expr_vec); (yyval.group_t)->having = (yyvsp[0].expr); } -#line 3503 "bison_parser.cpp" +#line 3505 "bison_parser.cpp" break; case 95: -#line 740 "bison_parser.y" +#line 742 "bison_parser.y" { (yyval.group_t) = nullptr; } -#line 3509 "bison_parser.cpp" +#line 3511 "bison_parser.cpp" break; case 96: -#line 744 "bison_parser.y" +#line 746 "bison_parser.y" { (yyval.expr) = (yyvsp[0].expr); } -#line 3515 "bison_parser.cpp" +#line 3517 "bison_parser.cpp" break; case 97: -#line 745 "bison_parser.y" +#line 747 "bison_parser.y" { (yyval.expr) = nullptr; } -#line 3521 "bison_parser.cpp" +#line 3523 "bison_parser.cpp" break; case 98: -#line 748 "bison_parser.y" +#line 750 "bison_parser.y" { (yyval.order_vec) = (yyvsp[0].order_vec); } -#line 3527 "bison_parser.cpp" +#line 3529 "bison_parser.cpp" break; case 99: -#line 749 "bison_parser.y" +#line 751 "bison_parser.y" { (yyval.order_vec) = nullptr; } -#line 3533 "bison_parser.cpp" +#line 3535 "bison_parser.cpp" break; case 100: -#line 753 "bison_parser.y" +#line 755 "bison_parser.y" { (yyval.order_vec) = (yyvsp[0].order_vec); } -#line 3539 "bison_parser.cpp" +#line 3541 "bison_parser.cpp" break; case 101: -#line 756 "bison_parser.y" +#line 758 "bison_parser.y" { (yyval.order_vec) = new std::vector(); (yyval.order_vec)->push_back((yyvsp[0].order)); } -#line 3545 "bison_parser.cpp" +#line 3547 "bison_parser.cpp" break; case 102: -#line 757 "bison_parser.y" +#line 759 "bison_parser.y" { (yyvsp[-2].order_vec)->push_back((yyvsp[0].order)); (yyval.order_vec) = (yyvsp[-2].order_vec); } -#line 3551 "bison_parser.cpp" +#line 3553 "bison_parser.cpp" break; case 103: -#line 761 "bison_parser.y" +#line 763 "bison_parser.y" { (yyval.order) = new OrderDescription((yyvsp[0].order_type), (yyvsp[-1].expr)); } -#line 3557 "bison_parser.cpp" +#line 3559 "bison_parser.cpp" break; case 104: -#line 765 "bison_parser.y" +#line 767 "bison_parser.y" { (yyval.order_type) = kOrderAsc; } -#line 3563 "bison_parser.cpp" +#line 3565 "bison_parser.cpp" break; case 105: -#line 766 "bison_parser.y" +#line 768 "bison_parser.y" { (yyval.order_type) = kOrderDesc; } -#line 3569 "bison_parser.cpp" +#line 3571 "bison_parser.cpp" break; case 106: -#line 767 "bison_parser.y" +#line 769 "bison_parser.y" { (yyval.order_type) = kOrderAsc; } -#line 3575 "bison_parser.cpp" +#line 3577 "bison_parser.cpp" break; case 107: -#line 773 "bison_parser.y" +#line 775 "bison_parser.y" { (yyval.limit) = new LimitDescription((yyvsp[0].expr), nullptr); } -#line 3581 "bison_parser.cpp" +#line 3583 "bison_parser.cpp" break; case 108: -#line 774 "bison_parser.y" +#line 776 "bison_parser.y" { (yyval.limit) = nullptr; } -#line 3587 "bison_parser.cpp" +#line 3589 "bison_parser.cpp" break; case 109: -#line 778 "bison_parser.y" +#line 780 "bison_parser.y" { (yyval.limit) = (yyvsp[0].limit); } -#line 3593 "bison_parser.cpp" +#line 3595 "bison_parser.cpp" break; case 110: -#line 779 "bison_parser.y" +#line 781 "bison_parser.y" { (yyval.limit) = nullptr; } -#line 3599 "bison_parser.cpp" +#line 3601 "bison_parser.cpp" break; case 111: -#line 783 "bison_parser.y" +#line 785 "bison_parser.y" { (yyval.limit) = new LimitDescription((yyvsp[0].expr), nullptr); } -#line 3605 "bison_parser.cpp" +#line 3607 "bison_parser.cpp" break; case 112: -#line 784 "bison_parser.y" +#line 786 "bison_parser.y" { (yyval.limit) = new LimitDescription(nullptr, (yyvsp[0].expr)); } -#line 3611 "bison_parser.cpp" +#line 3613 "bison_parser.cpp" break; case 113: -#line 785 "bison_parser.y" +#line 787 "bison_parser.y" { (yyval.limit) = new LimitDescription((yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 3617 "bison_parser.cpp" +#line 3619 "bison_parser.cpp" break; case 114: -#line 786 "bison_parser.y" +#line 788 "bison_parser.y" { (yyval.limit) = new LimitDescription(nullptr, nullptr); } -#line 3623 "bison_parser.cpp" +#line 3625 "bison_parser.cpp" break; case 115: -#line 787 "bison_parser.y" +#line 789 "bison_parser.y" { (yyval.limit) = new LimitDescription(nullptr, (yyvsp[0].expr)); } -#line 3629 "bison_parser.cpp" +#line 3631 "bison_parser.cpp" break; case 116: -#line 793 "bison_parser.y" +#line 796 "bison_parser.y" { (yyval.expr_vec) = new std::vector(); (yyval.expr_vec)->push_back((yyvsp[0].expr)); } -#line 3635 "bison_parser.cpp" +#line 3637 "bison_parser.cpp" break; case 117: -#line 794 "bison_parser.y" +#line 797 "bison_parser.y" { (yyvsp[-2].expr_vec)->push_back((yyvsp[0].expr)); (yyval.expr_vec) = (yyvsp[-2].expr_vec); } -#line 3641 "bison_parser.cpp" +#line 3643 "bison_parser.cpp" break; case 118: -#line 798 "bison_parser.y" +#line 801 "bison_parser.y" { (yyval.expr_vec) = (yyvsp[0].expr_vec); } -#line 3647 "bison_parser.cpp" +#line 3649 "bison_parser.cpp" break; case 119: -#line 799 "bison_parser.y" +#line 802 "bison_parser.y" { (yyval.expr_vec) = nullptr; } -#line 3653 "bison_parser.cpp" +#line 3655 "bison_parser.cpp" break; case 120: -#line 803 "bison_parser.y" +#line 806 "bison_parser.y" { (yyval.expr_vec) = new std::vector(); (yyval.expr_vec)->push_back((yyvsp[0].expr)); } -#line 3659 "bison_parser.cpp" +#line 3661 "bison_parser.cpp" break; case 121: -#line 804 "bison_parser.y" +#line 807 "bison_parser.y" { (yyvsp[-2].expr_vec)->push_back((yyvsp[0].expr)); (yyval.expr_vec) = (yyvsp[-2].expr_vec); } -#line 3665 "bison_parser.cpp" +#line 3667 "bison_parser.cpp" break; case 122: -#line 808 "bison_parser.y" +#line 811 "bison_parser.y" { (yyval.expr) = (yyvsp[-1].expr); if ((yyvsp[0].alias_t)) { @@ -3673,415 +3675,415 @@ YYLTYPE yylloc = yyloc_default; delete (yyvsp[0].alias_t); } } -#line 3677 "bison_parser.cpp" +#line 3679 "bison_parser.cpp" break; case 128: -#line 826 "bison_parser.y" +#line 829 "bison_parser.y" { (yyval.expr) = (yyvsp[-1].expr); } -#line 3683 "bison_parser.cpp" +#line 3685 "bison_parser.cpp" break; case 137: -#line 835 "bison_parser.y" +#line 838 "bison_parser.y" { (yyval.expr) = Expr::makeSelect((yyvsp[-1].select_stmt)); } -#line 3689 "bison_parser.cpp" +#line 3691 "bison_parser.cpp" break; case 140: -#line 844 "bison_parser.y" +#line 847 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpUnaryMinus, (yyvsp[0].expr)); } -#line 3695 "bison_parser.cpp" +#line 3697 "bison_parser.cpp" break; case 141: -#line 845 "bison_parser.y" +#line 848 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, (yyvsp[0].expr)); } -#line 3701 "bison_parser.cpp" +#line 3703 "bison_parser.cpp" break; case 142: -#line 846 "bison_parser.y" +#line 849 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpIsNull, (yyvsp[-1].expr)); } -#line 3707 "bison_parser.cpp" +#line 3709 "bison_parser.cpp" break; case 143: -#line 847 "bison_parser.y" +#line 850 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpIsNull, (yyvsp[-2].expr)); } -#line 3713 "bison_parser.cpp" +#line 3715 "bison_parser.cpp" break; case 144: -#line 848 "bison_parser.y" +#line 851 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeOpUnary(kOpIsNull, (yyvsp[-3].expr))); } -#line 3719 "bison_parser.cpp" +#line 3721 "bison_parser.cpp" break; case 146: -#line 853 "bison_parser.y" +#line 856 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpMinus, (yyvsp[0].expr)); } -#line 3725 "bison_parser.cpp" +#line 3727 "bison_parser.cpp" break; case 147: -#line 854 "bison_parser.y" +#line 857 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpPlus, (yyvsp[0].expr)); } -#line 3731 "bison_parser.cpp" +#line 3733 "bison_parser.cpp" break; case 148: -#line 855 "bison_parser.y" +#line 858 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpSlash, (yyvsp[0].expr)); } -#line 3737 "bison_parser.cpp" +#line 3739 "bison_parser.cpp" break; case 149: -#line 856 "bison_parser.y" +#line 859 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpAsterisk, (yyvsp[0].expr)); } -#line 3743 "bison_parser.cpp" +#line 3745 "bison_parser.cpp" break; case 150: -#line 857 "bison_parser.y" +#line 860 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpPercentage, (yyvsp[0].expr)); } -#line 3749 "bison_parser.cpp" +#line 3751 "bison_parser.cpp" break; case 151: -#line 858 "bison_parser.y" +#line 861 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpCaret, (yyvsp[0].expr)); } -#line 3755 "bison_parser.cpp" +#line 3757 "bison_parser.cpp" break; case 152: -#line 859 "bison_parser.y" +#line 862 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpLike, (yyvsp[0].expr)); } -#line 3761 "bison_parser.cpp" +#line 3763 "bison_parser.cpp" break; case 153: -#line 860 "bison_parser.y" +#line 863 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-3].expr), kOpNotLike, (yyvsp[0].expr)); } -#line 3767 "bison_parser.cpp" +#line 3769 "bison_parser.cpp" break; case 154: -#line 861 "bison_parser.y" +#line 864 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpILike, (yyvsp[0].expr)); } -#line 3773 "bison_parser.cpp" +#line 3775 "bison_parser.cpp" break; case 155: -#line 862 "bison_parser.y" +#line 865 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpConcat, (yyvsp[0].expr)); } -#line 3779 "bison_parser.cpp" +#line 3781 "bison_parser.cpp" break; case 156: -#line 866 "bison_parser.y" +#line 869 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpAnd, (yyvsp[0].expr)); } -#line 3785 "bison_parser.cpp" +#line 3787 "bison_parser.cpp" break; case 157: -#line 867 "bison_parser.y" +#line 870 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpOr, (yyvsp[0].expr)); } -#line 3791 "bison_parser.cpp" +#line 3793 "bison_parser.cpp" break; case 158: -#line 871 "bison_parser.y" +#line 874 "bison_parser.y" { (yyval.expr) = Expr::makeInOperator((yyvsp[-4].expr), (yyvsp[-1].expr_vec)); } -#line 3797 "bison_parser.cpp" +#line 3799 "bison_parser.cpp" break; case 159: -#line 872 "bison_parser.y" +#line 875 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeInOperator((yyvsp[-5].expr), (yyvsp[-1].expr_vec))); } -#line 3803 "bison_parser.cpp" +#line 3805 "bison_parser.cpp" break; case 160: -#line 873 "bison_parser.y" +#line 876 "bison_parser.y" { (yyval.expr) = Expr::makeInOperator((yyvsp[-4].expr), (yyvsp[-1].select_stmt)); } -#line 3809 "bison_parser.cpp" +#line 3811 "bison_parser.cpp" break; case 161: -#line 874 "bison_parser.y" +#line 877 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeInOperator((yyvsp[-5].expr), (yyvsp[-1].select_stmt))); } -#line 3815 "bison_parser.cpp" +#line 3817 "bison_parser.cpp" break; case 162: -#line 880 "bison_parser.y" +#line 883 "bison_parser.y" { (yyval.expr) = Expr::makeCase((yyvsp[-2].expr), (yyvsp[-1].expr), nullptr); } -#line 3821 "bison_parser.cpp" +#line 3823 "bison_parser.cpp" break; case 163: -#line 881 "bison_parser.y" +#line 884 "bison_parser.y" { (yyval.expr) = Expr::makeCase((yyvsp[-4].expr), (yyvsp[-3].expr), (yyvsp[-1].expr)); } -#line 3827 "bison_parser.cpp" +#line 3829 "bison_parser.cpp" break; case 164: -#line 882 "bison_parser.y" +#line 885 "bison_parser.y" { (yyval.expr) = Expr::makeCase(nullptr, (yyvsp[-1].expr), nullptr); } -#line 3833 "bison_parser.cpp" +#line 3835 "bison_parser.cpp" break; case 165: -#line 883 "bison_parser.y" +#line 886 "bison_parser.y" { (yyval.expr) = Expr::makeCase(nullptr, (yyvsp[-3].expr), (yyvsp[-1].expr)); } -#line 3839 "bison_parser.cpp" +#line 3841 "bison_parser.cpp" break; case 166: -#line 887 "bison_parser.y" +#line 890 "bison_parser.y" { (yyval.expr) = Expr::makeCaseList(Expr::makeCaseListElement((yyvsp[-2].expr), (yyvsp[0].expr))); } -#line 3845 "bison_parser.cpp" +#line 3847 "bison_parser.cpp" break; case 167: -#line 888 "bison_parser.y" +#line 891 "bison_parser.y" { (yyval.expr) = Expr::caseListAppend((yyvsp[-4].expr), Expr::makeCaseListElement((yyvsp[-2].expr), (yyvsp[0].expr))); } -#line 3851 "bison_parser.cpp" +#line 3853 "bison_parser.cpp" break; case 168: -#line 892 "bison_parser.y" +#line 895 "bison_parser.y" { (yyval.expr) = Expr::makeExists((yyvsp[-1].select_stmt)); } -#line 3857 "bison_parser.cpp" +#line 3859 "bison_parser.cpp" break; case 169: -#line 893 "bison_parser.y" +#line 896 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeExists((yyvsp[-1].select_stmt))); } -#line 3863 "bison_parser.cpp" +#line 3865 "bison_parser.cpp" break; case 170: -#line 897 "bison_parser.y" +#line 900 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpEquals, (yyvsp[0].expr)); } -#line 3869 "bison_parser.cpp" +#line 3871 "bison_parser.cpp" break; case 171: -#line 898 "bison_parser.y" +#line 901 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpEquals, (yyvsp[0].expr)); } -#line 3875 "bison_parser.cpp" +#line 3877 "bison_parser.cpp" break; case 172: -#line 899 "bison_parser.y" +#line 902 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpNotEquals, (yyvsp[0].expr)); } -#line 3881 "bison_parser.cpp" +#line 3883 "bison_parser.cpp" break; case 173: -#line 900 "bison_parser.y" +#line 903 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpLess, (yyvsp[0].expr)); } -#line 3887 "bison_parser.cpp" +#line 3889 "bison_parser.cpp" break; case 174: -#line 901 "bison_parser.y" +#line 904 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpGreater, (yyvsp[0].expr)); } -#line 3893 "bison_parser.cpp" +#line 3895 "bison_parser.cpp" break; case 175: -#line 902 "bison_parser.y" +#line 905 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpLessEq, (yyvsp[0].expr)); } -#line 3899 "bison_parser.cpp" +#line 3901 "bison_parser.cpp" break; case 176: -#line 903 "bison_parser.y" +#line 906 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpGreaterEq, (yyvsp[0].expr)); } -#line 3905 "bison_parser.cpp" +#line 3907 "bison_parser.cpp" break; case 177: -#line 907 "bison_parser.y" +#line 910 "bison_parser.y" { (yyval.expr) = Expr::makeFunctionRef((yyvsp[-2].sval), new std::vector(), false); } -#line 3911 "bison_parser.cpp" +#line 3913 "bison_parser.cpp" break; case 178: -#line 908 "bison_parser.y" +#line 911 "bison_parser.y" { (yyval.expr) = Expr::makeFunctionRef((yyvsp[-4].sval), (yyvsp[-1].expr_vec), (yyvsp[-2].bval)); } -#line 3917 "bison_parser.cpp" +#line 3919 "bison_parser.cpp" break; case 179: -#line 912 "bison_parser.y" +#line 915 "bison_parser.y" { (yyval.expr) = Expr::makeExtract((yyvsp[-3].datetime_field), (yyvsp[-1].expr)); } -#line 3923 "bison_parser.cpp" +#line 3925 "bison_parser.cpp" break; case 180: -#line 916 "bison_parser.y" +#line 919 "bison_parser.y" { (yyval.datetime_field) = kDatetimeSecond; } -#line 3929 "bison_parser.cpp" +#line 3931 "bison_parser.cpp" break; case 181: -#line 917 "bison_parser.y" +#line 920 "bison_parser.y" { (yyval.datetime_field) = kDatetimeMinute; } -#line 3935 "bison_parser.cpp" +#line 3937 "bison_parser.cpp" break; case 182: -#line 918 "bison_parser.y" +#line 921 "bison_parser.y" { (yyval.datetime_field) = kDatetimeHour; } -#line 3941 "bison_parser.cpp" +#line 3943 "bison_parser.cpp" break; case 183: -#line 919 "bison_parser.y" +#line 922 "bison_parser.y" { (yyval.datetime_field) = kDatetimeDay; } -#line 3947 "bison_parser.cpp" +#line 3949 "bison_parser.cpp" break; case 184: -#line 920 "bison_parser.y" +#line 923 "bison_parser.y" { (yyval.datetime_field) = kDatetimeMonth; } -#line 3953 "bison_parser.cpp" +#line 3955 "bison_parser.cpp" break; case 185: -#line 921 "bison_parser.y" +#line 924 "bison_parser.y" { (yyval.datetime_field) = kDatetimeYear; } -#line 3959 "bison_parser.cpp" +#line 3961 "bison_parser.cpp" break; case 186: -#line 924 "bison_parser.y" +#line 927 "bison_parser.y" { (yyval.expr) = Expr::makeArray((yyvsp[-1].expr_vec)); } -#line 3965 "bison_parser.cpp" +#line 3967 "bison_parser.cpp" break; case 187: -#line 928 "bison_parser.y" +#line 931 "bison_parser.y" { (yyval.expr) = Expr::makeArrayIndex((yyvsp[-3].expr), (yyvsp[-1].expr)->ival); } -#line 3971 "bison_parser.cpp" +#line 3973 "bison_parser.cpp" break; case 188: -#line 932 "bison_parser.y" +#line 935 "bison_parser.y" { (yyval.expr) = Expr::makeBetween((yyvsp[-4].expr), (yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 3977 "bison_parser.cpp" +#line 3979 "bison_parser.cpp" break; case 189: -#line 936 "bison_parser.y" +#line 939 "bison_parser.y" { (yyval.expr) = Expr::makeColumnRef((yyvsp[0].sval)); } -#line 3983 "bison_parser.cpp" +#line 3985 "bison_parser.cpp" break; case 190: -#line 937 "bison_parser.y" +#line 940 "bison_parser.y" { (yyval.expr) = Expr::makeColumnRef((yyvsp[-2].sval), (yyvsp[0].sval)); } -#line 3989 "bison_parser.cpp" +#line 3991 "bison_parser.cpp" break; case 191: -#line 938 "bison_parser.y" +#line 941 "bison_parser.y" { (yyval.expr) = Expr::makeStar(); } -#line 3995 "bison_parser.cpp" +#line 3997 "bison_parser.cpp" break; case 192: -#line 939 "bison_parser.y" +#line 942 "bison_parser.y" { (yyval.expr) = Expr::makeStar((yyvsp[-2].sval)); } -#line 4001 "bison_parser.cpp" +#line 4003 "bison_parser.cpp" break; case 198: -#line 951 "bison_parser.y" +#line 954 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral((yyvsp[0].sval)); } -#line 4007 "bison_parser.cpp" +#line 4009 "bison_parser.cpp" break; case 199: -#line 955 "bison_parser.y" +#line 958 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral(true); } -#line 4013 "bison_parser.cpp" +#line 4015 "bison_parser.cpp" break; case 200: -#line 956 "bison_parser.y" +#line 959 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral(false); } -#line 4019 "bison_parser.cpp" +#line 4021 "bison_parser.cpp" break; case 201: -#line 960 "bison_parser.y" +#line 963 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral((yyvsp[0].fval)); } -#line 4025 "bison_parser.cpp" +#line 4027 "bison_parser.cpp" break; case 203: -#line 965 "bison_parser.y" +#line 968 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral((yyvsp[0].ival)); } -#line 4031 "bison_parser.cpp" +#line 4033 "bison_parser.cpp" break; case 204: -#line 969 "bison_parser.y" +#line 972 "bison_parser.y" { (yyval.expr) = Expr::makeNullLiteral(); } -#line 4037 "bison_parser.cpp" +#line 4039 "bison_parser.cpp" break; case 205: -#line 973 "bison_parser.y" +#line 976 "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 4047 "bison_parser.cpp" +#line 4049 "bison_parser.cpp" break; case 207: -#line 986 "bison_parser.y" +#line 989 "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 4058 "bison_parser.cpp" +#line 4060 "bison_parser.cpp" break; case 211: -#line 1002 "bison_parser.y" +#line 1005 "bison_parser.y" { auto tbl = new TableRef(kTableSelect); tbl->select = (yyvsp[-2].select_stmt); tbl->alias = (yyvsp[0].alias_t); (yyval.table) = tbl; } -#line 4069 "bison_parser.cpp" +#line 4071 "bison_parser.cpp" break; case 212: -#line 1011 "bison_parser.y" +#line 1014 "bison_parser.y" { (yyval.table_vec) = new std::vector(); (yyval.table_vec)->push_back((yyvsp[0].table)); } -#line 4075 "bison_parser.cpp" +#line 4077 "bison_parser.cpp" break; case 213: -#line 1012 "bison_parser.y" +#line 1015 "bison_parser.y" { (yyvsp[-2].table_vec)->push_back((yyvsp[0].table)); (yyval.table_vec) = (yyvsp[-2].table_vec); } -#line 4081 "bison_parser.cpp" +#line 4083 "bison_parser.cpp" break; case 214: -#line 1017 "bison_parser.y" +#line 1020 "bison_parser.y" { auto tbl = new TableRef(kTableName); tbl->schema = (yyvsp[-1].table_name).schema; @@ -4089,103 +4091,103 @@ YYLTYPE yylloc = yyloc_default; tbl->alias = (yyvsp[0].alias_t); (yyval.table) = tbl; } -#line 4093 "bison_parser.cpp" +#line 4095 "bison_parser.cpp" break; case 215: -#line 1028 "bison_parser.y" +#line 1031 "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 4103 "bison_parser.cpp" +#line 4105 "bison_parser.cpp" break; case 216: -#line 1037 "bison_parser.y" +#line 1040 "bison_parser.y" { (yyval.table_name).schema = nullptr; (yyval.table_name).name = (yyvsp[0].sval);} -#line 4109 "bison_parser.cpp" +#line 4111 "bison_parser.cpp" break; case 217: -#line 1038 "bison_parser.y" +#line 1041 "bison_parser.y" { (yyval.table_name).schema = (yyvsp[-2].sval); (yyval.table_name).name = (yyvsp[0].sval); } -#line 4115 "bison_parser.cpp" +#line 4117 "bison_parser.cpp" break; case 219: -#line 1044 "bison_parser.y" +#line 1047 "bison_parser.y" { (yyval.alias_t) = new Alias((yyvsp[-3].sval), (yyvsp[-1].str_vec)); } -#line 4121 "bison_parser.cpp" +#line 4123 "bison_parser.cpp" break; case 221: -#line 1050 "bison_parser.y" +#line 1053 "bison_parser.y" { (yyval.alias_t) = nullptr; } -#line 4127 "bison_parser.cpp" +#line 4129 "bison_parser.cpp" break; case 222: -#line 1054 "bison_parser.y" +#line 1057 "bison_parser.y" { (yyval.alias_t) = new Alias((yyvsp[0].sval)); } -#line 4133 "bison_parser.cpp" +#line 4135 "bison_parser.cpp" break; case 223: -#line 1055 "bison_parser.y" +#line 1058 "bison_parser.y" { (yyval.alias_t) = new Alias((yyvsp[0].sval)); } -#line 4139 "bison_parser.cpp" +#line 4141 "bison_parser.cpp" break; case 225: -#line 1061 "bison_parser.y" +#line 1064 "bison_parser.y" { (yyval.alias_t) = nullptr; } -#line 4145 "bison_parser.cpp" +#line 4147 "bison_parser.cpp" break; case 227: -#line 1070 "bison_parser.y" +#line 1073 "bison_parser.y" { (yyval.with_description_vec) = nullptr; } -#line 4151 "bison_parser.cpp" +#line 4153 "bison_parser.cpp" break; case 228: -#line 1074 "bison_parser.y" +#line 1077 "bison_parser.y" { (yyval.with_description_vec) = (yyvsp[0].with_description_vec); } -#line 4157 "bison_parser.cpp" +#line 4159 "bison_parser.cpp" break; case 229: -#line 1078 "bison_parser.y" +#line 1081 "bison_parser.y" { (yyval.with_description_vec) = new std::vector(); (yyval.with_description_vec)->push_back((yyvsp[0].with_description_t)); } -#line 4166 "bison_parser.cpp" +#line 4168 "bison_parser.cpp" break; case 230: -#line 1082 "bison_parser.y" +#line 1085 "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 4175 "bison_parser.cpp" +#line 4177 "bison_parser.cpp" break; case 231: -#line 1089 "bison_parser.y" +#line 1092 "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 4185 "bison_parser.cpp" +#line 4187 "bison_parser.cpp" break; case 232: -#line 1103 "bison_parser.y" +#line 1106 "bison_parser.y" { (yyval.table) = new TableRef(kTableJoin); (yyval.table)->join = new JoinDefinition(); @@ -4193,11 +4195,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.table)->join->left = (yyvsp[-3].table); (yyval.table)->join->right = (yyvsp[0].table); } -#line 4197 "bison_parser.cpp" +#line 4199 "bison_parser.cpp" break; case 233: -#line 1111 "bison_parser.y" +#line 1114 "bison_parser.y" { (yyval.table) = new TableRef(kTableJoin); (yyval.table)->join = new JoinDefinition(); @@ -4206,11 +4208,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.table)->join->right = (yyvsp[-2].table); (yyval.table)->join->condition = (yyvsp[0].expr); } -#line 4210 "bison_parser.cpp" +#line 4212 "bison_parser.cpp" break; case 234: -#line 1121 "bison_parser.y" +#line 1124 "bison_parser.y" { (yyval.table) = new TableRef(kTableJoin); (yyval.table)->join = new JoinDefinition(); @@ -4226,83 +4228,83 @@ YYLTYPE yylloc = yyloc_default; (yyval.table)->join->condition = Expr::makeOpBinary(left_col, kOpEquals, right_col); delete (yyvsp[-1].expr); } -#line 4230 "bison_parser.cpp" +#line 4232 "bison_parser.cpp" break; case 235: -#line 1139 "bison_parser.y" +#line 1142 "bison_parser.y" { (yyval.uval) = kJoinInner; } -#line 4236 "bison_parser.cpp" +#line 4238 "bison_parser.cpp" break; case 236: -#line 1140 "bison_parser.y" +#line 1143 "bison_parser.y" { (yyval.uval) = kJoinLeft; } -#line 4242 "bison_parser.cpp" +#line 4244 "bison_parser.cpp" break; case 237: -#line 1141 "bison_parser.y" +#line 1144 "bison_parser.y" { (yyval.uval) = kJoinLeft; } -#line 4248 "bison_parser.cpp" +#line 4250 "bison_parser.cpp" break; case 238: -#line 1142 "bison_parser.y" +#line 1145 "bison_parser.y" { (yyval.uval) = kJoinRight; } -#line 4254 "bison_parser.cpp" +#line 4256 "bison_parser.cpp" break; case 239: -#line 1143 "bison_parser.y" +#line 1146 "bison_parser.y" { (yyval.uval) = kJoinRight; } -#line 4260 "bison_parser.cpp" +#line 4262 "bison_parser.cpp" break; case 240: -#line 1144 "bison_parser.y" +#line 1147 "bison_parser.y" { (yyval.uval) = kJoinFull; } -#line 4266 "bison_parser.cpp" +#line 4268 "bison_parser.cpp" break; case 241: -#line 1145 "bison_parser.y" +#line 1148 "bison_parser.y" { (yyval.uval) = kJoinFull; } -#line 4272 "bison_parser.cpp" +#line 4274 "bison_parser.cpp" break; case 242: -#line 1146 "bison_parser.y" +#line 1149 "bison_parser.y" { (yyval.uval) = kJoinFull; } -#line 4278 "bison_parser.cpp" +#line 4280 "bison_parser.cpp" break; case 243: -#line 1147 "bison_parser.y" +#line 1150 "bison_parser.y" { (yyval.uval) = kJoinCross; } -#line 4284 "bison_parser.cpp" +#line 4286 "bison_parser.cpp" break; case 244: -#line 1148 "bison_parser.y" +#line 1151 "bison_parser.y" { (yyval.uval) = kJoinInner; } -#line 4290 "bison_parser.cpp" +#line 4292 "bison_parser.cpp" break; case 248: -#line 1168 "bison_parser.y" +#line 1171 "bison_parser.y" { (yyval.str_vec) = new std::vector(); (yyval.str_vec)->push_back((yyvsp[0].sval)); } -#line 4296 "bison_parser.cpp" +#line 4298 "bison_parser.cpp" break; case 249: -#line 1169 "bison_parser.y" +#line 1172 "bison_parser.y" { (yyvsp[-2].str_vec)->push_back((yyvsp[0].sval)); (yyval.str_vec) = (yyvsp[-2].str_vec); } -#line 4302 "bison_parser.cpp" +#line 4304 "bison_parser.cpp" break; -#line 4306 "bison_parser.cpp" +#line 4308 "bison_parser.cpp" default: break; } @@ -4540,7 +4542,7 @@ YYLTYPE yylloc = yyloc_default; #endif return yyresult; } -#line 1172 "bison_parser.y" +#line 1175 "bison_parser.y" /********************************* ** Section 4: Additional C code diff --git a/src/parser/bison_parser.y b/src/parser/bison_parser.y index 12b6e574..7d678cbf 100755 --- a/src/parser/bison_parser.y +++ b/src/parser/bison_parser.y @@ -615,6 +615,7 @@ select_statement: $$->withDescriptions = $1; $$->nestedSetSelectStatement = $4; $$->order = $5; + // Limit could have been set by TOP. if ($6 != nullptr) { delete $$->limit; @@ -657,6 +658,7 @@ select_no_paren: $$->setOperator = $2; $$->nestedSetSelectStatement = $3; $$->order = $4; + // Limit could have been set by TOP. if ($5 != nullptr) { delete $$->limit; @@ -784,7 +786,8 @@ limit: | OFFSET expr { $$ = new LimitDescription(nullptr, $2); } | LIMIT expr OFFSET expr { $$ = new LimitDescription($2, $4); } | LIMIT ALL { $$ = new LimitDescription(nullptr, nullptr); } - | LIMIT ALL OFFSET expr { $$ = new LimitDescription(nullptr, $4); }; + | LIMIT ALL OFFSET expr { $$ = new LimitDescription(nullptr, $4); } + ; /****************************** * Expressions diff --git a/test/sql_tests.cpp b/test/sql_tests.cpp index 3a8e4ba2..10e6d433 100644 --- a/test/sql_tests.cpp +++ b/test/sql_tests.cpp @@ -11,6 +11,7 @@ using namespace hsql; + TEST(DeleteStatementTest) { SQLParserResult result; SQLParser::parse("DELETE FROM students WHERE grade > 2.0;", &result); @@ -19,7 +20,7 @@ TEST(DeleteStatementTest) { ASSERT_EQ(result.size(), 1); ASSERT(result.getStatement(0)->type() == kStmtDelete); - const DeleteStatement *stmt = (const DeleteStatement *)result.getStatement(0); + const DeleteStatement* stmt = (const DeleteStatement*)result.getStatement(0); ASSERT_STREQ(stmt->tableName, "students"); ASSERT_NOTNULL(stmt->expr); ASSERT(stmt->expr->isType(kExprOperator)); @@ -35,7 +36,7 @@ TEST(CreateStatementTest) { ASSERT_EQ(result.size(), 1); ASSERT_EQ(result.getStatement(0)->type(), kStmtCreate); - const CreateStatement *stmt = (const CreateStatement *)result.getStatement(0); + const CreateStatement* stmt = (const CreateStatement*)result.getStatement(0); ASSERT_EQ(stmt->type, kCreateTable); ASSERT_STREQ(stmt->tableName, "students"); ASSERT_NOTNULL(stmt->columns); @@ -65,7 +66,7 @@ TEST(CreateAsSelectStatementTest) { ASSERT_EQ(result.size(), 1); ASSERT_EQ(result.getStatement(0)->type(), kStmtCreate); - const CreateStatement *stmt = (const CreateStatement *)result.getStatement(0); + const CreateStatement* stmt = (const CreateStatement*)result.getStatement(0); ASSERT_EQ(stmt->type, kCreateTable); ASSERT_STREQ(stmt->tableName, "students_2"); ASSERT_NULL(stmt->columns); @@ -84,7 +85,7 @@ TEST(UpdateStatementTest) { ASSERT_EQ(result.size(), 1); ASSERT_EQ(result.getStatement(0)->type(), kStmtUpdate); - const UpdateStatement *stmt = (const UpdateStatement *)result.getStatement(0); + const UpdateStatement* stmt = (const UpdateStatement*)result.getStatement(0); ASSERT_NOTNULL(stmt->table); ASSERT_STREQ(stmt->table->name, "students"); @@ -106,11 +107,11 @@ TEST(UpdateStatementTest) { TEST(InsertStatementTest) { TEST_PARSE_SINGLE_SQL( - "INSERT INTO students VALUES ('Max Mustermann', 12345, 'Musterhausen', 2.0)", - kStmtInsert, - InsertStatement, - result, - stmt); + "INSERT INTO students VALUES ('Max Mustermann', 12345, 'Musterhausen', 2.0)", + kStmtInsert, + InsertStatement, + result, + stmt); ASSERT_EQ(stmt->values->size(), 4); // TODO @@ -118,11 +119,11 @@ TEST(InsertStatementTest) { TEST(DropTableStatementTest) { TEST_PARSE_SINGLE_SQL( - "DROP TABLE students", - kStmtDrop, - DropStatement, - result, - stmt); + "DROP TABLE students", + kStmtDrop, + DropStatement, + result, + stmt); ASSERT_FALSE(stmt->ifExists); ASSERT_EQ(stmt->type, kDropTable); @@ -132,11 +133,11 @@ TEST(DropTableStatementTest) { TEST(DropTableIfExistsStatementTest) { TEST_PARSE_SINGLE_SQL( - "DROP TABLE IF EXISTS students", - kStmtDrop, - DropStatement, - result, - stmt); + "DROP TABLE IF EXISTS students", + kStmtDrop, + DropStatement, + result, + stmt); ASSERT_TRUE(stmt->ifExists); ASSERT_EQ(stmt->type, kDropTable); @@ -146,31 +147,31 @@ TEST(DropTableIfExistsStatementTest) { TEST(ReleaseStatementTest) { TEST_PARSE_SINGLE_SQL( - "SELECT * FROM students;", - kStmtSelect, - SelectStatement, - result, - stmt); + "SELECT * FROM students;", + kStmtSelect, + SelectStatement, + result, + stmt); ASSERT_EQ(1, result.size()); ASSERT_NULL(stmt->whereClause); - std::vector statements = result.releaseStatements(); + std::vector statements = result.releaseStatements(); ASSERT_EQ(0, result.size()); - for (SQLStatement *stmt : statements) { + for (SQLStatement* stmt : statements) { delete stmt; } } TEST(ShowTableStatementTest) { TEST_PARSE_SINGLE_SQL( - "SHOW TABLES;", - kStmtShow, - ShowStatement, - result, - stmt); + "SHOW TABLES;", + kStmtShow, + ShowStatement, + result, + stmt); ASSERT_EQ(stmt->type, kShowTables); ASSERT_NULL(stmt->name); @@ -178,11 +179,11 @@ TEST(ShowTableStatementTest) { TEST(ShowColumnsStatementTest) { TEST_PARSE_SINGLE_SQL( - "SHOW COLUMNS students;", - kStmtShow, - ShowStatement, - result, - stmt); + "SHOW COLUMNS students;", + kStmtShow, + ShowStatement, + result, + stmt); ASSERT_EQ(stmt->type, kShowColumns); ASSERT_NOTNULL(stmt->name); @@ -191,11 +192,11 @@ TEST(ShowColumnsStatementTest) { TEST(DescribeStatementTest) { TEST_PARSE_SINGLE_SQL( - "DESCRIBE students;", - kStmtShow, - ShowStatement, - result, - stmt); + "DESCRIBE students;", + kStmtShow, + ShowStatement, + result, + stmt); ASSERT_EQ(stmt->type, kShowColumns); ASSERT_NOTNULL(stmt->name); @@ -232,11 +233,11 @@ TEST(MoveSQLResultTest) { TEST(HintTest) { TEST_PARSE_SINGLE_SQL( - "SELECT * FROM students WITH HINT(NO_CACHE, SAMPLE_RATE(10));", - kStmtSelect, - SelectStatement, - result, - stmt); + "SELECT * FROM students WITH HINT(NO_CACHE, SAMPLE_RATE(10));", + kStmtSelect, + SelectStatement, + result, + stmt); ASSERT_NOTNULL(stmt->hints); ASSERT_EQ(2, stmt->hints->size()); @@ -248,9 +249,9 @@ TEST(HintTest) { TEST(StringLengthTest) { TEST_PARSE_SQL_QUERY( - "SELECT * FROM bar; INSERT INTO foo VALUES (4);\t\n SELECT * FROM foo;", - result, - 3); + "SELECT * FROM bar; INSERT INTO foo VALUES (4);\t\n SELECT * FROM foo;", + result, + 3); ASSERT_EQ(result.getStatement(0)->stringLength, 18); ASSERT_EQ(result.getStatement(1)->stringLength, 28); @@ -259,11 +260,11 @@ TEST(StringLengthTest) { TEST(ExceptOperatorTest) { TEST_PARSE_SINGLE_SQL( - "SELECT * FROM students EXCEPT SELECT * FROM students_2;", - kStmtSelect, - SelectStatement, - result, - stmt); + "SELECT * FROM students EXCEPT SELECT * FROM students_2;", + kStmtSelect, + SelectStatement, + result, + stmt); ASSERT_STREQ(stmt->nestedSetSelectStatement->fromTable->name, "students_2"); ASSERT_STREQ(stmt->fromTable->name, "students"); @@ -272,11 +273,11 @@ TEST(ExceptOperatorTest) { TEST(IntersectOperatorTest) { TEST_PARSE_SINGLE_SQL( - "SELECT * FROM students INTERSECT SELECT * FROM students_2;", - kStmtSelect, - SelectStatement, - result, - stmt); + "SELECT * FROM students INTERSECT SELECT * FROM students_2;", + kStmtSelect, + SelectStatement, + result, + stmt); ASSERT_STREQ(stmt->nestedSetSelectStatement->fromTable->name, "students_2"); ASSERT_STREQ(stmt->fromTable->name, "students"); @@ -285,11 +286,11 @@ TEST(IntersectOperatorTest) { TEST(UnionOperatorTest) { TEST_PARSE_SINGLE_SQL( - "SELECT * FROM students UNION SELECT * FROM students_2;", - kStmtSelect, - SelectStatement, - result, - stmt); + "SELECT * FROM students UNION SELECT * FROM students_2;", + kStmtSelect, + SelectStatement, + result, + stmt); ASSERT_STREQ(stmt->nestedSetSelectStatement->fromTable->name, "students_2"); ASSERT_STREQ(stmt->fromTable->name, "students"); @@ -299,11 +300,11 @@ TEST(UnionOperatorTest) { TEST(UnionAllOperatorTest) { TEST_PARSE_SINGLE_SQL( - "SELECT * FROM students UNION ALL SELECT * FROM students_2;", - kStmtSelect, - SelectStatement, - result, - stmt); + "SELECT * FROM students UNION ALL SELECT * FROM students_2;", + kStmtSelect, + SelectStatement, + result, + stmt); ASSERT_STREQ(stmt->nestedSetSelectStatement->fromTable->name, "students_2"); ASSERT_STREQ(stmt->fromTable->name, "students"); @@ -312,11 +313,11 @@ TEST(UnionAllOperatorTest) { TEST(NestedSetOperatorTest) { TEST_PARSE_SINGLE_SQL( - "SELECT * FROM students INTERSECT SELECT grade FROM students_2 UNION SELECT * FROM employees;", - kStmtSelect, - SelectStatement, - result, - stmt); + "SELECT * FROM students INTERSECT SELECT grade FROM students_2 UNION SELECT * FROM employees;", + kStmtSelect, + SelectStatement, + result, + stmt); ASSERT_STREQ(stmt->nestedSetSelectStatement->nestedSetSelectStatement->fromTable->name, "employees"); ASSERT_STREQ(stmt->nestedSetSelectStatement->fromTable->name, "students_2"); @@ -328,11 +329,11 @@ TEST(NestedSetOperatorTest) { TEST(OrderByFullStatementTest) { TEST_PARSE_SINGLE_SQL( - "SELECT * FROM students INTERSECT SELECT grade FROM students_2 UNION SELECT * FROM employees ORDER BY grade ASC;", - kStmtSelect, - SelectStatement, - result, - stmt); + "SELECT * FROM students INTERSECT SELECT grade FROM students_2 UNION SELECT * FROM employees ORDER BY grade ASC;", + kStmtSelect, + SelectStatement, + result, + stmt); ASSERT_EQ(stmt->order->at(0)->type, kOrderAsc); ASSERT_STREQ(stmt->order->at(0)->expr->name, "grade"); From fdbbcd6521a04bcad7f140a21f766177bf93e6fd Mon Sep 17 00:00:00 2001 From: Tobias Nack Date: Wed, 18 Dec 2019 14:40:48 +0100 Subject: [PATCH 14/27] Further formating changes in test --- test/sql_tests.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/sql_tests.cpp b/test/sql_tests.cpp index 10e6d433..f6c7c7a6 100644 --- a/test/sql_tests.cpp +++ b/test/sql_tests.cpp @@ -20,7 +20,7 @@ TEST(DeleteStatementTest) { ASSERT_EQ(result.size(), 1); ASSERT(result.getStatement(0)->type() == kStmtDelete); - const DeleteStatement* stmt = (const DeleteStatement*)result.getStatement(0); + const DeleteStatement* stmt = (const DeleteStatement*) result.getStatement(0); ASSERT_STREQ(stmt->tableName, "students"); ASSERT_NOTNULL(stmt->expr); ASSERT(stmt->expr->isType(kExprOperator)); @@ -36,7 +36,7 @@ TEST(CreateStatementTest) { ASSERT_EQ(result.size(), 1); ASSERT_EQ(result.getStatement(0)->type(), kStmtCreate); - const CreateStatement* stmt = (const CreateStatement*)result.getStatement(0); + const CreateStatement* stmt = (const CreateStatement*) result.getStatement(0); ASSERT_EQ(stmt->type, kCreateTable); ASSERT_STREQ(stmt->tableName, "students"); ASSERT_NOTNULL(stmt->columns); @@ -66,7 +66,7 @@ TEST(CreateAsSelectStatementTest) { ASSERT_EQ(result.size(), 1); ASSERT_EQ(result.getStatement(0)->type(), kStmtCreate); - const CreateStatement* stmt = (const CreateStatement*)result.getStatement(0); + const CreateStatement* stmt = (const CreateStatement*) result.getStatement(0); ASSERT_EQ(stmt->type, kCreateTable); ASSERT_STREQ(stmt->tableName, "students_2"); ASSERT_NULL(stmt->columns); @@ -85,7 +85,7 @@ TEST(UpdateStatementTest) { ASSERT_EQ(result.size(), 1); ASSERT_EQ(result.getStatement(0)->type(), kStmtUpdate); - const UpdateStatement* stmt = (const UpdateStatement*)result.getStatement(0); + const UpdateStatement* stmt = (const UpdateStatement*) result.getStatement(0); ASSERT_NOTNULL(stmt->table); ASSERT_STREQ(stmt->table->name, "students"); From d2008867189a6de26d1a022c8a78f69ef45a2682 Mon Sep 17 00:00:00 2001 From: Tobias Nack Date: Thu, 19 Dec 2019 07:23:48 +0100 Subject: [PATCH 15/27] Change name of setType enum to increase consistency with the rest of the project --- src/parser/bison_parser.cpp | 6 +++--- src/parser/bison_parser.y | 6 +++--- src/sql/SelectStatement.h | 10 +++++----- src/util/sqlhelper.cpp | 4 ++-- test/sql_tests.cpp | 10 +++++----- 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/parser/bison_parser.cpp b/src/parser/bison_parser.cpp index 86aa225b..7dee0653 100644 --- a/src/parser/bison_parser.cpp +++ b/src/parser/bison_parser.cpp @@ -3399,7 +3399,7 @@ YYLTYPE yylloc = yyloc_default; #line 678 "bison_parser.y" { (yyval.set_operator_t) = new SetOperator(); - (yyval.set_operator_t)->setType = UnionType::Union; + (yyval.set_operator_t)->setType = SetType::kSetUnion; } #line 3405 "bison_parser.cpp" break; @@ -3408,7 +3408,7 @@ YYLTYPE yylloc = yyloc_default; #line 682 "bison_parser.y" { (yyval.set_operator_t) = new SetOperator(); - (yyval.set_operator_t)->setType = UnionType::Intersect; + (yyval.set_operator_t)->setType = SetType::kSetIntersect; } #line 3414 "bison_parser.cpp" break; @@ -3417,7 +3417,7 @@ YYLTYPE yylloc = yyloc_default; #line 686 "bison_parser.y" { (yyval.set_operator_t) = new SetOperator(); - (yyval.set_operator_t)->setType = UnionType::Except; + (yyval.set_operator_t)->setType = SetType::kSetExcept; } #line 3423 "bison_parser.cpp" break; diff --git a/src/parser/bison_parser.y b/src/parser/bison_parser.y index 7d678cbf..61c8ce67 100755 --- a/src/parser/bison_parser.y +++ b/src/parser/bison_parser.y @@ -677,15 +677,15 @@ set_operator: set_type: UNION { $$ = new SetOperator(); - $$->setType = UnionType::Union; + $$->setType = SetType::kSetUnion; } | INTERSECT { $$ = new SetOperator(); - $$->setType = UnionType::Intersect; + $$->setType = SetType::kSetIntersect; } | EXCEPT { $$ = new SetOperator(); - $$->setType = UnionType::Except; + $$->setType = SetType::kSetExcept; } ; diff --git a/src/sql/SelectStatement.h b/src/sql/SelectStatement.h index 5545a7a0..2b6d786d 100644 --- a/src/sql/SelectStatement.h +++ b/src/sql/SelectStatement.h @@ -11,17 +11,17 @@ namespace hsql { kOrderDesc }; - enum UnionType { - Union, - Intersect, - Except + enum SetType { + kSetUnion, + kSetIntersect, + kSetExcept }; struct SetOperator { SetOperator(); virtual ~SetOperator(); - UnionType setType; + SetType setType; bool isAll; }; diff --git a/src/util/sqlhelper.cpp b/src/util/sqlhelper.cpp index 717e1823..841a813c 100755 --- a/src/util/sqlhelper.cpp +++ b/src/util/sqlhelper.cpp @@ -169,9 +169,9 @@ namespace hsql { } if (stmt->nestedSetSelectStatement != nullptr) { - if (stmt->setOperator->setType == UnionType::Union) { + if (stmt->setOperator->setType == SetType::kSetUnion) { inprint("Union:", numIndent + 1); - } else if (stmt->setOperator->setType == UnionType::Intersect) { + } else if (stmt->setOperator->setType == SetType::kSetIntersect) { inprint("Intersect:", numIndent + 1); } else { inprint("Except:", numIndent + 1); diff --git a/test/sql_tests.cpp b/test/sql_tests.cpp index f6c7c7a6..d34f628f 100644 --- a/test/sql_tests.cpp +++ b/test/sql_tests.cpp @@ -268,7 +268,7 @@ TEST(ExceptOperatorTest) { ASSERT_STREQ(stmt->nestedSetSelectStatement->fromTable->name, "students_2"); ASSERT_STREQ(stmt->fromTable->name, "students"); - ASSERT_EQ(stmt->setOperator->setType, Except); + ASSERT_EQ(stmt->setOperator->setType, kSetExcept); } TEST(IntersectOperatorTest) { @@ -281,7 +281,7 @@ TEST(IntersectOperatorTest) { ASSERT_STREQ(stmt->nestedSetSelectStatement->fromTable->name, "students_2"); ASSERT_STREQ(stmt->fromTable->name, "students"); - ASSERT_EQ(stmt->setOperator->setType, Intersect); + ASSERT_EQ(stmt->setOperator->setType, kSetIntersect); } TEST(UnionOperatorTest) { @@ -294,7 +294,7 @@ TEST(UnionOperatorTest) { ASSERT_STREQ(stmt->nestedSetSelectStatement->fromTable->name, "students_2"); ASSERT_STREQ(stmt->fromTable->name, "students"); - ASSERT_EQ(stmt->setOperator->setType, Union); + ASSERT_EQ(stmt->setOperator->setType, kSetUnion); ASSERT_FALSE(stmt->setOperator->isAll); } @@ -322,8 +322,8 @@ TEST(NestedSetOperatorTest) { ASSERT_STREQ(stmt->nestedSetSelectStatement->nestedSetSelectStatement->fromTable->name, "employees"); ASSERT_STREQ(stmt->nestedSetSelectStatement->fromTable->name, "students_2"); ASSERT_STREQ(stmt->fromTable->name, "students"); - ASSERT_EQ(stmt->setOperator->setType, Intersect); - ASSERT_EQ(stmt->nestedSetSelectStatement->setOperator->setType, Union); + ASSERT_EQ(stmt->setOperator->setType, kSetIntersect); + ASSERT_EQ(stmt->nestedSetSelectStatement->setOperator->setType, kSetUnion); ASSERT_FALSE(stmt->setOperator->isAll); } From fbb1b19b1563d186ccc5e3e93042ca39cbed6490 Mon Sep 17 00:00:00 2001 From: Tobias Nack Date: Wed, 8 Jan 2020 11:13:02 +0100 Subject: [PATCH 16/27] Fix overwrite of limits and orders for sets, move elements into setOperator struct, remove opt_limit and opt_order change --- src/parser/bison_parser.cpp | 2009 +++++++++++++++++------------------ src/parser/bison_parser.y | 41 +- src/sql/SelectStatement.h | 24 +- src/sql/statements.cpp | 19 +- src/util/sqlhelper.cpp | 23 +- test/sql_tests.cpp | 34 +- 6 files changed, 1072 insertions(+), 1078 deletions(-) diff --git a/src/parser/bison_parser.cpp b/src/parser/bison_parser.cpp index 7dee0653..5c26e21a 100644 --- a/src/parser/bison_parser.cpp +++ b/src/parser/bison_parser.cpp @@ -636,16 +636,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 51 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 717 +#define YYLAST 724 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 163 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 103 +#define YYNNTS 101 /* YYNRULES -- Number of rules. */ -#define YYNRULES 249 +#define YYNRULES 247 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 447 +#define YYNSTATES 445 #define YYUNDEFTOK 2 #define YYMAXUTOK 400 @@ -713,24 +713,24 @@ static const yytype_uint16 yyrline[] = 464, 468, 474, 475, 476, 477, 478, 479, 480, 481, 485, 486, 487, 497, 503, 509, 517, 518, 527, 536, 549, 556, 567, 568, 578, 587, 588, 592, 604, 608, - 612, 628, 629, 632, 633, 641, 642, 646, 656, 671, - 678, 682, 686, 693, 696, 702, 714, 715, 719, 723, - 724, 727, 732, 733, 737, 742, 746, 747, 750, 751, - 755, 758, 759, 763, 767, 768, 769, 775, 776, 780, - 781, 785, 786, 787, 788, 789, 796, 797, 801, 802, - 806, 807, 811, 821, 822, 823, 824, 825, 829, 830, - 831, 832, 833, 834, 835, 836, 837, 838, 842, 843, - 847, 848, 849, 850, 851, 855, 856, 857, 858, 859, - 860, 861, 862, 863, 864, 865, 869, 870, 874, 875, - 876, 877, 883, 884, 885, 886, 890, 891, 895, 896, - 900, 901, 902, 903, 904, 905, 906, 910, 911, 915, - 919, 920, 921, 922, 923, 924, 927, 931, 935, 939, - 940, 941, 942, 946, 947, 948, 949, 950, 954, 958, - 959, 963, 964, 968, 972, 976, 988, 989, 999, 1000, - 1004, 1005, 1014, 1015, 1020, 1031, 1040, 1041, 1046, 1047, - 1052, 1053, 1057, 1058, 1063, 1064, 1072, 1073, 1077, 1081, - 1085, 1092, 1105, 1113, 1123, 1142, 1143, 1144, 1145, 1146, - 1147, 1148, 1149, 1150, 1151, 1156, 1165, 1166, 1171, 1172 + 612, 623, 624, 627, 628, 636, 637, 641, 651, 661, + 668, 672, 676, 683, 686, 692, 704, 705, 709, 713, + 714, 717, 722, 723, 727, 732, 736, 737, 740, 741, + 745, 746, 750, 754, 755, 756, 762, 763, 767, 768, + 769, 770, 771, 772, 779, 780, 784, 785, 789, 790, + 794, 804, 805, 806, 807, 808, 812, 813, 814, 815, + 816, 817, 818, 819, 820, 821, 825, 826, 830, 831, + 832, 833, 834, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 852, 853, 857, 858, 859, 860, + 866, 867, 868, 869, 873, 874, 878, 879, 883, 884, + 885, 886, 887, 888, 889, 893, 894, 898, 902, 903, + 904, 905, 906, 907, 910, 914, 918, 922, 923, 924, + 925, 929, 930, 931, 932, 933, 937, 941, 942, 946, + 947, 951, 955, 959, 971, 972, 982, 983, 987, 988, + 997, 998, 1003, 1014, 1023, 1024, 1029, 1030, 1035, 1036, + 1040, 1041, 1046, 1047, 1055, 1056, 1060, 1064, 1068, 1075, + 1088, 1096, 1106, 1125, 1126, 1127, 1128, 1129, 1130, 1131, + 1132, 1133, 1134, 1139, 1148, 1149, 1154, 1155 }; #endif @@ -773,11 +773,11 @@ static const char *const yytname[] = "select_with_paren", "select_no_paren", "set_operator", "set_type", "opt_all", "select_clause", "opt_distinct", "select_list", "opt_from_clause", "from_clause", "opt_where", "opt_group", "opt_having", - "opt_order", "order", "order_list", "order_desc", "opt_order_type", - "opt_top", "opt_limit", "limit", "expr_list", "opt_literal_list", - "literal_list", "expr_alias", "expr", "operand", "scalar_expr", - "unary_expr", "binary_expr", "logic_expr", "in_expr", "case_expr", - "case_list", "exists_expr", "comp_expr", "function_expr", "extract_expr", + "opt_order", "order_list", "order_desc", "opt_order_type", "opt_top", + "opt_limit", "expr_list", "opt_literal_list", "literal_list", + "expr_alias", "expr", "operand", "scalar_expr", "unary_expr", + "binary_expr", "logic_expr", "in_expr", "case_expr", "case_list", + "exists_expr", "comp_expr", "function_expr", "extract_expr", "datetime_field", "array_expr", "array_index", "between_expr", "column_name", "literal", "string_literal", "bool_literal", "num_literal", "int_literal", "null_literal", "param_expr", "table_ref", @@ -815,65 +815,65 @@ static const yytype_uint16 yytoknum[] = }; # endif -#define YYPACT_NINF -303 +#define YYPACT_NINF -353 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-303))) + (!!((Yystate) == (-353))) -#define YYTABLE_NINF -247 +#define YYTABLE_NINF -245 #define yytable_value_is_error(Yytable_value) \ - (!!((Yytable_value) == (-247))) + (!!((Yytable_value) == (-245))) /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int16 yypact[] = { - 614, 5, 49, 100, 114, 49, -29, 17, 19, 29, - 49, -23, 18, 144, 148, 24, -303, 82, 82, -303, - -303, -303, -303, -303, -303, -303, -303, -303, -303, -22, - -303, 195, 55, -303, 58, 145, -303, 109, 109, 49, - 117, 49, 116, -303, 127, 127, 49, -303, 119, 93, - -303, -303, 596, -303, 170, -303, -303, 150, -22, 72, - -303, 23, -303, 277, 4, 287, 183, 49, 49, 234, - -303, 222, 160, 316, 281, 49, 49, -303, 173, 144, - -303, 174, 326, 321, 176, 180, -303, -303, -303, -22, - 235, 220, -22, 48, -303, -303, -303, -303, -303, -303, - -303, -303, -303, 184, 185, -303, -303, -303, -303, -303, - -303, -303, -303, -303, 303, -62, 160, 199, -303, 341, - 344, 99, 215, -55, -303, -303, -303, -303, -303, -303, - 349, -303, -303, 199, -303, -303, 285, -303, -303, 72, - -303, -303, 199, 285, 199, 133, -303, -303, -303, 4, - -303, 242, 259, 362, 250, 86, 213, 217, 166, 230, - 223, 282, -303, 214, -76, 312, -303, -303, -303, -303, - -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, - -303, 283, -303, -303, -67, 218, -303, 199, 316, -303, - 225, 20, -303, 298, 224, -303, 71, 48, -22, 227, - -303, 76, 48, -76, 336, -24, -303, 305, -303, 275, - 65, -303, 259, 2, 12, 339, 280, 199, 107, -17, - 236, 282, 396, 199, 123, 233, -71, 199, 199, 282, - -303, 282, -70, 237, 126, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 326, 49, -303, 393, 4, -76, -303, 4, -303, 349, - 10, 234, -303, 199, -303, 394, -303, -303, -303, -303, - 199, -303, -303, -303, -303, 199, 199, 341, -303, 241, - -303, -303, 244, -303, -303, -303, 129, -303, 362, -303, - -303, 199, -303, -303, 245, -303, -303, -303, -303, -303, - -303, 314, 87, 97, 199, 199, -303, 339, 310, -101, - -303, -303, -303, 299, 353, 430, 282, 249, 214, -303, - 313, 252, 430, 430, 430, 430, 464, 464, 464, 464, - 123, 123, -80, -80, -80, -94, 261, -303, -303, 101, - 105, -303, 259, -303, -7, -303, 262, -303, 16, -303, - 357, -303, -303, -303, -76, -76, -303, 416, 418, -303, - 331, -303, -303, 139, -303, 199, 199, 199, -303, 43, - 91, 271, -303, 282, 430, 214, 272, 140, -303, -303, - -303, -303, 278, 345, -303, -303, -303, 366, 367, 377, - 359, 10, 452, -303, -303, -303, 337, -303, 311, 315, - -303, -303, -68, -76, 70, -303, 199, -303, 396, 318, - 146, -303, -303, 16, 10, -303, -303, -303, 10, 356, - 317, 199, -303, -303, -303, -303, -76, -303, -303, -303, - -303, 502, 344, -18, 322, 199, 153, 199, -303, 13, - -76, -303, -303, -76, 309, 320, -303 + 621, -2, 36, 46, 115, 36, -51, 21, 34, 56, + 36, -44, 1, 144, 151, 22, -353, 81, 81, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -13, + -353, 172, 44, -353, 38, 119, -353, 73, 73, 36, + 107, 36, 130, -353, 101, 101, 36, -353, 112, 92, + -353, -353, 603, -353, 156, -353, -353, 138, -13, 39, + -353, 106, -353, 254, 30, 277, 169, 36, 36, 207, + -353, 208, 145, 300, 267, 36, 36, -353, 161, 144, + -353, 170, 310, 317, 178, 181, -353, -353, -353, -13, + 236, 221, -13, -1, -353, -353, -353, -353, -353, -353, + -353, -353, 185, 183, -353, -353, -353, -353, -353, -353, + -353, -353, -353, 304, -43, 145, 235, -353, 342, 344, + 54, 211, -57, -353, -353, -353, -353, -353, -353, 348, + -353, -353, 235, -353, -353, 282, -353, -353, 39, -353, + -353, 235, 282, 235, 123, -353, -353, 30, -353, 237, + 251, 352, 238, -18, 200, 201, 129, 291, 205, 295, + -353, 264, -65, 333, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, 272, + -353, -353, -95, 209, -353, 235, 300, -353, 210, 51, + -353, 279, 204, -353, 71, -1, -13, 215, -353, 104, + -1, -65, 322, -5, -353, 294, -353, 164, 61, -353, + 251, 4, 6, 328, 191, 235, 121, 70, 224, 295, + 422, 235, 159, 225, 15, 235, 235, 295, -353, 295, + -69, 230, -42, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 310, 36, + -353, 379, 30, -65, -353, 30, -353, 348, 11, 207, + -353, 235, -353, 385, -353, -353, -353, -353, 235, -353, + -353, -353, -353, 235, 235, 342, -353, 239, -353, -353, + 241, -353, -353, -353, 3, -353, 352, -353, -353, 235, + -353, -353, 244, -353, -353, -353, -353, -353, -353, 314, + 91, 72, 235, 235, -353, 328, 311, -54, -353, -353, + -353, 289, 388, 456, 295, 248, 264, -353, 312, 255, + 456, 456, 456, 456, 471, 471, 471, 471, 159, 159, + -97, -97, -97, -96, 250, -353, -353, 76, 103, -353, + 251, -353, 52, -353, 256, -353, 18, -353, 346, -353, + -353, -353, -65, -65, -353, 405, 406, -353, 320, -353, + -353, 113, -353, 235, 235, 235, -353, 108, 100, 258, + -353, 295, 456, 264, 261, 132, -353, -353, -353, -353, + 262, 334, -353, -353, -353, 358, 359, 362, 347, 11, + 420, -353, -353, -353, 315, -353, 278, 280, -353, -353, + 25, -65, 126, -353, 235, -353, 422, 281, 146, -353, + -353, 18, 11, -353, -353, -353, 11, 303, 285, 235, + -353, -353, -353, -353, -65, -353, -353, -353, -353, 433, + 344, -31, 286, 235, 173, 235, -353, 9, -65, -353, + -353, -65, 288, 292, -353 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -881,83 +881,83 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 247, 3, 18, 18, 16, + 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 245, 3, 18, 18, 16, 9, 7, 10, 15, 12, 13, 11, 14, 8, 0, - 226, 0, 216, 59, 25, 0, 32, 38, 38, 0, - 0, 0, 0, 215, 57, 57, 0, 30, 0, 228, - 229, 1, 227, 2, 0, 6, 5, 108, 0, 68, - 69, 99, 55, 0, 119, 0, 0, 0, 0, 93, + 224, 0, 214, 59, 25, 0, 32, 38, 38, 0, + 0, 0, 0, 213, 57, 57, 0, 30, 0, 226, + 227, 1, 225, 2, 0, 6, 5, 107, 0, 68, + 69, 99, 55, 0, 117, 0, 0, 0, 0, 93, 28, 0, 63, 0, 0, 0, 0, 31, 0, 0, 4, 0, 0, 87, 0, 0, 81, 82, 80, 0, - 84, 0, 0, 110, 98, 217, 198, 201, 203, 204, - 199, 200, 205, 0, 118, 120, 193, 194, 195, 202, - 196, 197, 24, 23, 0, 0, 63, 0, 58, 0, - 0, 0, 0, 93, 65, 56, 53, 54, 231, 230, - 0, 107, 86, 0, 76, 75, 99, 72, 71, 73, - 83, 79, 0, 99, 0, 0, 77, 109, 26, 0, - 37, 0, 227, 0, 0, 189, 0, 0, 0, 0, - 0, 0, 191, 0, 92, 123, 130, 131, 132, 125, - 127, 133, 126, 145, 134, 135, 136, 129, 124, 138, - 139, 0, 29, 248, 0, 0, 61, 0, 0, 64, - 21, 0, 19, 90, 88, 116, 225, 110, 0, 100, - 101, 106, 110, 112, 114, 111, 121, 0, 35, 0, - 0, 39, 227, 87, 0, 0, 0, 0, 0, 0, - 0, 0, 141, 0, 140, 0, 0, 0, 0, 0, - 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 84, 0, 0, 113, 215, 196, 199, 201, 202, 197, + 198, 203, 0, 116, 118, 191, 192, 193, 200, 194, + 195, 24, 23, 0, 0, 63, 0, 58, 0, 0, + 0, 0, 93, 65, 56, 53, 54, 229, 228, 0, + 106, 86, 0, 76, 75, 99, 72, 71, 73, 83, + 79, 0, 99, 0, 0, 77, 26, 0, 37, 0, + 225, 0, 0, 187, 0, 0, 0, 0, 0, 0, + 189, 0, 92, 121, 128, 129, 130, 123, 125, 131, + 124, 143, 132, 133, 134, 127, 122, 136, 137, 0, + 29, 246, 0, 0, 61, 0, 0, 64, 21, 0, + 19, 90, 88, 114, 223, 113, 0, 98, 100, 105, + 113, 109, 111, 108, 119, 0, 35, 0, 0, 39, + 225, 87, 0, 0, 0, 0, 0, 0, 0, 0, + 139, 0, 138, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 62, 0, 0, 67, 66, 0, 17, 0, - 0, 93, 89, 0, 223, 0, 224, 122, 70, 74, - 0, 105, 104, 103, 78, 0, 0, 0, 43, 0, - 46, 45, 0, 44, 49, 42, 52, 34, 0, 36, - 177, 0, 190, 192, 0, 180, 181, 182, 183, 184, - 185, 0, 0, 0, 0, 0, 164, 0, 0, 0, - 137, 128, 156, 157, 0, 152, 0, 0, 0, 143, - 0, 155, 154, 170, 171, 172, 173, 174, 175, 176, - 147, 146, 149, 148, 150, 151, 0, 27, 249, 0, - 0, 20, 227, 91, 206, 208, 0, 210, 221, 209, - 95, 117, 222, 102, 115, 113, 33, 0, 0, 50, - 0, 41, 40, 0, 168, 0, 0, 0, 162, 0, - 0, 0, 186, 0, 153, 0, 0, 0, 144, 187, - 60, 22, 0, 0, 243, 235, 241, 239, 242, 237, - 0, 0, 0, 220, 214, 218, 0, 85, 0, 0, - 51, 178, 0, 166, 0, 165, 0, 169, 188, 0, - 0, 160, 158, 221, 0, 238, 240, 236, 0, 207, - 222, 0, 47, 48, 179, 163, 167, 161, 159, 211, - 232, 244, 0, 97, 0, 0, 0, 0, 94, 0, - 245, 233, 219, 96, 189, 0, 234 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 62, 0, 0, 67, 66, 0, 17, 0, 0, 93, + 89, 0, 221, 0, 222, 120, 70, 74, 0, 104, + 103, 102, 78, 0, 0, 0, 43, 0, 46, 45, + 0, 44, 49, 42, 52, 34, 0, 36, 175, 0, + 188, 190, 0, 178, 179, 180, 181, 182, 183, 0, + 0, 0, 0, 0, 162, 0, 0, 0, 135, 126, + 154, 155, 0, 150, 0, 0, 0, 141, 0, 153, + 152, 168, 169, 170, 171, 172, 173, 174, 145, 144, + 147, 146, 148, 149, 0, 27, 247, 0, 0, 20, + 225, 91, 204, 206, 0, 208, 219, 207, 95, 115, + 220, 101, 112, 110, 33, 0, 0, 50, 0, 41, + 40, 0, 166, 0, 0, 0, 160, 0, 0, 0, + 184, 0, 151, 0, 0, 0, 142, 185, 60, 22, + 0, 0, 241, 233, 239, 237, 240, 235, 0, 0, + 0, 218, 212, 216, 0, 85, 0, 0, 51, 176, + 0, 164, 0, 163, 0, 167, 186, 0, 0, 158, + 156, 219, 0, 236, 238, 234, 0, 205, 220, 0, + 47, 48, 177, 161, 165, 159, 157, 209, 230, 242, + 0, 97, 0, 0, 0, 0, 94, 0, 243, 231, + 217, 96, 187, 0, 232 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -303, -303, -303, 419, -303, 454, -303, 211, -303, -303, - -303, -303, -303, 203, -303, -303, 445, -303, 196, -303, - -303, -303, 440, -303, -303, -303, 370, -303, -303, 301, - -150, -53, -303, 30, -54, -41, -303, -303, -56, 274, - -303, -303, -303, -106, -303, -303, 8, -303, -303, 226, - -303, -303, 25, -303, -211, -303, 27, 247, -117, -116, - -303, -303, -303, -303, -303, -303, 279, -303, -303, -303, - -303, -303, -303, -303, -303, 51, -63, -112, -303, -303, - -77, -303, -303, -303, -302, 98, -303, -303, -303, 1, - -303, 94, 304, -303, -303, -303, -303, 434, -303, -303, - -303, -303, 83 + -353, -353, -353, 397, -353, 438, -353, 194, -353, -353, + -353, -353, -353, 184, -353, -353, 425, -353, 174, -353, + -353, -353, 421, -353, -353, -353, 350, -353, -353, 284, + -149, -74, -353, 120, -53, -35, -353, -353, -59, 257, + -353, -353, -353, -111, -353, -353, -80, -353, 199, -353, + -353, 89, -219, -353, 83, 216, -116, -151, -353, -353, + -353, -353, -353, -353, 260, -353, -353, -353, -353, -353, + -353, -353, -353, 50, -47, -114, -353, -353, -79, -353, + -353, -353, -352, 77, -353, -353, -353, 5, -353, 79, + 297, -353, -353, -353, -353, 413, -353, -353, -353, -353, + 65 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 14, 15, 16, 17, 55, 191, 192, 18, 113, - 19, 20, 71, 181, 21, 22, 67, 210, 211, 286, - 361, 23, 75, 24, 25, 26, 121, 27, 123, 124, - 28, 136, 137, 138, 60, 89, 90, 141, 61, 133, - 193, 261, 262, 118, 397, 438, 93, 94, 199, 200, - 273, 83, 146, 147, 194, 103, 104, 195, 196, 165, - 166, 167, 168, 169, 170, 171, 219, 172, 173, 174, - 175, 301, 176, 177, 178, 179, 180, 106, 107, 108, - 109, 110, 111, 343, 344, 345, 346, 347, 42, 348, - 393, 394, 395, 267, 29, 30, 49, 50, 349, 390, - 441, 53, 184 + -1, 14, 15, 16, 17, 55, 189, 190, 18, 112, + 19, 20, 71, 179, 21, 22, 67, 208, 209, 284, + 359, 23, 75, 24, 25, 26, 120, 27, 122, 123, + 28, 135, 136, 137, 60, 89, 90, 140, 61, 132, + 191, 259, 260, 117, 395, 436, 93, 197, 198, 271, + 83, 145, 192, 102, 103, 193, 194, 163, 164, 165, + 166, 167, 168, 169, 217, 170, 171, 172, 173, 299, + 174, 175, 176, 177, 178, 105, 106, 107, 108, 109, + 110, 341, 342, 343, 344, 345, 42, 346, 391, 392, + 393, 265, 29, 30, 49, 50, 347, 388, 439, 53, + 182 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -965,154 +965,156 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 164, 105, 208, 33, 85, 131, 36, 182, 96, 97, - 98, 43, 309, 32, 132, 292, 444, 189, 383, 264, - 92, 117, 316, 151, 276, 201, 437, 203, 205, 57, - 227, 31, 86, 139, 235, 227, 139, 46, 227, 143, - 69, 218, 72, 222, 37, 224, 226, 77, 235, 228, - 44, 317, 32, 384, 228, 372, 152, 228, 385, 59, - 263, 250, 289, 87, 386, 387, 304, 186, 115, 116, - 255, 47, 38, 249, 264, 250, 126, 127, 45, 388, - 363, 86, 227, -244, 389, 305, 206, 311, 84, 419, - 424, 252, 306, 91, 253, 153, 144, 88, 198, 99, - 302, 228, 39, 34, 40, 222, 188, 377, 128, 225, - 312, 313, 87, 314, 145, 315, 431, 35, 41, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 392, 58, 155, 96, 97, 98, - 100, 101, 139, 263, 197, 269, 88, 48, 51, 227, - 57, 202, 405, 201, -212, 350, 185, 271, 354, 355, - 290, 294, 293, 162, 410, 182, 102, 342, 228, 155, - 96, 97, 98, 336, 156, 157, 227, 227, 258, 425, - 367, 259, 227, 272, 52, 54, 366, 369, 370, 265, - 406, 105, 382, 227, 105, 228, 228, 227, 62, 305, - 374, 228, 155, 96, 97, 98, 368, 156, 157, 217, - 433, 158, 228, 227, 63, 64, 228, 155, 96, 97, - 98, 319, 268, 287, 359, 70, 288, 274, 99, 66, - 65, 73, 228, 155, 96, 97, 98, 78, 204, 320, - 156, 157, 360, 213, 158, 214, 159, 74, 402, 403, - 404, 235, 337, 371, 79, 156, 157, 408, 81, 380, - 160, 99, 149, 381, 376, 57, 149, 82, 217, 100, - 101, 220, 157, 246, 247, 248, 249, 158, 250, 159, - 95, 339, 161, 162, 340, 155, 96, 97, 98, 426, - 163, 112, 158, 160, 99, 102, 114, 401, 412, 278, - 263, 263, 100, 101, 428, 279, 119, 263, 158, 99, - 117, 442, 159, 280, 253, 161, 162, 120, 440, 122, - 443, 409, 125, 163, 157, 99, 160, 159, 102, 229, - 58, 130, 98, 132, 134, 100, 101, 281, 135, 142, - 140, 160, 148, 221, 150, 96, 149, 183, 161, 162, - 100, 101, 190, 187, 282, 91, 163, 160, 207, 230, - 158, 102, 13, 161, 162, 209, 100, 101, 212, 283, - 215, 163, 251, 284, 216, 254, 102, 99, 223, 161, - 162, 383, 257, 260, 275, 263, 285, 163, 270, 277, - 57, 310, 102, 307, 318, 221, 338, 352, 357, 365, - 230, 358, 316, 364, 231, 227, 375, 250, 378, 160, - 295, 296, 297, 298, 299, 300, 384, 379, 100, 101, - 396, 385, 398, 391, 399, 232, 400, 386, 387, 407, - 411, 161, 162, 233, 234, 414, 413, 415, 416, 163, - 235, 236, 388, 230, 102, 231, -244, 389, 417, 418, - 237, 238, 239, 240, 241, 420, 421, 242, 243, 373, - 244, 245, 246, 247, 248, 249, 308, 250, 214, 422, - 341, 80, 56, 423, 432, 234, 427, 230, 446, 439, - 356, 235, 236, 68, 362, 76, 154, 291, 231, 256, - 445, 237, 238, 239, 240, 241, 353, 303, 242, 243, - 266, 244, 245, 246, 247, 248, 249, 429, 250, 308, - 351, 230, 430, 129, 0, 436, 0, -213, 234, 0, - 0, 0, -247, 0, 235, 236, 0, 383, 0, 0, - 0, 0, 0, 0, 237, 238, 239, 240, 241, 0, - 0, 242, 243, 0, 244, 245, 246, 247, 248, 249, - 0, 250, 234, 0, 0, 0, 0, 0, 235, -247, - 0, 0, 384, 0, 0, 0, 0, 385, -247, -247, - -247, 240, 241, 386, 387, 242, 243, 434, 244, 245, - 246, 247, 248, 249, 0, 250, 234, 0, 388, 0, - 0, 0, 235, 389, 0, 0, -246, 0, 0, 0, - 0, 0, 0, 1, 0, -247, -247, 0, 0, -247, - -247, 2, 244, 245, 246, 247, 248, 249, 3, 250, - 0, 1, 4, 0, 0, 0, 435, 0, 5, 2, - 0, 6, 7, 0, 0, 0, 3, 0, 0, 0, - 4, 8, 9, 0, 0, 0, 5, 0, 0, 6, - 7, 0, 10, 0, 0, 0, 0, 0, 0, 8, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 10, 0, 0, 0, 0, 0, 0, 0, 11, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 12, 0, 0, 11, 0, 0, 13, + 162, 206, 307, 130, 180, 85, 220, 33, 222, 290, + 36, 187, 442, 435, 32, 43, 131, 104, 142, 116, + 46, 262, 37, 314, 31, 199, 92, 201, 203, 44, + 138, 233, 233, 138, 95, 96, 97, 417, 57, 32, + 216, 225, 149, 274, 69, 224, 72, 143, 86, 34, + 38, 77, 315, 317, 47, 195, 247, 45, 248, 248, + 226, 287, 200, 250, 429, 144, 251, 184, 220, 253, + 361, 318, 114, 115, 262, 150, 312, 381, 313, 87, + 125, 126, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 375, 357, 300, + 204, 225, 370, 196, 186, 57, 39, 261, 223, 310, + 311, 183, 382, 88, 151, 86, 358, 383, 35, 40, + 226, 225, 267, 384, 385, 98, 153, 95, 96, 97, + 261, 225, 153, 95, 96, 97, 390, 138, 386, 211, + 226, 212, -242, 387, 58, 41, 87, 48, 348, 59, + 226, 51, 199, 302, 408, 365, 291, 352, 353, 160, + 292, 180, 288, 372, 154, 155, 99, 100, 340, 334, + 154, 155, 303, 309, 303, 62, 91, 225, 84, 304, + 88, 366, 52, 422, 54, 269, 367, 368, 276, 263, + 364, 380, 101, 66, 277, 64, 226, 225, 127, 404, + 431, 156, 278, 63, 65, 104, 225, 156, 104, 256, + 225, 270, 257, -210, 225, 70, 226, 403, 98, 285, + 406, 74, 286, 215, 98, 226, 279, 225, 202, 226, + 78, 215, 225, 226, 378, 423, 157, 147, 153, 95, + 96, 97, 157, 280, 81, 73, 226, 400, 401, 402, + 158, 226, 369, 79, 335, 82, 158, 94, 281, 99, + 100, 379, 282, 374, 147, 99, 100, 153, 95, 96, + 97, 399, 159, 160, 261, 283, 154, 155, 159, 160, + 161, 111, 113, 116, 266, 101, 161, 233, 424, 272, + 410, 101, 118, 261, 153, 95, 96, 97, 153, 95, + 96, 97, 119, 121, 426, 154, 155, 261, 124, 244, + 245, 246, 247, 156, 248, 57, 97, 438, 58, 441, + 407, 293, 294, 295, 296, 297, 298, 129, 381, 131, + 98, 440, 218, 155, 251, 337, 133, 155, 338, 134, + 141, 139, 156, 146, 147, 148, 95, 181, 157, 185, + 227, 188, 91, 205, 13, 207, 210, 213, 214, 98, + 221, 249, 158, 382, 258, 261, 252, 255, 383, 156, + 273, 99, 100, 156, 384, 385, 268, 157, 275, 57, + 228, 305, 336, 308, 159, 160, 98, 316, 350, 386, + 98, 158, 161, -242, 387, 225, 355, 101, 356, 363, + 99, 100, 362, 314, 219, 373, 377, 376, 219, 394, + 248, 396, 397, 159, 160, 398, 405, 389, 158, 409, + 411, 161, 158, 418, 412, 229, 101, 99, 100, 413, + 414, 99, 100, 415, 419, 228, 420, 416, 421, 425, + 159, 160, 430, 437, 159, 160, 230, 212, 161, 80, + 444, 339, 161, 101, 231, 232, 56, 101, 381, 354, + 360, 233, 234, 68, -211, 152, 76, 351, 289, 228, + 254, 235, 236, 237, 238, 239, 301, 349, 240, 241, + 229, 242, 243, 244, 245, 246, 247, 443, 248, 428, + 427, 264, 128, 382, 371, 434, 0, 0, 383, 0, + 0, 306, 0, 228, 384, 385, 0, 0, 432, 0, + 232, 0, 0, 0, 229, 0, 233, 234, 228, 386, + 0, 0, 0, 0, 387, 0, 235, 236, 237, 238, + 239, 0, 0, 240, 241, 306, 242, 243, 244, 245, + 246, 247, 0, 248, 232, 0, 0, 0, -245, 0, + 233, 234, 0, 0, 0, 0, 0, 433, 0, 0, + 235, 236, 237, 238, 239, 0, 0, 240, 241, 0, + 242, 243, 244, 245, 246, 247, 0, 248, 232, 0, + 0, 0, 0, 0, 233, -245, 0, 0, 0, 0, + 0, 0, 0, 232, -245, -245, -245, 238, 239, 233, + 0, 240, 241, -244, 242, 243, 244, 245, 246, 247, + 1, 248, -245, -245, 0, 0, -245, -245, 2, 242, + 243, 244, 245, 246, 247, 3, 248, 0, 1, 4, + 0, 0, 0, 0, 0, 5, 2, 0, 6, 7, + 0, 0, 0, 3, 0, 0, 0, 4, 8, 9, + 0, 0, 0, 5, 0, 0, 6, 7, 0, 10, + 0, 0, 0, 0, 0, 0, 8, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, + 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 12, 0, 0, 0, 0, 0, 13 + 12, 0, 0, 11, 0, 0, 13, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, + 0, 0, 0, 0, 13 }; static const yytype_int16 yycheck[] = { - 117, 64, 152, 2, 58, 82, 5, 119, 4, 5, - 6, 10, 223, 3, 12, 3, 3, 123, 25, 3, - 61, 76, 92, 85, 48, 142, 44, 144, 145, 51, - 106, 26, 9, 89, 128, 106, 92, 19, 106, 92, - 39, 158, 41, 159, 73, 161, 163, 46, 128, 125, - 73, 121, 3, 60, 125, 156, 118, 125, 65, 29, - 161, 155, 212, 40, 71, 72, 83, 121, 67, 68, - 187, 53, 101, 153, 3, 155, 75, 76, 101, 86, - 291, 9, 106, 90, 91, 102, 149, 158, 58, 391, - 158, 158, 109, 70, 161, 157, 48, 74, 139, 95, - 217, 125, 85, 3, 85, 221, 161, 318, 78, 163, - 227, 228, 40, 229, 66, 231, 418, 3, 89, 235, - 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 118, 157, 3, 4, 5, 6, - 136, 137, 198, 161, 136, 198, 74, 3, 0, 106, - 51, 143, 109, 270, 161, 261, 57, 81, 275, 276, - 158, 215, 150, 150, 375, 277, 162, 157, 125, 3, - 4, 5, 6, 250, 41, 42, 106, 106, 158, 109, - 83, 161, 106, 107, 160, 103, 99, 304, 305, 118, - 99, 254, 342, 106, 257, 125, 125, 106, 3, 102, - 316, 125, 3, 4, 5, 6, 109, 41, 42, 102, - 421, 78, 125, 106, 159, 157, 125, 3, 4, 5, - 6, 95, 197, 158, 95, 108, 161, 202, 95, 120, - 85, 115, 125, 3, 4, 5, 6, 118, 105, 113, - 41, 42, 113, 157, 78, 159, 113, 120, 365, 366, - 367, 128, 251, 307, 161, 41, 42, 373, 88, 158, - 127, 95, 161, 158, 318, 51, 161, 117, 102, 136, - 137, 41, 42, 150, 151, 152, 153, 78, 155, 113, - 3, 254, 149, 150, 257, 3, 4, 5, 6, 406, - 157, 4, 78, 127, 95, 162, 113, 158, 158, 24, - 161, 161, 136, 137, 158, 30, 84, 161, 78, 95, - 76, 158, 113, 38, 161, 149, 150, 157, 435, 3, - 437, 375, 41, 157, 42, 95, 127, 113, 162, 17, - 157, 157, 6, 12, 158, 136, 137, 62, 158, 119, - 105, 127, 158, 113, 41, 4, 161, 3, 149, 150, - 136, 137, 3, 138, 79, 70, 157, 127, 116, 47, - 78, 162, 103, 149, 150, 3, 136, 137, 118, 94, - 157, 157, 89, 98, 157, 157, 162, 95, 155, 149, - 150, 25, 157, 85, 48, 161, 111, 157, 161, 84, - 51, 158, 162, 157, 157, 113, 3, 3, 157, 85, - 47, 157, 92, 158, 92, 106, 157, 155, 95, 127, - 130, 131, 132, 133, 134, 135, 60, 156, 136, 137, - 63, 65, 6, 161, 6, 113, 95, 71, 72, 158, - 158, 149, 150, 121, 122, 90, 158, 71, 71, 157, - 128, 129, 86, 47, 162, 92, 90, 91, 71, 90, - 138, 139, 140, 141, 142, 3, 119, 145, 146, 106, - 148, 149, 150, 151, 152, 153, 113, 155, 159, 158, - 259, 52, 18, 158, 157, 122, 158, 47, 158, 157, - 277, 128, 129, 38, 288, 45, 116, 213, 92, 188, - 439, 138, 139, 140, 141, 142, 270, 218, 145, 146, - 196, 148, 149, 150, 151, 152, 153, 413, 155, 113, - 263, 47, 414, 79, -1, 432, -1, 161, 122, -1, - -1, -1, 92, -1, 128, 129, -1, 25, -1, -1, - -1, -1, -1, -1, 138, 139, 140, 141, 142, -1, - -1, 145, 146, -1, 148, 149, 150, 151, 152, 153, - -1, 155, 122, -1, -1, -1, -1, -1, 128, 129, - -1, -1, 60, -1, -1, -1, -1, 65, 138, 139, - 140, 141, 142, 71, 72, 145, 146, 75, 148, 149, - 150, 151, 152, 153, -1, 155, 122, -1, 86, -1, - -1, -1, 128, 91, -1, -1, 0, -1, -1, -1, - -1, -1, -1, 7, -1, 141, 142, -1, -1, 145, - 146, 15, 148, 149, 150, 151, 152, 153, 22, 155, - -1, 7, 26, -1, -1, -1, 124, -1, 32, 15, - -1, 35, 36, -1, -1, -1, 22, -1, -1, -1, - 26, 45, 46, -1, -1, -1, 32, -1, -1, 35, - 36, -1, 56, -1, -1, -1, -1, -1, -1, 45, - 46, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 56, -1, -1, -1, -1, -1, -1, -1, 82, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 97, -1, -1, 82, -1, -1, 103, + 116, 150, 221, 82, 118, 58, 157, 2, 159, 3, + 5, 122, 3, 44, 3, 10, 12, 64, 92, 76, + 19, 3, 73, 92, 26, 141, 61, 143, 144, 73, + 89, 128, 128, 92, 4, 5, 6, 389, 51, 3, + 156, 106, 85, 48, 39, 161, 41, 48, 9, 3, + 101, 46, 121, 95, 53, 135, 153, 101, 155, 155, + 125, 210, 142, 158, 416, 66, 161, 120, 219, 185, + 289, 113, 67, 68, 3, 118, 227, 25, 229, 40, + 75, 76, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 316, 95, 215, + 147, 106, 156, 138, 161, 51, 85, 161, 161, 225, + 226, 57, 60, 74, 157, 9, 113, 65, 3, 85, + 125, 106, 196, 71, 72, 95, 3, 4, 5, 6, + 161, 106, 3, 4, 5, 6, 118, 196, 86, 157, + 125, 159, 90, 91, 157, 89, 40, 3, 259, 29, + 125, 0, 268, 83, 373, 83, 150, 273, 274, 150, + 213, 275, 158, 314, 41, 42, 136, 137, 157, 248, + 41, 42, 102, 158, 102, 3, 70, 106, 58, 109, + 74, 109, 160, 158, 103, 81, 302, 303, 24, 118, + 99, 340, 162, 120, 30, 157, 125, 106, 78, 99, + 419, 78, 38, 159, 85, 252, 106, 78, 255, 158, + 106, 107, 161, 161, 106, 108, 125, 109, 95, 158, + 371, 120, 161, 102, 95, 125, 62, 106, 105, 125, + 118, 102, 106, 125, 158, 109, 113, 161, 3, 4, + 5, 6, 113, 79, 88, 115, 125, 363, 364, 365, + 127, 125, 305, 161, 249, 117, 127, 3, 94, 136, + 137, 158, 98, 316, 161, 136, 137, 3, 4, 5, + 6, 158, 149, 150, 161, 111, 41, 42, 149, 150, + 157, 4, 113, 76, 195, 162, 157, 128, 404, 200, + 158, 162, 84, 161, 3, 4, 5, 6, 3, 4, + 5, 6, 157, 3, 158, 41, 42, 161, 41, 150, + 151, 152, 153, 78, 155, 51, 6, 433, 157, 435, + 373, 130, 131, 132, 133, 134, 135, 157, 25, 12, + 95, 158, 41, 42, 161, 252, 158, 42, 255, 158, + 119, 105, 78, 158, 161, 41, 4, 3, 113, 138, + 17, 3, 70, 116, 103, 3, 118, 157, 157, 95, + 155, 89, 127, 60, 85, 161, 157, 157, 65, 78, + 48, 136, 137, 78, 71, 72, 161, 113, 84, 51, + 47, 157, 3, 158, 149, 150, 95, 157, 3, 86, + 95, 127, 157, 90, 91, 106, 157, 162, 157, 85, + 136, 137, 158, 92, 113, 157, 156, 95, 113, 63, + 155, 6, 6, 149, 150, 95, 158, 161, 127, 158, + 158, 157, 127, 3, 90, 92, 162, 136, 137, 71, + 71, 136, 137, 71, 119, 47, 158, 90, 158, 158, + 149, 150, 157, 157, 149, 150, 113, 159, 157, 52, + 158, 257, 157, 162, 121, 122, 18, 162, 25, 275, + 286, 128, 129, 38, 161, 115, 45, 268, 211, 47, + 186, 138, 139, 140, 141, 142, 216, 261, 145, 146, + 92, 148, 149, 150, 151, 152, 153, 437, 155, 412, + 411, 194, 79, 60, 106, 430, -1, -1, 65, -1, + -1, 113, -1, 47, 71, 72, -1, -1, 75, -1, + 122, -1, -1, -1, 92, -1, 128, 129, 47, 86, + -1, -1, -1, -1, 91, -1, 138, 139, 140, 141, + 142, -1, -1, 145, 146, 113, 148, 149, 150, 151, + 152, 153, -1, 155, 122, -1, -1, -1, 92, -1, + 128, 129, -1, -1, -1, -1, -1, 124, -1, -1, + 138, 139, 140, 141, 142, -1, -1, 145, 146, -1, + 148, 149, 150, 151, 152, 153, -1, 155, 122, -1, + -1, -1, -1, -1, 128, 129, -1, -1, -1, -1, + -1, -1, -1, 122, 138, 139, 140, 141, 142, 128, + -1, 145, 146, 0, 148, 149, 150, 151, 152, 153, + 7, 155, 141, 142, -1, -1, 145, 146, 15, 148, + 149, 150, 151, 152, 153, 22, 155, -1, 7, 26, + -1, -1, -1, -1, -1, 32, 15, -1, 35, 36, + -1, -1, -1, 22, -1, -1, -1, 26, 45, 46, + -1, -1, -1, 32, -1, -1, 35, 36, -1, 56, + -1, -1, -1, -1, -1, -1, 45, 46, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 56, -1, -1, + -1, -1, -1, -1, -1, 82, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 97, -1, -1, -1, -1, -1, 103 + 97, -1, -1, 82, -1, -1, 103, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 97, -1, + -1, -1, -1, -1, 103 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -1121,49 +1123,49 @@ static const yytype_uint16 yystos[] = { 0, 7, 15, 22, 26, 32, 35, 36, 45, 46, 56, 82, 97, 103, 164, 165, 166, 167, 171, 173, - 174, 177, 178, 184, 186, 187, 188, 190, 193, 257, - 258, 26, 3, 252, 3, 3, 252, 73, 101, 85, - 85, 89, 251, 252, 73, 101, 19, 53, 3, 259, - 260, 0, 160, 264, 103, 168, 168, 51, 157, 196, - 197, 201, 3, 159, 157, 85, 120, 179, 179, 252, - 108, 175, 252, 115, 120, 185, 185, 252, 118, 161, - 166, 88, 117, 214, 196, 197, 9, 40, 74, 198, - 199, 70, 198, 209, 210, 3, 4, 5, 6, 95, - 136, 137, 162, 218, 219, 239, 240, 241, 242, 243, - 244, 245, 4, 172, 113, 252, 252, 76, 206, 84, - 157, 189, 3, 191, 192, 41, 252, 252, 196, 260, - 157, 243, 12, 202, 158, 158, 194, 195, 196, 201, - 105, 200, 119, 194, 48, 66, 215, 216, 158, 161, - 41, 85, 118, 157, 189, 3, 41, 42, 78, 113, - 127, 149, 150, 157, 221, 222, 223, 224, 225, 226, - 227, 228, 230, 231, 232, 233, 235, 236, 237, 238, - 239, 176, 240, 3, 265, 57, 197, 138, 161, 206, - 3, 169, 170, 203, 217, 220, 221, 209, 198, 211, - 212, 221, 209, 221, 105, 221, 239, 116, 193, 3, - 180, 181, 118, 157, 159, 157, 157, 102, 221, 229, - 41, 113, 222, 155, 222, 197, 221, 106, 125, 17, - 47, 92, 113, 121, 122, 128, 129, 138, 139, 140, - 141, 142, 145, 146, 148, 149, 150, 151, 152, 153, - 155, 89, 158, 161, 157, 221, 192, 157, 158, 161, - 85, 204, 205, 161, 3, 118, 255, 256, 215, 194, - 161, 81, 107, 213, 215, 48, 48, 84, 24, 30, - 38, 62, 79, 94, 98, 111, 182, 158, 161, 193, - 158, 202, 3, 150, 197, 130, 131, 132, 133, 134, - 135, 234, 221, 229, 83, 102, 109, 157, 113, 217, - 158, 158, 221, 221, 222, 222, 92, 121, 157, 95, - 113, 222, 222, 222, 222, 222, 222, 222, 222, 222, - 222, 222, 222, 222, 222, 222, 243, 252, 3, 219, - 219, 170, 157, 246, 247, 248, 249, 250, 252, 261, - 206, 220, 3, 212, 221, 221, 176, 157, 157, 95, - 113, 183, 181, 217, 158, 85, 99, 83, 109, 221, - 221, 197, 156, 106, 222, 157, 197, 217, 95, 156, - 158, 158, 193, 25, 60, 65, 71, 72, 86, 91, - 262, 161, 118, 253, 254, 255, 63, 207, 6, 6, - 95, 158, 221, 221, 221, 109, 99, 158, 222, 197, - 217, 158, 158, 158, 90, 71, 71, 71, 90, 247, - 3, 119, 158, 158, 158, 109, 221, 158, 158, 254, - 248, 247, 157, 217, 75, 124, 265, 44, 208, 157, - 221, 263, 158, 221, 3, 238, 158 + 174, 177, 178, 184, 186, 187, 188, 190, 193, 255, + 256, 26, 3, 250, 3, 3, 250, 73, 101, 85, + 85, 89, 249, 250, 73, 101, 19, 53, 3, 257, + 258, 0, 160, 262, 103, 168, 168, 51, 157, 196, + 197, 201, 3, 159, 157, 85, 120, 179, 179, 250, + 108, 175, 250, 115, 120, 185, 185, 250, 118, 161, + 166, 88, 117, 213, 196, 197, 9, 40, 74, 198, + 199, 70, 198, 209, 3, 4, 5, 6, 95, 136, + 137, 162, 216, 217, 237, 238, 239, 240, 241, 242, + 243, 4, 172, 113, 250, 250, 76, 206, 84, 157, + 189, 3, 191, 192, 41, 250, 250, 196, 258, 157, + 241, 12, 202, 158, 158, 194, 195, 196, 201, 105, + 200, 119, 194, 48, 66, 214, 158, 161, 41, 85, + 118, 157, 189, 3, 41, 42, 78, 113, 127, 149, + 150, 157, 219, 220, 221, 222, 223, 224, 225, 226, + 228, 229, 230, 231, 233, 234, 235, 236, 237, 176, + 238, 3, 263, 57, 197, 138, 161, 206, 3, 169, + 170, 203, 215, 218, 219, 209, 198, 210, 211, 219, + 209, 219, 105, 219, 237, 116, 193, 3, 180, 181, + 118, 157, 159, 157, 157, 102, 219, 227, 41, 113, + 220, 155, 220, 197, 219, 106, 125, 17, 47, 92, + 113, 121, 122, 128, 129, 138, 139, 140, 141, 142, + 145, 146, 148, 149, 150, 151, 152, 153, 155, 89, + 158, 161, 157, 219, 192, 157, 158, 161, 85, 204, + 205, 161, 3, 118, 253, 254, 214, 194, 161, 81, + 107, 212, 214, 48, 48, 84, 24, 30, 38, 62, + 79, 94, 98, 111, 182, 158, 161, 193, 158, 202, + 3, 150, 197, 130, 131, 132, 133, 134, 135, 232, + 219, 227, 83, 102, 109, 157, 113, 215, 158, 158, + 219, 219, 220, 220, 92, 121, 157, 95, 113, 220, + 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, + 220, 220, 220, 220, 241, 250, 3, 217, 217, 170, + 157, 244, 245, 246, 247, 248, 250, 259, 206, 218, + 3, 211, 219, 219, 176, 157, 157, 95, 113, 183, + 181, 215, 158, 85, 99, 83, 109, 219, 219, 197, + 156, 106, 220, 157, 197, 215, 95, 156, 158, 158, + 193, 25, 60, 65, 71, 72, 86, 91, 260, 161, + 118, 251, 252, 253, 63, 207, 6, 6, 95, 158, + 219, 219, 219, 109, 99, 158, 220, 197, 215, 158, + 158, 158, 90, 71, 71, 71, 90, 245, 3, 119, + 158, 158, 158, 109, 219, 158, 158, 252, 246, 245, + 157, 215, 75, 124, 263, 44, 208, 157, 219, 261, + 158, 219, 3, 236, 158 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ @@ -1179,21 +1181,21 @@ static const yytype_uint16 yyr1[] = 193, 194, 194, 195, 195, 196, 196, 197, 197, 198, 199, 199, 199, 200, 200, 201, 202, 202, 203, 204, 204, 205, 206, 206, 207, 207, 208, 208, 209, 209, - 210, 211, 211, 212, 213, 213, 213, 214, 214, 215, - 215, 216, 216, 216, 216, 216, 217, 217, 218, 218, - 219, 219, 220, 221, 221, 221, 221, 221, 222, 222, - 222, 222, 222, 222, 222, 222, 222, 222, 223, 223, - 224, 224, 224, 224, 224, 225, 225, 225, 225, 225, - 225, 225, 225, 225, 225, 225, 226, 226, 227, 227, - 227, 227, 228, 228, 228, 228, 229, 229, 230, 230, - 231, 231, 231, 231, 231, 231, 231, 232, 232, 233, - 234, 234, 234, 234, 234, 234, 235, 236, 237, 238, - 238, 238, 238, 239, 239, 239, 239, 239, 240, 241, - 241, 242, 242, 243, 244, 245, 246, 246, 247, 247, - 248, 248, 249, 249, 250, 251, 252, 252, 253, 253, - 254, 254, 255, 255, 256, 256, 257, 257, 258, 259, - 259, 260, 261, 261, 261, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 262, 263, 264, 264, 265, 265 + 210, 210, 211, 212, 212, 212, 213, 213, 214, 214, + 214, 214, 214, 214, 215, 215, 216, 216, 217, 217, + 218, 219, 219, 219, 219, 219, 220, 220, 220, 220, + 220, 220, 220, 220, 220, 220, 221, 221, 222, 222, + 222, 222, 222, 223, 223, 223, 223, 223, 223, 223, + 223, 223, 223, 223, 224, 224, 225, 225, 225, 225, + 226, 226, 226, 226, 227, 227, 228, 228, 229, 229, + 229, 229, 229, 229, 229, 230, 230, 231, 232, 232, + 232, 232, 232, 232, 233, 234, 235, 236, 236, 236, + 236, 237, 237, 237, 237, 237, 238, 239, 239, 240, + 240, 241, 242, 243, 244, 244, 245, 245, 246, 246, + 247, 247, 248, 249, 250, 250, 251, 251, 252, 252, + 253, 253, 254, 254, 255, 255, 256, 257, 257, 258, + 259, 259, 259, 260, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 261, 262, 262, 263, 263 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -1208,22 +1210,22 @@ static const yytype_uint8 yyr2[] = 8, 5, 3, 0, 5, 1, 3, 3, 2, 2, 6, 1, 1, 1, 3, 3, 3, 3, 5, 2, 1, 1, 1, 1, 0, 7, 1, 0, 1, 1, - 0, 2, 2, 0, 4, 0, 2, 0, 1, 0, - 3, 1, 3, 2, 1, 1, 0, 2, 0, 1, - 0, 2, 2, 4, 2, 4, 1, 3, 1, 0, - 1, 3, 2, 1, 1, 1, 1, 1, 3, 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, 3, 5, 6, - 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, 3, 1, 1, - 1, 4, 1, 3, 2, 1, 1, 3, 1, 5, - 1, 0, 2, 1, 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 + 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, 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, 3, 5, 6, 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, 3, 1, 1, 1, 4, + 1, 3, 2, 1, 1, 3, 1, 5, 1, 0, + 2, 1, 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 }; @@ -1729,25 +1731,25 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio case 3: /* IDENTIFIER */ #line 146 "bison_parser.y" { free( (((*yyvaluep).sval)) ); } -#line 1733 "bison_parser.cpp" +#line 1735 "bison_parser.cpp" break; case 4: /* STRING */ #line 146 "bison_parser.y" { free( (((*yyvaluep).sval)) ); } -#line 1739 "bison_parser.cpp" +#line 1741 "bison_parser.cpp" break; case 5: /* FLOATVAL */ #line 144 "bison_parser.y" { } -#line 1745 "bison_parser.cpp" +#line 1747 "bison_parser.cpp" break; case 6: /* INTVAL */ #line 144 "bison_parser.y" { } -#line 1751 "bison_parser.cpp" +#line 1753 "bison_parser.cpp" break; case 165: /* statement_list */ @@ -1760,19 +1762,19 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).stmt_vec)); } -#line 1764 "bison_parser.cpp" +#line 1766 "bison_parser.cpp" break; case 166: /* statement */ #line 155 "bison_parser.y" { delete (((*yyvaluep).statement)); } -#line 1770 "bison_parser.cpp" +#line 1772 "bison_parser.cpp" break; case 167: /* preparable_statement */ #line 155 "bison_parser.y" { delete (((*yyvaluep).statement)); } -#line 1776 "bison_parser.cpp" +#line 1778 "bison_parser.cpp" break; case 168: /* opt_hints */ @@ -1785,7 +1787,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).expr_vec)); } -#line 1789 "bison_parser.cpp" +#line 1791 "bison_parser.cpp" break; case 169: /* hint_list */ @@ -1798,67 +1800,67 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).expr_vec)); } -#line 1802 "bison_parser.cpp" +#line 1804 "bison_parser.cpp" break; case 170: /* hint */ #line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 1808 "bison_parser.cpp" +#line 1810 "bison_parser.cpp" break; case 171: /* prepare_statement */ #line 155 "bison_parser.y" { delete (((*yyvaluep).prep_stmt)); } -#line 1814 "bison_parser.cpp" +#line 1816 "bison_parser.cpp" break; case 172: /* prepare_target_query */ #line 146 "bison_parser.y" { free( (((*yyvaluep).sval)) ); } -#line 1820 "bison_parser.cpp" +#line 1822 "bison_parser.cpp" break; case 173: /* execute_statement */ #line 155 "bison_parser.y" { delete (((*yyvaluep).exec_stmt)); } -#line 1826 "bison_parser.cpp" +#line 1828 "bison_parser.cpp" break; case 174: /* import_statement */ #line 155 "bison_parser.y" { delete (((*yyvaluep).import_stmt)); } -#line 1832 "bison_parser.cpp" +#line 1834 "bison_parser.cpp" break; case 175: /* import_file_type */ #line 144 "bison_parser.y" { } -#line 1838 "bison_parser.cpp" +#line 1840 "bison_parser.cpp" break; case 176: /* file_path */ #line 146 "bison_parser.y" { free( (((*yyvaluep).sval)) ); } -#line 1844 "bison_parser.cpp" +#line 1846 "bison_parser.cpp" break; case 177: /* show_statement */ #line 155 "bison_parser.y" { delete (((*yyvaluep).show_stmt)); } -#line 1850 "bison_parser.cpp" +#line 1852 "bison_parser.cpp" break; case 178: /* create_statement */ #line 155 "bison_parser.y" { delete (((*yyvaluep).create_stmt)); } -#line 1856 "bison_parser.cpp" +#line 1858 "bison_parser.cpp" break; case 179: /* opt_not_exists */ #line 144 "bison_parser.y" { } -#line 1862 "bison_parser.cpp" +#line 1864 "bison_parser.cpp" break; case 180: /* column_def_commalist */ @@ -1871,55 +1873,55 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).column_vec)); } -#line 1875 "bison_parser.cpp" +#line 1877 "bison_parser.cpp" break; case 181: /* column_def */ #line 155 "bison_parser.y" { delete (((*yyvaluep).column_t)); } -#line 1881 "bison_parser.cpp" +#line 1883 "bison_parser.cpp" break; case 182: /* column_type */ #line 144 "bison_parser.y" { } -#line 1887 "bison_parser.cpp" +#line 1889 "bison_parser.cpp" break; case 183: /* opt_column_nullable */ #line 144 "bison_parser.y" { } -#line 1893 "bison_parser.cpp" +#line 1895 "bison_parser.cpp" break; case 184: /* drop_statement */ #line 155 "bison_parser.y" { delete (((*yyvaluep).drop_stmt)); } -#line 1899 "bison_parser.cpp" +#line 1901 "bison_parser.cpp" break; case 185: /* opt_exists */ #line 144 "bison_parser.y" { } -#line 1905 "bison_parser.cpp" +#line 1907 "bison_parser.cpp" break; case 186: /* delete_statement */ #line 155 "bison_parser.y" { delete (((*yyvaluep).delete_stmt)); } -#line 1911 "bison_parser.cpp" +#line 1913 "bison_parser.cpp" break; case 187: /* truncate_statement */ #line 155 "bison_parser.y" { delete (((*yyvaluep).delete_stmt)); } -#line 1917 "bison_parser.cpp" +#line 1919 "bison_parser.cpp" break; case 188: /* insert_statement */ #line 155 "bison_parser.y" { delete (((*yyvaluep).insert_stmt)); } -#line 1923 "bison_parser.cpp" +#line 1925 "bison_parser.cpp" break; case 189: /* opt_column_list */ @@ -1932,13 +1934,13 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).str_vec)); } -#line 1936 "bison_parser.cpp" +#line 1938 "bison_parser.cpp" break; case 190: /* update_statement */ #line 155 "bison_parser.y" { delete (((*yyvaluep).update_stmt)); } -#line 1942 "bison_parser.cpp" +#line 1944 "bison_parser.cpp" break; case 191: /* update_clause_commalist */ @@ -1951,73 +1953,73 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).update_vec)); } -#line 1955 "bison_parser.cpp" +#line 1957 "bison_parser.cpp" break; case 192: /* update_clause */ #line 155 "bison_parser.y" { delete (((*yyvaluep).update_t)); } -#line 1961 "bison_parser.cpp" +#line 1963 "bison_parser.cpp" break; case 193: /* select_statement */ #line 155 "bison_parser.y" { delete (((*yyvaluep).select_stmt)); } -#line 1967 "bison_parser.cpp" +#line 1969 "bison_parser.cpp" break; case 194: /* select_statement_in_set_operation */ #line 155 "bison_parser.y" { delete (((*yyvaluep).select_stmt)); } -#line 1973 "bison_parser.cpp" +#line 1975 "bison_parser.cpp" break; case 195: /* select_part_of_set_operation */ #line 155 "bison_parser.y" { delete (((*yyvaluep).select_stmt)); } -#line 1979 "bison_parser.cpp" +#line 1981 "bison_parser.cpp" break; case 196: /* select_with_paren */ #line 155 "bison_parser.y" { delete (((*yyvaluep).select_stmt)); } -#line 1985 "bison_parser.cpp" +#line 1987 "bison_parser.cpp" break; case 197: /* select_no_paren */ #line 155 "bison_parser.y" { delete (((*yyvaluep).select_stmt)); } -#line 1991 "bison_parser.cpp" +#line 1993 "bison_parser.cpp" break; case 198: /* set_operator */ #line 155 "bison_parser.y" { delete (((*yyvaluep).set_operator_t)); } -#line 1997 "bison_parser.cpp" +#line 1999 "bison_parser.cpp" break; case 199: /* set_type */ #line 155 "bison_parser.y" { delete (((*yyvaluep).set_operator_t)); } -#line 2003 "bison_parser.cpp" +#line 2005 "bison_parser.cpp" break; case 200: /* opt_all */ #line 144 "bison_parser.y" { } -#line 2009 "bison_parser.cpp" +#line 2011 "bison_parser.cpp" break; case 201: /* select_clause */ #line 155 "bison_parser.y" { delete (((*yyvaluep).select_stmt)); } -#line 2015 "bison_parser.cpp" +#line 2017 "bison_parser.cpp" break; case 202: /* opt_distinct */ #line 144 "bison_parser.y" { } -#line 2021 "bison_parser.cpp" +#line 2023 "bison_parser.cpp" break; case 203: /* select_list */ @@ -2030,37 +2032,37 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).expr_vec)); } -#line 2034 "bison_parser.cpp" +#line 2036 "bison_parser.cpp" break; case 204: /* opt_from_clause */ #line 155 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2040 "bison_parser.cpp" +#line 2042 "bison_parser.cpp" break; case 205: /* from_clause */ #line 155 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2046 "bison_parser.cpp" +#line 2048 "bison_parser.cpp" break; case 206: /* opt_where */ #line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2052 "bison_parser.cpp" +#line 2054 "bison_parser.cpp" break; case 207: /* opt_group */ #line 155 "bison_parser.y" { delete (((*yyvaluep).group_t)); } -#line 2058 "bison_parser.cpp" +#line 2060 "bison_parser.cpp" break; case 208: /* opt_having */ #line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2064 "bison_parser.cpp" +#line 2066 "bison_parser.cpp" break; case 209: /* opt_order */ @@ -2073,10 +2075,10 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).order_vec)); } -#line 2077 "bison_parser.cpp" +#line 2079 "bison_parser.cpp" break; - case 210: /* order */ + case 210: /* order_list */ #line 147 "bison_parser.y" { if ((((*yyvaluep).order_vec)) != nullptr) { @@ -2086,53 +2088,34 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).order_vec)); } -#line 2090 "bison_parser.cpp" +#line 2092 "bison_parser.cpp" break; - case 211: /* order_list */ -#line 147 "bison_parser.y" - { - if ((((*yyvaluep).order_vec)) != nullptr) { - for (auto ptr : *(((*yyvaluep).order_vec))) { - delete ptr; - } - } - delete (((*yyvaluep).order_vec)); -} -#line 2103 "bison_parser.cpp" - break; - - case 212: /* order_desc */ + case 211: /* order_desc */ #line 155 "bison_parser.y" { delete (((*yyvaluep).order)); } -#line 2109 "bison_parser.cpp" +#line 2098 "bison_parser.cpp" break; - case 213: /* opt_order_type */ + case 212: /* opt_order_type */ #line 144 "bison_parser.y" { } -#line 2115 "bison_parser.cpp" - break; - - case 214: /* opt_top */ -#line 155 "bison_parser.y" - { delete (((*yyvaluep).limit)); } -#line 2121 "bison_parser.cpp" +#line 2104 "bison_parser.cpp" break; - case 215: /* opt_limit */ + case 213: /* opt_top */ #line 155 "bison_parser.y" { delete (((*yyvaluep).limit)); } -#line 2127 "bison_parser.cpp" +#line 2110 "bison_parser.cpp" break; - case 216: /* limit */ + case 214: /* opt_limit */ #line 155 "bison_parser.y" { delete (((*yyvaluep).limit)); } -#line 2133 "bison_parser.cpp" +#line 2116 "bison_parser.cpp" break; - case 217: /* expr_list */ + case 215: /* expr_list */ #line 147 "bison_parser.y" { if ((((*yyvaluep).expr_vec)) != nullptr) { @@ -2142,10 +2125,10 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).expr_vec)); } -#line 2146 "bison_parser.cpp" +#line 2129 "bison_parser.cpp" break; - case 218: /* opt_literal_list */ + case 216: /* opt_literal_list */ #line 147 "bison_parser.y" { if ((((*yyvaluep).expr_vec)) != nullptr) { @@ -2155,10 +2138,10 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).expr_vec)); } -#line 2159 "bison_parser.cpp" +#line 2142 "bison_parser.cpp" break; - case 219: /* literal_list */ + case 217: /* literal_list */ #line 147 "bison_parser.y" { if ((((*yyvaluep).expr_vec)) != nullptr) { @@ -2168,184 +2151,184 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).expr_vec)); } -#line 2172 "bison_parser.cpp" +#line 2155 "bison_parser.cpp" break; - case 220: /* expr_alias */ + case 218: /* expr_alias */ #line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2178 "bison_parser.cpp" +#line 2161 "bison_parser.cpp" break; - case 221: /* expr */ + case 219: /* expr */ #line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2184 "bison_parser.cpp" +#line 2167 "bison_parser.cpp" break; - case 222: /* operand */ + case 220: /* operand */ #line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2190 "bison_parser.cpp" +#line 2173 "bison_parser.cpp" break; - case 223: /* scalar_expr */ + case 221: /* scalar_expr */ #line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2196 "bison_parser.cpp" +#line 2179 "bison_parser.cpp" break; - case 224: /* unary_expr */ + case 222: /* unary_expr */ #line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2202 "bison_parser.cpp" +#line 2185 "bison_parser.cpp" break; - case 225: /* binary_expr */ + case 223: /* binary_expr */ #line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2208 "bison_parser.cpp" +#line 2191 "bison_parser.cpp" break; - case 226: /* logic_expr */ + case 224: /* logic_expr */ #line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2214 "bison_parser.cpp" +#line 2197 "bison_parser.cpp" break; - case 227: /* in_expr */ + case 225: /* in_expr */ #line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2220 "bison_parser.cpp" +#line 2203 "bison_parser.cpp" break; - case 228: /* case_expr */ + case 226: /* case_expr */ #line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2226 "bison_parser.cpp" +#line 2209 "bison_parser.cpp" break; - case 229: /* case_list */ + case 227: /* case_list */ #line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2232 "bison_parser.cpp" +#line 2215 "bison_parser.cpp" break; - case 230: /* exists_expr */ + case 228: /* exists_expr */ #line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2238 "bison_parser.cpp" +#line 2221 "bison_parser.cpp" break; - case 231: /* comp_expr */ + case 229: /* comp_expr */ #line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2244 "bison_parser.cpp" +#line 2227 "bison_parser.cpp" break; - case 232: /* function_expr */ + case 230: /* function_expr */ #line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2250 "bison_parser.cpp" +#line 2233 "bison_parser.cpp" break; - case 233: /* extract_expr */ + case 231: /* extract_expr */ #line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2256 "bison_parser.cpp" +#line 2239 "bison_parser.cpp" break; - case 234: /* datetime_field */ + case 232: /* datetime_field */ #line 144 "bison_parser.y" { } -#line 2262 "bison_parser.cpp" +#line 2245 "bison_parser.cpp" break; - case 235: /* array_expr */ + case 233: /* array_expr */ #line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2268 "bison_parser.cpp" +#line 2251 "bison_parser.cpp" break; - case 236: /* array_index */ + case 234: /* array_index */ #line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2274 "bison_parser.cpp" +#line 2257 "bison_parser.cpp" break; - case 237: /* between_expr */ + case 235: /* between_expr */ #line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2280 "bison_parser.cpp" +#line 2263 "bison_parser.cpp" break; - case 238: /* column_name */ + case 236: /* column_name */ #line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2286 "bison_parser.cpp" +#line 2269 "bison_parser.cpp" break; - case 239: /* literal */ + case 237: /* literal */ #line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2292 "bison_parser.cpp" +#line 2275 "bison_parser.cpp" break; - case 240: /* string_literal */ + case 238: /* string_literal */ #line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2298 "bison_parser.cpp" +#line 2281 "bison_parser.cpp" break; - case 241: /* bool_literal */ + case 239: /* bool_literal */ #line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2304 "bison_parser.cpp" +#line 2287 "bison_parser.cpp" break; - case 242: /* num_literal */ + case 240: /* num_literal */ #line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2310 "bison_parser.cpp" +#line 2293 "bison_parser.cpp" break; - case 243: /* int_literal */ + case 241: /* int_literal */ #line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2316 "bison_parser.cpp" +#line 2299 "bison_parser.cpp" break; - case 244: /* null_literal */ + case 242: /* null_literal */ #line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2322 "bison_parser.cpp" +#line 2305 "bison_parser.cpp" break; - case 245: /* param_expr */ + case 243: /* param_expr */ #line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2328 "bison_parser.cpp" +#line 2311 "bison_parser.cpp" break; - case 246: /* table_ref */ + case 244: /* table_ref */ #line 155 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2334 "bison_parser.cpp" +#line 2317 "bison_parser.cpp" break; - case 247: /* table_ref_atomic */ + case 245: /* table_ref_atomic */ #line 155 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2340 "bison_parser.cpp" +#line 2323 "bison_parser.cpp" break; - case 248: /* nonjoin_table_ref_atomic */ + case 246: /* nonjoin_table_ref_atomic */ #line 155 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2346 "bison_parser.cpp" +#line 2329 "bison_parser.cpp" break; - case 249: /* table_ref_commalist */ + case 247: /* table_ref_commalist */ #line 147 "bison_parser.y" { if ((((*yyvaluep).table_vec)) != nullptr) { @@ -2355,94 +2338,94 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).table_vec)); } -#line 2359 "bison_parser.cpp" +#line 2342 "bison_parser.cpp" break; - case 250: /* table_ref_name */ + case 248: /* table_ref_name */ #line 155 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2365 "bison_parser.cpp" +#line 2348 "bison_parser.cpp" break; - case 251: /* table_ref_name_no_alias */ + case 249: /* table_ref_name_no_alias */ #line 155 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2371 "bison_parser.cpp" +#line 2354 "bison_parser.cpp" break; - case 252: /* table_name */ + case 250: /* table_name */ #line 145 "bison_parser.y" { free( (((*yyvaluep).table_name).name) ); free( (((*yyvaluep).table_name).schema) ); } -#line 2377 "bison_parser.cpp" +#line 2360 "bison_parser.cpp" break; - case 253: /* table_alias */ + case 251: /* table_alias */ #line 155 "bison_parser.y" { delete (((*yyvaluep).alias_t)); } -#line 2383 "bison_parser.cpp" +#line 2366 "bison_parser.cpp" break; - case 254: /* opt_table_alias */ + case 252: /* opt_table_alias */ #line 155 "bison_parser.y" { delete (((*yyvaluep).alias_t)); } -#line 2389 "bison_parser.cpp" +#line 2372 "bison_parser.cpp" break; - case 255: /* alias */ + case 253: /* alias */ #line 155 "bison_parser.y" { delete (((*yyvaluep).alias_t)); } -#line 2395 "bison_parser.cpp" +#line 2378 "bison_parser.cpp" break; - case 256: /* opt_alias */ + case 254: /* opt_alias */ #line 155 "bison_parser.y" { delete (((*yyvaluep).alias_t)); } -#line 2401 "bison_parser.cpp" +#line 2384 "bison_parser.cpp" break; - case 257: /* opt_with_clause */ + case 255: /* opt_with_clause */ #line 155 "bison_parser.y" { delete (((*yyvaluep).with_description_vec)); } -#line 2407 "bison_parser.cpp" +#line 2390 "bison_parser.cpp" break; - case 258: /* with_clause */ + case 256: /* with_clause */ #line 155 "bison_parser.y" { delete (((*yyvaluep).with_description_vec)); } -#line 2413 "bison_parser.cpp" +#line 2396 "bison_parser.cpp" break; - case 259: /* with_description_list */ + case 257: /* with_description_list */ #line 155 "bison_parser.y" { delete (((*yyvaluep).with_description_vec)); } -#line 2419 "bison_parser.cpp" +#line 2402 "bison_parser.cpp" break; - case 260: /* with_description */ + case 258: /* with_description */ #line 155 "bison_parser.y" { delete (((*yyvaluep).with_description_t)); } -#line 2425 "bison_parser.cpp" +#line 2408 "bison_parser.cpp" break; - case 261: /* join_clause */ + case 259: /* join_clause */ #line 155 "bison_parser.y" { delete (((*yyvaluep).table)); } -#line 2431 "bison_parser.cpp" +#line 2414 "bison_parser.cpp" break; - case 262: /* opt_join_type */ + case 260: /* opt_join_type */ #line 144 "bison_parser.y" { } -#line 2437 "bison_parser.cpp" +#line 2420 "bison_parser.cpp" break; - case 263: /* join_condition */ + case 261: /* join_condition */ #line 155 "bison_parser.y" { delete (((*yyvaluep).expr)); } -#line 2443 "bison_parser.cpp" +#line 2426 "bison_parser.cpp" break; - case 265: /* ident_commalist */ + case 263: /* ident_commalist */ #line 147 "bison_parser.y" { if ((((*yyvaluep).str_vec)) != nullptr) { @@ -2452,7 +2435,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio } delete (((*yyvaluep).str_vec)); } -#line 2456 "bison_parser.cpp" +#line 2439 "bison_parser.cpp" break; default: @@ -2570,7 +2553,7 @@ YYLTYPE yylloc = yyloc_default; yylloc.string_length = 0; } -#line 2574 "bison_parser.cpp" +#line 2557 "bison_parser.cpp" yylsp[0] = yylloc; goto yysetstate; @@ -2781,7 +2764,7 @@ YYLTYPE yylloc = yyloc_default; } delete (yyvsp[-1].stmt_vec); } -#line 2785 "bison_parser.cpp" +#line 2768 "bison_parser.cpp" break; case 3: @@ -2792,7 +2775,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.stmt_vec) = new std::vector(); (yyval.stmt_vec)->push_back((yyvsp[0].statement)); } -#line 2796 "bison_parser.cpp" +#line 2779 "bison_parser.cpp" break; case 4: @@ -2803,7 +2786,7 @@ YYLTYPE yylloc = yyloc_default; (yyvsp[-2].stmt_vec)->push_back((yyvsp[0].statement)); (yyval.stmt_vec) = (yyvsp[-2].stmt_vec); } -#line 2807 "bison_parser.cpp" +#line 2790 "bison_parser.cpp" break; case 5: @@ -2812,7 +2795,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.statement) = (yyvsp[-1].prep_stmt); (yyval.statement)->hints = (yyvsp[0].expr_vec); } -#line 2816 "bison_parser.cpp" +#line 2799 "bison_parser.cpp" break; case 6: @@ -2821,7 +2804,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.statement) = (yyvsp[-1].statement); (yyval.statement)->hints = (yyvsp[0].expr_vec); } -#line 2825 "bison_parser.cpp" +#line 2808 "bison_parser.cpp" break; case 7: @@ -2829,85 +2812,85 @@ YYLTYPE yylloc = yyloc_default; { (yyval.statement) = (yyvsp[0].show_stmt); } -#line 2833 "bison_parser.cpp" +#line 2816 "bison_parser.cpp" break; case 8: #line 311 "bison_parser.y" { (yyval.statement) = (yyvsp[0].select_stmt); } -#line 2839 "bison_parser.cpp" +#line 2822 "bison_parser.cpp" break; case 9: #line 312 "bison_parser.y" { (yyval.statement) = (yyvsp[0].import_stmt); } -#line 2845 "bison_parser.cpp" +#line 2828 "bison_parser.cpp" break; case 10: #line 313 "bison_parser.y" { (yyval.statement) = (yyvsp[0].create_stmt); } -#line 2851 "bison_parser.cpp" +#line 2834 "bison_parser.cpp" break; case 11: #line 314 "bison_parser.y" { (yyval.statement) = (yyvsp[0].insert_stmt); } -#line 2857 "bison_parser.cpp" +#line 2840 "bison_parser.cpp" break; case 12: #line 315 "bison_parser.y" { (yyval.statement) = (yyvsp[0].delete_stmt); } -#line 2863 "bison_parser.cpp" +#line 2846 "bison_parser.cpp" break; case 13: #line 316 "bison_parser.y" { (yyval.statement) = (yyvsp[0].delete_stmt); } -#line 2869 "bison_parser.cpp" +#line 2852 "bison_parser.cpp" break; case 14: #line 317 "bison_parser.y" { (yyval.statement) = (yyvsp[0].update_stmt); } -#line 2875 "bison_parser.cpp" +#line 2858 "bison_parser.cpp" break; case 15: #line 318 "bison_parser.y" { (yyval.statement) = (yyvsp[0].drop_stmt); } -#line 2881 "bison_parser.cpp" +#line 2864 "bison_parser.cpp" break; case 16: #line 319 "bison_parser.y" { (yyval.statement) = (yyvsp[0].exec_stmt); } -#line 2887 "bison_parser.cpp" +#line 2870 "bison_parser.cpp" break; case 17: #line 328 "bison_parser.y" { (yyval.expr_vec) = (yyvsp[-1].expr_vec); } -#line 2893 "bison_parser.cpp" +#line 2876 "bison_parser.cpp" break; case 18: #line 329 "bison_parser.y" { (yyval.expr_vec) = nullptr; } -#line 2899 "bison_parser.cpp" +#line 2882 "bison_parser.cpp" break; case 19: #line 334 "bison_parser.y" { (yyval.expr_vec) = new std::vector(); (yyval.expr_vec)->push_back((yyvsp[0].expr)); } -#line 2905 "bison_parser.cpp" +#line 2888 "bison_parser.cpp" break; case 20: #line 335 "bison_parser.y" { (yyvsp[-2].expr_vec)->push_back((yyvsp[0].expr)); (yyval.expr_vec) = (yyvsp[-2].expr_vec); } -#line 2911 "bison_parser.cpp" +#line 2894 "bison_parser.cpp" break; case 21: @@ -2916,7 +2899,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.expr) = Expr::make(kExprHint); (yyval.expr)->name = (yyvsp[0].sval); } -#line 2920 "bison_parser.cpp" +#line 2903 "bison_parser.cpp" break; case 22: @@ -2926,7 +2909,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.expr)->name = (yyvsp[-3].sval); (yyval.expr)->exprList = (yyvsp[-1].expr_vec); } -#line 2930 "bison_parser.cpp" +#line 2913 "bison_parser.cpp" break; case 23: @@ -2936,7 +2919,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.prep_stmt)->name = (yyvsp[-2].sval); (yyval.prep_stmt)->query = (yyvsp[0].sval); } -#line 2940 "bison_parser.cpp" +#line 2923 "bison_parser.cpp" break; case 25: @@ -2945,7 +2928,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.exec_stmt) = new ExecuteStatement(); (yyval.exec_stmt)->name = (yyvsp[0].sval); } -#line 2949 "bison_parser.cpp" +#line 2932 "bison_parser.cpp" break; case 26: @@ -2955,7 +2938,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.exec_stmt)->name = (yyvsp[-3].sval); (yyval.exec_stmt)->parameters = (yyvsp[-1].expr_vec); } -#line 2959 "bison_parser.cpp" +#line 2942 "bison_parser.cpp" break; case 27: @@ -2966,19 +2949,19 @@ YYLTYPE yylloc = yyloc_default; (yyval.import_stmt)->schema = (yyvsp[0].table_name).schema; (yyval.import_stmt)->tableName = (yyvsp[0].table_name).name; } -#line 2970 "bison_parser.cpp" +#line 2953 "bison_parser.cpp" break; case 28: #line 390 "bison_parser.y" { (yyval.uval) = kImportCSV; } -#line 2976 "bison_parser.cpp" +#line 2959 "bison_parser.cpp" break; case 29: #line 394 "bison_parser.y" { (yyval.sval) = strdup((yyvsp[0].expr)->name); delete (yyvsp[0].expr); } -#line 2982 "bison_parser.cpp" +#line 2965 "bison_parser.cpp" break; case 30: @@ -2986,7 +2969,7 @@ YYLTYPE yylloc = yyloc_default; { (yyval.show_stmt) = new ShowStatement(kShowTables); } -#line 2990 "bison_parser.cpp" +#line 2973 "bison_parser.cpp" break; case 31: @@ -2996,7 +2979,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.show_stmt)->schema = (yyvsp[0].table_name).schema; (yyval.show_stmt)->name = (yyvsp[0].table_name).name; } -#line 3000 "bison_parser.cpp" +#line 2983 "bison_parser.cpp" break; case 32: @@ -3006,7 +2989,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.show_stmt)->schema = (yyvsp[0].table_name).schema; (yyval.show_stmt)->name = (yyvsp[0].table_name).name; } -#line 3010 "bison_parser.cpp" +#line 2993 "bison_parser.cpp" break; case 33: @@ -3018,7 +3001,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.create_stmt)->tableName = (yyvsp[-4].table_name).name; (yyval.create_stmt)->filePath = (yyvsp[0].sval); } -#line 3022 "bison_parser.cpp" +#line 3005 "bison_parser.cpp" break; case 34: @@ -3030,7 +3013,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.create_stmt)->tableName = (yyvsp[-3].table_name).name; (yyval.create_stmt)->columns = (yyvsp[-1].column_vec); } -#line 3034 "bison_parser.cpp" +#line 3017 "bison_parser.cpp" break; case 35: @@ -3042,7 +3025,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.create_stmt)->tableName = (yyvsp[-2].table_name).name; (yyval.create_stmt)->select = (yyvsp[0].select_stmt); } -#line 3046 "bison_parser.cpp" +#line 3029 "bison_parser.cpp" break; case 36: @@ -3055,31 +3038,31 @@ YYLTYPE yylloc = yyloc_default; (yyval.create_stmt)->viewColumns = (yyvsp[-2].str_vec); (yyval.create_stmt)->select = (yyvsp[0].select_stmt); } -#line 3059 "bison_parser.cpp" +#line 3042 "bison_parser.cpp" break; case 37: #line 458 "bison_parser.y" { (yyval.bval) = true; } -#line 3065 "bison_parser.cpp" +#line 3048 "bison_parser.cpp" break; case 38: #line 459 "bison_parser.y" { (yyval.bval) = false; } -#line 3071 "bison_parser.cpp" +#line 3054 "bison_parser.cpp" break; case 39: #line 463 "bison_parser.y" { (yyval.column_vec) = new std::vector(); (yyval.column_vec)->push_back((yyvsp[0].column_t)); } -#line 3077 "bison_parser.cpp" +#line 3060 "bison_parser.cpp" break; case 40: #line 464 "bison_parser.y" { (yyvsp[-2].column_vec)->push_back((yyvsp[0].column_t)); (yyval.column_vec) = (yyvsp[-2].column_vec); } -#line 3083 "bison_parser.cpp" +#line 3066 "bison_parser.cpp" break; case 41: @@ -3087,73 +3070,73 @@ YYLTYPE yylloc = yyloc_default; { (yyval.column_t) = new ColumnDefinition((yyvsp[-2].sval), (yyvsp[-1].column_type_t), (yyvsp[0].bval)); } -#line 3091 "bison_parser.cpp" +#line 3074 "bison_parser.cpp" break; case 42: #line 474 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::INT}; } -#line 3097 "bison_parser.cpp" +#line 3080 "bison_parser.cpp" break; case 43: #line 475 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::INT}; } -#line 3103 "bison_parser.cpp" +#line 3086 "bison_parser.cpp" break; case 44: #line 476 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::LONG}; } -#line 3109 "bison_parser.cpp" +#line 3092 "bison_parser.cpp" break; case 45: #line 477 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::FLOAT}; } -#line 3115 "bison_parser.cpp" +#line 3098 "bison_parser.cpp" break; case 46: #line 478 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::DOUBLE}; } -#line 3121 "bison_parser.cpp" +#line 3104 "bison_parser.cpp" break; case 47: #line 479 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::VARCHAR, (yyvsp[-1].ival)}; } -#line 3127 "bison_parser.cpp" +#line 3110 "bison_parser.cpp" break; case 48: #line 480 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::CHAR, (yyvsp[-1].ival)}; } -#line 3133 "bison_parser.cpp" +#line 3116 "bison_parser.cpp" break; case 49: #line 481 "bison_parser.y" { (yyval.column_type_t) = ColumnType{DataType::TEXT}; } -#line 3139 "bison_parser.cpp" +#line 3122 "bison_parser.cpp" break; case 50: #line 485 "bison_parser.y" { (yyval.bval) = true; } -#line 3145 "bison_parser.cpp" +#line 3128 "bison_parser.cpp" break; case 51: #line 486 "bison_parser.y" { (yyval.bval) = false; } -#line 3151 "bison_parser.cpp" +#line 3134 "bison_parser.cpp" break; case 52: #line 487 "bison_parser.y" { (yyval.bval) = false; } -#line 3157 "bison_parser.cpp" +#line 3140 "bison_parser.cpp" break; case 53: @@ -3164,7 +3147,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.drop_stmt)->schema = (yyvsp[0].table_name).schema; (yyval.drop_stmt)->name = (yyvsp[0].table_name).name; } -#line 3168 "bison_parser.cpp" +#line 3151 "bison_parser.cpp" break; case 54: @@ -3175,7 +3158,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.drop_stmt)->schema = (yyvsp[0].table_name).schema; (yyval.drop_stmt)->name = (yyvsp[0].table_name).name; } -#line 3179 "bison_parser.cpp" +#line 3162 "bison_parser.cpp" break; case 55: @@ -3185,19 +3168,19 @@ YYLTYPE yylloc = yyloc_default; (yyval.drop_stmt)->ifExists = false; (yyval.drop_stmt)->name = (yyvsp[0].sval); } -#line 3189 "bison_parser.cpp" +#line 3172 "bison_parser.cpp" break; case 56: #line 517 "bison_parser.y" { (yyval.bval) = true; } -#line 3195 "bison_parser.cpp" +#line 3178 "bison_parser.cpp" break; case 57: #line 518 "bison_parser.y" { (yyval.bval) = false; } -#line 3201 "bison_parser.cpp" +#line 3184 "bison_parser.cpp" break; case 58: @@ -3208,7 +3191,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.delete_stmt)->tableName = (yyvsp[-1].table_name).name; (yyval.delete_stmt)->expr = (yyvsp[0].expr); } -#line 3212 "bison_parser.cpp" +#line 3195 "bison_parser.cpp" break; case 59: @@ -3218,7 +3201,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.delete_stmt)->schema = (yyvsp[0].table_name).schema; (yyval.delete_stmt)->tableName = (yyvsp[0].table_name).name; } -#line 3222 "bison_parser.cpp" +#line 3205 "bison_parser.cpp" break; case 60: @@ -3230,7 +3213,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.insert_stmt)->columns = (yyvsp[-4].str_vec); (yyval.insert_stmt)->values = (yyvsp[-1].expr_vec); } -#line 3234 "bison_parser.cpp" +#line 3217 "bison_parser.cpp" break; case 61: @@ -3242,19 +3225,19 @@ YYLTYPE yylloc = yyloc_default; (yyval.insert_stmt)->columns = (yyvsp[-1].str_vec); (yyval.insert_stmt)->select = (yyvsp[0].select_stmt); } -#line 3246 "bison_parser.cpp" +#line 3229 "bison_parser.cpp" break; case 62: #line 567 "bison_parser.y" { (yyval.str_vec) = (yyvsp[-1].str_vec); } -#line 3252 "bison_parser.cpp" +#line 3235 "bison_parser.cpp" break; case 63: #line 568 "bison_parser.y" { (yyval.str_vec) = nullptr; } -#line 3258 "bison_parser.cpp" +#line 3241 "bison_parser.cpp" break; case 64: @@ -3265,19 +3248,19 @@ YYLTYPE yylloc = yyloc_default; (yyval.update_stmt)->updates = (yyvsp[-1].update_vec); (yyval.update_stmt)->where = (yyvsp[0].expr); } -#line 3269 "bison_parser.cpp" +#line 3252 "bison_parser.cpp" break; case 65: #line 587 "bison_parser.y" { (yyval.update_vec) = new std::vector(); (yyval.update_vec)->push_back((yyvsp[0].update_t)); } -#line 3275 "bison_parser.cpp" +#line 3258 "bison_parser.cpp" break; case 66: #line 588 "bison_parser.y" { (yyvsp[-2].update_vec)->push_back((yyvsp[0].update_t)); (yyval.update_vec) = (yyvsp[-2].update_vec); } -#line 3281 "bison_parser.cpp" +#line 3264 "bison_parser.cpp" break; case 67: @@ -3287,7 +3270,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.update_t)->column = (yyvsp[-2].sval); (yyval.update_t)->value = (yyvsp[0].expr); } -#line 3291 "bison_parser.cpp" +#line 3274 "bison_parser.cpp" break; case 68: @@ -3296,7 +3279,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.select_stmt) = (yyvsp[0].select_stmt); (yyval.select_stmt)->withDescriptions = (yyvsp[-1].with_description_vec); } -#line 3300 "bison_parser.cpp" +#line 3283 "bison_parser.cpp" break; case 69: @@ -3305,7 +3288,7 @@ YYLTYPE yylloc = yyloc_default; (yyval.select_stmt) = (yyvsp[0].select_stmt); (yyval.select_stmt)->withDescriptions = (yyvsp[-1].with_description_vec); } -#line 3309 "bison_parser.cpp" +#line 3292 "bison_parser.cpp" break; case 70: @@ -3314,48 +3297,43 @@ YYLTYPE yylloc = yyloc_default; (yyval.select_stmt) = (yyvsp[-4].select_stmt); (yyval.select_stmt)->setOperator = (yyvsp[-3].set_operator_t); (yyval.select_stmt)->withDescriptions = (yyvsp[-5].with_description_vec); - (yyval.select_stmt)->nestedSetSelectStatement = (yyvsp[-2].select_stmt); - (yyval.select_stmt)->order = (yyvsp[-1].order_vec); - - // Limit could have been set by TOP. - if ((yyvsp[0].limit) != nullptr) { - delete (yyval.select_stmt)->limit; - (yyval.select_stmt)->limit = (yyvsp[0].limit); - } + (yyval.select_stmt)->setOperator->nestedSelectStatement = (yyvsp[-2].select_stmt); + (yyval.select_stmt)->setOperator->resultOrder = (yyvsp[-1].order_vec); + (yyval.select_stmt)->setOperator->resultLimit = (yyvsp[0].limit); } -#line 3327 "bison_parser.cpp" +#line 3305 "bison_parser.cpp" break; case 73: -#line 632 "bison_parser.y" +#line 627 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[0].select_stmt); } -#line 3333 "bison_parser.cpp" +#line 3311 "bison_parser.cpp" break; case 74: -#line 633 "bison_parser.y" +#line 628 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-2].select_stmt); (yyval.select_stmt)->setOperator = (yyvsp[-1].set_operator_t); - (yyval.select_stmt)-> nestedSetSelectStatement = (yyvsp[0].select_stmt); + (yyval.select_stmt)->setOperator->nestedSelectStatement = (yyvsp[0].select_stmt); } -#line 3343 "bison_parser.cpp" +#line 3321 "bison_parser.cpp" break; case 75: -#line 641 "bison_parser.y" +#line 636 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-1].select_stmt); } -#line 3349 "bison_parser.cpp" +#line 3327 "bison_parser.cpp" break; case 76: -#line 642 "bison_parser.y" +#line 637 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-1].select_stmt); } -#line 3355 "bison_parser.cpp" +#line 3333 "bison_parser.cpp" break; case 77: -#line 646 "bison_parser.y" +#line 641 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-2].select_stmt); (yyval.select_stmt)->order = (yyvsp[-1].order_vec); @@ -3366,80 +3344,75 @@ YYLTYPE yylloc = yyloc_default; (yyval.select_stmt)->limit = (yyvsp[0].limit); } } -#line 3370 "bison_parser.cpp" +#line 3348 "bison_parser.cpp" break; case 78: -#line 656 "bison_parser.y" +#line 651 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-4].select_stmt); (yyval.select_stmt)->setOperator = (yyvsp[-3].set_operator_t); - (yyval.select_stmt)->nestedSetSelectStatement = (yyvsp[-2].select_stmt); - (yyval.select_stmt)->order = (yyvsp[-1].order_vec); - - // Limit could have been set by TOP. - if ((yyvsp[0].limit) != nullptr) { - delete (yyval.select_stmt)->limit; - (yyval.select_stmt)->limit = (yyvsp[0].limit); - } + (yyval.select_stmt)->setOperator->nestedSelectStatement = (yyvsp[-2].select_stmt); + (yyval.select_stmt)->setOperator->resultOrder = (yyvsp[-1].order_vec); + (yyval.select_stmt)->setOperator->resultLimit = (yyvsp[0].limit); } -#line 3387 "bison_parser.cpp" +#line 3360 "bison_parser.cpp" break; case 79: -#line 671 "bison_parser.y" +#line 661 "bison_parser.y" { (yyval.set_operator_t) = (yyvsp[-1].set_operator_t); (yyval.set_operator_t)->isAll = (yyvsp[0].bval); } -#line 3396 "bison_parser.cpp" +#line 3369 "bison_parser.cpp" break; case 80: -#line 678 "bison_parser.y" +#line 668 "bison_parser.y" { (yyval.set_operator_t) = new SetOperator(); (yyval.set_operator_t)->setType = SetType::kSetUnion; } -#line 3405 "bison_parser.cpp" +#line 3378 "bison_parser.cpp" break; case 81: -#line 682 "bison_parser.y" +#line 672 "bison_parser.y" { (yyval.set_operator_t) = new SetOperator(); (yyval.set_operator_t)->setType = SetType::kSetIntersect; } -#line 3414 "bison_parser.cpp" +#line 3387 "bison_parser.cpp" break; case 82: -#line 686 "bison_parser.y" +#line 676 "bison_parser.y" { (yyval.set_operator_t) = new SetOperator(); (yyval.set_operator_t)->setType = SetType::kSetExcept; } -#line 3423 "bison_parser.cpp" +#line 3396 "bison_parser.cpp" break; case 83: -#line 693 "bison_parser.y" +#line 683 "bison_parser.y" { (yyval.bval) = true; } -#line 3431 "bison_parser.cpp" +#line 3404 "bison_parser.cpp" break; case 84: -#line 696 "bison_parser.y" +#line 686 "bison_parser.y" { (yyval.bval) = false; } -#line 3439 "bison_parser.cpp" +#line 3412 "bison_parser.cpp" break; case 85: -#line 702 "bison_parser.y" +#line 692 "bison_parser.y" { (yyval.select_stmt) = new SelectStatement(); (yyval.select_stmt)->limit = (yyvsp[-5].limit); @@ -3449,225 +3422,213 @@ YYLTYPE yylloc = yyloc_default; (yyval.select_stmt)->whereClause = (yyvsp[-1].expr); (yyval.select_stmt)->groupBy = (yyvsp[0].group_t); } -#line 3453 "bison_parser.cpp" +#line 3426 "bison_parser.cpp" break; case 86: -#line 714 "bison_parser.y" +#line 704 "bison_parser.y" { (yyval.bval) = true; } -#line 3459 "bison_parser.cpp" +#line 3432 "bison_parser.cpp" break; case 87: -#line 715 "bison_parser.y" +#line 705 "bison_parser.y" { (yyval.bval) = false; } -#line 3465 "bison_parser.cpp" +#line 3438 "bison_parser.cpp" break; case 89: -#line 723 "bison_parser.y" +#line 713 "bison_parser.y" { (yyval.table) = (yyvsp[0].table); } -#line 3471 "bison_parser.cpp" +#line 3444 "bison_parser.cpp" break; case 90: -#line 724 "bison_parser.y" +#line 714 "bison_parser.y" { (yyval.table) = nullptr; } -#line 3477 "bison_parser.cpp" +#line 3450 "bison_parser.cpp" break; case 91: -#line 727 "bison_parser.y" +#line 717 "bison_parser.y" { (yyval.table) = (yyvsp[0].table); } -#line 3483 "bison_parser.cpp" +#line 3456 "bison_parser.cpp" break; case 92: -#line 732 "bison_parser.y" +#line 722 "bison_parser.y" { (yyval.expr) = (yyvsp[0].expr); } -#line 3489 "bison_parser.cpp" +#line 3462 "bison_parser.cpp" break; case 93: -#line 733 "bison_parser.y" +#line 723 "bison_parser.y" { (yyval.expr) = nullptr; } -#line 3495 "bison_parser.cpp" +#line 3468 "bison_parser.cpp" break; case 94: -#line 737 "bison_parser.y" +#line 727 "bison_parser.y" { (yyval.group_t) = new GroupByDescription(); (yyval.group_t)->columns = (yyvsp[-1].expr_vec); (yyval.group_t)->having = (yyvsp[0].expr); } -#line 3505 "bison_parser.cpp" +#line 3478 "bison_parser.cpp" break; case 95: -#line 742 "bison_parser.y" +#line 732 "bison_parser.y" { (yyval.group_t) = nullptr; } -#line 3511 "bison_parser.cpp" +#line 3484 "bison_parser.cpp" break; case 96: -#line 746 "bison_parser.y" +#line 736 "bison_parser.y" { (yyval.expr) = (yyvsp[0].expr); } -#line 3517 "bison_parser.cpp" +#line 3490 "bison_parser.cpp" break; case 97: -#line 747 "bison_parser.y" +#line 737 "bison_parser.y" { (yyval.expr) = nullptr; } -#line 3523 "bison_parser.cpp" +#line 3496 "bison_parser.cpp" break; case 98: -#line 750 "bison_parser.y" +#line 740 "bison_parser.y" { (yyval.order_vec) = (yyvsp[0].order_vec); } -#line 3529 "bison_parser.cpp" +#line 3502 "bison_parser.cpp" break; case 99: -#line 751 "bison_parser.y" +#line 741 "bison_parser.y" { (yyval.order_vec) = nullptr; } -#line 3535 "bison_parser.cpp" +#line 3508 "bison_parser.cpp" break; case 100: -#line 755 "bison_parser.y" - { (yyval.order_vec) = (yyvsp[0].order_vec); } -#line 3541 "bison_parser.cpp" +#line 745 "bison_parser.y" + { (yyval.order_vec) = new std::vector(); (yyval.order_vec)->push_back((yyvsp[0].order)); } +#line 3514 "bison_parser.cpp" break; case 101: -#line 758 "bison_parser.y" - { (yyval.order_vec) = new std::vector(); (yyval.order_vec)->push_back((yyvsp[0].order)); } -#line 3547 "bison_parser.cpp" +#line 746 "bison_parser.y" + { (yyvsp[-2].order_vec)->push_back((yyvsp[0].order)); (yyval.order_vec) = (yyvsp[-2].order_vec); } +#line 3520 "bison_parser.cpp" break; case 102: -#line 759 "bison_parser.y" - { (yyvsp[-2].order_vec)->push_back((yyvsp[0].order)); (yyval.order_vec) = (yyvsp[-2].order_vec); } -#line 3553 "bison_parser.cpp" +#line 750 "bison_parser.y" + { (yyval.order) = new OrderDescription((yyvsp[0].order_type), (yyvsp[-1].expr)); } +#line 3526 "bison_parser.cpp" break; case 103: -#line 763 "bison_parser.y" - { (yyval.order) = new OrderDescription((yyvsp[0].order_type), (yyvsp[-1].expr)); } -#line 3559 "bison_parser.cpp" +#line 754 "bison_parser.y" + { (yyval.order_type) = kOrderAsc; } +#line 3532 "bison_parser.cpp" break; case 104: -#line 767 "bison_parser.y" - { (yyval.order_type) = kOrderAsc; } -#line 3565 "bison_parser.cpp" +#line 755 "bison_parser.y" + { (yyval.order_type) = kOrderDesc; } +#line 3538 "bison_parser.cpp" break; case 105: -#line 768 "bison_parser.y" - { (yyval.order_type) = kOrderDesc; } -#line 3571 "bison_parser.cpp" +#line 756 "bison_parser.y" + { (yyval.order_type) = kOrderAsc; } +#line 3544 "bison_parser.cpp" break; case 106: -#line 769 "bison_parser.y" - { (yyval.order_type) = kOrderAsc; } -#line 3577 "bison_parser.cpp" +#line 762 "bison_parser.y" + { (yyval.limit) = new LimitDescription((yyvsp[0].expr), nullptr); } +#line 3550 "bison_parser.cpp" break; case 107: -#line 775 "bison_parser.y" - { (yyval.limit) = new LimitDescription((yyvsp[0].expr), nullptr); } -#line 3583 "bison_parser.cpp" +#line 763 "bison_parser.y" + { (yyval.limit) = nullptr; } +#line 3556 "bison_parser.cpp" break; case 108: -#line 776 "bison_parser.y" - { (yyval.limit) = nullptr; } -#line 3589 "bison_parser.cpp" +#line 767 "bison_parser.y" + { (yyval.limit) = new LimitDescription((yyvsp[0].expr), nullptr); } +#line 3562 "bison_parser.cpp" break; case 109: -#line 780 "bison_parser.y" - { (yyval.limit) = (yyvsp[0].limit); } -#line 3595 "bison_parser.cpp" +#line 768 "bison_parser.y" + { (yyval.limit) = new LimitDescription(nullptr, (yyvsp[0].expr)); } +#line 3568 "bison_parser.cpp" break; case 110: -#line 781 "bison_parser.y" - { (yyval.limit) = nullptr; } -#line 3601 "bison_parser.cpp" +#line 769 "bison_parser.y" + { (yyval.limit) = new LimitDescription((yyvsp[-2].expr), (yyvsp[0].expr)); } +#line 3574 "bison_parser.cpp" break; case 111: -#line 785 "bison_parser.y" - { (yyval.limit) = new LimitDescription((yyvsp[0].expr), nullptr); } -#line 3607 "bison_parser.cpp" +#line 770 "bison_parser.y" + { (yyval.limit) = new LimitDescription(nullptr, nullptr); } +#line 3580 "bison_parser.cpp" break; case 112: -#line 786 "bison_parser.y" +#line 771 "bison_parser.y" { (yyval.limit) = new LimitDescription(nullptr, (yyvsp[0].expr)); } -#line 3613 "bison_parser.cpp" +#line 3586 "bison_parser.cpp" break; case 113: -#line 787 "bison_parser.y" - { (yyval.limit) = new LimitDescription((yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 3619 "bison_parser.cpp" +#line 772 "bison_parser.y" + { (yyval.limit) = nullptr; } +#line 3592 "bison_parser.cpp" break; case 114: -#line 788 "bison_parser.y" - { (yyval.limit) = new LimitDescription(nullptr, nullptr); } -#line 3625 "bison_parser.cpp" - break; - - case 115: -#line 789 "bison_parser.y" - { (yyval.limit) = new LimitDescription(nullptr, (yyvsp[0].expr)); } -#line 3631 "bison_parser.cpp" - break; - - case 116: -#line 796 "bison_parser.y" +#line 779 "bison_parser.y" { (yyval.expr_vec) = new std::vector(); (yyval.expr_vec)->push_back((yyvsp[0].expr)); } -#line 3637 "bison_parser.cpp" +#line 3598 "bison_parser.cpp" break; - case 117: -#line 797 "bison_parser.y" + case 115: +#line 780 "bison_parser.y" { (yyvsp[-2].expr_vec)->push_back((yyvsp[0].expr)); (yyval.expr_vec) = (yyvsp[-2].expr_vec); } -#line 3643 "bison_parser.cpp" +#line 3604 "bison_parser.cpp" break; - case 118: -#line 801 "bison_parser.y" + case 116: +#line 784 "bison_parser.y" { (yyval.expr_vec) = (yyvsp[0].expr_vec); } -#line 3649 "bison_parser.cpp" +#line 3610 "bison_parser.cpp" break; - case 119: -#line 802 "bison_parser.y" + case 117: +#line 785 "bison_parser.y" { (yyval.expr_vec) = nullptr; } -#line 3655 "bison_parser.cpp" +#line 3616 "bison_parser.cpp" break; - case 120: -#line 806 "bison_parser.y" + case 118: +#line 789 "bison_parser.y" { (yyval.expr_vec) = new std::vector(); (yyval.expr_vec)->push_back((yyvsp[0].expr)); } -#line 3661 "bison_parser.cpp" +#line 3622 "bison_parser.cpp" break; - case 121: -#line 807 "bison_parser.y" + case 119: +#line 790 "bison_parser.y" { (yyvsp[-2].expr_vec)->push_back((yyvsp[0].expr)); (yyval.expr_vec) = (yyvsp[-2].expr_vec); } -#line 3667 "bison_parser.cpp" +#line 3628 "bison_parser.cpp" break; - case 122: -#line 811 "bison_parser.y" + case 120: +#line 794 "bison_parser.y" { (yyval.expr) = (yyvsp[-1].expr); if ((yyvsp[0].alias_t)) { @@ -3675,415 +3636,415 @@ YYLTYPE yylloc = yyloc_default; delete (yyvsp[0].alias_t); } } -#line 3679 "bison_parser.cpp" +#line 3640 "bison_parser.cpp" break; - case 128: -#line 829 "bison_parser.y" + case 126: +#line 812 "bison_parser.y" { (yyval.expr) = (yyvsp[-1].expr); } -#line 3685 "bison_parser.cpp" +#line 3646 "bison_parser.cpp" break; - case 137: -#line 838 "bison_parser.y" + case 135: +#line 821 "bison_parser.y" { (yyval.expr) = Expr::makeSelect((yyvsp[-1].select_stmt)); } -#line 3691 "bison_parser.cpp" +#line 3652 "bison_parser.cpp" break; - case 140: -#line 847 "bison_parser.y" + case 138: +#line 830 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpUnaryMinus, (yyvsp[0].expr)); } -#line 3697 "bison_parser.cpp" +#line 3658 "bison_parser.cpp" break; - case 141: -#line 848 "bison_parser.y" + case 139: +#line 831 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, (yyvsp[0].expr)); } -#line 3703 "bison_parser.cpp" +#line 3664 "bison_parser.cpp" break; - case 142: -#line 849 "bison_parser.y" + case 140: +#line 832 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpIsNull, (yyvsp[-1].expr)); } -#line 3709 "bison_parser.cpp" +#line 3670 "bison_parser.cpp" break; - case 143: -#line 850 "bison_parser.y" + case 141: +#line 833 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpIsNull, (yyvsp[-2].expr)); } -#line 3715 "bison_parser.cpp" +#line 3676 "bison_parser.cpp" break; - case 144: -#line 851 "bison_parser.y" + case 142: +#line 834 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeOpUnary(kOpIsNull, (yyvsp[-3].expr))); } -#line 3721 "bison_parser.cpp" +#line 3682 "bison_parser.cpp" break; - case 146: -#line 856 "bison_parser.y" + case 144: +#line 839 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpMinus, (yyvsp[0].expr)); } -#line 3727 "bison_parser.cpp" +#line 3688 "bison_parser.cpp" break; - case 147: -#line 857 "bison_parser.y" + case 145: +#line 840 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpPlus, (yyvsp[0].expr)); } -#line 3733 "bison_parser.cpp" +#line 3694 "bison_parser.cpp" break; - case 148: -#line 858 "bison_parser.y" + case 146: +#line 841 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpSlash, (yyvsp[0].expr)); } -#line 3739 "bison_parser.cpp" +#line 3700 "bison_parser.cpp" break; - case 149: -#line 859 "bison_parser.y" + case 147: +#line 842 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpAsterisk, (yyvsp[0].expr)); } -#line 3745 "bison_parser.cpp" +#line 3706 "bison_parser.cpp" break; - case 150: -#line 860 "bison_parser.y" + case 148: +#line 843 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpPercentage, (yyvsp[0].expr)); } -#line 3751 "bison_parser.cpp" +#line 3712 "bison_parser.cpp" break; - case 151: -#line 861 "bison_parser.y" + case 149: +#line 844 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpCaret, (yyvsp[0].expr)); } -#line 3757 "bison_parser.cpp" +#line 3718 "bison_parser.cpp" break; - case 152: -#line 862 "bison_parser.y" + case 150: +#line 845 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpLike, (yyvsp[0].expr)); } -#line 3763 "bison_parser.cpp" +#line 3724 "bison_parser.cpp" break; - case 153: -#line 863 "bison_parser.y" + case 151: +#line 846 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-3].expr), kOpNotLike, (yyvsp[0].expr)); } -#line 3769 "bison_parser.cpp" +#line 3730 "bison_parser.cpp" break; - case 154: -#line 864 "bison_parser.y" + case 152: +#line 847 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpILike, (yyvsp[0].expr)); } -#line 3775 "bison_parser.cpp" +#line 3736 "bison_parser.cpp" break; - case 155: -#line 865 "bison_parser.y" + case 153: +#line 848 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpConcat, (yyvsp[0].expr)); } -#line 3781 "bison_parser.cpp" +#line 3742 "bison_parser.cpp" break; - case 156: -#line 869 "bison_parser.y" + case 154: +#line 852 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpAnd, (yyvsp[0].expr)); } -#line 3787 "bison_parser.cpp" +#line 3748 "bison_parser.cpp" break; - case 157: -#line 870 "bison_parser.y" + case 155: +#line 853 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpOr, (yyvsp[0].expr)); } -#line 3793 "bison_parser.cpp" +#line 3754 "bison_parser.cpp" break; - case 158: -#line 874 "bison_parser.y" + case 156: +#line 857 "bison_parser.y" { (yyval.expr) = Expr::makeInOperator((yyvsp[-4].expr), (yyvsp[-1].expr_vec)); } -#line 3799 "bison_parser.cpp" +#line 3760 "bison_parser.cpp" break; - case 159: -#line 875 "bison_parser.y" + case 157: +#line 858 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeInOperator((yyvsp[-5].expr), (yyvsp[-1].expr_vec))); } -#line 3805 "bison_parser.cpp" +#line 3766 "bison_parser.cpp" break; - case 160: -#line 876 "bison_parser.y" + case 158: +#line 859 "bison_parser.y" { (yyval.expr) = Expr::makeInOperator((yyvsp[-4].expr), (yyvsp[-1].select_stmt)); } -#line 3811 "bison_parser.cpp" +#line 3772 "bison_parser.cpp" break; - case 161: -#line 877 "bison_parser.y" + case 159: +#line 860 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeInOperator((yyvsp[-5].expr), (yyvsp[-1].select_stmt))); } -#line 3817 "bison_parser.cpp" +#line 3778 "bison_parser.cpp" break; - case 162: -#line 883 "bison_parser.y" + case 160: +#line 866 "bison_parser.y" { (yyval.expr) = Expr::makeCase((yyvsp[-2].expr), (yyvsp[-1].expr), nullptr); } -#line 3823 "bison_parser.cpp" +#line 3784 "bison_parser.cpp" break; - case 163: -#line 884 "bison_parser.y" + case 161: +#line 867 "bison_parser.y" { (yyval.expr) = Expr::makeCase((yyvsp[-4].expr), (yyvsp[-3].expr), (yyvsp[-1].expr)); } -#line 3829 "bison_parser.cpp" +#line 3790 "bison_parser.cpp" break; - case 164: -#line 885 "bison_parser.y" + case 162: +#line 868 "bison_parser.y" { (yyval.expr) = Expr::makeCase(nullptr, (yyvsp[-1].expr), nullptr); } -#line 3835 "bison_parser.cpp" +#line 3796 "bison_parser.cpp" break; - case 165: -#line 886 "bison_parser.y" + case 163: +#line 869 "bison_parser.y" { (yyval.expr) = Expr::makeCase(nullptr, (yyvsp[-3].expr), (yyvsp[-1].expr)); } -#line 3841 "bison_parser.cpp" +#line 3802 "bison_parser.cpp" break; - case 166: -#line 890 "bison_parser.y" + case 164: +#line 873 "bison_parser.y" { (yyval.expr) = Expr::makeCaseList(Expr::makeCaseListElement((yyvsp[-2].expr), (yyvsp[0].expr))); } -#line 3847 "bison_parser.cpp" +#line 3808 "bison_parser.cpp" break; - case 167: -#line 891 "bison_parser.y" + case 165: +#line 874 "bison_parser.y" { (yyval.expr) = Expr::caseListAppend((yyvsp[-4].expr), Expr::makeCaseListElement((yyvsp[-2].expr), (yyvsp[0].expr))); } -#line 3853 "bison_parser.cpp" +#line 3814 "bison_parser.cpp" break; - case 168: -#line 895 "bison_parser.y" + case 166: +#line 878 "bison_parser.y" { (yyval.expr) = Expr::makeExists((yyvsp[-1].select_stmt)); } -#line 3859 "bison_parser.cpp" +#line 3820 "bison_parser.cpp" break; - case 169: -#line 896 "bison_parser.y" + case 167: +#line 879 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeExists((yyvsp[-1].select_stmt))); } -#line 3865 "bison_parser.cpp" +#line 3826 "bison_parser.cpp" break; - case 170: -#line 900 "bison_parser.y" + case 168: +#line 883 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpEquals, (yyvsp[0].expr)); } -#line 3871 "bison_parser.cpp" +#line 3832 "bison_parser.cpp" break; - case 171: -#line 901 "bison_parser.y" + case 169: +#line 884 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpEquals, (yyvsp[0].expr)); } -#line 3877 "bison_parser.cpp" +#line 3838 "bison_parser.cpp" break; - case 172: -#line 902 "bison_parser.y" + case 170: +#line 885 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpNotEquals, (yyvsp[0].expr)); } -#line 3883 "bison_parser.cpp" +#line 3844 "bison_parser.cpp" break; - case 173: -#line 903 "bison_parser.y" + case 171: +#line 886 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpLess, (yyvsp[0].expr)); } -#line 3889 "bison_parser.cpp" +#line 3850 "bison_parser.cpp" break; - case 174: -#line 904 "bison_parser.y" + case 172: +#line 887 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpGreater, (yyvsp[0].expr)); } -#line 3895 "bison_parser.cpp" +#line 3856 "bison_parser.cpp" break; - case 175: -#line 905 "bison_parser.y" + case 173: +#line 888 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpLessEq, (yyvsp[0].expr)); } -#line 3901 "bison_parser.cpp" +#line 3862 "bison_parser.cpp" break; - case 176: -#line 906 "bison_parser.y" + case 174: +#line 889 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpGreaterEq, (yyvsp[0].expr)); } -#line 3907 "bison_parser.cpp" +#line 3868 "bison_parser.cpp" break; - case 177: -#line 910 "bison_parser.y" + case 175: +#line 893 "bison_parser.y" { (yyval.expr) = Expr::makeFunctionRef((yyvsp[-2].sval), new std::vector(), false); } -#line 3913 "bison_parser.cpp" +#line 3874 "bison_parser.cpp" break; - case 178: -#line 911 "bison_parser.y" + case 176: +#line 894 "bison_parser.y" { (yyval.expr) = Expr::makeFunctionRef((yyvsp[-4].sval), (yyvsp[-1].expr_vec), (yyvsp[-2].bval)); } -#line 3919 "bison_parser.cpp" +#line 3880 "bison_parser.cpp" break; - case 179: -#line 915 "bison_parser.y" + case 177: +#line 898 "bison_parser.y" { (yyval.expr) = Expr::makeExtract((yyvsp[-3].datetime_field), (yyvsp[-1].expr)); } -#line 3925 "bison_parser.cpp" +#line 3886 "bison_parser.cpp" break; - case 180: -#line 919 "bison_parser.y" + case 178: +#line 902 "bison_parser.y" { (yyval.datetime_field) = kDatetimeSecond; } -#line 3931 "bison_parser.cpp" +#line 3892 "bison_parser.cpp" break; - case 181: -#line 920 "bison_parser.y" + case 179: +#line 903 "bison_parser.y" { (yyval.datetime_field) = kDatetimeMinute; } -#line 3937 "bison_parser.cpp" +#line 3898 "bison_parser.cpp" break; - case 182: -#line 921 "bison_parser.y" + case 180: +#line 904 "bison_parser.y" { (yyval.datetime_field) = kDatetimeHour; } -#line 3943 "bison_parser.cpp" +#line 3904 "bison_parser.cpp" break; - case 183: -#line 922 "bison_parser.y" + case 181: +#line 905 "bison_parser.y" { (yyval.datetime_field) = kDatetimeDay; } -#line 3949 "bison_parser.cpp" +#line 3910 "bison_parser.cpp" break; - case 184: -#line 923 "bison_parser.y" + case 182: +#line 906 "bison_parser.y" { (yyval.datetime_field) = kDatetimeMonth; } -#line 3955 "bison_parser.cpp" +#line 3916 "bison_parser.cpp" break; - case 185: -#line 924 "bison_parser.y" + case 183: +#line 907 "bison_parser.y" { (yyval.datetime_field) = kDatetimeYear; } -#line 3961 "bison_parser.cpp" +#line 3922 "bison_parser.cpp" break; - case 186: -#line 927 "bison_parser.y" + case 184: +#line 910 "bison_parser.y" { (yyval.expr) = Expr::makeArray((yyvsp[-1].expr_vec)); } -#line 3967 "bison_parser.cpp" +#line 3928 "bison_parser.cpp" break; - case 187: -#line 931 "bison_parser.y" + case 185: +#line 914 "bison_parser.y" { (yyval.expr) = Expr::makeArrayIndex((yyvsp[-3].expr), (yyvsp[-1].expr)->ival); } -#line 3973 "bison_parser.cpp" +#line 3934 "bison_parser.cpp" break; - case 188: -#line 935 "bison_parser.y" + case 186: +#line 918 "bison_parser.y" { (yyval.expr) = Expr::makeBetween((yyvsp[-4].expr), (yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 3979 "bison_parser.cpp" +#line 3940 "bison_parser.cpp" break; - case 189: -#line 939 "bison_parser.y" + case 187: +#line 922 "bison_parser.y" { (yyval.expr) = Expr::makeColumnRef((yyvsp[0].sval)); } -#line 3985 "bison_parser.cpp" +#line 3946 "bison_parser.cpp" break; - case 190: -#line 940 "bison_parser.y" + case 188: +#line 923 "bison_parser.y" { (yyval.expr) = Expr::makeColumnRef((yyvsp[-2].sval), (yyvsp[0].sval)); } -#line 3991 "bison_parser.cpp" +#line 3952 "bison_parser.cpp" break; - case 191: -#line 941 "bison_parser.y" + case 189: +#line 924 "bison_parser.y" { (yyval.expr) = Expr::makeStar(); } -#line 3997 "bison_parser.cpp" +#line 3958 "bison_parser.cpp" break; - case 192: -#line 942 "bison_parser.y" + case 190: +#line 925 "bison_parser.y" { (yyval.expr) = Expr::makeStar((yyvsp[-2].sval)); } -#line 4003 "bison_parser.cpp" +#line 3964 "bison_parser.cpp" break; - case 198: -#line 954 "bison_parser.y" + case 196: +#line 937 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral((yyvsp[0].sval)); } -#line 4009 "bison_parser.cpp" +#line 3970 "bison_parser.cpp" break; - case 199: -#line 958 "bison_parser.y" + case 197: +#line 941 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral(true); } -#line 4015 "bison_parser.cpp" +#line 3976 "bison_parser.cpp" break; - case 200: -#line 959 "bison_parser.y" + case 198: +#line 942 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral(false); } -#line 4021 "bison_parser.cpp" +#line 3982 "bison_parser.cpp" break; - case 201: -#line 963 "bison_parser.y" + case 199: +#line 946 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral((yyvsp[0].fval)); } -#line 4027 "bison_parser.cpp" +#line 3988 "bison_parser.cpp" break; - case 203: -#line 968 "bison_parser.y" + case 201: +#line 951 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral((yyvsp[0].ival)); } -#line 4033 "bison_parser.cpp" +#line 3994 "bison_parser.cpp" break; - case 204: -#line 972 "bison_parser.y" + case 202: +#line 955 "bison_parser.y" { (yyval.expr) = Expr::makeNullLiteral(); } -#line 4039 "bison_parser.cpp" +#line 4000 "bison_parser.cpp" break; - case 205: -#line 976 "bison_parser.y" + case 203: +#line 959 "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 4049 "bison_parser.cpp" +#line 4010 "bison_parser.cpp" break; - case 207: -#line 989 "bison_parser.y" + case 205: +#line 972 "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 4060 "bison_parser.cpp" +#line 4021 "bison_parser.cpp" break; - case 211: -#line 1005 "bison_parser.y" + case 209: +#line 988 "bison_parser.y" { auto tbl = new TableRef(kTableSelect); tbl->select = (yyvsp[-2].select_stmt); tbl->alias = (yyvsp[0].alias_t); (yyval.table) = tbl; } -#line 4071 "bison_parser.cpp" +#line 4032 "bison_parser.cpp" break; - case 212: -#line 1014 "bison_parser.y" + case 210: +#line 997 "bison_parser.y" { (yyval.table_vec) = new std::vector(); (yyval.table_vec)->push_back((yyvsp[0].table)); } -#line 4077 "bison_parser.cpp" +#line 4038 "bison_parser.cpp" break; - case 213: -#line 1015 "bison_parser.y" + case 211: +#line 998 "bison_parser.y" { (yyvsp[-2].table_vec)->push_back((yyvsp[0].table)); (yyval.table_vec) = (yyvsp[-2].table_vec); } -#line 4083 "bison_parser.cpp" +#line 4044 "bison_parser.cpp" break; - case 214: -#line 1020 "bison_parser.y" + case 212: +#line 1003 "bison_parser.y" { auto tbl = new TableRef(kTableName); tbl->schema = (yyvsp[-1].table_name).schema; @@ -4091,103 +4052,103 @@ YYLTYPE yylloc = yyloc_default; tbl->alias = (yyvsp[0].alias_t); (yyval.table) = tbl; } -#line 4095 "bison_parser.cpp" +#line 4056 "bison_parser.cpp" break; - case 215: -#line 1031 "bison_parser.y" + case 213: +#line 1014 "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 4105 "bison_parser.cpp" +#line 4066 "bison_parser.cpp" break; - case 216: -#line 1040 "bison_parser.y" + case 214: +#line 1023 "bison_parser.y" { (yyval.table_name).schema = nullptr; (yyval.table_name).name = (yyvsp[0].sval);} -#line 4111 "bison_parser.cpp" +#line 4072 "bison_parser.cpp" break; - case 217: -#line 1041 "bison_parser.y" + case 215: +#line 1024 "bison_parser.y" { (yyval.table_name).schema = (yyvsp[-2].sval); (yyval.table_name).name = (yyvsp[0].sval); } -#line 4117 "bison_parser.cpp" +#line 4078 "bison_parser.cpp" break; - case 219: -#line 1047 "bison_parser.y" + case 217: +#line 1030 "bison_parser.y" { (yyval.alias_t) = new Alias((yyvsp[-3].sval), (yyvsp[-1].str_vec)); } -#line 4123 "bison_parser.cpp" +#line 4084 "bison_parser.cpp" break; - case 221: -#line 1053 "bison_parser.y" + case 219: +#line 1036 "bison_parser.y" { (yyval.alias_t) = nullptr; } -#line 4129 "bison_parser.cpp" +#line 4090 "bison_parser.cpp" break; - case 222: -#line 1057 "bison_parser.y" + case 220: +#line 1040 "bison_parser.y" { (yyval.alias_t) = new Alias((yyvsp[0].sval)); } -#line 4135 "bison_parser.cpp" +#line 4096 "bison_parser.cpp" break; - case 223: -#line 1058 "bison_parser.y" + case 221: +#line 1041 "bison_parser.y" { (yyval.alias_t) = new Alias((yyvsp[0].sval)); } -#line 4141 "bison_parser.cpp" +#line 4102 "bison_parser.cpp" break; - case 225: -#line 1064 "bison_parser.y" + case 223: +#line 1047 "bison_parser.y" { (yyval.alias_t) = nullptr; } -#line 4147 "bison_parser.cpp" +#line 4108 "bison_parser.cpp" break; - case 227: -#line 1073 "bison_parser.y" + case 225: +#line 1056 "bison_parser.y" { (yyval.with_description_vec) = nullptr; } -#line 4153 "bison_parser.cpp" +#line 4114 "bison_parser.cpp" break; - case 228: -#line 1077 "bison_parser.y" + case 226: +#line 1060 "bison_parser.y" { (yyval.with_description_vec) = (yyvsp[0].with_description_vec); } -#line 4159 "bison_parser.cpp" +#line 4120 "bison_parser.cpp" break; - case 229: -#line 1081 "bison_parser.y" + case 227: +#line 1064 "bison_parser.y" { (yyval.with_description_vec) = new std::vector(); (yyval.with_description_vec)->push_back((yyvsp[0].with_description_t)); } -#line 4168 "bison_parser.cpp" +#line 4129 "bison_parser.cpp" break; - case 230: -#line 1085 "bison_parser.y" + case 228: +#line 1068 "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 4177 "bison_parser.cpp" +#line 4138 "bison_parser.cpp" break; - case 231: -#line 1092 "bison_parser.y" + case 229: +#line 1075 "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 4187 "bison_parser.cpp" +#line 4148 "bison_parser.cpp" break; - case 232: -#line 1106 "bison_parser.y" + case 230: +#line 1089 "bison_parser.y" { (yyval.table) = new TableRef(kTableJoin); (yyval.table)->join = new JoinDefinition(); @@ -4195,11 +4156,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.table)->join->left = (yyvsp[-3].table); (yyval.table)->join->right = (yyvsp[0].table); } -#line 4199 "bison_parser.cpp" +#line 4160 "bison_parser.cpp" break; - case 233: -#line 1114 "bison_parser.y" + case 231: +#line 1097 "bison_parser.y" { (yyval.table) = new TableRef(kTableJoin); (yyval.table)->join = new JoinDefinition(); @@ -4208,11 +4169,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.table)->join->right = (yyvsp[-2].table); (yyval.table)->join->condition = (yyvsp[0].expr); } -#line 4212 "bison_parser.cpp" +#line 4173 "bison_parser.cpp" break; - case 234: -#line 1124 "bison_parser.y" + case 232: +#line 1107 "bison_parser.y" { (yyval.table) = new TableRef(kTableJoin); (yyval.table)->join = new JoinDefinition(); @@ -4228,83 +4189,83 @@ YYLTYPE yylloc = yyloc_default; (yyval.table)->join->condition = Expr::makeOpBinary(left_col, kOpEquals, right_col); delete (yyvsp[-1].expr); } -#line 4232 "bison_parser.cpp" +#line 4193 "bison_parser.cpp" break; - case 235: -#line 1142 "bison_parser.y" + case 233: +#line 1125 "bison_parser.y" { (yyval.uval) = kJoinInner; } -#line 4238 "bison_parser.cpp" +#line 4199 "bison_parser.cpp" break; - case 236: -#line 1143 "bison_parser.y" + case 234: +#line 1126 "bison_parser.y" { (yyval.uval) = kJoinLeft; } -#line 4244 "bison_parser.cpp" +#line 4205 "bison_parser.cpp" break; - case 237: -#line 1144 "bison_parser.y" + case 235: +#line 1127 "bison_parser.y" { (yyval.uval) = kJoinLeft; } -#line 4250 "bison_parser.cpp" +#line 4211 "bison_parser.cpp" break; - case 238: -#line 1145 "bison_parser.y" + case 236: +#line 1128 "bison_parser.y" { (yyval.uval) = kJoinRight; } -#line 4256 "bison_parser.cpp" +#line 4217 "bison_parser.cpp" break; - case 239: -#line 1146 "bison_parser.y" + case 237: +#line 1129 "bison_parser.y" { (yyval.uval) = kJoinRight; } -#line 4262 "bison_parser.cpp" +#line 4223 "bison_parser.cpp" break; - case 240: -#line 1147 "bison_parser.y" + case 238: +#line 1130 "bison_parser.y" { (yyval.uval) = kJoinFull; } -#line 4268 "bison_parser.cpp" +#line 4229 "bison_parser.cpp" break; - case 241: -#line 1148 "bison_parser.y" + case 239: +#line 1131 "bison_parser.y" { (yyval.uval) = kJoinFull; } -#line 4274 "bison_parser.cpp" +#line 4235 "bison_parser.cpp" break; - case 242: -#line 1149 "bison_parser.y" + case 240: +#line 1132 "bison_parser.y" { (yyval.uval) = kJoinFull; } -#line 4280 "bison_parser.cpp" +#line 4241 "bison_parser.cpp" break; - case 243: -#line 1150 "bison_parser.y" + case 241: +#line 1133 "bison_parser.y" { (yyval.uval) = kJoinCross; } -#line 4286 "bison_parser.cpp" +#line 4247 "bison_parser.cpp" break; - case 244: -#line 1151 "bison_parser.y" + case 242: +#line 1134 "bison_parser.y" { (yyval.uval) = kJoinInner; } -#line 4292 "bison_parser.cpp" +#line 4253 "bison_parser.cpp" break; - case 248: -#line 1171 "bison_parser.y" + case 246: +#line 1154 "bison_parser.y" { (yyval.str_vec) = new std::vector(); (yyval.str_vec)->push_back((yyvsp[0].sval)); } -#line 4298 "bison_parser.cpp" +#line 4259 "bison_parser.cpp" break; - case 249: -#line 1172 "bison_parser.y" + case 247: +#line 1155 "bison_parser.y" { (yyvsp[-2].str_vec)->push_back((yyvsp[0].sval)); (yyval.str_vec) = (yyvsp[-2].str_vec); } -#line 4304 "bison_parser.cpp" +#line 4265 "bison_parser.cpp" break; -#line 4308 "bison_parser.cpp" +#line 4269 "bison_parser.cpp" default: break; } @@ -4542,7 +4503,7 @@ YYLTYPE yylloc = yyloc_default; #endif return yyresult; } -#line 1175 "bison_parser.y" +#line 1158 "bison_parser.y" /********************************* ** Section 4: Additional C code diff --git a/src/parser/bison_parser.y b/src/parser/bison_parser.y index 61c8ce67..405650fa 100755 --- a/src/parser/bison_parser.y +++ b/src/parser/bison_parser.y @@ -206,7 +206,7 @@ int yyerror(YYLTYPE* llocp, SQLParserResult* result, yyscan_t scanner, const cha %type column_name literal int_literal num_literal string_literal bool_literal %type comp_expr opt_where join_condition opt_having case_expr case_list in_expr hint %type array_expr array_index null_literal -%type opt_limit opt_top limit +%type opt_limit opt_top %type order_desc %type opt_order_type %type datetime_field @@ -221,7 +221,7 @@ int yyerror(YYLTYPE* llocp, SQLParserResult* result, yyscan_t scanner, const cha %type ident_commalist opt_column_list %type expr_list select_list opt_literal_list literal_list hint_list opt_hints %type table_ref_commalist -%type opt_order order_list order +%type opt_order order_list %type opt_with_clause with_clause with_description_list %type update_clause_commalist %type column_def_commalist @@ -613,14 +613,9 @@ select_statement: $$ = $2; $$->setOperator = $3; $$->withDescriptions = $1; - $$->nestedSetSelectStatement = $4; - $$->order = $5; - - // Limit could have been set by TOP. - if ($6 != nullptr) { - delete $$->limit; - $$->limit = $6; - } + $$->setOperator->nestedSelectStatement = $4; + $$->setOperator->resultOrder = $5; + $$->setOperator->resultLimit = $6; } ; @@ -633,7 +628,7 @@ select_part_of_set_operation: | select_clause set_operator select_statement_in_set_operation { $$ = $1; $$->setOperator = $2; - $$-> nestedSetSelectStatement = $3; + $$->setOperator->nestedSelectStatement = $3; } ; @@ -656,14 +651,9 @@ select_no_paren: | select_clause set_operator select_statement_in_set_operation opt_order opt_limit { $$ = $1; $$->setOperator = $2; - $$->nestedSetSelectStatement = $3; - $$->order = $4; - - // Limit could have been set by TOP. - if ($5 != nullptr) { - delete $$->limit; - $$->limit = $5; - } + $$->setOperator->nestedSelectStatement = $3; + $$->setOperator->resultOrder = $4; + $$->setOperator->resultLimit = $5; } ; @@ -747,13 +737,10 @@ opt_having: | /* empty */ { $$ = nullptr; } opt_order: - order { $$ = $1; } + ORDER BY order_list { $$ = $3; }; | /* empty */ { $$ = nullptr; } ; -order: - ORDER BY order_list { $$ = $3; }; - order_list: order_desc { $$ = new std::vector(); $$->push_back($1); } | order_list ',' order_desc { $1->push_back($3); $$ = $1; } @@ -777,16 +764,12 @@ opt_top: ; opt_limit: - limit { $$ = $1; } - | /* empty */ { $$ = nullptr; } - ; - -limit: - LIMIT expr { $$ = new LimitDescription($2, nullptr); } + LIMIT expr { $$ = new LimitDescription($2, nullptr); } | OFFSET expr { $$ = new LimitDescription(nullptr, $2); } | LIMIT expr OFFSET expr { $$ = new LimitDescription($2, $4); } | LIMIT ALL { $$ = new LimitDescription(nullptr, nullptr); } | LIMIT ALL OFFSET expr { $$ = new LimitDescription(nullptr, $4); } + | /* empty */ { $$ = nullptr; } ; /****************************** diff --git a/src/sql/SelectStatement.h b/src/sql/SelectStatement.h index 2b6d786d..e48c7da5 100644 --- a/src/sql/SelectStatement.h +++ b/src/sql/SelectStatement.h @@ -17,14 +17,6 @@ namespace hsql { kSetExcept }; - struct SetOperator { - SetOperator(); - virtual ~SetOperator(); - - SetType setType; - bool isAll; - }; - // Description of the order by clause within a select statement. struct OrderDescription { OrderDescription(OrderType type, Expr* expr); @@ -59,8 +51,21 @@ namespace hsql { SelectStatement* select; }; + struct SetOperator { + SetOperator(); + virtual ~SetOperator(); + + SetType setType; + bool isAll; + + SelectStatement* nestedSelectStatement; + std::vector* resultOrder; + LimitDescription* resultLimit; + + }; + // Representation of a full SQL select statement. - // TODO: add union_order and union_limit. + // TODO: Fit query and order into setOperator. struct SelectStatement : SQLStatement { SelectStatement(); virtual ~SelectStatement(); @@ -72,7 +77,6 @@ namespace hsql { GroupByDescription* groupBy; SetOperator* setOperator; - SelectStatement* nestedSetSelectStatement; std::vector* order; std::vector* withDescriptions; LimitDescription* limit; diff --git a/src/sql/statements.cpp b/src/sql/statements.cpp index 2a7b4dbb..4153365e 100755 --- a/src/sql/statements.cpp +++ b/src/sql/statements.cpp @@ -241,7 +241,6 @@ namespace hsql { whereClause(nullptr), groupBy(nullptr), setOperator(nullptr), - nestedSetSelectStatement(nullptr), order(nullptr), withDescriptions(nullptr), limit(nullptr) {}; @@ -250,7 +249,6 @@ namespace hsql { delete fromTable; delete whereClause; delete groupBy; - delete nestedSetSelectStatement; delete limit; delete setOperator; @@ -361,8 +359,21 @@ namespace hsql { delete condition; } - SetOperator::SetOperator() {} + SetOperator::SetOperator() : + nestedSelectStatement(nullptr), + resultOrder(nullptr), + resultLimit(nullptr) {} - SetOperator::~SetOperator() {} + SetOperator::~SetOperator() { + delete nestedSelectStatement; + delete resultLimit; + + if (resultOrder != nullptr) { + for (OrderDescription* desc: *resultOrder) { + delete desc; + } + delete resultOrder; + } + } } // namespace hsql diff --git a/src/util/sqlhelper.cpp b/src/util/sqlhelper.cpp index 841a813c..4a43fc4c 100755 --- a/src/util/sqlhelper.cpp +++ b/src/util/sqlhelper.cpp @@ -168,7 +168,7 @@ namespace hsql { } } - if (stmt->nestedSetSelectStatement != nullptr) { + if (stmt->setOperator != nullptr) { if (stmt->setOperator->setType == SetType::kSetUnion) { inprint("Union:", numIndent + 1); } else if (stmt->setOperator->setType == SetType::kSetIntersect) { @@ -176,7 +176,7 @@ namespace hsql { } else { inprint("Except:", numIndent + 1); } - printSelectStatementInfo(stmt->nestedSetSelectStatement, numIndent + 2); + printSelectStatementInfo(stmt->setOperator->nestedSelectStatement, numIndent + 2); } if (stmt->order != nullptr) { @@ -195,6 +195,25 @@ namespace hsql { inprint("Offset:", numIndent + 1); printExpression(stmt->limit->offset, numIndent + 2); } + + if (stmt->setOperator != nullptr && stmt->setOperator->resultOrder != nullptr) { + inprint("SetResultOrderBy:", numIndent + 1); + printExpression(stmt->setOperator->resultOrder->at(0)->expr, numIndent + 2); + if (stmt->setOperator->resultOrder->at(0)->type == kOrderAsc) inprint("ascending", numIndent + 2); + else inprint("descending", numIndent + 2); + } + + if (stmt->setOperator != nullptr && stmt->setOperator->resultLimit != nullptr) { + if (stmt->setOperator->resultLimit->limit != nullptr) { + inprint("SetResultLimit:", numIndent + 1); + printExpression(stmt->setOperator->resultLimit->limit, numIndent + 2); + } + + if (stmt->setOperator->resultLimit->offset != nullptr) { + inprint("SetResultOffset:", numIndent + 1); + printExpression(stmt->setOperator->resultLimit->offset, numIndent + 2); + } + } } diff --git a/test/sql_tests.cpp b/test/sql_tests.cpp index d34f628f..01554057 100644 --- a/test/sql_tests.cpp +++ b/test/sql_tests.cpp @@ -266,7 +266,7 @@ TEST(ExceptOperatorTest) { result, stmt); - ASSERT_STREQ(stmt->nestedSetSelectStatement->fromTable->name, "students_2"); + ASSERT_STREQ(stmt->setOperator->nestedSelectStatement->fromTable->name, "students_2"); ASSERT_STREQ(stmt->fromTable->name, "students"); ASSERT_EQ(stmt->setOperator->setType, kSetExcept); } @@ -279,7 +279,7 @@ TEST(IntersectOperatorTest) { result, stmt); - ASSERT_STREQ(stmt->nestedSetSelectStatement->fromTable->name, "students_2"); + ASSERT_STREQ(stmt->setOperator->nestedSelectStatement->fromTable->name, "students_2"); ASSERT_STREQ(stmt->fromTable->name, "students"); ASSERT_EQ(stmt->setOperator->setType, kSetIntersect); } @@ -292,7 +292,7 @@ TEST(UnionOperatorTest) { result, stmt); - ASSERT_STREQ(stmt->nestedSetSelectStatement->fromTable->name, "students_2"); + ASSERT_STREQ(stmt->setOperator->nestedSelectStatement->fromTable->name, "students_2"); ASSERT_STREQ(stmt->fromTable->name, "students"); ASSERT_EQ(stmt->setOperator->setType, kSetUnion); ASSERT_FALSE(stmt->setOperator->isAll); @@ -306,7 +306,7 @@ TEST(UnionAllOperatorTest) { result, stmt); - ASSERT_STREQ(stmt->nestedSetSelectStatement->fromTable->name, "students_2"); + ASSERT_STREQ(stmt->setOperator->nestedSelectStatement->fromTable->name, "students_2"); ASSERT_STREQ(stmt->fromTable->name, "students"); ASSERT_TRUE(stmt->setOperator->isAll); } @@ -319,11 +319,11 @@ TEST(NestedSetOperatorTest) { result, stmt); - ASSERT_STREQ(stmt->nestedSetSelectStatement->nestedSetSelectStatement->fromTable->name, "employees"); - ASSERT_STREQ(stmt->nestedSetSelectStatement->fromTable->name, "students_2"); + ASSERT_STREQ(stmt->setOperator->nestedSelectStatement->setOperator->nestedSelectStatement->fromTable->name, "employees"); + ASSERT_STREQ(stmt->setOperator->nestedSelectStatement->fromTable->name, "students_2"); ASSERT_STREQ(stmt->fromTable->name, "students"); ASSERT_EQ(stmt->setOperator->setType, kSetIntersect); - ASSERT_EQ(stmt->nestedSetSelectStatement->setOperator->setType, kSetUnion); + ASSERT_EQ(stmt->setOperator->nestedSelectStatement->setOperator->setType, kSetUnion); ASSERT_FALSE(stmt->setOperator->isAll); } @@ -335,8 +335,24 @@ TEST(OrderByFullStatementTest) { result, stmt); - ASSERT_EQ(stmt->order->at(0)->type, kOrderAsc); - ASSERT_STREQ(stmt->order->at(0)->expr->name, "grade"); + ASSERT_EQ(stmt->setOperator->resultOrder->at(0)->type, kOrderAsc); + ASSERT_STREQ(stmt->setOperator->resultOrder->at(0)->expr->name, "grade"); + ASSERT_FALSE(stmt->setOperator->isAll); +} + +TEST(SetOperatorSubQueryOrder) { + TEST_PARSE_SINGLE_SQL( + "(SELECT * FROM students ORDER BY name DESC) INTERSECT SELECT grade FROM students_2 UNION SELECT * FROM employees ORDER BY grade ASC;", + kStmtSelect, + SelectStatement, + result, + stmt); + + ASSERT_EQ(stmt->order->at(0)->type, kOrderDesc); + ASSERT_STREQ(stmt->order->at(0)->expr->name, "name"); + + ASSERT_EQ(stmt->setOperator->resultOrder->at(0)->type, kOrderAsc); + ASSERT_STREQ(stmt->setOperator->resultOrder->at(0)->expr->name, "grade"); ASSERT_FALSE(stmt->setOperator->isAll); } From 4d5cdafc40166dbdcc6e291cf62afc92018442d1 Mon Sep 17 00:00:00 2001 From: Tobias Nack Date: Wed, 15 Jan 2020 12:29:01 +0100 Subject: [PATCH 17/27] Allow Vector of Set Operation to prevent overwrite of old set operator --- src/parser/bison_parser.cpp | 635 ++++++++++++++++++------------------ src/parser/bison_parser.y | 29 +- src/sql/SelectStatement.h | 3 +- src/sql/statements.cpp | 10 +- src/util/sqlhelper.cpp | 56 ++-- test/sql_tests.cpp | 40 +-- 6 files changed, 400 insertions(+), 373 deletions(-) diff --git a/src/parser/bison_parser.cpp b/src/parser/bison_parser.cpp index 5c26e21a..a65fd3c4 100644 --- a/src/parser/bison_parser.cpp +++ b/src/parser/bison_parser.cpp @@ -713,24 +713,24 @@ static const yytype_uint16 yyrline[] = 464, 468, 474, 475, 476, 477, 478, 479, 480, 481, 485, 486, 487, 497, 503, 509, 517, 518, 527, 536, 549, 556, 567, 568, 578, 587, 588, 592, 604, 608, - 612, 623, 624, 627, 628, 636, 637, 641, 651, 661, - 668, 672, 676, 683, 686, 692, 704, 705, 709, 713, - 714, 717, 722, 723, 727, 732, 736, 737, 740, 741, - 745, 746, 750, 754, 755, 756, 762, 763, 767, 768, - 769, 770, 771, 772, 779, 780, 784, 785, 789, 790, - 794, 804, 805, 806, 807, 808, 812, 813, 814, 815, - 816, 817, 818, 819, 820, 821, 825, 826, 830, 831, - 832, 833, 834, 838, 839, 840, 841, 842, 843, 844, - 845, 846, 847, 848, 852, 853, 857, 858, 859, 860, - 866, 867, 868, 869, 873, 874, 878, 879, 883, 884, - 885, 886, 887, 888, 889, 893, 894, 898, 902, 903, - 904, 905, 906, 907, 910, 914, 918, 922, 923, 924, - 925, 929, 930, 931, 932, 933, 937, 941, 942, 946, - 947, 951, 955, 959, 971, 972, 982, 983, 987, 988, - 997, 998, 1003, 1014, 1023, 1024, 1029, 1030, 1035, 1036, - 1040, 1041, 1046, 1047, 1055, 1056, 1060, 1064, 1068, 1075, - 1088, 1096, 1106, 1125, 1126, 1127, 1128, 1129, 1130, 1131, - 1132, 1133, 1134, 1139, 1148, 1149, 1154, 1155 + 612, 626, 627, 630, 631, 642, 643, 647, 657, 670, + 677, 681, 685, 692, 695, 701, 713, 714, 718, 722, + 723, 726, 731, 732, 736, 741, 745, 746, 749, 750, + 754, 755, 759, 763, 764, 765, 771, 772, 776, 777, + 778, 779, 780, 781, 788, 789, 793, 794, 798, 799, + 803, 813, 814, 815, 816, 817, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 834, 835, 839, 840, + 841, 842, 843, 847, 848, 849, 850, 851, 852, 853, + 854, 855, 856, 857, 861, 862, 866, 867, 868, 869, + 875, 876, 877, 878, 882, 883, 887, 888, 892, 893, + 894, 895, 896, 897, 898, 902, 903, 907, 911, 912, + 913, 914, 915, 916, 919, 923, 927, 931, 932, 933, + 934, 938, 939, 940, 941, 942, 946, 950, 951, 955, + 956, 960, 964, 968, 980, 981, 991, 992, 996, 997, + 1006, 1007, 1012, 1023, 1032, 1033, 1038, 1039, 1044, 1045, + 1049, 1050, 1055, 1056, 1064, 1065, 1069, 1073, 1077, 1084, + 1097, 1105, 1115, 1134, 1135, 1136, 1137, 1138, 1139, 1140, + 1141, 1142, 1143, 1148, 1157, 1158, 1163, 1164 }; #endif @@ -3295,45 +3295,51 @@ YYLTYPE yylloc = yyloc_default; #line 612 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-4].select_stmt); - (yyval.select_stmt)->setOperator = (yyvsp[-3].set_operator_t); + if ((yyval.select_stmt)->setOperators == nullptr) { + (yyval.select_stmt)->setOperators = new std::vector(); + } + (yyval.select_stmt)->setOperators->push_back((yyvsp[-3].set_operator_t)); + (yyval.select_stmt)->setOperators->back()->nestedSelectStatement = (yyvsp[-2].select_stmt); + (yyval.select_stmt)->setOperators->back()->resultOrder = (yyvsp[-1].order_vec); + (yyval.select_stmt)->setOperators->back()->resultLimit = (yyvsp[0].limit); (yyval.select_stmt)->withDescriptions = (yyvsp[-5].with_description_vec); - (yyval.select_stmt)->setOperator->nestedSelectStatement = (yyvsp[-2].select_stmt); - (yyval.select_stmt)->setOperator->resultOrder = (yyvsp[-1].order_vec); - (yyval.select_stmt)->setOperator->resultLimit = (yyvsp[0].limit); } -#line 3305 "bison_parser.cpp" +#line 3308 "bison_parser.cpp" break; case 73: -#line 627 "bison_parser.y" +#line 630 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[0].select_stmt); } -#line 3311 "bison_parser.cpp" +#line 3314 "bison_parser.cpp" break; case 74: -#line 628 "bison_parser.y" +#line 631 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-2].select_stmt); - (yyval.select_stmt)->setOperator = (yyvsp[-1].set_operator_t); - (yyval.select_stmt)->setOperator->nestedSelectStatement = (yyvsp[0].select_stmt); + if ((yyval.select_stmt)->setOperators == nullptr) { + (yyval.select_stmt)->setOperators = new std::vector(); + } + (yyval.select_stmt)->setOperators->push_back((yyvsp[-1].set_operator_t)); + (yyval.select_stmt)->setOperators->back()->nestedSelectStatement = (yyvsp[0].select_stmt); } -#line 3321 "bison_parser.cpp" +#line 3327 "bison_parser.cpp" break; case 75: -#line 636 "bison_parser.y" +#line 642 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-1].select_stmt); } -#line 3327 "bison_parser.cpp" +#line 3333 "bison_parser.cpp" break; case 76: -#line 637 "bison_parser.y" +#line 643 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-1].select_stmt); } -#line 3333 "bison_parser.cpp" +#line 3339 "bison_parser.cpp" break; case 77: -#line 641 "bison_parser.y" +#line 647 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-2].select_stmt); (yyval.select_stmt)->order = (yyvsp[-1].order_vec); @@ -3344,75 +3350,78 @@ YYLTYPE yylloc = yyloc_default; (yyval.select_stmt)->limit = (yyvsp[0].limit); } } -#line 3348 "bison_parser.cpp" +#line 3354 "bison_parser.cpp" break; case 78: -#line 651 "bison_parser.y" +#line 657 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-4].select_stmt); - (yyval.select_stmt)->setOperator = (yyvsp[-3].set_operator_t); - (yyval.select_stmt)->setOperator->nestedSelectStatement = (yyvsp[-2].select_stmt); - (yyval.select_stmt)->setOperator->resultOrder = (yyvsp[-1].order_vec); - (yyval.select_stmt)->setOperator->resultLimit = (yyvsp[0].limit); + if ((yyval.select_stmt)->setOperators == nullptr) { + (yyval.select_stmt)->setOperators = new std::vector(); + } + (yyval.select_stmt)->setOperators->push_back((yyvsp[-3].set_operator_t)); + (yyval.select_stmt)->setOperators->back()->nestedSelectStatement = (yyvsp[-2].select_stmt); + (yyval.select_stmt)->setOperators->back()->resultOrder = (yyvsp[-1].order_vec); + (yyval.select_stmt)->setOperators->back()->resultLimit = (yyvsp[0].limit); } -#line 3360 "bison_parser.cpp" +#line 3369 "bison_parser.cpp" break; case 79: -#line 661 "bison_parser.y" +#line 670 "bison_parser.y" { (yyval.set_operator_t) = (yyvsp[-1].set_operator_t); (yyval.set_operator_t)->isAll = (yyvsp[0].bval); } -#line 3369 "bison_parser.cpp" +#line 3378 "bison_parser.cpp" break; case 80: -#line 668 "bison_parser.y" +#line 677 "bison_parser.y" { (yyval.set_operator_t) = new SetOperator(); (yyval.set_operator_t)->setType = SetType::kSetUnion; } -#line 3378 "bison_parser.cpp" +#line 3387 "bison_parser.cpp" break; case 81: -#line 672 "bison_parser.y" +#line 681 "bison_parser.y" { (yyval.set_operator_t) = new SetOperator(); (yyval.set_operator_t)->setType = SetType::kSetIntersect; } -#line 3387 "bison_parser.cpp" +#line 3396 "bison_parser.cpp" break; case 82: -#line 676 "bison_parser.y" +#line 685 "bison_parser.y" { (yyval.set_operator_t) = new SetOperator(); (yyval.set_operator_t)->setType = SetType::kSetExcept; } -#line 3396 "bison_parser.cpp" +#line 3405 "bison_parser.cpp" break; case 83: -#line 683 "bison_parser.y" +#line 692 "bison_parser.y" { (yyval.bval) = true; } -#line 3404 "bison_parser.cpp" +#line 3413 "bison_parser.cpp" break; case 84: -#line 686 "bison_parser.y" +#line 695 "bison_parser.y" { (yyval.bval) = false; } -#line 3412 "bison_parser.cpp" +#line 3421 "bison_parser.cpp" break; case 85: -#line 692 "bison_parser.y" +#line 701 "bison_parser.y" { (yyval.select_stmt) = new SelectStatement(); (yyval.select_stmt)->limit = (yyvsp[-5].limit); @@ -3422,213 +3431,213 @@ YYLTYPE yylloc = yyloc_default; (yyval.select_stmt)->whereClause = (yyvsp[-1].expr); (yyval.select_stmt)->groupBy = (yyvsp[0].group_t); } -#line 3426 "bison_parser.cpp" +#line 3435 "bison_parser.cpp" break; case 86: -#line 704 "bison_parser.y" +#line 713 "bison_parser.y" { (yyval.bval) = true; } -#line 3432 "bison_parser.cpp" +#line 3441 "bison_parser.cpp" break; case 87: -#line 705 "bison_parser.y" +#line 714 "bison_parser.y" { (yyval.bval) = false; } -#line 3438 "bison_parser.cpp" +#line 3447 "bison_parser.cpp" break; case 89: -#line 713 "bison_parser.y" +#line 722 "bison_parser.y" { (yyval.table) = (yyvsp[0].table); } -#line 3444 "bison_parser.cpp" +#line 3453 "bison_parser.cpp" break; case 90: -#line 714 "bison_parser.y" +#line 723 "bison_parser.y" { (yyval.table) = nullptr; } -#line 3450 "bison_parser.cpp" +#line 3459 "bison_parser.cpp" break; case 91: -#line 717 "bison_parser.y" +#line 726 "bison_parser.y" { (yyval.table) = (yyvsp[0].table); } -#line 3456 "bison_parser.cpp" +#line 3465 "bison_parser.cpp" break; case 92: -#line 722 "bison_parser.y" +#line 731 "bison_parser.y" { (yyval.expr) = (yyvsp[0].expr); } -#line 3462 "bison_parser.cpp" +#line 3471 "bison_parser.cpp" break; case 93: -#line 723 "bison_parser.y" +#line 732 "bison_parser.y" { (yyval.expr) = nullptr; } -#line 3468 "bison_parser.cpp" +#line 3477 "bison_parser.cpp" break; case 94: -#line 727 "bison_parser.y" +#line 736 "bison_parser.y" { (yyval.group_t) = new GroupByDescription(); (yyval.group_t)->columns = (yyvsp[-1].expr_vec); (yyval.group_t)->having = (yyvsp[0].expr); } -#line 3478 "bison_parser.cpp" +#line 3487 "bison_parser.cpp" break; case 95: -#line 732 "bison_parser.y" +#line 741 "bison_parser.y" { (yyval.group_t) = nullptr; } -#line 3484 "bison_parser.cpp" +#line 3493 "bison_parser.cpp" break; case 96: -#line 736 "bison_parser.y" +#line 745 "bison_parser.y" { (yyval.expr) = (yyvsp[0].expr); } -#line 3490 "bison_parser.cpp" +#line 3499 "bison_parser.cpp" break; case 97: -#line 737 "bison_parser.y" +#line 746 "bison_parser.y" { (yyval.expr) = nullptr; } -#line 3496 "bison_parser.cpp" +#line 3505 "bison_parser.cpp" break; case 98: -#line 740 "bison_parser.y" +#line 749 "bison_parser.y" { (yyval.order_vec) = (yyvsp[0].order_vec); } -#line 3502 "bison_parser.cpp" +#line 3511 "bison_parser.cpp" break; case 99: -#line 741 "bison_parser.y" +#line 750 "bison_parser.y" { (yyval.order_vec) = nullptr; } -#line 3508 "bison_parser.cpp" +#line 3517 "bison_parser.cpp" break; case 100: -#line 745 "bison_parser.y" +#line 754 "bison_parser.y" { (yyval.order_vec) = new std::vector(); (yyval.order_vec)->push_back((yyvsp[0].order)); } -#line 3514 "bison_parser.cpp" +#line 3523 "bison_parser.cpp" break; case 101: -#line 746 "bison_parser.y" +#line 755 "bison_parser.y" { (yyvsp[-2].order_vec)->push_back((yyvsp[0].order)); (yyval.order_vec) = (yyvsp[-2].order_vec); } -#line 3520 "bison_parser.cpp" +#line 3529 "bison_parser.cpp" break; case 102: -#line 750 "bison_parser.y" +#line 759 "bison_parser.y" { (yyval.order) = new OrderDescription((yyvsp[0].order_type), (yyvsp[-1].expr)); } -#line 3526 "bison_parser.cpp" +#line 3535 "bison_parser.cpp" break; case 103: -#line 754 "bison_parser.y" +#line 763 "bison_parser.y" { (yyval.order_type) = kOrderAsc; } -#line 3532 "bison_parser.cpp" +#line 3541 "bison_parser.cpp" break; case 104: -#line 755 "bison_parser.y" +#line 764 "bison_parser.y" { (yyval.order_type) = kOrderDesc; } -#line 3538 "bison_parser.cpp" +#line 3547 "bison_parser.cpp" break; case 105: -#line 756 "bison_parser.y" +#line 765 "bison_parser.y" { (yyval.order_type) = kOrderAsc; } -#line 3544 "bison_parser.cpp" +#line 3553 "bison_parser.cpp" break; case 106: -#line 762 "bison_parser.y" +#line 771 "bison_parser.y" { (yyval.limit) = new LimitDescription((yyvsp[0].expr), nullptr); } -#line 3550 "bison_parser.cpp" +#line 3559 "bison_parser.cpp" break; case 107: -#line 763 "bison_parser.y" +#line 772 "bison_parser.y" { (yyval.limit) = nullptr; } -#line 3556 "bison_parser.cpp" +#line 3565 "bison_parser.cpp" break; case 108: -#line 767 "bison_parser.y" +#line 776 "bison_parser.y" { (yyval.limit) = new LimitDescription((yyvsp[0].expr), nullptr); } -#line 3562 "bison_parser.cpp" +#line 3571 "bison_parser.cpp" break; case 109: -#line 768 "bison_parser.y" +#line 777 "bison_parser.y" { (yyval.limit) = new LimitDescription(nullptr, (yyvsp[0].expr)); } -#line 3568 "bison_parser.cpp" +#line 3577 "bison_parser.cpp" break; case 110: -#line 769 "bison_parser.y" +#line 778 "bison_parser.y" { (yyval.limit) = new LimitDescription((yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 3574 "bison_parser.cpp" +#line 3583 "bison_parser.cpp" break; case 111: -#line 770 "bison_parser.y" +#line 779 "bison_parser.y" { (yyval.limit) = new LimitDescription(nullptr, nullptr); } -#line 3580 "bison_parser.cpp" +#line 3589 "bison_parser.cpp" break; case 112: -#line 771 "bison_parser.y" +#line 780 "bison_parser.y" { (yyval.limit) = new LimitDescription(nullptr, (yyvsp[0].expr)); } -#line 3586 "bison_parser.cpp" +#line 3595 "bison_parser.cpp" break; case 113: -#line 772 "bison_parser.y" +#line 781 "bison_parser.y" { (yyval.limit) = nullptr; } -#line 3592 "bison_parser.cpp" +#line 3601 "bison_parser.cpp" break; case 114: -#line 779 "bison_parser.y" +#line 788 "bison_parser.y" { (yyval.expr_vec) = new std::vector(); (yyval.expr_vec)->push_back((yyvsp[0].expr)); } -#line 3598 "bison_parser.cpp" +#line 3607 "bison_parser.cpp" break; case 115: -#line 780 "bison_parser.y" +#line 789 "bison_parser.y" { (yyvsp[-2].expr_vec)->push_back((yyvsp[0].expr)); (yyval.expr_vec) = (yyvsp[-2].expr_vec); } -#line 3604 "bison_parser.cpp" +#line 3613 "bison_parser.cpp" break; case 116: -#line 784 "bison_parser.y" +#line 793 "bison_parser.y" { (yyval.expr_vec) = (yyvsp[0].expr_vec); } -#line 3610 "bison_parser.cpp" +#line 3619 "bison_parser.cpp" break; case 117: -#line 785 "bison_parser.y" +#line 794 "bison_parser.y" { (yyval.expr_vec) = nullptr; } -#line 3616 "bison_parser.cpp" +#line 3625 "bison_parser.cpp" break; case 118: -#line 789 "bison_parser.y" +#line 798 "bison_parser.y" { (yyval.expr_vec) = new std::vector(); (yyval.expr_vec)->push_back((yyvsp[0].expr)); } -#line 3622 "bison_parser.cpp" +#line 3631 "bison_parser.cpp" break; case 119: -#line 790 "bison_parser.y" +#line 799 "bison_parser.y" { (yyvsp[-2].expr_vec)->push_back((yyvsp[0].expr)); (yyval.expr_vec) = (yyvsp[-2].expr_vec); } -#line 3628 "bison_parser.cpp" +#line 3637 "bison_parser.cpp" break; case 120: -#line 794 "bison_parser.y" +#line 803 "bison_parser.y" { (yyval.expr) = (yyvsp[-1].expr); if ((yyvsp[0].alias_t)) { @@ -3636,415 +3645,415 @@ YYLTYPE yylloc = yyloc_default; delete (yyvsp[0].alias_t); } } -#line 3640 "bison_parser.cpp" +#line 3649 "bison_parser.cpp" break; case 126: -#line 812 "bison_parser.y" +#line 821 "bison_parser.y" { (yyval.expr) = (yyvsp[-1].expr); } -#line 3646 "bison_parser.cpp" +#line 3655 "bison_parser.cpp" break; case 135: -#line 821 "bison_parser.y" +#line 830 "bison_parser.y" { (yyval.expr) = Expr::makeSelect((yyvsp[-1].select_stmt)); } -#line 3652 "bison_parser.cpp" +#line 3661 "bison_parser.cpp" break; case 138: -#line 830 "bison_parser.y" +#line 839 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpUnaryMinus, (yyvsp[0].expr)); } -#line 3658 "bison_parser.cpp" +#line 3667 "bison_parser.cpp" break; case 139: -#line 831 "bison_parser.y" +#line 840 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, (yyvsp[0].expr)); } -#line 3664 "bison_parser.cpp" +#line 3673 "bison_parser.cpp" break; case 140: -#line 832 "bison_parser.y" +#line 841 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpIsNull, (yyvsp[-1].expr)); } -#line 3670 "bison_parser.cpp" +#line 3679 "bison_parser.cpp" break; case 141: -#line 833 "bison_parser.y" +#line 842 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpIsNull, (yyvsp[-2].expr)); } -#line 3676 "bison_parser.cpp" +#line 3685 "bison_parser.cpp" break; case 142: -#line 834 "bison_parser.y" +#line 843 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeOpUnary(kOpIsNull, (yyvsp[-3].expr))); } -#line 3682 "bison_parser.cpp" +#line 3691 "bison_parser.cpp" break; case 144: -#line 839 "bison_parser.y" +#line 848 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpMinus, (yyvsp[0].expr)); } -#line 3688 "bison_parser.cpp" +#line 3697 "bison_parser.cpp" break; case 145: -#line 840 "bison_parser.y" +#line 849 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpPlus, (yyvsp[0].expr)); } -#line 3694 "bison_parser.cpp" +#line 3703 "bison_parser.cpp" break; case 146: -#line 841 "bison_parser.y" +#line 850 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpSlash, (yyvsp[0].expr)); } -#line 3700 "bison_parser.cpp" +#line 3709 "bison_parser.cpp" break; case 147: -#line 842 "bison_parser.y" +#line 851 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpAsterisk, (yyvsp[0].expr)); } -#line 3706 "bison_parser.cpp" +#line 3715 "bison_parser.cpp" break; case 148: -#line 843 "bison_parser.y" +#line 852 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpPercentage, (yyvsp[0].expr)); } -#line 3712 "bison_parser.cpp" +#line 3721 "bison_parser.cpp" break; case 149: -#line 844 "bison_parser.y" +#line 853 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpCaret, (yyvsp[0].expr)); } -#line 3718 "bison_parser.cpp" +#line 3727 "bison_parser.cpp" break; case 150: -#line 845 "bison_parser.y" +#line 854 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpLike, (yyvsp[0].expr)); } -#line 3724 "bison_parser.cpp" +#line 3733 "bison_parser.cpp" break; case 151: -#line 846 "bison_parser.y" +#line 855 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-3].expr), kOpNotLike, (yyvsp[0].expr)); } -#line 3730 "bison_parser.cpp" +#line 3739 "bison_parser.cpp" break; case 152: -#line 847 "bison_parser.y" +#line 856 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpILike, (yyvsp[0].expr)); } -#line 3736 "bison_parser.cpp" +#line 3745 "bison_parser.cpp" break; case 153: -#line 848 "bison_parser.y" +#line 857 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpConcat, (yyvsp[0].expr)); } -#line 3742 "bison_parser.cpp" +#line 3751 "bison_parser.cpp" break; case 154: -#line 852 "bison_parser.y" +#line 861 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpAnd, (yyvsp[0].expr)); } -#line 3748 "bison_parser.cpp" +#line 3757 "bison_parser.cpp" break; case 155: -#line 853 "bison_parser.y" +#line 862 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpOr, (yyvsp[0].expr)); } -#line 3754 "bison_parser.cpp" +#line 3763 "bison_parser.cpp" break; case 156: -#line 857 "bison_parser.y" +#line 866 "bison_parser.y" { (yyval.expr) = Expr::makeInOperator((yyvsp[-4].expr), (yyvsp[-1].expr_vec)); } -#line 3760 "bison_parser.cpp" +#line 3769 "bison_parser.cpp" break; case 157: -#line 858 "bison_parser.y" +#line 867 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeInOperator((yyvsp[-5].expr), (yyvsp[-1].expr_vec))); } -#line 3766 "bison_parser.cpp" +#line 3775 "bison_parser.cpp" break; case 158: -#line 859 "bison_parser.y" +#line 868 "bison_parser.y" { (yyval.expr) = Expr::makeInOperator((yyvsp[-4].expr), (yyvsp[-1].select_stmt)); } -#line 3772 "bison_parser.cpp" +#line 3781 "bison_parser.cpp" break; case 159: -#line 860 "bison_parser.y" +#line 869 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeInOperator((yyvsp[-5].expr), (yyvsp[-1].select_stmt))); } -#line 3778 "bison_parser.cpp" +#line 3787 "bison_parser.cpp" break; case 160: -#line 866 "bison_parser.y" +#line 875 "bison_parser.y" { (yyval.expr) = Expr::makeCase((yyvsp[-2].expr), (yyvsp[-1].expr), nullptr); } -#line 3784 "bison_parser.cpp" +#line 3793 "bison_parser.cpp" break; case 161: -#line 867 "bison_parser.y" +#line 876 "bison_parser.y" { (yyval.expr) = Expr::makeCase((yyvsp[-4].expr), (yyvsp[-3].expr), (yyvsp[-1].expr)); } -#line 3790 "bison_parser.cpp" +#line 3799 "bison_parser.cpp" break; case 162: -#line 868 "bison_parser.y" +#line 877 "bison_parser.y" { (yyval.expr) = Expr::makeCase(nullptr, (yyvsp[-1].expr), nullptr); } -#line 3796 "bison_parser.cpp" +#line 3805 "bison_parser.cpp" break; case 163: -#line 869 "bison_parser.y" +#line 878 "bison_parser.y" { (yyval.expr) = Expr::makeCase(nullptr, (yyvsp[-3].expr), (yyvsp[-1].expr)); } -#line 3802 "bison_parser.cpp" +#line 3811 "bison_parser.cpp" break; case 164: -#line 873 "bison_parser.y" +#line 882 "bison_parser.y" { (yyval.expr) = Expr::makeCaseList(Expr::makeCaseListElement((yyvsp[-2].expr), (yyvsp[0].expr))); } -#line 3808 "bison_parser.cpp" +#line 3817 "bison_parser.cpp" break; case 165: -#line 874 "bison_parser.y" +#line 883 "bison_parser.y" { (yyval.expr) = Expr::caseListAppend((yyvsp[-4].expr), Expr::makeCaseListElement((yyvsp[-2].expr), (yyvsp[0].expr))); } -#line 3814 "bison_parser.cpp" +#line 3823 "bison_parser.cpp" break; case 166: -#line 878 "bison_parser.y" +#line 887 "bison_parser.y" { (yyval.expr) = Expr::makeExists((yyvsp[-1].select_stmt)); } -#line 3820 "bison_parser.cpp" +#line 3829 "bison_parser.cpp" break; case 167: -#line 879 "bison_parser.y" +#line 888 "bison_parser.y" { (yyval.expr) = Expr::makeOpUnary(kOpNot, Expr::makeExists((yyvsp[-1].select_stmt))); } -#line 3826 "bison_parser.cpp" +#line 3835 "bison_parser.cpp" break; case 168: -#line 883 "bison_parser.y" +#line 892 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpEquals, (yyvsp[0].expr)); } -#line 3832 "bison_parser.cpp" +#line 3841 "bison_parser.cpp" break; case 169: -#line 884 "bison_parser.y" +#line 893 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpEquals, (yyvsp[0].expr)); } -#line 3838 "bison_parser.cpp" +#line 3847 "bison_parser.cpp" break; case 170: -#line 885 "bison_parser.y" +#line 894 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpNotEquals, (yyvsp[0].expr)); } -#line 3844 "bison_parser.cpp" +#line 3853 "bison_parser.cpp" break; case 171: -#line 886 "bison_parser.y" +#line 895 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpLess, (yyvsp[0].expr)); } -#line 3850 "bison_parser.cpp" +#line 3859 "bison_parser.cpp" break; case 172: -#line 887 "bison_parser.y" +#line 896 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpGreater, (yyvsp[0].expr)); } -#line 3856 "bison_parser.cpp" +#line 3865 "bison_parser.cpp" break; case 173: -#line 888 "bison_parser.y" +#line 897 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpLessEq, (yyvsp[0].expr)); } -#line 3862 "bison_parser.cpp" +#line 3871 "bison_parser.cpp" break; case 174: -#line 889 "bison_parser.y" +#line 898 "bison_parser.y" { (yyval.expr) = Expr::makeOpBinary((yyvsp[-2].expr), kOpGreaterEq, (yyvsp[0].expr)); } -#line 3868 "bison_parser.cpp" +#line 3877 "bison_parser.cpp" break; case 175: -#line 893 "bison_parser.y" +#line 902 "bison_parser.y" { (yyval.expr) = Expr::makeFunctionRef((yyvsp[-2].sval), new std::vector(), false); } -#line 3874 "bison_parser.cpp" +#line 3883 "bison_parser.cpp" break; case 176: -#line 894 "bison_parser.y" +#line 903 "bison_parser.y" { (yyval.expr) = Expr::makeFunctionRef((yyvsp[-4].sval), (yyvsp[-1].expr_vec), (yyvsp[-2].bval)); } -#line 3880 "bison_parser.cpp" +#line 3889 "bison_parser.cpp" break; case 177: -#line 898 "bison_parser.y" +#line 907 "bison_parser.y" { (yyval.expr) = Expr::makeExtract((yyvsp[-3].datetime_field), (yyvsp[-1].expr)); } -#line 3886 "bison_parser.cpp" +#line 3895 "bison_parser.cpp" break; case 178: -#line 902 "bison_parser.y" +#line 911 "bison_parser.y" { (yyval.datetime_field) = kDatetimeSecond; } -#line 3892 "bison_parser.cpp" +#line 3901 "bison_parser.cpp" break; case 179: -#line 903 "bison_parser.y" +#line 912 "bison_parser.y" { (yyval.datetime_field) = kDatetimeMinute; } -#line 3898 "bison_parser.cpp" +#line 3907 "bison_parser.cpp" break; case 180: -#line 904 "bison_parser.y" +#line 913 "bison_parser.y" { (yyval.datetime_field) = kDatetimeHour; } -#line 3904 "bison_parser.cpp" +#line 3913 "bison_parser.cpp" break; case 181: -#line 905 "bison_parser.y" +#line 914 "bison_parser.y" { (yyval.datetime_field) = kDatetimeDay; } -#line 3910 "bison_parser.cpp" +#line 3919 "bison_parser.cpp" break; case 182: -#line 906 "bison_parser.y" +#line 915 "bison_parser.y" { (yyval.datetime_field) = kDatetimeMonth; } -#line 3916 "bison_parser.cpp" +#line 3925 "bison_parser.cpp" break; case 183: -#line 907 "bison_parser.y" +#line 916 "bison_parser.y" { (yyval.datetime_field) = kDatetimeYear; } -#line 3922 "bison_parser.cpp" +#line 3931 "bison_parser.cpp" break; case 184: -#line 910 "bison_parser.y" +#line 919 "bison_parser.y" { (yyval.expr) = Expr::makeArray((yyvsp[-1].expr_vec)); } -#line 3928 "bison_parser.cpp" +#line 3937 "bison_parser.cpp" break; case 185: -#line 914 "bison_parser.y" +#line 923 "bison_parser.y" { (yyval.expr) = Expr::makeArrayIndex((yyvsp[-3].expr), (yyvsp[-1].expr)->ival); } -#line 3934 "bison_parser.cpp" +#line 3943 "bison_parser.cpp" break; case 186: -#line 918 "bison_parser.y" +#line 927 "bison_parser.y" { (yyval.expr) = Expr::makeBetween((yyvsp[-4].expr), (yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 3940 "bison_parser.cpp" +#line 3949 "bison_parser.cpp" break; case 187: -#line 922 "bison_parser.y" +#line 931 "bison_parser.y" { (yyval.expr) = Expr::makeColumnRef((yyvsp[0].sval)); } -#line 3946 "bison_parser.cpp" +#line 3955 "bison_parser.cpp" break; case 188: -#line 923 "bison_parser.y" +#line 932 "bison_parser.y" { (yyval.expr) = Expr::makeColumnRef((yyvsp[-2].sval), (yyvsp[0].sval)); } -#line 3952 "bison_parser.cpp" +#line 3961 "bison_parser.cpp" break; case 189: -#line 924 "bison_parser.y" +#line 933 "bison_parser.y" { (yyval.expr) = Expr::makeStar(); } -#line 3958 "bison_parser.cpp" +#line 3967 "bison_parser.cpp" break; case 190: -#line 925 "bison_parser.y" +#line 934 "bison_parser.y" { (yyval.expr) = Expr::makeStar((yyvsp[-2].sval)); } -#line 3964 "bison_parser.cpp" +#line 3973 "bison_parser.cpp" break; case 196: -#line 937 "bison_parser.y" +#line 946 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral((yyvsp[0].sval)); } -#line 3970 "bison_parser.cpp" +#line 3979 "bison_parser.cpp" break; case 197: -#line 941 "bison_parser.y" +#line 950 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral(true); } -#line 3976 "bison_parser.cpp" +#line 3985 "bison_parser.cpp" break; case 198: -#line 942 "bison_parser.y" +#line 951 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral(false); } -#line 3982 "bison_parser.cpp" +#line 3991 "bison_parser.cpp" break; case 199: -#line 946 "bison_parser.y" +#line 955 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral((yyvsp[0].fval)); } -#line 3988 "bison_parser.cpp" +#line 3997 "bison_parser.cpp" break; case 201: -#line 951 "bison_parser.y" +#line 960 "bison_parser.y" { (yyval.expr) = Expr::makeLiteral((yyvsp[0].ival)); } -#line 3994 "bison_parser.cpp" +#line 4003 "bison_parser.cpp" break; case 202: -#line 955 "bison_parser.y" +#line 964 "bison_parser.y" { (yyval.expr) = Expr::makeNullLiteral(); } -#line 4000 "bison_parser.cpp" +#line 4009 "bison_parser.cpp" break; case 203: -#line 959 "bison_parser.y" +#line 968 "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 4010 "bison_parser.cpp" +#line 4019 "bison_parser.cpp" break; case 205: -#line 972 "bison_parser.y" +#line 981 "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 4021 "bison_parser.cpp" +#line 4030 "bison_parser.cpp" break; case 209: -#line 988 "bison_parser.y" +#line 997 "bison_parser.y" { auto tbl = new TableRef(kTableSelect); tbl->select = (yyvsp[-2].select_stmt); tbl->alias = (yyvsp[0].alias_t); (yyval.table) = tbl; } -#line 4032 "bison_parser.cpp" +#line 4041 "bison_parser.cpp" break; case 210: -#line 997 "bison_parser.y" +#line 1006 "bison_parser.y" { (yyval.table_vec) = new std::vector(); (yyval.table_vec)->push_back((yyvsp[0].table)); } -#line 4038 "bison_parser.cpp" +#line 4047 "bison_parser.cpp" break; case 211: -#line 998 "bison_parser.y" +#line 1007 "bison_parser.y" { (yyvsp[-2].table_vec)->push_back((yyvsp[0].table)); (yyval.table_vec) = (yyvsp[-2].table_vec); } -#line 4044 "bison_parser.cpp" +#line 4053 "bison_parser.cpp" break; case 212: -#line 1003 "bison_parser.y" +#line 1012 "bison_parser.y" { auto tbl = new TableRef(kTableName); tbl->schema = (yyvsp[-1].table_name).schema; @@ -4052,103 +4061,103 @@ YYLTYPE yylloc = yyloc_default; tbl->alias = (yyvsp[0].alias_t); (yyval.table) = tbl; } -#line 4056 "bison_parser.cpp" +#line 4065 "bison_parser.cpp" break; case 213: -#line 1014 "bison_parser.y" +#line 1023 "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 4066 "bison_parser.cpp" +#line 4075 "bison_parser.cpp" break; case 214: -#line 1023 "bison_parser.y" +#line 1032 "bison_parser.y" { (yyval.table_name).schema = nullptr; (yyval.table_name).name = (yyvsp[0].sval);} -#line 4072 "bison_parser.cpp" +#line 4081 "bison_parser.cpp" break; case 215: -#line 1024 "bison_parser.y" +#line 1033 "bison_parser.y" { (yyval.table_name).schema = (yyvsp[-2].sval); (yyval.table_name).name = (yyvsp[0].sval); } -#line 4078 "bison_parser.cpp" +#line 4087 "bison_parser.cpp" break; case 217: -#line 1030 "bison_parser.y" +#line 1039 "bison_parser.y" { (yyval.alias_t) = new Alias((yyvsp[-3].sval), (yyvsp[-1].str_vec)); } -#line 4084 "bison_parser.cpp" +#line 4093 "bison_parser.cpp" break; case 219: -#line 1036 "bison_parser.y" +#line 1045 "bison_parser.y" { (yyval.alias_t) = nullptr; } -#line 4090 "bison_parser.cpp" +#line 4099 "bison_parser.cpp" break; case 220: -#line 1040 "bison_parser.y" +#line 1049 "bison_parser.y" { (yyval.alias_t) = new Alias((yyvsp[0].sval)); } -#line 4096 "bison_parser.cpp" +#line 4105 "bison_parser.cpp" break; case 221: -#line 1041 "bison_parser.y" +#line 1050 "bison_parser.y" { (yyval.alias_t) = new Alias((yyvsp[0].sval)); } -#line 4102 "bison_parser.cpp" +#line 4111 "bison_parser.cpp" break; case 223: -#line 1047 "bison_parser.y" +#line 1056 "bison_parser.y" { (yyval.alias_t) = nullptr; } -#line 4108 "bison_parser.cpp" +#line 4117 "bison_parser.cpp" break; case 225: -#line 1056 "bison_parser.y" +#line 1065 "bison_parser.y" { (yyval.with_description_vec) = nullptr; } -#line 4114 "bison_parser.cpp" +#line 4123 "bison_parser.cpp" break; case 226: -#line 1060 "bison_parser.y" +#line 1069 "bison_parser.y" { (yyval.with_description_vec) = (yyvsp[0].with_description_vec); } -#line 4120 "bison_parser.cpp" +#line 4129 "bison_parser.cpp" break; case 227: -#line 1064 "bison_parser.y" +#line 1073 "bison_parser.y" { (yyval.with_description_vec) = new std::vector(); (yyval.with_description_vec)->push_back((yyvsp[0].with_description_t)); } -#line 4129 "bison_parser.cpp" +#line 4138 "bison_parser.cpp" break; case 228: -#line 1068 "bison_parser.y" +#line 1077 "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 4138 "bison_parser.cpp" +#line 4147 "bison_parser.cpp" break; case 229: -#line 1075 "bison_parser.y" +#line 1084 "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 4148 "bison_parser.cpp" +#line 4157 "bison_parser.cpp" break; case 230: -#line 1089 "bison_parser.y" +#line 1098 "bison_parser.y" { (yyval.table) = new TableRef(kTableJoin); (yyval.table)->join = new JoinDefinition(); @@ -4156,11 +4165,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.table)->join->left = (yyvsp[-3].table); (yyval.table)->join->right = (yyvsp[0].table); } -#line 4160 "bison_parser.cpp" +#line 4169 "bison_parser.cpp" break; case 231: -#line 1097 "bison_parser.y" +#line 1106 "bison_parser.y" { (yyval.table) = new TableRef(kTableJoin); (yyval.table)->join = new JoinDefinition(); @@ -4169,11 +4178,11 @@ YYLTYPE yylloc = yyloc_default; (yyval.table)->join->right = (yyvsp[-2].table); (yyval.table)->join->condition = (yyvsp[0].expr); } -#line 4173 "bison_parser.cpp" +#line 4182 "bison_parser.cpp" break; case 232: -#line 1107 "bison_parser.y" +#line 1116 "bison_parser.y" { (yyval.table) = new TableRef(kTableJoin); (yyval.table)->join = new JoinDefinition(); @@ -4189,83 +4198,83 @@ YYLTYPE yylloc = yyloc_default; (yyval.table)->join->condition = Expr::makeOpBinary(left_col, kOpEquals, right_col); delete (yyvsp[-1].expr); } -#line 4193 "bison_parser.cpp" +#line 4202 "bison_parser.cpp" break; case 233: -#line 1125 "bison_parser.y" +#line 1134 "bison_parser.y" { (yyval.uval) = kJoinInner; } -#line 4199 "bison_parser.cpp" +#line 4208 "bison_parser.cpp" break; case 234: -#line 1126 "bison_parser.y" +#line 1135 "bison_parser.y" { (yyval.uval) = kJoinLeft; } -#line 4205 "bison_parser.cpp" +#line 4214 "bison_parser.cpp" break; case 235: -#line 1127 "bison_parser.y" +#line 1136 "bison_parser.y" { (yyval.uval) = kJoinLeft; } -#line 4211 "bison_parser.cpp" +#line 4220 "bison_parser.cpp" break; case 236: -#line 1128 "bison_parser.y" +#line 1137 "bison_parser.y" { (yyval.uval) = kJoinRight; } -#line 4217 "bison_parser.cpp" +#line 4226 "bison_parser.cpp" break; case 237: -#line 1129 "bison_parser.y" +#line 1138 "bison_parser.y" { (yyval.uval) = kJoinRight; } -#line 4223 "bison_parser.cpp" +#line 4232 "bison_parser.cpp" break; case 238: -#line 1130 "bison_parser.y" +#line 1139 "bison_parser.y" { (yyval.uval) = kJoinFull; } -#line 4229 "bison_parser.cpp" +#line 4238 "bison_parser.cpp" break; case 239: -#line 1131 "bison_parser.y" +#line 1140 "bison_parser.y" { (yyval.uval) = kJoinFull; } -#line 4235 "bison_parser.cpp" +#line 4244 "bison_parser.cpp" break; case 240: -#line 1132 "bison_parser.y" +#line 1141 "bison_parser.y" { (yyval.uval) = kJoinFull; } -#line 4241 "bison_parser.cpp" +#line 4250 "bison_parser.cpp" break; case 241: -#line 1133 "bison_parser.y" +#line 1142 "bison_parser.y" { (yyval.uval) = kJoinCross; } -#line 4247 "bison_parser.cpp" +#line 4256 "bison_parser.cpp" break; case 242: -#line 1134 "bison_parser.y" +#line 1143 "bison_parser.y" { (yyval.uval) = kJoinInner; } -#line 4253 "bison_parser.cpp" +#line 4262 "bison_parser.cpp" break; case 246: -#line 1154 "bison_parser.y" +#line 1163 "bison_parser.y" { (yyval.str_vec) = new std::vector(); (yyval.str_vec)->push_back((yyvsp[0].sval)); } -#line 4259 "bison_parser.cpp" +#line 4268 "bison_parser.cpp" break; case 247: -#line 1155 "bison_parser.y" +#line 1164 "bison_parser.y" { (yyvsp[-2].str_vec)->push_back((yyvsp[0].sval)); (yyval.str_vec) = (yyvsp[-2].str_vec); } -#line 4265 "bison_parser.cpp" +#line 4274 "bison_parser.cpp" break; -#line 4269 "bison_parser.cpp" +#line 4278 "bison_parser.cpp" default: break; } @@ -4503,7 +4512,7 @@ YYLTYPE yylloc = yyloc_default; #endif return yyresult; } -#line 1158 "bison_parser.y" +#line 1167 "bison_parser.y" /********************************* ** Section 4: Additional C code diff --git a/src/parser/bison_parser.y b/src/parser/bison_parser.y index 405650fa..80f0c250 100755 --- a/src/parser/bison_parser.y +++ b/src/parser/bison_parser.y @@ -611,11 +611,14 @@ select_statement: } | opt_with_clause select_with_paren set_operator select_statement_in_set_operation opt_order opt_limit { $$ = $2; - $$->setOperator = $3; + if ($$->setOperators == nullptr) { + $$->setOperators = new std::vector(); + } + $$->setOperators->push_back($3); + $$->setOperators->back()->nestedSelectStatement = $4; + $$->setOperators->back()->resultOrder = $5; + $$->setOperators->back()->resultLimit = $6; $$->withDescriptions = $1; - $$->setOperator->nestedSelectStatement = $4; - $$->setOperator->resultOrder = $5; - $$->setOperator->resultLimit = $6; } ; @@ -627,8 +630,11 @@ select_part_of_set_operation: select_clause { $$ = $1; } | select_clause set_operator select_statement_in_set_operation { $$ = $1; - $$->setOperator = $2; - $$->setOperator->nestedSelectStatement = $3; + if ($$->setOperators == nullptr) { + $$->setOperators = new std::vector(); + } + $$->setOperators->push_back($2); + $$->setOperators->back()->nestedSelectStatement = $3; } ; @@ -650,10 +656,13 @@ select_no_paren: } | select_clause set_operator select_statement_in_set_operation opt_order opt_limit { $$ = $1; - $$->setOperator = $2; - $$->setOperator->nestedSelectStatement = $3; - $$->setOperator->resultOrder = $4; - $$->setOperator->resultLimit = $5; + if ($$->setOperators == nullptr) { + $$->setOperators = new std::vector(); + } + $$->setOperators->push_back($2); + $$->setOperators->back()->nestedSelectStatement = $3; + $$->setOperators->back()->resultOrder = $4; + $$->setOperators->back()->resultLimit = $5; } ; diff --git a/src/sql/SelectStatement.h b/src/sql/SelectStatement.h index e48c7da5..1a1cf8e4 100644 --- a/src/sql/SelectStatement.h +++ b/src/sql/SelectStatement.h @@ -66,6 +66,7 @@ namespace hsql { // Representation of a full SQL select statement. // TODO: Fit query and order into setOperator. + // TODO: Analyze more test cases and if ready, put in vector struct SelectStatement : SQLStatement { SelectStatement(); virtual ~SelectStatement(); @@ -75,7 +76,7 @@ namespace hsql { std::vector* selectList; Expr* whereClause; GroupByDescription* groupBy; - SetOperator* setOperator; + std::vector* setOperators; std::vector* order; std::vector* withDescriptions; diff --git a/src/sql/statements.cpp b/src/sql/statements.cpp index 4153365e..bf505496 100755 --- a/src/sql/statements.cpp +++ b/src/sql/statements.cpp @@ -240,7 +240,7 @@ namespace hsql { selectList(nullptr), whereClause(nullptr), groupBy(nullptr), - setOperator(nullptr), + setOperators(nullptr), order(nullptr), withDescriptions(nullptr), limit(nullptr) {}; @@ -250,7 +250,6 @@ namespace hsql { delete whereClause; delete groupBy; delete limit; - delete setOperator; // Delete each element in the select list. if (selectList != nullptr) { @@ -273,6 +272,13 @@ namespace hsql { } delete withDescriptions; } + + if (setOperators != nullptr) { + for (SetOperator* setOperator : *setOperators) { + delete setOperator; + } + delete setOperators; + } } // UpdateStatement diff --git a/src/util/sqlhelper.cpp b/src/util/sqlhelper.cpp index 4a43fc4c..fb2b5423 100755 --- a/src/util/sqlhelper.cpp +++ b/src/util/sqlhelper.cpp @@ -168,15 +168,36 @@ namespace hsql { } } - if (stmt->setOperator != nullptr) { - if (stmt->setOperator->setType == SetType::kSetUnion) { - inprint("Union:", numIndent + 1); - } else if (stmt->setOperator->setType == SetType::kSetIntersect) { - inprint("Intersect:", numIndent + 1); - } else { - inprint("Except:", numIndent + 1); + if (stmt->setOperators != nullptr) { + for (SetOperator* setOperator : *stmt->setOperators) { + if (setOperator->setType == SetType::kSetUnion) { + inprint("Union:", numIndent + 1); + } else if (setOperator->setType == SetType::kSetIntersect) { + inprint("Intersect:", numIndent + 1); + } else { + inprint("Except:", numIndent + 1); + } + printSelectStatementInfo(setOperator->nestedSelectStatement, numIndent + 2); + + if (setOperator->resultOrder != nullptr) { + inprint("SetResultOrderBy:", numIndent + 1); + printExpression(setOperator->resultOrder->at(0)->expr, numIndent + 2); + if (setOperator->resultOrder->at(0)->type == kOrderAsc) inprint("ascending", numIndent + 2); + else inprint("descending", numIndent + 2); + } + + if (setOperator->resultLimit != nullptr) { + if (setOperator->resultLimit->limit != nullptr) { + inprint("SetResultLimit:", numIndent + 1); + printExpression(setOperator->resultLimit->limit, numIndent + 2); + } + + if (setOperator->resultLimit->offset != nullptr) { + inprint("SetResultOffset:", numIndent + 1); + printExpression(setOperator->resultLimit->offset, numIndent + 2); + } + } } - printSelectStatementInfo(stmt->setOperator->nestedSelectStatement, numIndent + 2); } if (stmt->order != nullptr) { @@ -195,25 +216,6 @@ namespace hsql { inprint("Offset:", numIndent + 1); printExpression(stmt->limit->offset, numIndent + 2); } - - if (stmt->setOperator != nullptr && stmt->setOperator->resultOrder != nullptr) { - inprint("SetResultOrderBy:", numIndent + 1); - printExpression(stmt->setOperator->resultOrder->at(0)->expr, numIndent + 2); - if (stmt->setOperator->resultOrder->at(0)->type == kOrderAsc) inprint("ascending", numIndent + 2); - else inprint("descending", numIndent + 2); - } - - if (stmt->setOperator != nullptr && stmt->setOperator->resultLimit != nullptr) { - if (stmt->setOperator->resultLimit->limit != nullptr) { - inprint("SetResultLimit:", numIndent + 1); - printExpression(stmt->setOperator->resultLimit->limit, numIndent + 2); - } - - if (stmt->setOperator->resultLimit->offset != nullptr) { - inprint("SetResultOffset:", numIndent + 1); - printExpression(stmt->setOperator->resultLimit->offset, numIndent + 2); - } - } } diff --git a/test/sql_tests.cpp b/test/sql_tests.cpp index 01554057..e57e535d 100644 --- a/test/sql_tests.cpp +++ b/test/sql_tests.cpp @@ -266,9 +266,9 @@ TEST(ExceptOperatorTest) { result, stmt); - ASSERT_STREQ(stmt->setOperator->nestedSelectStatement->fromTable->name, "students_2"); + ASSERT_STREQ(stmt->setOperators->back()->nestedSelectStatement->fromTable->name, "students_2"); ASSERT_STREQ(stmt->fromTable->name, "students"); - ASSERT_EQ(stmt->setOperator->setType, kSetExcept); + ASSERT_EQ(stmt->setOperators->back()->setType, kSetExcept); } TEST(IntersectOperatorTest) { @@ -279,9 +279,9 @@ TEST(IntersectOperatorTest) { result, stmt); - ASSERT_STREQ(stmt->setOperator->nestedSelectStatement->fromTable->name, "students_2"); + ASSERT_STREQ(stmt->setOperators->back()->nestedSelectStatement->fromTable->name, "students_2"); ASSERT_STREQ(stmt->fromTable->name, "students"); - ASSERT_EQ(stmt->setOperator->setType, kSetIntersect); + ASSERT_EQ(stmt->setOperators->back()->setType, kSetIntersect); } TEST(UnionOperatorTest) { @@ -292,10 +292,10 @@ TEST(UnionOperatorTest) { result, stmt); - ASSERT_STREQ(stmt->setOperator->nestedSelectStatement->fromTable->name, "students_2"); + ASSERT_STREQ(stmt->setOperators->back()->nestedSelectStatement->fromTable->name, "students_2"); ASSERT_STREQ(stmt->fromTable->name, "students"); - ASSERT_EQ(stmt->setOperator->setType, kSetUnion); - ASSERT_FALSE(stmt->setOperator->isAll); + ASSERT_EQ(stmt->setOperators->back()->setType, kSetUnion); + ASSERT_FALSE(stmt->setOperators->back()->isAll); } TEST(UnionAllOperatorTest) { @@ -306,9 +306,9 @@ TEST(UnionAllOperatorTest) { result, stmt); - ASSERT_STREQ(stmt->setOperator->nestedSelectStatement->fromTable->name, "students_2"); + ASSERT_STREQ(stmt->setOperators->back()->nestedSelectStatement->fromTable->name, "students_2"); ASSERT_STREQ(stmt->fromTable->name, "students"); - ASSERT_TRUE(stmt->setOperator->isAll); + ASSERT_TRUE(stmt->setOperators->back()->isAll); } TEST(NestedSetOperatorTest) { @@ -319,12 +319,12 @@ TEST(NestedSetOperatorTest) { result, stmt); - ASSERT_STREQ(stmt->setOperator->nestedSelectStatement->setOperator->nestedSelectStatement->fromTable->name, "employees"); - ASSERT_STREQ(stmt->setOperator->nestedSelectStatement->fromTable->name, "students_2"); + ASSERT_STREQ(stmt->setOperators->back()->nestedSelectStatement->setOperators->back()->nestedSelectStatement->fromTable->name, "employees"); + ASSERT_STREQ(stmt->setOperators->back()->nestedSelectStatement->fromTable->name, "students_2"); ASSERT_STREQ(stmt->fromTable->name, "students"); - ASSERT_EQ(stmt->setOperator->setType, kSetIntersect); - ASSERT_EQ(stmt->setOperator->nestedSelectStatement->setOperator->setType, kSetUnion); - ASSERT_FALSE(stmt->setOperator->isAll); + ASSERT_EQ(stmt->setOperators->back()->setType, kSetIntersect); + ASSERT_EQ(stmt->setOperators->back()->nestedSelectStatement->setOperators->back()->setType, kSetUnion); + ASSERT_FALSE(stmt->setOperators->back()->isAll); } TEST(OrderByFullStatementTest) { @@ -335,9 +335,9 @@ TEST(OrderByFullStatementTest) { result, stmt); - ASSERT_EQ(stmt->setOperator->resultOrder->at(0)->type, kOrderAsc); - ASSERT_STREQ(stmt->setOperator->resultOrder->at(0)->expr->name, "grade"); - ASSERT_FALSE(stmt->setOperator->isAll); + ASSERT_EQ(stmt->setOperators->back()->resultOrder->at(0)->type, kOrderAsc); + ASSERT_STREQ(stmt->setOperators->back()->resultOrder->at(0)->expr->name, "grade"); + ASSERT_FALSE(stmt->setOperators->back()->isAll); } TEST(SetOperatorSubQueryOrder) { @@ -351,9 +351,9 @@ TEST(SetOperatorSubQueryOrder) { ASSERT_EQ(stmt->order->at(0)->type, kOrderDesc); ASSERT_STREQ(stmt->order->at(0)->expr->name, "name"); - ASSERT_EQ(stmt->setOperator->resultOrder->at(0)->type, kOrderAsc); - ASSERT_STREQ(stmt->setOperator->resultOrder->at(0)->expr->name, "grade"); - ASSERT_FALSE(stmt->setOperator->isAll); + ASSERT_EQ(stmt->setOperators->back()->resultOrder->at(0)->type, kOrderAsc); + ASSERT_STREQ(stmt->setOperators->back()->resultOrder->at(0)->expr->name, "grade"); + ASSERT_FALSE(stmt->setOperators->back()->isAll); } TEST(WrongOrderByStatementTest) { From e0e2c34248bee0834438fcf95d76fc11c282b102 Mon Sep 17 00:00:00 2001 From: Lukas Ehrig Date: Wed, 15 Jan 2020 14:33:06 +0100 Subject: [PATCH 18/27] Add test with WITH clause and different nested set operators. NOTE: The print function does not work properly with this WITH query, however the data structure is parsed correctly, as verified by the test. --- test/sql_tests.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/test/sql_tests.cpp b/test/sql_tests.cpp index e57e535d..513ed5a8 100644 --- a/test/sql_tests.cpp +++ b/test/sql_tests.cpp @@ -356,6 +356,27 @@ TEST(SetOperatorSubQueryOrder) { ASSERT_FALSE(stmt->setOperators->back()->isAll); } +// (multiple, different, nested, ...) set operations in the WITH part of the query? + +TEST(NestedDifferentSetOperatorsWithWithClause) { + + TEST_PARSE_SINGLE_SQL("WITH UNION_FIRST AS (SELECT * FROM A UNION SELECT * FROM B) SELECT * FROM UNION_FIRST EXCEPT SELECT * FROM C", + kStmtSelect, + SelectStatement, + result, + stmt); + + ASSERT_STREQ(stmt->withDescriptions->back()->alias, "UNION_FIRST"); + ASSERT_EQ(stmt->withDescriptions->back()->select->setOperators->back()->setType, kSetUnion); + ASSERT_STREQ(stmt->withDescriptions->back()->select->fromTable->name, "A"); + ASSERT_STREQ(stmt->withDescriptions->back()->select->setOperators->back()->nestedSelectStatement->fromTable->name, "B"); + + ASSERT_EQ(stmt->setOperators->back()->setType, kSetExcept); + ASSERT_STREQ(stmt->fromTable->name, "UNION_FIRST"); + ASSERT_STREQ(stmt->setOperators->back()->nestedSelectStatement->fromTable->name, "C"); + +} + TEST(WrongOrderByStatementTest) { SQLParserResult res = parse_and_move("SELECT * FROM students ORDER BY name INTERSECT SELECT grade FROM students_2;"); ASSERT_FALSE(res.isValid()); From 1dee71c7bea4ac323f77bdaac2e29d6e3f50c397 Mon Sep 17 00:00:00 2001 From: Lukas Ehrig Date: Wed, 15 Jan 2020 17:09:32 +0100 Subject: [PATCH 19/27] Add nested set operator test with WITH clause and all set types --- test/sql_tests.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/test/sql_tests.cpp b/test/sql_tests.cpp index 513ed5a8..3b5cef54 100644 --- a/test/sql_tests.cpp +++ b/test/sql_tests.cpp @@ -377,6 +377,27 @@ TEST(NestedDifferentSetOperatorsWithWithClause) { } +TEST(NestedAllSetOperatorsWithWithClause) { + + TEST_PARSE_SINGLE_SQL("WITH UNION_FIRST AS (SELECT * FROM A UNION SELECT * FROM B) SELECT * FROM UNION_FIRST EXCEPT SELECT * FROM (SELECT * FROM C INTERSECT SELECT * FROM D)", + kStmtSelect, + SelectStatement, + result, + stmt); + + ASSERT_STREQ(stmt->withDescriptions->back()->alias, "UNION_FIRST"); + ASSERT_EQ(stmt->withDescriptions->back()->select->setOperators->back()->setType, kSetUnion); + ASSERT_STREQ(stmt->withDescriptions->back()->select->fromTable->name, "A"); + ASSERT_STREQ(stmt->withDescriptions->back()->select->setOperators->back()->nestedSelectStatement->fromTable->name, "B"); + + ASSERT_EQ(stmt->setOperators->back()->setType, kSetExcept); + ASSERT_STREQ(stmt->fromTable->name, "UNION_FIRST"); + ASSERT_EQ(stmt->setOperators->back()->nestedSelectStatement->fromTable->select->setOperators->back()->setType, kSetIntersect); + ASSERT_STREQ(stmt->setOperators->back()->nestedSelectStatement->fromTable->select->fromTable->name, "C"); + ASSERT_STREQ(stmt->setOperators->back()->nestedSelectStatement->fromTable->select->setOperators->back()->nestedSelectStatement->fromTable->name, "D"); + +} + TEST(WrongOrderByStatementTest) { SQLParserResult res = parse_and_move("SELECT * FROM students ORDER BY name INTERSECT SELECT grade FROM students_2;"); ASSERT_FALSE(res.isValid()); From ea2d20a43dc0bd0ad4b43c92bd7b2c4fbe392b30 Mon Sep 17 00:00:00 2001 From: Lukas Ehrig Date: Wed, 15 Jan 2020 17:14:23 +0100 Subject: [PATCH 20/27] Fix indentation --- test/sql_tests.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/sql_tests.cpp b/test/sql_tests.cpp index 3b5cef54..747011cf 100644 --- a/test/sql_tests.cpp +++ b/test/sql_tests.cpp @@ -380,10 +380,10 @@ TEST(NestedDifferentSetOperatorsWithWithClause) { TEST(NestedAllSetOperatorsWithWithClause) { TEST_PARSE_SINGLE_SQL("WITH UNION_FIRST AS (SELECT * FROM A UNION SELECT * FROM B) SELECT * FROM UNION_FIRST EXCEPT SELECT * FROM (SELECT * FROM C INTERSECT SELECT * FROM D)", - kStmtSelect, - SelectStatement, - result, - stmt); + kStmtSelect, + SelectStatement, + result, + stmt); ASSERT_STREQ(stmt->withDescriptions->back()->alias, "UNION_FIRST"); ASSERT_EQ(stmt->withDescriptions->back()->select->setOperators->back()->setType, kSetUnion); From aeb8917b2ce3d5bef54263a8610a97adc9fb6730 Mon Sep 17 00:00:00 2001 From: Lukas Ehrig Date: Wed, 15 Jan 2020 17:37:34 +0100 Subject: [PATCH 21/27] Fix indentation --- test/sql_tests.cpp | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/test/sql_tests.cpp b/test/sql_tests.cpp index 747011cf..1ab7654b 100644 --- a/test/sql_tests.cpp +++ b/test/sql_tests.cpp @@ -361,10 +361,10 @@ TEST(SetOperatorSubQueryOrder) { TEST(NestedDifferentSetOperatorsWithWithClause) { TEST_PARSE_SINGLE_SQL("WITH UNION_FIRST AS (SELECT * FROM A UNION SELECT * FROM B) SELECT * FROM UNION_FIRST EXCEPT SELECT * FROM C", - kStmtSelect, - SelectStatement, - result, - stmt); + kStmtSelect, + SelectStatement, + result, + stmt); ASSERT_STREQ(stmt->withDescriptions->back()->alias, "UNION_FIRST"); ASSERT_EQ(stmt->withDescriptions->back()->select->setOperators->back()->setType, kSetUnion); @@ -380,10 +380,10 @@ TEST(NestedDifferentSetOperatorsWithWithClause) { TEST(NestedAllSetOperatorsWithWithClause) { TEST_PARSE_SINGLE_SQL("WITH UNION_FIRST AS (SELECT * FROM A UNION SELECT * FROM B) SELECT * FROM UNION_FIRST EXCEPT SELECT * FROM (SELECT * FROM C INTERSECT SELECT * FROM D)", - kStmtSelect, - SelectStatement, - result, - stmt); + kStmtSelect, + SelectStatement, + result, + stmt); ASSERT_STREQ(stmt->withDescriptions->back()->alias, "UNION_FIRST"); ASSERT_EQ(stmt->withDescriptions->back()->select->setOperators->back()->setType, kSetUnion); @@ -396,6 +396,22 @@ TEST(NestedAllSetOperatorsWithWithClause) { ASSERT_STREQ(stmt->setOperators->back()->nestedSelectStatement->fromTable->select->fromTable->name, "C"); ASSERT_STREQ(stmt->setOperators->back()->nestedSelectStatement->fromTable->select->setOperators->back()->nestedSelectStatement->fromTable->name, "D"); +} + +TEST(NestedSetOperatorsWithMultipleWithClauses) { + + TEST_PARSE_SINGLE_SQL( + "WITH UNION_FIRST AS (SELECT * FROM A UNION SELECT * FROM B),INTERSECT_SECOND AS (SELECT * FROM UNION_FIRST INTERSECT SELECT * FROM C) SELECT * FROM UNION_FIRST EXCEPT SELECT * FROM INTERSECT_SECOND", + kStmtSelect, + SelectStatement, + result, + stmt); + + ASSERT_STREQ(stmt->withDescriptions->at(0)->alias, "UNION_FIRST"); + ASSERT_STREQ(stmt->withDescriptions->back()->alias, "INTERSECT_SECOND"); + + + } TEST(WrongOrderByStatementTest) { From 4c4e837f88d07f64470d4bc85bcd532601734b34 Mon Sep 17 00:00:00 2001 From: Lukas Ehrig Date: Wed, 15 Jan 2020 17:42:49 +0100 Subject: [PATCH 22/27] Add test with multiple WITH clauses including all set operators --- test/sql_tests.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/sql_tests.cpp b/test/sql_tests.cpp index 1ab7654b..f1c8666e 100644 --- a/test/sql_tests.cpp +++ b/test/sql_tests.cpp @@ -410,8 +410,17 @@ TEST(NestedSetOperatorsWithMultipleWithClauses) { ASSERT_STREQ(stmt->withDescriptions->at(0)->alias, "UNION_FIRST"); ASSERT_STREQ(stmt->withDescriptions->back()->alias, "INTERSECT_SECOND"); + ASSERT_EQ(stmt->withDescriptions->at(0)->select->setOperators->back()->setType, kSetUnion); + ASSERT_STREQ(stmt->withDescriptions->at(0)->select->fromTable->name, "A"); + ASSERT_STREQ(stmt->withDescriptions->at(0)->select->setOperators->back()->nestedSelectStatement->fromTable->name, "B"); + ASSERT_EQ(stmt->withDescriptions->back()->select->setOperators->back()->setType, kSetIntersect); + ASSERT_STREQ(stmt->withDescriptions->back()->select->fromTable->name, "UNION_FIRST"); + ASSERT_STREQ(stmt->withDescriptions->back()->select->setOperators->back()->nestedSelectStatement->fromTable->name, "C"); + ASSERT_EQ(stmt->setOperators->back()->setType, kSetExcept); + ASSERT_STREQ(stmt->fromTable->name, "UNION_FIRST"); + ASSERT_STREQ(stmt->setOperators->back()->nestedSelectStatement->fromTable->name, "INTERSECT_SECOND"); } TEST(WrongOrderByStatementTest) { From 608a52e45cdf790a321b13399fe654f5819b2028 Mon Sep 17 00:00:00 2001 From: Lukas Ehrig Date: Wed, 15 Jan 2020 20:09:43 +0100 Subject: [PATCH 23/27] Remove comment --- test/sql_tests.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/test/sql_tests.cpp b/test/sql_tests.cpp index f1c8666e..51922e56 100644 --- a/test/sql_tests.cpp +++ b/test/sql_tests.cpp @@ -356,8 +356,6 @@ TEST(SetOperatorSubQueryOrder) { ASSERT_FALSE(stmt->setOperators->back()->isAll); } -// (multiple, different, nested, ...) set operations in the WITH part of the query? - TEST(NestedDifferentSetOperatorsWithWithClause) { TEST_PARSE_SINGLE_SQL("WITH UNION_FIRST AS (SELECT * FROM A UNION SELECT * FROM B) SELECT * FROM UNION_FIRST EXCEPT SELECT * FROM C", From 9256c22c302c3d754a4963ae00619353941de78e Mon Sep 17 00:00:00 2001 From: Tobias Nack Date: Mon, 20 Jan 2020 18:22:08 +0100 Subject: [PATCH 24/27] Add description to SetOperator for evaluation --- src/sql/SelectStatement.h | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/sql/SelectStatement.h b/src/sql/SelectStatement.h index 1a1cf8e4..7b4a71e2 100644 --- a/src/sql/SelectStatement.h +++ b/src/sql/SelectStatement.h @@ -65,8 +65,6 @@ namespace hsql { }; // Representation of a full SQL select statement. - // TODO: Fit query and order into setOperator. - // TODO: Analyze more test cases and if ready, put in vector struct SelectStatement : SQLStatement { SelectStatement(); virtual ~SelectStatement(); @@ -76,6 +74,18 @@ namespace hsql { std::vector* selectList; Expr* whereClause; GroupByDescription* groupBy; + + // Note that a SetOperator is always connected to a + // different SelectStatement. This statement can itself + // have SetOperator connections to other SelectStatements. + // To evaluate the operators in the correct order: + // 1. Fully evaluate the nested SelectStatement + // 2. Connect the nested SelectStatement to our original + // with the given SetOperation + // 3. Connect the result with the next SetOperator in the + // vector + // 4. Repeat until all SetOperators in the vector are + // connected std::vector* setOperators; std::vector* order; From 3703c3d7133bf16a6d940d0e2f40742f0ab5dbfd Mon Sep 17 00:00:00 2001 From: Tobias Nack Date: Fri, 7 Feb 2020 16:12:04 +0100 Subject: [PATCH 25/27] Remove example_bin --- example_bin | Bin 15340 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100755 example_bin diff --git a/example_bin b/example_bin deleted file mode 100755 index 3b5139e808157ca973b0e9b85915a77ee97223ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15340 zcmeHOeQXrR6`$jyI40o?p)E~ISxDWIAlY{gCgvlR!CqL0i!nZ^5CWF--P(83eQ~=- z&JnJhI4AjXxztkBib_$05>&OQs`#THQlwN+Q2D4()2NE5+Enfzt@b3Mx>c3XD6RW@ zv$OZHK2B7${F5DNX5M@A<~MKN&g_iOZ-4#q2mfBim}fC#lZzN*tB~1e7|TztCyIRm zSwU9Sp`Cl=!}9PxlGZ0rJ=>5YoQ)VjRS(FA4%Dmg{%!R#CitZgQ-(=Asj8vn48fps z;>|pO$w0nsiKRolAT7ZXHfa%7sj9k>9nmWyC*JjkEWEhTuz9;fi@>YeM|f&fi>I{= zl$>}yD=fUX1OV~m_exq|-&i=TYPqnMHdG@t;>7!hz*{2#h_Az|09%BrhIJzoOO6S- z6YoKOJ=Coed%cJn>z7d`9TKVPSgK~3fNzXv`;9tLe>>6hvg~USD#X{~ zReM@gb-xD&2KUPS1NL6^IpztT(yirIO@60rrww?Ya1|6Zb_?oW)Cy{n=cs@oxhEJq z1d{wi&tew5g!xF=V1GU$!iI9CRD9oi<|r zghTJ2+C<~h)TxcHiDeQXJXKp@Pk7U&4u1!XijDAj0;{SIniAUd6Y+E?qidNCJ;n8U zAg|yu54=~88ywdSEzz+{Ky#e0q9nWDf#0cqOz`v^+~j(|^}zl0z(J+(XXW`@a~SoC z{0WU+n7FMJvU5`tw>{o((Q8I2E*-@2q!fFUQn!L#ex8{@+;N~kk5tH~QI>VQU6i6c zrxepIN@?Pz`2q<_6VvAJ@WLq*GKrN^){;!;Q`Ak!r_J}FHJwk|vX?mdeUCR!x3Ti0 zc=su#r~Zy%{THS$PG9Bvg?!Z3=Oeue45g4iUKKv|p6H@sxzj>aY;C2OC%IBAkx1Ek)jLJEF46Uu+=^vZpWbSpw~032heP;$ zd0};#y5K4BVawlyO5rz3L7ps>PEps@m~ySanjv9)j1k4dx{^1bO9w;w1`0f?H!)%B zQGEzI{MV+hPrqZHMYlqJ2f;#%)K1xIGUocW4=qaJig}ElSs}l%qDaqgAMgB?I@ww- zld7`r^E4VBjZ(DGir*%bVxIaui0gs-MMn_y{|~G=0UT)^)7GC!7avLvq@bc@t?B(Sy zUiR~HH!l@lKF!MjF9&%!#LHonj0H+-_k-9OoNvDd56wi|v3kmX!QzSLi24IjpMzrg zU81%Vb(N^&ME#to?-KQ6qE-Q+e2%C-qRtSNCF(mwy-w82L|rH91)@G8ie3~^fUq*X zrlOZ<+z3(c5_OoUS)%9-5&bJsyFtN6^Pbi07-PpCC@p63SC_oLn9VOaglDgZ#y+DY!o%oycmL@s3v3 zu1gyO?U8Nmk;ibu~>LG~d33V)|k>P03w{T+xm0Pcm0 za8KqvJhQywF#FNuCf5V52V4)h9&kP2dcgI7>jBpTt_NHXxE^pl;CkRw;(-hJoq&E< zI3ns%QKv=yoTy(E^(&%2E$TN!{Xi#VCAFiI0ba9>{Ssmoy(~RTh~)bgeDl{ z>Pa8lpJ6i(Q=4u?v`i+=W_l@FmPgI2BMAIPl=}?&L*?*b(0D>s{eFKq8p^0fCKNOD zfv~(Kt|iBes64bc%=YVtNSiU85$ZuJc6?aVvk472ddn&fv^k34R)05QBY3Puh7{sP zpI<&nN^Q-Q`i0V(TBV*eLNAP<9hWhHSap~)7*zdT7^5PW30j}3hEdL4+j01dHuv?5^fE}W0vwz zQ{}B(IS@+{RRJl;LixY6XBrLenIeiiHDB;UCL475szelhd|bPJ(JA-eUM_?y`DCd zmVG-oZ^bZ?y}K+qg);Fpj1qDyk_q$)2T#7OZNKE;x1h1MJ>=j^4*tA@f6u}H%fV9^ zoF&4*NErwJGY5ae;w$sJ>EQq5;L8sFZw~&S4xVB%@n{%+US;$t4|#eeGQIOD{ zU!VN!xN|e#($(g>J})X=?%zp4L*C^X(M;8OIyBL>&xIx`H77z7t=hAoiCWz$KzesN za{uf1|Gk2VWzy)PRC7hD918YvV4nl_0kGf(b+2~y`3L%wxLe?cb;ji8>ycY~=! zI)ivuEuyAFvCII!JvlEyck@KLRW+lfZ1OqXj92oJ*a$i^7^qLJ=e_IU1{6O$8K&aE==zIG5YCaN;Yd*M>uQJ>~P9ho^ IZ*9i@1Aats+5i9m From 763799b59a87a2a6b4077c041efca121ebed51cf Mon Sep 17 00:00:00 2001 From: Tobias Nack Date: Mon, 17 Feb 2020 14:12:29 +0100 Subject: [PATCH 26/27] First integration of pull request feedback --- src/parser/bison_parser.cpp | 70 +++++++++++++++---------------- src/parser/bison_parser.h | 2 +- src/parser/bison_parser.y | 56 ++++++++++++------------- src/sql/SelectStatement.h | 8 ++-- src/sql/statements.cpp | 14 +++---- src/util/sqlhelper.cpp | 39 ++++++++++-------- test/sql_tests.cpp | 82 ++++++++++++++++++------------------- 7 files changed, 138 insertions(+), 133 deletions(-) diff --git a/src/parser/bison_parser.cpp b/src/parser/bison_parser.cpp index 9339b925..d9fee6b5 100644 --- a/src/parser/bison_parser.cpp +++ b/src/parser/bison_parser.cpp @@ -366,7 +366,7 @@ union HSQL_STYPE hsql::GroupByDescription* group_t; hsql::UpdateClause* update_t; hsql::Alias* alias_t; - hsql::SetOperator* set_operator_t; + hsql::SetOperation* set_operator_t; std::vector* stmt_vec; @@ -779,19 +779,19 @@ static const char *const yytname[] = "opt_column_nullable", "drop_statement", "opt_exists", "delete_statement", "truncate_statement", "insert_statement", "opt_column_list", "update_statement", "update_clause_commalist", - "update_clause", "select_statement", "select_statement_in_set_operation", - "select_part_of_set_operation", "select_with_paren", "select_no_paren", - "set_operator", "set_type", "opt_all", "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", "operand", - "scalar_expr", "unary_expr", "binary_expr", "logic_expr", "in_expr", - "case_expr", "case_list", "exists_expr", "comp_expr", "function_expr", - "extract_expr", "datetime_field", "array_expr", "array_index", - "between_expr", "column_name", "literal", "string_literal", - "bool_literal", "num_literal", "int_literal", "null_literal", - "param_expr", "table_ref", "table_ref_atomic", + "update_clause", "select_statement", "select_within_set_operation", + "select_within_set_operation_no_parentheses", "select_with_paren", + "select_no_paren", "set_operator", "set_type", "opt_all", + "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", + "operand", "scalar_expr", "unary_expr", "binary_expr", "logic_expr", + "in_expr", "case_expr", "case_list", "exists_expr", "comp_expr", + "function_expr", "extract_expr", "datetime_field", "array_expr", + "array_index", "between_expr", "column_name", "literal", + "string_literal", "bool_literal", "num_literal", "int_literal", + "null_literal", "param_expr", "table_ref", "table_ref_atomic", "nonjoin_table_ref_atomic", "table_ref_commalist", "table_ref_name", "table_ref_name_no_alias", "table_name", "table_alias", "opt_table_alias", "alias", "opt_alias", "opt_with_clause", @@ -2005,13 +2005,13 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio #line 2006 "bison_parser.cpp" break; - case 202: /* select_statement_in_set_operation */ + case 202: /* select_within_set_operation */ #line 158 "bison_parser.y" { delete (((*yyvaluep).select_stmt)); } #line 2012 "bison_parser.cpp" break; - case 203: /* select_part_of_set_operation */ + case 203: /* select_within_set_operation_no_parentheses */ #line 158 "bison_parser.y" { delete (((*yyvaluep).select_stmt)); } #line 2018 "bison_parser.cpp" @@ -3427,13 +3427,13 @@ YYLTYPE yylloc = yyloc_default; #line 694 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-4].select_stmt); - if ((yyval.select_stmt)->setOperators == nullptr) { - (yyval.select_stmt)->setOperators = new std::vector(); + if ((yyval.select_stmt)->setOperations == nullptr) { + (yyval.select_stmt)->setOperations = new std::vector(); } - (yyval.select_stmt)->setOperators->push_back((yyvsp[-3].set_operator_t)); - (yyval.select_stmt)->setOperators->back()->nestedSelectStatement = (yyvsp[-2].select_stmt); - (yyval.select_stmt)->setOperators->back()->resultOrder = (yyvsp[-1].order_vec); - (yyval.select_stmt)->setOperators->back()->resultLimit = (yyvsp[0].limit); + (yyval.select_stmt)->setOperations->push_back((yyvsp[-3].set_operator_t)); + (yyval.select_stmt)->setOperations->back()->nestedSelectStatement = (yyvsp[-2].select_stmt); + (yyval.select_stmt)->setOperations->back()->resultOrder = (yyvsp[-1].order_vec); + (yyval.select_stmt)->setOperations->back()->resultLimit = (yyvsp[0].limit); (yyval.select_stmt)->withDescriptions = (yyvsp[-5].with_description_vec); } #line 3440 "bison_parser.cpp" @@ -3449,11 +3449,11 @@ YYLTYPE yylloc = yyloc_default; #line 713 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-2].select_stmt); - if ((yyval.select_stmt)->setOperators == nullptr) { - (yyval.select_stmt)->setOperators = new std::vector(); + if ((yyval.select_stmt)->setOperations == nullptr) { + (yyval.select_stmt)->setOperations = new std::vector(); } - (yyval.select_stmt)->setOperators->push_back((yyvsp[-1].set_operator_t)); - (yyval.select_stmt)->setOperators->back()->nestedSelectStatement = (yyvsp[0].select_stmt); + (yyval.select_stmt)->setOperations->push_back((yyvsp[-1].set_operator_t)); + (yyval.select_stmt)->setOperations->back()->nestedSelectStatement = (yyvsp[0].select_stmt); } #line 3459 "bison_parser.cpp" break; @@ -3489,13 +3489,13 @@ YYLTYPE yylloc = yyloc_default; #line 739 "bison_parser.y" { (yyval.select_stmt) = (yyvsp[-4].select_stmt); - if ((yyval.select_stmt)->setOperators == nullptr) { - (yyval.select_stmt)->setOperators = new std::vector(); + if ((yyval.select_stmt)->setOperations == nullptr) { + (yyval.select_stmt)->setOperations = new std::vector(); } - (yyval.select_stmt)->setOperators->push_back((yyvsp[-3].set_operator_t)); - (yyval.select_stmt)->setOperators->back()->nestedSelectStatement = (yyvsp[-2].select_stmt); - (yyval.select_stmt)->setOperators->back()->resultOrder = (yyvsp[-1].order_vec); - (yyval.select_stmt)->setOperators->back()->resultLimit = (yyvsp[0].limit); + (yyval.select_stmt)->setOperations->push_back((yyvsp[-3].set_operator_t)); + (yyval.select_stmt)->setOperations->back()->nestedSelectStatement = (yyvsp[-2].select_stmt); + (yyval.select_stmt)->setOperations->back()->resultOrder = (yyvsp[-1].order_vec); + (yyval.select_stmt)->setOperations->back()->resultLimit = (yyvsp[0].limit); } #line 3501 "bison_parser.cpp" break; @@ -3512,7 +3512,7 @@ YYLTYPE yylloc = yyloc_default; case 91: #line 759 "bison_parser.y" { - (yyval.set_operator_t) = new SetOperator(); + (yyval.set_operator_t) = new SetOperation(); (yyval.set_operator_t)->setType = SetType::kSetUnion; } #line 3519 "bison_parser.cpp" @@ -3521,7 +3521,7 @@ YYLTYPE yylloc = yyloc_default; case 92: #line 763 "bison_parser.y" { - (yyval.set_operator_t) = new SetOperator(); + (yyval.set_operator_t) = new SetOperation(); (yyval.set_operator_t)->setType = SetType::kSetIntersect; } #line 3528 "bison_parser.cpp" @@ -3530,7 +3530,7 @@ YYLTYPE yylloc = yyloc_default; case 93: #line 767 "bison_parser.y" { - (yyval.set_operator_t) = new SetOperator(); + (yyval.set_operator_t) = new SetOperation(); (yyval.set_operator_t)->setType = SetType::kSetExcept; } #line 3537 "bison_parser.cpp" diff --git a/src/parser/bison_parser.h b/src/parser/bison_parser.h index cebbdb2b..7a380e8b 100644 --- a/src/parser/bison_parser.h +++ b/src/parser/bison_parser.h @@ -273,7 +273,7 @@ union HSQL_STYPE hsql::GroupByDescription* group_t; hsql::UpdateClause* update_t; hsql::Alias* alias_t; - hsql::SetOperator* set_operator_t; + hsql::SetOperation* set_operator_t; std::vector* stmt_vec; diff --git a/src/parser/bison_parser.y b/src/parser/bison_parser.y index d2e62c06..b502c8ad 100755 --- a/src/parser/bison_parser.y +++ b/src/parser/bison_parser.y @@ -127,7 +127,7 @@ int yyerror(YYLTYPE* llocp, SQLParserResult* result, yyscan_t scanner, const cha hsql::GroupByDescription* group_t; hsql::UpdateClause* update_t; hsql::Alias* alias_t; - hsql::SetOperator* set_operator_t; + hsql::SetOperation* set_operator_t; std::vector* stmt_vec; @@ -192,7 +192,7 @@ int yyerror(YYLTYPE* llocp, SQLParserResult* result, yyscan_t scanner, const cha %type execute_statement %type transaction_statement %type prepare_statement -%type select_statement select_with_paren select_no_paren select_clause select_statement_in_set_operation select_part_of_set_operation +%type select_statement select_with_paren select_no_paren select_clause select_within_set_operation select_within_set_operation_no_parentheses %type import_statement %type export_statement %type create_statement @@ -691,32 +691,32 @@ select_statement: $$ = $2; $$->withDescriptions = $1; } - | opt_with_clause select_with_paren set_operator select_statement_in_set_operation opt_order opt_limit { + | opt_with_clause select_with_paren set_operator select_within_set_operation opt_order opt_limit { $$ = $2; - if ($$->setOperators == nullptr) { - $$->setOperators = new std::vector(); + if ($$->setOperations == nullptr) { + $$->setOperations = new std::vector(); } - $$->setOperators->push_back($3); - $$->setOperators->back()->nestedSelectStatement = $4; - $$->setOperators->back()->resultOrder = $5; - $$->setOperators->back()->resultLimit = $6; + $$->setOperations->push_back($3); + $$->setOperations->back()->nestedSelectStatement = $4; + $$->setOperations->back()->resultOrder = $5; + $$->setOperations->back()->resultLimit = $6; $$->withDescriptions = $1; } ; -select_statement_in_set_operation: +select_within_set_operation: select_with_paren - | select_part_of_set_operation; + | select_within_set_operation_no_parentheses; -select_part_of_set_operation: +select_within_set_operation_no_parentheses: select_clause { $$ = $1; } - | select_clause set_operator select_statement_in_set_operation { + | select_clause set_operator select_within_set_operation { $$ = $1; - if ($$->setOperators == nullptr) { - $$->setOperators = new std::vector(); + if ($$->setOperations == nullptr) { + $$->setOperations = new std::vector(); } - $$->setOperators->push_back($2); - $$->setOperators->back()->nestedSelectStatement = $3; + $$->setOperations->push_back($2); + $$->setOperations->back()->nestedSelectStatement = $3; } ; @@ -736,15 +736,15 @@ select_no_paren: $$->limit = $3; } } - | select_clause set_operator select_statement_in_set_operation opt_order opt_limit { + | select_clause set_operator select_within_set_operation opt_order opt_limit { $$ = $1; - if ($$->setOperators == nullptr) { - $$->setOperators = new std::vector(); + if ($$->setOperations == nullptr) { + $$->setOperations = new std::vector(); } - $$->setOperators->push_back($2); - $$->setOperators->back()->nestedSelectStatement = $3; - $$->setOperators->back()->resultOrder = $4; - $$->setOperators->back()->resultLimit = $5; + $$->setOperations->push_back($2); + $$->setOperations->back()->nestedSelectStatement = $3; + $$->setOperations->back()->resultOrder = $4; + $$->setOperations->back()->resultLimit = $5; } ; @@ -757,15 +757,15 @@ set_operator: set_type: UNION { - $$ = new SetOperator(); + $$ = new SetOperation(); $$->setType = SetType::kSetUnion; } | INTERSECT { - $$ = new SetOperator(); + $$ = new SetOperation(); $$->setType = SetType::kSetIntersect; } | EXCEPT { - $$ = new SetOperator(); + $$ = new SetOperation(); $$->setType = SetType::kSetExcept; } ; @@ -830,7 +830,7 @@ opt_having: ; opt_order: - ORDER BY order_list { $$ = $3; }; + ORDER BY order_list { $$ = $3; } | /* empty */ { $$ = nullptr; } ; diff --git a/src/sql/SelectStatement.h b/src/sql/SelectStatement.h index 7b4a71e2..d0689fc6 100644 --- a/src/sql/SelectStatement.h +++ b/src/sql/SelectStatement.h @@ -51,9 +51,9 @@ namespace hsql { SelectStatement* select; }; - struct SetOperator { - SetOperator(); - virtual ~SetOperator(); + struct SetOperation { + SetOperation(); + virtual ~SetOperation(); SetType setType; bool isAll; @@ -86,7 +86,7 @@ namespace hsql { // vector // 4. Repeat until all SetOperators in the vector are // connected - std::vector* setOperators; + std::vector* setOperations; std::vector* order; std::vector* withDescriptions; diff --git a/src/sql/statements.cpp b/src/sql/statements.cpp index d46d6b7c..104a4d1c 100755 --- a/src/sql/statements.cpp +++ b/src/sql/statements.cpp @@ -262,7 +262,7 @@ namespace hsql { selectList(nullptr), whereClause(nullptr), groupBy(nullptr), - setOperators(nullptr), + setOperations(nullptr), order(nullptr), withDescriptions(nullptr), limit(nullptr) {}; @@ -295,11 +295,11 @@ namespace hsql { delete withDescriptions; } - if (setOperators != nullptr) { - for (SetOperator* setOperator : *setOperators) { - delete setOperator; + if (setOperations != nullptr) { + for (SetOperation* setOperation : *setOperations) { + delete setOperation; } - delete setOperators; + delete setOperations; } } @@ -387,12 +387,12 @@ namespace hsql { delete condition; } - SetOperator::SetOperator() : + SetOperation::SetOperation() : nestedSelectStatement(nullptr), resultOrder(nullptr), resultLimit(nullptr) {} - SetOperator::~SetOperator() { + SetOperation::~SetOperation() { delete nestedSelectStatement; delete resultLimit; diff --git a/src/util/sqlhelper.cpp b/src/util/sqlhelper.cpp index 4dd759e9..74a5b4d4 100755 --- a/src/util/sqlhelper.cpp +++ b/src/util/sqlhelper.cpp @@ -168,33 +168,38 @@ namespace hsql { } } - if (stmt->setOperators != nullptr) { - for (SetOperator* setOperator : *stmt->setOperators) { - if (setOperator->setType == SetType::kSetUnion) { - inprint("Union:", numIndent + 1); - } else if (setOperator->setType == SetType::kSetIntersect) { - inprint("Intersect:", numIndent + 1); - } else { - inprint("Except:", numIndent + 1); + if (stmt->setOperations != nullptr) { + for (SetOperation* setOperation : *stmt->setOperations) { + switch (setOperation->setType) { + case SetType::kSetIntersect: + inprint("Intersect:", numIndent + 1); + break; + case SetType::kSetUnion: + inprint("Union:", numIndent + 1); + break; + case SetType::kSetExcept: + inprint("Except:", numIndent + 1); + break; } - printSelectStatementInfo(setOperator->nestedSelectStatement, numIndent + 2); - if (setOperator->resultOrder != nullptr) { + printSelectStatementInfo(setOperation->nestedSelectStatement, numIndent + 2); + + if (setOperation->resultOrder != nullptr) { inprint("SetResultOrderBy:", numIndent + 1); - printExpression(setOperator->resultOrder->at(0)->expr, numIndent + 2); - if (setOperator->resultOrder->at(0)->type == kOrderAsc) inprint("ascending", numIndent + 2); + printExpression(setOperation->resultOrder->at(0)->expr, numIndent + 2); + if (setOperation->resultOrder->at(0)->type == kOrderAsc) inprint("ascending", numIndent + 2); else inprint("descending", numIndent + 2); } - if (setOperator->resultLimit != nullptr) { - if (setOperator->resultLimit->limit != nullptr) { + if (setOperation->resultLimit != nullptr) { + if (setOperation->resultLimit->limit != nullptr) { inprint("SetResultLimit:", numIndent + 1); - printExpression(setOperator->resultLimit->limit, numIndent + 2); + printExpression(setOperation->resultLimit->limit, numIndent + 2); } - if (setOperator->resultLimit->offset != nullptr) { + if (setOperation->resultLimit->offset != nullptr) { inprint("SetResultOffset:", numIndent + 1); - printExpression(setOperator->resultLimit->offset, numIndent + 2); + printExpression(setOperation->resultLimit->offset, numIndent + 2); } } } diff --git a/test/sql_tests.cpp b/test/sql_tests.cpp index c583d701..f8b977d4 100644 --- a/test/sql_tests.cpp +++ b/test/sql_tests.cpp @@ -306,9 +306,9 @@ TEST(ExceptOperatorTest) { result, stmt); - ASSERT_STREQ(stmt->setOperators->back()->nestedSelectStatement->fromTable->name, "students_2"); + ASSERT_STREQ(stmt->setOperations->back()->nestedSelectStatement->fromTable->name, "students_2"); ASSERT_STREQ(stmt->fromTable->name, "students"); - ASSERT_EQ(stmt->setOperators->back()->setType, kSetExcept); + ASSERT_EQ(stmt->setOperations->back()->setType, kSetExcept); } TEST(IntersectOperatorTest) { @@ -319,9 +319,9 @@ TEST(IntersectOperatorTest) { result, stmt); - ASSERT_STREQ(stmt->setOperators->back()->nestedSelectStatement->fromTable->name, "students_2"); + ASSERT_STREQ(stmt->setOperations->back()->nestedSelectStatement->fromTable->name, "students_2"); ASSERT_STREQ(stmt->fromTable->name, "students"); - ASSERT_EQ(stmt->setOperators->back()->setType, kSetIntersect); + ASSERT_EQ(stmt->setOperations->back()->setType, kSetIntersect); } TEST(UnionOperatorTest) { @@ -332,10 +332,10 @@ TEST(UnionOperatorTest) { result, stmt); - ASSERT_STREQ(stmt->setOperators->back()->nestedSelectStatement->fromTable->name, "students_2"); + ASSERT_STREQ(stmt->setOperations->back()->nestedSelectStatement->fromTable->name, "students_2"); ASSERT_STREQ(stmt->fromTable->name, "students"); - ASSERT_EQ(stmt->setOperators->back()->setType, kSetUnion); - ASSERT_FALSE(stmt->setOperators->back()->isAll); + ASSERT_EQ(stmt->setOperations->back()->setType, kSetUnion); + ASSERT_FALSE(stmt->setOperations->back()->isAll); } TEST(UnionAllOperatorTest) { @@ -346,12 +346,12 @@ TEST(UnionAllOperatorTest) { result, stmt); - ASSERT_STREQ(stmt->setOperators->back()->nestedSelectStatement->fromTable->name, "students_2"); + ASSERT_STREQ(stmt->setOperations->back()->nestedSelectStatement->fromTable->name, "students_2"); ASSERT_STREQ(stmt->fromTable->name, "students"); - ASSERT_TRUE(stmt->setOperators->back()->isAll); + ASSERT_TRUE(stmt->setOperations->back()->isAll); } -TEST(NestedSetOperatorTest) { +TEST(NestedSetOperationTest) { TEST_PARSE_SINGLE_SQL( "SELECT * FROM students INTERSECT SELECT grade FROM students_2 UNION SELECT * FROM employees;", kStmtSelect, @@ -359,12 +359,12 @@ TEST(NestedSetOperatorTest) { result, stmt); - ASSERT_STREQ(stmt->setOperators->back()->nestedSelectStatement->setOperators->back()->nestedSelectStatement->fromTable->name, "employees"); - ASSERT_STREQ(stmt->setOperators->back()->nestedSelectStatement->fromTable->name, "students_2"); + ASSERT_STREQ(stmt->setOperations->back()->nestedSelectStatement->setOperations->back()->nestedSelectStatement->fromTable->name, "employees"); + ASSERT_STREQ(stmt->setOperations->back()->nestedSelectStatement->fromTable->name, "students_2"); ASSERT_STREQ(stmt->fromTable->name, "students"); - ASSERT_EQ(stmt->setOperators->back()->setType, kSetIntersect); - ASSERT_EQ(stmt->setOperators->back()->nestedSelectStatement->setOperators->back()->setType, kSetUnion); - ASSERT_FALSE(stmt->setOperators->back()->isAll); + ASSERT_EQ(stmt->setOperations->back()->setType, kSetIntersect); + ASSERT_EQ(stmt->setOperations->back()->nestedSelectStatement->setOperations->back()->setType, kSetUnion); + ASSERT_FALSE(stmt->setOperations->back()->isAll); } TEST(OrderByFullStatementTest) { @@ -375,12 +375,12 @@ TEST(OrderByFullStatementTest) { result, stmt); - ASSERT_EQ(stmt->setOperators->back()->resultOrder->at(0)->type, kOrderAsc); - ASSERT_STREQ(stmt->setOperators->back()->resultOrder->at(0)->expr->name, "grade"); - ASSERT_FALSE(stmt->setOperators->back()->isAll); + ASSERT_EQ(stmt->setOperations->back()->resultOrder->at(0)->type, kOrderAsc); + ASSERT_STREQ(stmt->setOperations->back()->resultOrder->at(0)->expr->name, "grade"); + ASSERT_FALSE(stmt->setOperations->back()->isAll); } -TEST(SetOperatorSubQueryOrder) { +TEST(SetOperationSubQueryOrder) { TEST_PARSE_SINGLE_SQL( "(SELECT * FROM students ORDER BY name DESC) INTERSECT SELECT grade FROM students_2 UNION SELECT * FROM employees ORDER BY grade ASC;", kStmtSelect, @@ -391,12 +391,12 @@ TEST(SetOperatorSubQueryOrder) { ASSERT_EQ(stmt->order->at(0)->type, kOrderDesc); ASSERT_STREQ(stmt->order->at(0)->expr->name, "name"); - ASSERT_EQ(stmt->setOperators->back()->resultOrder->at(0)->type, kOrderAsc); - ASSERT_STREQ(stmt->setOperators->back()->resultOrder->at(0)->expr->name, "grade"); - ASSERT_FALSE(stmt->setOperators->back()->isAll); + ASSERT_EQ(stmt->setOperations->back()->resultOrder->at(0)->type, kOrderAsc); + ASSERT_STREQ(stmt->setOperations->back()->resultOrder->at(0)->expr->name, "grade"); + ASSERT_FALSE(stmt->setOperations->back()->isAll); } -TEST(NestedDifferentSetOperatorsWithWithClause) { +TEST(NestedDifferentSetOperationsWithWithClause) { TEST_PARSE_SINGLE_SQL("WITH UNION_FIRST AS (SELECT * FROM A UNION SELECT * FROM B) SELECT * FROM UNION_FIRST EXCEPT SELECT * FROM C", kStmtSelect, @@ -405,17 +405,17 @@ TEST(NestedDifferentSetOperatorsWithWithClause) { stmt); ASSERT_STREQ(stmt->withDescriptions->back()->alias, "UNION_FIRST"); - ASSERT_EQ(stmt->withDescriptions->back()->select->setOperators->back()->setType, kSetUnion); + ASSERT_EQ(stmt->withDescriptions->back()->select->setOperations->back()->setType, kSetUnion); ASSERT_STREQ(stmt->withDescriptions->back()->select->fromTable->name, "A"); - ASSERT_STREQ(stmt->withDescriptions->back()->select->setOperators->back()->nestedSelectStatement->fromTable->name, "B"); + ASSERT_STREQ(stmt->withDescriptions->back()->select->setOperations->back()->nestedSelectStatement->fromTable->name, "B"); - ASSERT_EQ(stmt->setOperators->back()->setType, kSetExcept); + ASSERT_EQ(stmt->setOperations->back()->setType, kSetExcept); ASSERT_STREQ(stmt->fromTable->name, "UNION_FIRST"); - ASSERT_STREQ(stmt->setOperators->back()->nestedSelectStatement->fromTable->name, "C"); + ASSERT_STREQ(stmt->setOperations->back()->nestedSelectStatement->fromTable->name, "C"); } -TEST(NestedAllSetOperatorsWithWithClause) { +TEST(NestedAllSetOperationsWithWithClause) { TEST_PARSE_SINGLE_SQL("WITH UNION_FIRST AS (SELECT * FROM A UNION SELECT * FROM B) SELECT * FROM UNION_FIRST EXCEPT SELECT * FROM (SELECT * FROM C INTERSECT SELECT * FROM D)", kStmtSelect, @@ -424,19 +424,19 @@ TEST(NestedAllSetOperatorsWithWithClause) { stmt); ASSERT_STREQ(stmt->withDescriptions->back()->alias, "UNION_FIRST"); - ASSERT_EQ(stmt->withDescriptions->back()->select->setOperators->back()->setType, kSetUnion); + ASSERT_EQ(stmt->withDescriptions->back()->select->setOperations->back()->setType, kSetUnion); ASSERT_STREQ(stmt->withDescriptions->back()->select->fromTable->name, "A"); - ASSERT_STREQ(stmt->withDescriptions->back()->select->setOperators->back()->nestedSelectStatement->fromTable->name, "B"); + ASSERT_STREQ(stmt->withDescriptions->back()->select->setOperations->back()->nestedSelectStatement->fromTable->name, "B"); - ASSERT_EQ(stmt->setOperators->back()->setType, kSetExcept); + ASSERT_EQ(stmt->setOperations->back()->setType, kSetExcept); ASSERT_STREQ(stmt->fromTable->name, "UNION_FIRST"); - ASSERT_EQ(stmt->setOperators->back()->nestedSelectStatement->fromTable->select->setOperators->back()->setType, kSetIntersect); - ASSERT_STREQ(stmt->setOperators->back()->nestedSelectStatement->fromTable->select->fromTable->name, "C"); - ASSERT_STREQ(stmt->setOperators->back()->nestedSelectStatement->fromTable->select->setOperators->back()->nestedSelectStatement->fromTable->name, "D"); + ASSERT_EQ(stmt->setOperations->back()->nestedSelectStatement->fromTable->select->setOperations->back()->setType, kSetIntersect); + ASSERT_STREQ(stmt->setOperations->back()->nestedSelectStatement->fromTable->select->fromTable->name, "C"); + ASSERT_STREQ(stmt->setOperations->back()->nestedSelectStatement->fromTable->select->setOperations->back()->nestedSelectStatement->fromTable->name, "D"); } -TEST(NestedSetOperatorsWithMultipleWithClauses) { +TEST(NestedSetOperationsWithMultipleWithClauses) { TEST_PARSE_SINGLE_SQL( "WITH UNION_FIRST AS (SELECT * FROM A UNION SELECT * FROM B),INTERSECT_SECOND AS (SELECT * FROM UNION_FIRST INTERSECT SELECT * FROM C) SELECT * FROM UNION_FIRST EXCEPT SELECT * FROM INTERSECT_SECOND", @@ -448,17 +448,17 @@ TEST(NestedSetOperatorsWithMultipleWithClauses) { ASSERT_STREQ(stmt->withDescriptions->at(0)->alias, "UNION_FIRST"); ASSERT_STREQ(stmt->withDescriptions->back()->alias, "INTERSECT_SECOND"); - ASSERT_EQ(stmt->withDescriptions->at(0)->select->setOperators->back()->setType, kSetUnion); + ASSERT_EQ(stmt->withDescriptions->at(0)->select->setOperations->back()->setType, kSetUnion); ASSERT_STREQ(stmt->withDescriptions->at(0)->select->fromTable->name, "A"); - ASSERT_STREQ(stmt->withDescriptions->at(0)->select->setOperators->back()->nestedSelectStatement->fromTable->name, "B"); + ASSERT_STREQ(stmt->withDescriptions->at(0)->select->setOperations->back()->nestedSelectStatement->fromTable->name, "B"); - ASSERT_EQ(stmt->withDescriptions->back()->select->setOperators->back()->setType, kSetIntersect); + ASSERT_EQ(stmt->withDescriptions->back()->select->setOperations->back()->setType, kSetIntersect); ASSERT_STREQ(stmt->withDescriptions->back()->select->fromTable->name, "UNION_FIRST"); - ASSERT_STREQ(stmt->withDescriptions->back()->select->setOperators->back()->nestedSelectStatement->fromTable->name, "C"); + ASSERT_STREQ(stmt->withDescriptions->back()->select->setOperations->back()->nestedSelectStatement->fromTable->name, "C"); - ASSERT_EQ(stmt->setOperators->back()->setType, kSetExcept); + ASSERT_EQ(stmt->setOperations->back()->setType, kSetExcept); ASSERT_STREQ(stmt->fromTable->name, "UNION_FIRST"); - ASSERT_STREQ(stmt->setOperators->back()->nestedSelectStatement->fromTable->name, "INTERSECT_SECOND"); + ASSERT_STREQ(stmt->setOperations->back()->nestedSelectStatement->fromTable->name, "INTERSECT_SECOND"); } TEST(WrongOrderByStatementTest) { From f2c2862ca4e4af819f26577ae4a01ddf78b3f368 Mon Sep 17 00:00:00 2001 From: Tobias Nack Date: Mon, 17 Feb 2020 16:29:42 +0100 Subject: [PATCH 27/27] Clarify comment about order of set operations and add additional requested test --- src/sql/SelectStatement.h | 33 +++++++++++++++++++++++---------- test/sql_tests.cpp | 16 ++++++++++++++++ 2 files changed, 39 insertions(+), 10 deletions(-) diff --git a/src/sql/SelectStatement.h b/src/sql/SelectStatement.h index d0689fc6..73dc1450 100644 --- a/src/sql/SelectStatement.h +++ b/src/sql/SelectStatement.h @@ -75,17 +75,30 @@ namespace hsql { Expr* whereClause; GroupByDescription* groupBy; - // Note that a SetOperator is always connected to a + // Note that a SetOperation is always connected to a // different SelectStatement. This statement can itself - // have SetOperator connections to other SelectStatements. - // To evaluate the operators in the correct order: - // 1. Fully evaluate the nested SelectStatement - // 2. Connect the nested SelectStatement to our original - // with the given SetOperation - // 3. Connect the result with the next SetOperator in the - // vector - // 4. Repeat until all SetOperators in the vector are - // connected + // have SetOperation connections to other SelectStatements. + // To evaluate the operations in the correct order: + // Iterate over the setOperations vector: + // 1. Fully evaluate the nestedSelectStatement within the SetOperation + // 2. Connect the original statement with the + // evaluated nestedSelectStatement + // 3. Apply the resultOrder and the resultLimit + // 4. The result now functions as the the original statement + // for the next iteration + // + // Example: + // + // (SELECT * FROM students INTERSECT SELECT * FROM students_2) UNION SELECT * FROM students_3 ORDER BY grade ASC; + // + // 1. We evaluate `Select * FROM students` + // 2. Then we iterate over the setOperations vector + // 3. We evalute the nestedSelectStatement of the first entry, which is: `SELECT * FROM students_2` + // 4. We connect the result of 1. with the results of 3. using the setType, which is INTERSECT + // 5. We continue the iteration of the setOperations vector + // 6. We evaluate the new nestedSelectStatement which is: `SELECT * FROM students_3` + // 7. We apply a Union-Operation to connect the results of 4. and 6. + // 8. Finally, we apply the resultOrder of the last SetOperation (ORDER BY grade ASC) std::vector* setOperations; std::vector* order; diff --git a/test/sql_tests.cpp b/test/sql_tests.cpp index f8b977d4..873f69e9 100644 --- a/test/sql_tests.cpp +++ b/test/sql_tests.cpp @@ -396,6 +396,22 @@ TEST(SetOperationSubQueryOrder) { ASSERT_FALSE(stmt->setOperations->back()->isAll); } +TEST(SetOperationLastSubQueryOrder) { + TEST_PARSE_SINGLE_SQL( + "SELECT * FROM students INTERSECT SELECT grade FROM students_2 UNION (SELECT * FROM employees ORDER BY name DESC) ORDER BY grade ASC;", + kStmtSelect, + SelectStatement, + result, + stmt); + + ASSERT_EQ(stmt->setOperations->back()->nestedSelectStatement->setOperations->back()->nestedSelectStatement->order->at(0)->type, kOrderDesc); + ASSERT_STREQ(stmt->setOperations->back()->nestedSelectStatement->setOperations->back()->nestedSelectStatement->order->at(0)->expr->name, "name"); + + ASSERT_EQ(stmt->setOperations->back()->resultOrder->at(0)->type, kOrderAsc); + ASSERT_STREQ(stmt->setOperations->back()->resultOrder->at(0)->expr->name, "grade"); + ASSERT_FALSE(stmt->setOperations->back()->isAll); +} + TEST(NestedDifferentSetOperationsWithWithClause) { TEST_PARSE_SINGLE_SQL("WITH UNION_FIRST AS (SELECT * FROM A UNION SELECT * FROM B) SELECT * FROM UNION_FIRST EXCEPT SELECT * FROM C",