diff --git a/arangod/Aql/Ast.cpp b/arangod/Aql/Ast.cpp index eae4249678..9546e9fcd2 100644 --- a/arangod/Aql/Ast.cpp +++ b/arangod/Aql/Ast.cpp @@ -731,6 +731,28 @@ AstNode* Ast::createNodeParameter( return node; } +AstNode* Ast::createNodeParameterCollection(char const* name, size_t length) { + auto node = createNodeParameter(name, length); + + if (node) { + node->reserve(1); + node->addMember(createNode(NODE_TYPE_COLLECTION)); + } + + return node; +} + +AstNode* Ast::createNodeParameterView(char const* name, size_t length) { + auto node = createNodeParameter(name, length); + + if (node) { + node->reserve(1); + node->addMember(createNode(NODE_TYPE_VIEW)); + } + + return node; +} + /// @brief create an AST quantifier node AstNode* Ast::createNodeQuantifier(int64_t type) { AstNode* node = createNode(NODE_TYPE_QUANTIFIER); @@ -1467,71 +1489,90 @@ void Ast::injectBindParameters(BindParameters& parameters) { TRI_ASSERT(!param.empty()); if ('@' == param[0]) { - // bound data source parameter - TRI_ASSERT(value.isString()); + // bound data source parameter + TRI_ASSERT(value.isString()); - char const* name = nullptr; - VPackValueLength length; - char const* stringValue = value.getString(length); + // should have arrived here via createNodeParameterCollection(...) or createNodeParameterView(...) + if (1 != node->numMembers() || !node->getMemberUnchecked(0)) { + THROW_ARANGO_EXCEPTION_MESSAGE( + TRI_ERROR_INTERNAL, "missing data source category" + ); + } - // FIXME use external resolver - arangodb::CollectionNameResolver resolver(_query->vocbase()); - std::shared_ptr dataSource; + // FIXME use external resolver + arangodb::CollectionNameResolver resolver(_query->vocbase()); - if (length > 0 && stringValue[0] >= '0' && stringValue[0] <= '9') { - dataSource = resolver.getDataSource(basics::StringUtils::uint64(stringValue, length)); - } else { - dataSource = resolver.getDataSource(std::string(stringValue, length)); - } + switch (node->getMemberUnchecked(0)->type) { + case NODE_TYPE_COLLECTION: { + auto dataSource = resolver.getCollection(value.copyString()); if (!dataSource) { THROW_ARANGO_EXCEPTION_FORMAT( - TRI_ERROR_ARANGO_DATA_SOURCE_NOT_FOUND, "%s", + TRI_ERROR_ARANGO_DATA_SOURCE_NOT_FOUND, + "collection: %s", value.copyString().c_str() ); } // TODO: can we get away without registering the string value here? - auto& dataSourceName = dataSource->name(); + auto* name = _query->registerString(dataSource->name()); - name = _query->registerString(dataSourceName.c_str(), dataSourceName.size()); + // check if the collection was used in a data-modification query + bool isWriteCollection = false; - if (LogicalCollection::category() == dataSource->category()) { - // check if the collection was used in a data-modification query - bool isWriteCollection = false; + arangodb::StringRef paramRef(param); - for (auto const& it : _writeCollections) { - auto const& c = it.first; - if (c->type == NODE_TYPE_PARAMETER && StringRef(param) == StringRef(c->getStringValue(), c->getStringLength())) { - isWriteCollection = true; - break; + + for (auto const& it : _writeCollections) { + auto const& c = it.first; + + if (c->type == NODE_TYPE_PARAMETER + && paramRef == StringRef(c->getStringValue(), c->getStringLength())) { + isWriteCollection = true; + break; + } + } + + node = createNodeCollection(name, isWriteCollection + ? AccessMode::Type::WRITE + : AccessMode::Type::READ); + + if (isWriteCollection) { + // must update AST info now for all nodes that contained this parameter + for (size_t i = 0; i < _writeCollections.size(); ++i) { + auto& c = _writeCollections[i].first; + + if (c->type == NODE_TYPE_PARAMETER + && paramRef == StringRef(c->getStringValue(), c->getStringLength())) { + c = node; + // no break here. replace all occurrences } } + } - node = createNodeCollection(name, isWriteCollection - ? AccessMode::Type::WRITE - : AccessMode::Type::READ); + break; + } + case NODE_TYPE_VIEW: { + auto dataSource = resolver.getView(value.copyString()); - if (isWriteCollection) { - // must update AST info now for all nodes that contained this - // parameter - for (size_t i = 0; i < _writeCollections.size(); ++i) { - auto& c = _writeCollections[i].first; - if (c->type == NODE_TYPE_PARAMETER && - StringRef(param) == StringRef(c->getStringValue(), c->getStringLength())) { - c = node; - // no break here. replace all occurrences - } - } - } - } else if (LogicalView::category() == dataSource->category()) { - node = createNodeView(name); - } else { - THROW_ARANGO_EXCEPTION_MESSAGE( - TRI_ERROR_INTERNAL, - "unexpected data source category" + if (!dataSource) { + THROW_ARANGO_EXCEPTION_FORMAT( + TRI_ERROR_ARANGO_DATA_SOURCE_NOT_FOUND, + "view: %s", + value.copyString().c_str() ); } + + // TODO: can we get away without registering the string value here? + node = createNodeView(_query->registerString(dataSource->name())); + + break; + } + default: + THROW_ARANGO_EXCEPTION_MESSAGE( + TRI_ERROR_INTERNAL, "unexpected data source category" + ); + } } else { // regular bound parameter node = nodeFromVPack(value, true); @@ -3636,4 +3677,4 @@ AstNode* Ast::createNode(AstNodeType type) { // ----------------------------------------------------------------------------- // --SECTION-- END-OF-FILE -// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- \ No newline at end of file diff --git a/arangod/Aql/Ast.h b/arangod/Aql/Ast.h index 2219ced885..4fc06afd5f 100644 --- a/arangod/Aql/Ast.h +++ b/arangod/Aql/Ast.h @@ -244,6 +244,8 @@ class Ast { char const* name, size_t length ); + AstNode* createNodeParameterCollection(char const* name, size_t length); + AstNode* createNodeParameterView(char const* name, size_t length); /// @brief create an AST quantifier node AstNode* createNodeQuantifier(int64_t); @@ -588,7 +590,8 @@ public: /// @brief a singleton empty string node instance static AstNode const EmptyStringNode; }; + } } -#endif +#endif \ No newline at end of file diff --git a/arangod/Aql/grammar.cpp b/arangod/Aql/grammar.cpp index 089f995d2d..09bca2f43b 100644 --- a/arangod/Aql/grammar.cpp +++ b/arangod/Aql/grammar.cpp @@ -75,12 +75,10 @@ #include "Aql/Function.h" #include "Aql/Parser.h" #include "Aql/Quantifier.h" -#include "Basics/conversions.h" #include "Basics/tri-strings.h" #include "VocBase/AccessMode.h" -#include -#line 84 "Aql/grammar.cpp" /* yacc.c:339 */ +#line 82 "Aql/grammar.cpp" /* yacc.c:339 */ # ifndef YY_NULLPTR # if defined __cplusplus && 201103L <= __cplusplus @@ -196,7 +194,7 @@ extern int Aqldebug; union YYSTYPE { -#line 21 "Aql/grammar.y" /* yacc.c:355 */ +#line 19 "Aql/grammar.y" /* yacc.c:355 */ arangodb::aql::AstNode* node; struct { @@ -206,7 +204,7 @@ union YYSTYPE bool boolval; int64_t intval; -#line 210 "Aql/grammar.cpp" /* yacc.c:355 */ +#line 208 "Aql/grammar.cpp" /* yacc.c:355 */ }; typedef union YYSTYPE YYSTYPE; @@ -235,7 +233,7 @@ int Aqlparse (arangodb::aql::Parser* parser); #endif /* !YY_AQL_AQL_GRAMMAR_HPP_INCLUDED */ /* Copy the second part of user declarations. */ -#line 31 "Aql/grammar.y" /* yacc.c:358 */ +#line 29 "Aql/grammar.y" /* yacc.c:358 */ using namespace arangodb::aql; @@ -377,7 +375,7 @@ static AstNode const* GetIntoExpression(AstNode const* node) { } -#line 381 "Aql/grammar.cpp" /* yacc.c:358 */ +#line 379 "Aql/grammar.cpp" /* yacc.c:358 */ #ifdef short # undef short @@ -621,16 +619,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 7 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 1525 +#define YYLAST 1507 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 76 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 94 +#define YYNNTS 93 /* YYNRULES -- Number of rules. */ -#define YYNRULES 225 +#define YYNRULES 223 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 385 +#define YYNSTATES 384 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ @@ -683,29 +681,29 @@ static const yytype_uint8 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 346, 346, 349, 362, 366, 370, 377, 379, 379, - 390, 395, 400, 402, 405, 408, 411, 414, 420, 422, - 427, 429, 431, 433, 435, 437, 439, 441, 443, 445, - 447, 452, 458, 464, 466, 471, 476, 481, 489, 497, - 508, 516, 521, 523, 528, 535, 545, 545, 559, 568, - 579, 609, 676, 701, 734, 736, 741, 748, 751, 754, - 763, 777, 794, 794, 808, 808, 818, 818, 829, 832, - 838, 844, 847, 850, 853, 859, 864, 871, 879, 882, - 888, 898, 908, 916, 927, 932, 940, 951, 956, 959, - 965, 969, 965, 1021, 1024, 1027, 1033, 1033, 1043, 1049, - 1052, 1055, 1058, 1061, 1064, 1070, 1073, 1089, 1089, 1098, - 1098, 1108, 1111, 1114, 1120, 1123, 1126, 1129, 1132, 1135, - 1138, 1141, 1144, 1147, 1150, 1153, 1156, 1159, 1162, 1165, - 1171, 1177, 1184, 1187, 1190, 1193, 1196, 1199, 1202, 1205, - 1211, 1214, 1220, 1222, 1227, 1230, 1230, 1246, 1249, 1255, - 1258, 1264, 1264, 1273, 1275, 1280, 1283, 1289, 1292, 1306, - 1306, 1315, 1317, 1322, 1324, 1329, 1343, 1347, 1356, 1363, - 1366, 1372, 1375, 1381, 1384, 1387, 1393, 1396, 1402, 1405, - 1408, 1412, 1418, 1422, 1429, 1434, 1434, 1442, 1446, 1455, - 1458, 1461, 1467, 1470, 1476, 1508, 1511, 1514, 1521, 1531, - 1531, 1544, 1559, 1573, 1587, 1587, 1630, 1633, 1639, 1646, - 1656, 1659, 1662, 1665, 1668, 1674, 1677, 1680, 1686, 1689, - 1692, 1702, 1709, 1715, 1718, 1723 + 0, 343, 343, 346, 359, 363, 367, 374, 376, 376, + 387, 392, 397, 399, 402, 405, 408, 411, 417, 419, + 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, + 444, 449, 455, 457, 462, 467, 472, 480, 488, 499, + 507, 512, 514, 519, 526, 536, 536, 550, 559, 570, + 600, 667, 692, 725, 727, 732, 739, 742, 745, 754, + 768, 785, 785, 799, 799, 809, 809, 820, 823, 829, + 835, 838, 841, 844, 850, 855, 862, 870, 873, 879, + 889, 899, 907, 918, 923, 931, 942, 947, 950, 956, + 960, 956, 1012, 1015, 1018, 1024, 1024, 1034, 1040, 1043, + 1046, 1049, 1052, 1055, 1061, 1064, 1080, 1080, 1089, 1089, + 1099, 1102, 1105, 1111, 1114, 1117, 1120, 1123, 1126, 1129, + 1132, 1135, 1138, 1141, 1144, 1147, 1150, 1153, 1156, 1162, + 1168, 1175, 1178, 1181, 1184, 1187, 1190, 1193, 1196, 1202, + 1205, 1211, 1213, 1218, 1221, 1221, 1237, 1240, 1246, 1249, + 1255, 1255, 1264, 1266, 1271, 1274, 1280, 1283, 1297, 1297, + 1306, 1308, 1313, 1315, 1320, 1334, 1338, 1347, 1354, 1357, + 1363, 1366, 1372, 1375, 1378, 1384, 1387, 1393, 1396, 1399, + 1403, 1409, 1413, 1420, 1425, 1425, 1433, 1437, 1446, 1449, + 1452, 1458, 1461, 1467, 1475, 1507, 1510, 1513, 1520, 1530, + 1530, 1543, 1558, 1572, 1586, 1586, 1629, 1632, 1638, 1645, + 1655, 1658, 1661, 1664, 1667, 1673, 1676, 1679, 1685, 1692, + 1699, 1705, 1708, 1713 }; #endif @@ -759,8 +757,8 @@ static const char *const yytname[] = "optional_array_limit", "optional_array_return", "graph_collection", "graph_collection_list", "graph_subject", "$@14", "graph_direction", "graph_direction_steps", "reference", "$@15", "$@16", "simple_value", - "numeric_value", "value_literal", "collection_name", "view_name", - "bind_parameter", "object_element_name", "variable_name", YY_NULLPTR + "numeric_value", "value_literal", "collection_name", "bind_parameter", + "object_element_name", "variable_name", YY_NULLPTR }; #endif @@ -780,12 +778,12 @@ static const yytype_uint16 yytoknum[] = }; # endif -#define YYPACT_NINF -269 +#define YYPACT_NINF -342 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-269))) + (!!((Yystate) == (-342))) -#define YYTABLE_NINF -224 +#define YYTABLE_NINF -222 #define yytable_value_is_error(Yytable_value) \ 0 @@ -794,45 +792,45 @@ static const yytype_uint16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - 17, -269, -269, 24, 102, -269, 324, -269, -269, -269, - -269, -269, 74, -269, 20, 20, 1425, 1231, 151, -269, - 204, 1425, 1425, 1425, 1425, -269, -269, -269, -269, -269, - -269, -1, -269, -269, -269, -269, 6, 10, 11, 18, - 26, 102, -269, -269, -269, -269, -8, 7, -269, 22, - -269, -269, -269, 46, -269, -269, -269, 1425, 14, 1425, - 1425, 1425, -269, -269, 1062, 54, -269, -269, -269, -269, - -269, -269, -269, -39, -269, -269, -269, -269, -269, 1062, - 48, -269, 60, 20, 78, 1425, 43, -269, -269, 725, - 725, -269, 548, -269, 593, 1425, 20, 60, 82, 78, - -269, 1189, 20, 20, 1425, -269, -269, -269, -269, 767, - -269, -7, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, - 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, - 1425, 1311, 1425, -269, -269, -269, 241, 83, -269, 1349, - 111, 1425, 105, 20, 72, -269, 96, -269, 120, 60, - 100, -269, 461, 204, 1463, 127, 60, 60, 1425, 60, - 1425, 60, 1062, 156, -269, 72, 60, -269, 60, 134, - -269, -269, -269, 635, 150, 1425, -3, -269, 1062, 1387, - -269, 133, 140, -269, 143, 1425, 138, 144, -269, 148, - 1062, 149, 159, 319, 1145, 1104, 319, 77, 77, 77, - 77, 304, 304, 304, 304, 77, 175, 175, -269, -269, - -269, 1425, 809, 328, 1425, 1425, 1425, 1425, 1425, 1425, - 1425, 1425, -269, 1387, -269, 852, 169, -269, -269, 1062, - 20, 96, -269, 20, 1425, -269, 1425, -269, -269, -269, - -269, -269, 426, 38, -269, 200, -269, -269, -269, -269, - -269, -269, 725, -269, 725, -269, 217, 1425, 20, -269, - -269, -269, -269, -269, -269, 254, -269, 1425, 503, 1269, - 20, 1062, 184, -269, -269, 187, -269, 1425, 894, -269, - -7, 1425, -269, 1425, 1062, 1425, 319, 319, 77, 77, - 304, 304, 304, 304, 186, -269, -269, 242, -269, -269, - 1062, -269, 60, 60, 1425, 1062, 191, -269, 936, 181, - -269, 193, 60, 113, -269, 635, 233, 1425, 240, -269, - -269, 1425, 1062, 201, -269, 1062, 1062, 1062, -269, 1425, - 245, -269, -269, 682, 20, 1425, -269, -269, -269, -269, - -269, -269, 1425, 503, 1269, -269, 1425, 1062, 1425, 250, - -269, -269, 1425, -269, 503, -13, 978, 60, -269, 1425, - 1062, 1020, 1425, 197, 725, 60, -269, 205, 1425, -269, - 503, 1425, 1062, -269, 60, -269, -13, 503, 60, 1062, - -269, -269, 60, -269, -269 + 1, -342, -342, 29, 117, -342, 430, -342, 36, -342, + -342, -342, -342, 79, -342, 34, 34, 1388, 1235, 41, + -342, 285, 1388, 1388, 1388, 1388, -342, -342, -342, -342, + -342, -342, 35, -342, -342, -342, -342, 15, 22, 25, + 26, 31, -342, 117, -342, -342, -342, -342, -6, 7, + -342, 39, 19, -342, -342, -342, -37, -342, -342, -342, + 1388, 33, 1388, 1388, 1388, -342, -342, 1057, 8, -342, + -342, -342, -342, -342, -342, -342, -51, -342, -342, -342, + -342, -342, 1057, 69, -342, 72, 34, 89, 1388, 47, + -342, -342, 720, 720, -342, 543, -342, 588, 1388, 34, + 72, 80, 89, -342, 1184, 34, 34, 1388, -342, -342, + -342, -342, -342, 762, -342, -9, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1273, 1388, -342, -342, -342, + 241, 82, -342, 1312, 200, 1388, 104, 34, 59, -342, + 66, -342, 90, 72, 74, -342, 456, 285, 1426, 73, + 72, 72, 1388, 72, 1388, 72, 1057, 95, -342, 59, + 72, -342, 72, -342, -342, -342, 630, 120, 1388, -2, + -342, 1057, 1350, -342, 75, 81, -342, 102, 1388, 83, + 101, -342, 105, 1057, 98, 136, 334, 1140, 1099, 334, + 1451, 1451, 1451, 1451, 357, 357, 357, 357, 1451, 96, + 96, -342, -342, -342, 1388, 804, 116, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, -342, 1350, -342, 847, 112, + -342, -342, 1057, 34, 66, -342, 34, 1388, -342, 1388, + -342, -342, -342, -342, -342, 421, 37, -342, 201, -342, + -342, -342, -342, -342, -342, 720, -342, 720, -342, 173, + 1388, 34, -342, -342, 316, -342, 1388, 498, 1184, 34, + 1057, 138, -342, -342, 142, -342, 1388, 889, -342, -9, + 1388, -342, 1388, 1057, 1388, 334, 334, 1451, 1451, 357, + 357, 357, 357, 141, -342, -342, 190, -342, -342, 1057, + -342, 72, 72, 1388, 1057, 146, -342, 931, 93, -342, + 155, 72, 210, -342, 630, 195, 1388, 215, -342, -342, + 1388, 1057, 176, -342, 1057, 1057, 1057, -342, 1388, 225, + -342, -342, 677, 34, 1388, -342, -342, -342, -342, -342, + -342, 1388, 498, 1184, -342, 1388, 1057, 1388, 229, -342, + -342, 1388, -342, 498, 186, 973, 72, -342, 1388, 1057, + 1015, 1388, 177, 720, 72, -342, 179, 1388, -342, 498, + 1388, 1057, -342, 72, -342, 186, 498, 72, 1057, -342, + -342, 72, -342, -342 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -840,75 +838,75 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 7, 8, 18, 0, 0, 10, 0, 1, 2, 222, - 221, 4, 9, 3, 0, 0, 0, 0, 46, 66, - 0, 0, 0, 0, 0, 90, 11, 19, 20, 22, - 21, 57, 23, 24, 25, 12, 26, 27, 28, 29, - 30, 0, 6, 225, 33, 34, 0, 41, 42, 0, - 212, 213, 214, 194, 210, 208, 209, 0, 0, 0, - 0, 199, 159, 151, 40, 0, 197, 99, 100, 101, - 195, 149, 150, 103, 211, 102, 196, 96, 77, 98, - 0, 64, 157, 0, 57, 0, 75, 206, 207, 0, - 0, 84, 0, 87, 0, 0, 0, 157, 157, 57, - 5, 0, 0, 0, 0, 113, 109, 111, 112, 0, - 18, 161, 153, 0, 0, 0, 0, 0, 0, 0, + 7, 8, 18, 0, 0, 10, 0, 1, 0, 2, + 220, 219, 4, 9, 3, 0, 0, 0, 0, 45, + 65, 0, 0, 0, 0, 0, 89, 11, 19, 20, + 22, 21, 56, 23, 24, 25, 12, 26, 27, 28, + 29, 30, 218, 0, 6, 223, 32, 33, 0, 40, + 41, 0, 0, 212, 213, 214, 194, 210, 208, 209, + 0, 0, 0, 0, 199, 158, 150, 39, 0, 197, + 98, 99, 100, 195, 148, 149, 102, 211, 101, 196, + 95, 76, 97, 0, 63, 156, 0, 56, 0, 74, + 206, 207, 0, 0, 83, 0, 86, 0, 0, 0, + 156, 156, 56, 5, 0, 0, 0, 0, 193, 112, + 108, 110, 111, 0, 18, 160, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 94, 93, 95, 0, 0, 107, 0, - 0, 0, 0, 0, 0, 48, 47, 54, 0, 157, - 67, 68, 71, 0, 0, 0, 157, 157, 0, 157, - 0, 157, 91, 58, 49, 62, 157, 52, 157, 0, - 189, 190, 191, 32, 192, 0, 0, 43, 44, 145, - 198, 0, 165, 224, 0, 0, 0, 162, 163, 0, - 155, 0, 154, 127, 115, 114, 128, 130, 131, 121, - 122, 123, 124, 125, 126, 129, 116, 117, 118, 119, - 120, 0, 0, 104, 0, 0, 0, 0, 0, 0, - 0, 0, 106, 145, 169, 0, 204, 201, 202, 97, - 0, 65, 158, 0, 0, 50, 0, 72, 73, 70, - 74, 76, 194, 210, 78, 196, 215, 216, 79, 217, - 80, 81, 0, 82, 0, 85, 0, 0, 0, 53, - 51, 218, 219, 220, 31, 191, 193, 0, 0, 0, - 0, 144, 0, 147, 18, 143, 200, 0, 0, 160, - 0, 0, 152, 0, 141, 0, 138, 139, 132, 133, - 134, 135, 136, 137, 0, 203, 170, 171, 45, 55, - 56, 69, 157, 157, 0, 59, 63, 60, 0, 0, - 178, 184, 157, 0, 179, 0, 192, 0, 0, 110, - 146, 145, 167, 0, 164, 166, 156, 140, 108, 0, - 173, 83, 86, 0, 0, 0, 188, 187, 185, 35, - 180, 181, 0, 0, 0, 148, 0, 172, 0, 176, - 88, 89, 0, 61, 0, 0, 0, 157, 192, 0, - 168, 174, 0, 0, 0, 157, 182, 186, 0, 36, - 0, 0, 177, 205, 157, 38, 0, 0, 157, 175, - 92, 183, 157, 37, 39 + 0, 0, 0, 0, 0, 0, 0, 93, 92, 94, + 0, 0, 106, 0, 0, 0, 0, 0, 0, 47, + 46, 53, 0, 156, 66, 67, 70, 0, 0, 0, + 156, 156, 0, 156, 0, 156, 90, 57, 48, 61, + 156, 51, 156, 188, 189, 190, 31, 191, 0, 0, + 42, 43, 144, 198, 0, 164, 222, 0, 0, 0, + 161, 162, 0, 154, 0, 153, 126, 114, 113, 127, + 129, 130, 120, 121, 122, 123, 124, 125, 128, 115, + 116, 117, 118, 119, 0, 0, 103, 0, 0, 0, + 0, 0, 0, 0, 0, 105, 144, 168, 0, 204, + 201, 202, 96, 0, 64, 157, 0, 0, 49, 0, + 71, 72, 69, 73, 75, 194, 210, 77, 196, 215, + 216, 78, 217, 79, 80, 0, 81, 0, 84, 0, + 0, 0, 52, 50, 190, 192, 0, 0, 0, 0, + 143, 0, 146, 18, 142, 200, 0, 0, 159, 0, + 0, 151, 0, 140, 0, 137, 138, 131, 132, 133, + 134, 135, 136, 0, 203, 169, 170, 44, 54, 55, + 68, 156, 156, 0, 58, 62, 59, 0, 0, 177, + 183, 156, 0, 178, 0, 191, 0, 0, 109, 145, + 144, 166, 0, 163, 165, 155, 139, 107, 0, 172, + 82, 85, 0, 0, 0, 187, 186, 184, 34, 179, + 180, 0, 0, 0, 147, 0, 171, 0, 175, 87, + 88, 0, 60, 0, 0, 0, 156, 191, 0, 167, + 173, 0, 0, 0, 156, 181, 185, 0, 35, 0, + 0, 176, 205, 156, 37, 0, 0, 156, 174, 91, + 182, 156, 36, 38 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -269, 16, -269, -269, -269, -269, -109, -269, -269, -269, - -269, -269, -269, -269, -269, -269, 158, 232, -269, -269, - -269, 122, 34, -67, -269, -269, -269, 238, -269, -269, - -269, -269, 44, -269, -269, -269, -61, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - 57, -269, -269, -269, -269, -269, -269, -269, 58, -33, - -269, -269, -269, -269, -269, -269, -269, -63, -94, -269, - -269, -269, 9, -269, -269, -269, -269, -268, -269, -230, - -269, -74, -262, -269, -269, -269, -113, -269, -15, 135, - -269, -4, -269, -12 + -342, -5, -342, -342, -342, -342, -110, -342, -342, -342, + -342, -342, -342, -342, -342, -342, 133, 212, -342, -342, + -342, 99, 9, -86, -342, -342, -342, 217, -342, -342, + -342, -342, 16, -342, -342, -342, -65, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + 53, -342, -342, -342, -342, -342, -342, -342, 21, -66, + -342, -342, -342, -342, -342, -342, -342, -33, -136, -342, + -342, -342, -22, -342, -342, -342, -342, -341, -342, -255, + -342, -77, -263, -342, -342, -342, -121, -342, -14, 100, + -4, -342, -13 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 11, 12, 2, 4, 3, 5, 26, 6, 27, - 28, 44, 45, 29, 30, 47, 48, 82, 31, 83, - 32, 146, 147, 98, 306, 166, 258, 84, 143, 33, - 85, 150, 151, 239, 34, 35, 156, 36, 37, 91, - 38, 93, 39, 352, 40, 95, 256, 136, 78, 141, - 271, 65, 66, 223, 179, 67, 68, 69, 272, 273, - 274, 275, 70, 71, 112, 191, 192, 145, 72, 111, - 186, 187, 188, 226, 330, 349, 363, 311, 367, 312, - 355, 313, 175, 73, 110, 297, 86, 74, 75, 244, - 264, 76, 189, 148 + -1, 12, 13, 2, 4, 3, 5, 27, 6, 28, + 29, 46, 47, 30, 31, 49, 50, 85, 32, 86, + 33, 150, 151, 101, 305, 170, 261, 87, 147, 34, + 88, 154, 155, 242, 35, 36, 160, 37, 38, 94, + 39, 96, 40, 351, 41, 98, 259, 140, 81, 145, + 270, 68, 69, 226, 182, 70, 71, 72, 271, 272, + 273, 274, 73, 74, 116, 194, 195, 149, 75, 115, + 189, 190, 191, 229, 329, 348, 362, 310, 366, 311, + 354, 312, 178, 76, 114, 296, 89, 77, 78, 247, + 79, 192, 152 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -916,361 +914,357 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 13, 181, 46, 49, 101, 87, -13, 317, 13, 269, - -14, -15, 80, 96, 81, 310, 88, 149, -16, 9, - 10, 182, 183, 139, 7, 184, -17, 174, 42, 157, - 1, 159, 168, 161, 164, 167, 140, 13, -216, 240, - 241, -216, -216, -216, -216, -216, -216, -216, 43, 102, - 232, 170, 171, 172, 270, 185, 104, 100, -216, -216, - -216, -216, -216, -13, 103, -13, -216, -14, -15, -14, - -15, 232, 106, 64, 79, -16, 142, -16, 89, 90, - 92, 94, 359, -17, 163, -17, 235, 366, 144, 113, - 176, 49, 96, 250, 251, -216, 253, -216, 255, 266, - 153, -105, 8, 259, -105, 260, 9, 10, 381, 137, - 165, 222, 138, 357, 105, 116, 107, 108, 109, 230, - 121, 122, 123, 124, 365, 126, 127, 128, 129, 130, - 8, 41, 62, 132, 9, 10, 228, 87, 87, 227, - 378, 340, 152, 9, 10, 9, 10, 382, 88, 88, - 245, 249, 162, 233, 234, 246, 247, 236, 173, 9, - 10, 178, 261, 262, 80, 320, 81, 263, 267, 190, - 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, - 203, 204, 205, 206, 207, 208, 209, 210, 212, 213, - 257, 302, 276, 303, -223, 316, 225, 277, 229, 279, - -217, 280, 281, -217, -217, -217, -217, -217, -217, -217, - 336, 193, 282, 9, 10, 252, 283, 254, 298, 296, - -217, -217, -217, -217, -217, 128, 129, 130, -217, 50, - 51, 52, 268, 54, 55, 56, 9, 10, 304, 331, - 332, 266, 278, 319, 321, 328, 307, 329, 334, 339, - 338, 342, 344, 214, 348, 346, 362, -217, 318, -217, - 373, 177, 376, 97, 314, 231, -94, 299, 284, 99, - 358, 286, 287, 288, 289, 290, 291, 292, 293, 215, - 301, 294, 216, 217, 218, 219, 220, 221, 345, 324, - 248, 300, -94, 152, 369, -94, -94, -94, -94, -94, - -94, 0, 375, 374, 0, 337, 0, 0, 0, 341, - 0, 380, 0, 0, 305, 383, 0, 0, 0, 384, - 0, 0, 353, 0, 308, 0, 315, 14, 15, 16, - 17, 18, 19, 20, 322, 0, 0, 0, 325, 314, - 326, 0, 327, 0, 21, 22, 23, 24, 25, 0, - 314, 314, 126, 127, 128, 129, 130, 0, 0, 0, - 132, 333, 121, 122, 123, 124, 314, 126, 127, 128, - 129, 130, 314, 314, 343, 132, 126, 127, 128, 129, - 130, 0, 0, 0, 0, 0, 347, 0, 0, 0, - 0, 0, 354, 0, 0, 0, 0, 0, 0, 356, - 0, 315, 0, 360, 0, 361, 0, 0, 0, 364, - 0, 0, 0, 0, 0, 0, 370, 0, 0, 372, - 0, 0, 0, 0, 0, 377, -215, 0, 379, -215, - -215, -215, -215, -215, -215, -215, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, -215, -215, -215, -215, - -215, 0, 0, 0, -215, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 237, 238, 113, 0, 0, 0, 0, 0, 0, - 0, -105, 0, -215, -105, -215, 50, 51, 52, 0, - 54, 55, 56, 9, 10, 0, 0, 114, 115, 116, - 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, - 127, 128, 129, 130, 131, 113, 0, 132, 0, 0, - 309, 0, 0, 0, 0, 0, 0, 133, 134, 135, - 0, 310, 0, 0, 0, 9, 10, 0, 0, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 0, 0, 132, - 154, 158, 155, 0, 0, 0, 0, 170, 171, 265, - 134, 135, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 0, 0, 132, 154, 160, 155, 0, 0, - 0, 0, 0, 0, 133, 134, 135, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 113, 0, 132, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, - 134, 135, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 114, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 126, 127, 128, 129, 130, 131, 0, - 0, 132, 0, 0, 113, 0, 0, 0, 0, 170, - 171, 265, 134, 135, 350, 351, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 114, 115, - 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, 0, 154, 132, 155, - 0, 0, 0, 0, 0, 0, 0, 0, 133, 134, - 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 114, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 126, 127, 128, 129, 130, 131, 113, - 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 133, 134, 135, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, - 131, 113, 0, 132, 0, 0, 180, 0, 0, 0, - 0, 0, 0, 133, 134, 135, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 114, 115, 116, 117, 118, + 14, 153, 48, 51, 184, 316, 104, 90, 44, 14, + 268, 143, 235, 365, 1, -13, 172, 91, -104, 185, + 186, -104, -14, 187, 144, -15, -16, 177, 161, 7, + 163, -17, 165, 235, 380, 243, 244, -216, 103, 14, + -216, -216, -216, -216, -216, -216, -216, 108, 83, 99, + 84, 105, 42, 188, 83, 269, 84, -216, -216, -216, + -216, -216, 45, 141, 106, -216, 142, 168, 171, 42, + 67, 82, -13, 107, -13, 92, 93, 95, 97, -14, + 358, -14, -15, -16, -15, -16, 167, 356, -17, 8, + -17, 110, 179, 51, -216, 8, -216, 146, 364, 265, + 148, 249, 250, 99, 157, 10, 11, 9, 169, 8, + 225, 10, 11, 109, 377, 111, 112, 113, 233, 65, + 238, 381, 335, 236, 237, 10, 11, 253, 254, 260, + 256, 239, 258, 8, 275, -221, 43, 262, 266, 263, + 231, 156, 90, 90, 278, 9, 132, 133, 134, 10, + 11, 166, 91, 91, 248, 252, 276, 176, 279, 280, + 181, 281, 295, 319, 130, 131, 132, 133, 134, 193, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 210, 211, 212, 213, 215, 216, + 301, 315, 302, 282, 303, 328, 228, 318, 232, 320, + 327, -217, 8, 333, -217, -217, -217, -217, -217, -217, + -217, 196, 337, 341, 309, 255, 8, 257, 10, 11, + 297, -217, -217, -217, -217, -217, 8, 343, 230, -217, + 345, 267, 10, 11, 347, 361, 375, 265, 339, 180, + 372, 277, 10, 11, 100, 298, 234, 293, 306, 102, + 173, 174, 175, 217, 344, 300, 317, 323, -217, 251, + -217, 0, 0, 313, 0, 0, 357, 283, 330, 331, + 285, 286, 287, 288, 289, 290, 291, 292, 338, 218, + 0, 0, 219, 220, 221, 222, 223, 224, 0, 0, + 299, 0, 156, 0, 0, 0, 0, 0, 373, 0, + 0, 8, 0, 0, 336, 0, 0, 0, 340, 0, + 53, 54, 55, 304, 57, 58, 59, 10, 11, 307, + 352, 314, 0, 368, 0, 0, 0, 0, -93, 321, + 0, 374, 0, 324, 0, 325, 0, 326, 313, 0, + 379, 0, 0, 0, 382, 0, 0, 0, 383, 313, + 313, 0, 0, 0, -93, 0, 332, -93, -93, -93, + -93, -93, -93, 0, 0, 313, 0, 0, 0, 342, + 0, 313, 313, 0, 0, 0, 0, 125, 126, 127, + 128, 346, 130, 131, 132, 133, 134, 353, 0, 0, + 136, 0, 0, 0, 355, 0, 314, 0, 359, 0, + 360, 0, 0, 0, 363, 130, 131, 132, 133, 134, + 0, 369, 0, 136, 371, 0, 0, 0, 0, 0, + 376, -215, 0, 378, -215, -215, -215, -215, -215, -215, + -215, 0, 0, 15, 16, 17, 18, 19, 20, 21, + 0, -215, -215, -215, -215, -215, 0, 0, 0, -215, + 22, 23, 24, 25, 26, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 240, 241, 117, 0, + 0, 0, 8, 0, 0, 0, -104, 0, -215, -104, + -215, 53, 54, 55, 0, 57, 58, 59, 10, 11, + 0, 0, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 117, 0, 136, 0, 8, 308, 0, 0, 0, 0, + 0, 0, 137, 138, 139, 0, 309, 0, 0, 0, + 10, 11, 0, 0, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 0, 0, 136, 158, 162, 159, 0, 0, + 0, 0, 173, 174, 264, 138, 139, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, - 129, 130, 131, 285, 113, 132, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 133, 134, 135, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 114, 115, - 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, 113, 0, 132, 0, - 0, 0, 0, 0, 0, 295, 0, 0, 133, 134, - 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 126, 127, 128, 129, 130, 131, 113, 0, - 132, 0, 0, 0, 0, 0, 0, 323, 0, 0, - 133, 134, 135, 0, 335, 0, 0, 0, 0, 0, - 0, 0, 114, 115, 116, 117, 118, 119, 120, 121, + 129, 130, 131, 132, 133, 134, 135, 0, 0, 136, + 158, 164, 159, 0, 0, 0, 0, 0, 0, 137, + 138, 139, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 117, 0, 136, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 137, 138, 139, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, - 113, 0, 132, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 133, 134, 135, 0, 368, 0, 0, 0, - 0, 0, 0, 0, 114, 115, 116, 117, 118, 119, + 132, 133, 134, 135, 0, 0, 136, 0, 0, 117, + 0, 0, 0, 0, 173, 174, 264, 138, 139, 349, + 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 0, 158, 136, 159, 0, 0, 0, 0, 0, + 0, 0, 0, 137, 138, 139, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 117, 0, 136, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 137, 138, 139, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 113, 0, 132, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 133, 134, 135, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 114, 115, 116, 117, + 130, 131, 132, 133, 134, 135, 117, 0, 136, 0, + 0, 183, 0, 0, 0, 0, 0, 0, 137, 138, + 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, 113, 0, 132, 371, 0, 0, - 0, 0, 0, 0, 0, 0, 133, 134, 135, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 114, 115, - 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, 113, 0, 132, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 133, 134, - 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 114, 0, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 126, 127, 128, 129, 130, 113, 0, 0, - 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 133, 134, 135, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 126, 127, 128, 129, 130, 0, 0, - 0, 132, 0, 0, 0, 169, 0, 0, 0, 0, - 0, 133, 134, 135, 50, 51, 52, 53, 54, 55, - 56, 9, 10, 0, 57, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 58, 59, 60, 0, - 0, 0, 0, 0, 0, 0, 0, 61, 0, 62, - 77, 63, 0, 170, 171, 172, 50, 51, 52, 53, - 54, 55, 56, 9, 10, 0, 57, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 58, 59, - 60, 0, 0, 0, 0, 0, 0, 0, 0, 61, - 0, 62, 0, 63, 50, 51, 52, 53, 54, 55, - 56, 9, 10, 0, 57, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 58, 59, 60, 0, - 0, 0, 0, 0, 0, 0, 0, 61, 0, 62, - 0, 63, 0, 170, 171, 172, 50, 51, 52, 53, - 54, 55, 56, 9, 10, 0, 57, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 58, 59, - 60, 0, 0, 0, 0, 211, 0, 0, 0, 61, - 0, 62, 0, 63, 50, 51, 52, 53, 54, 55, - 56, 9, 10, 0, 57, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 58, 59, 60, 224, - 0, 0, 0, 0, 0, 0, 0, 61, 0, 62, - 0, 63, 50, 51, 52, 53, 54, 55, 56, 9, - 10, 0, 57, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 58, 59, 60, 0, 0, 0, - 0, 0, 0, 0, 0, 61, -142, 62, 0, 63, - 50, 51, 52, 53, 54, 55, 56, 9, 10, 0, - 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 58, 59, 60, 0, 0, 0, 0, 0, - 0, 0, 0, 61, 0, 62, 0, 63, 50, 51, - 52, 242, 243, 55, 56, 9, 10, 0, 57, 0, + 128, 129, 130, 131, 132, 133, 134, 135, 284, 117, + 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 137, 138, 139, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 117, 0, 136, 0, 0, 0, 0, 0, 0, + 294, 0, 0, 137, 138, 139, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 118, 119, 120, 121, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 117, 0, 136, 0, 0, 0, 0, + 0, 0, 322, 0, 0, 137, 138, 139, 0, 334, + 0, 0, 0, 0, 0, 0, 0, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 117, 0, 136, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 137, 138, 139, + 0, 367, 0, 0, 0, 0, 0, 0, 0, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 117, 0, 136, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, + 138, 139, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 117, + 0, 136, 370, 0, 0, 0, 0, 0, 0, 0, + 0, 137, 138, 139, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 117, 0, 136, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 137, 138, 139, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 118, 0, 120, 121, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 117, 0, 0, 136, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 137, 138, 139, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 0, 0, 0, 136, 0, 0, 0, + 52, 0, 0, 0, 0, 0, 137, 138, 139, 53, + 54, 55, 56, 57, 58, 59, 10, 11, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 58, 59, 60, 0, 0, 0, 0, 0, 0, 0, - 0, 61, 0, 62, 0, 63 + 0, 61, 62, 63, 0, 0, 0, 0, 0, 0, + 0, 0, 64, 0, 65, 0, 66, 0, 173, 174, + 175, 52, 0, 0, 80, 0, 0, 0, 0, 0, + 53, 54, 55, 56, 57, 58, 59, 10, 11, 0, + 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 61, 62, 63, 0, 0, 0, 0, 52, + 0, 0, 0, 64, 0, 65, 0, 66, 53, 54, + 55, 56, 57, 58, 59, 10, 11, 0, 60, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 61, 62, 63, 0, 0, 0, 0, 214, 52, 0, + 0, 64, 0, 65, 0, 66, 0, 53, 54, 55, + 56, 57, 58, 59, 10, 11, 0, 60, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, + 62, 63, 227, 0, 0, 0, 52, 0, 0, 0, + 64, 0, 65, 0, 66, 53, 54, 55, 56, 57, + 58, 59, 10, 11, 0, 60, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 61, 62, 63, + 0, 0, 0, 0, 52, 0, 0, 0, 64, -141, + 65, 0, 66, 53, 54, 55, 56, 57, 58, 59, + 10, 11, 0, 60, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 61, 62, 63, 0, 0, + 0, 0, 52, 0, 0, 0, 64, 0, 65, 0, + 66, 53, 54, 55, 245, 246, 58, 59, 10, 11, + 0, 60, 0, 117, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 61, 62, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 64, 0, 65, 0, 66, 120, + 0, 0, 0, 0, 125, 126, 127, 128, 0, 130, + 131, 132, 133, 134, 0, 0, 0, 136 }; static const yytype_int16 yycheck[] = { - 4, 110, 14, 15, 12, 20, 0, 269, 12, 12, - 0, 0, 13, 14, 15, 28, 20, 84, 0, 32, - 33, 28, 29, 62, 0, 32, 0, 101, 12, 90, - 13, 92, 99, 94, 97, 98, 75, 41, 0, 152, - 153, 3, 4, 5, 6, 7, 8, 9, 28, 57, - 144, 64, 65, 66, 57, 62, 34, 41, 20, 21, - 22, 23, 24, 57, 57, 59, 28, 57, 57, 59, - 59, 165, 58, 16, 17, 57, 28, 59, 21, 22, - 23, 24, 344, 57, 96, 59, 149, 355, 28, 12, - 102, 103, 14, 156, 157, 57, 159, 59, 161, 173, - 57, 55, 28, 166, 58, 168, 32, 33, 376, 55, - 28, 28, 58, 343, 57, 38, 59, 60, 61, 14, - 43, 44, 45, 46, 354, 48, 49, 50, 51, 52, - 28, 57, 60, 56, 32, 33, 140, 152, 153, 28, - 370, 28, 85, 32, 33, 32, 33, 377, 152, 153, - 154, 155, 95, 57, 34, 28, 29, 57, 101, 32, - 33, 104, 28, 29, 13, 274, 15, 33, 18, 112, - 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 34, 252, 59, 254, 54, 269, 139, 54, 141, 61, - 0, 57, 54, 3, 4, 5, 6, 7, 8, 9, - 29, 154, 63, 32, 33, 158, 57, 160, 230, 50, - 20, 21, 22, 23, 24, 50, 51, 52, 28, 25, - 26, 27, 175, 29, 30, 31, 32, 33, 21, 302, - 303, 315, 185, 59, 57, 59, 258, 5, 57, 312, - 57, 18, 12, 12, 9, 54, 6, 57, 270, 59, - 63, 103, 57, 31, 268, 143, 12, 233, 211, 31, - 344, 214, 215, 216, 217, 218, 219, 220, 221, 38, - 236, 223, 41, 42, 43, 44, 45, 46, 321, 280, - 155, 234, 38, 236, 357, 41, 42, 43, 44, 45, - 46, -1, 365, 364, -1, 309, -1, -1, -1, 313, - -1, 374, -1, -1, 257, 378, -1, -1, -1, 382, - -1, -1, 334, -1, 267, -1, 269, 3, 4, 5, - 6, 7, 8, 9, 277, -1, -1, -1, 281, 343, - 283, -1, 285, -1, 20, 21, 22, 23, 24, -1, - 354, 355, 48, 49, 50, 51, 52, -1, -1, -1, - 56, 304, 43, 44, 45, 46, 370, 48, 49, 50, - 51, 52, 376, 377, 317, 56, 48, 49, 50, 51, - 52, -1, -1, -1, -1, -1, 329, -1, -1, -1, - -1, -1, 335, -1, -1, -1, -1, -1, -1, 342, - -1, 344, -1, 346, -1, 348, -1, -1, -1, 352, - -1, -1, -1, -1, -1, -1, 359, -1, -1, 362, - -1, -1, -1, -1, -1, 368, 0, -1, 371, 3, - 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 20, 21, 22, 23, - 24, -1, -1, -1, 28, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 10, 11, 12, -1, -1, -1, -1, -1, -1, - -1, 55, -1, 57, 58, 59, 25, 26, 27, -1, - 29, 30, 31, 32, 33, -1, -1, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 12, -1, 56, -1, -1, - 17, -1, -1, -1, -1, -1, -1, 66, 67, 68, - -1, 28, -1, -1, -1, 32, 33, -1, -1, 36, - 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, - 47, 48, 49, 50, 51, 52, 53, -1, -1, 56, - 12, 13, 14, -1, -1, -1, -1, 64, 65, 66, - 67, 68, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, -1, -1, 56, 12, 13, 14, -1, -1, - -1, -1, -1, -1, 66, 67, 68, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 36, - 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 12, -1, 56, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 66, - 67, 68, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, -1, - -1, 56, -1, -1, 12, -1, -1, -1, -1, 64, - 65, 66, 67, 68, 22, 23, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, -1, 12, 56, 14, - -1, -1, -1, -1, -1, -1, -1, -1, 66, 67, - 68, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 12, - -1, 56, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 66, 67, 68, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 12, -1, 56, -1, -1, 59, -1, -1, -1, - -1, -1, -1, 66, 67, 68, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 12, 56, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 66, 67, 68, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 12, -1, 56, -1, - -1, -1, -1, -1, -1, 63, -1, -1, 66, 67, - 68, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, - 46, 47, 48, 49, 50, 51, 52, 53, 12, -1, - 56, -1, -1, -1, -1, -1, -1, 63, -1, -1, - 66, 67, 68, -1, 28, -1, -1, -1, -1, -1, + 4, 87, 15, 16, 114, 268, 12, 21, 13, 13, + 12, 62, 148, 354, 13, 0, 102, 21, 55, 28, + 29, 58, 0, 32, 75, 0, 0, 104, 93, 0, + 95, 0, 97, 169, 375, 156, 157, 0, 43, 43, + 3, 4, 5, 6, 7, 8, 9, 28, 13, 14, + 15, 57, 33, 62, 13, 57, 15, 20, 21, 22, + 23, 24, 28, 55, 57, 28, 58, 100, 101, 33, + 17, 18, 57, 34, 59, 22, 23, 24, 25, 57, + 343, 59, 57, 57, 59, 59, 99, 342, 57, 16, + 59, 58, 105, 106, 57, 16, 59, 28, 353, 176, + 28, 28, 29, 14, 57, 32, 33, 28, 28, 16, + 28, 32, 33, 60, 369, 62, 63, 64, 14, 60, + 153, 376, 29, 57, 34, 32, 33, 160, 161, 34, + 163, 57, 165, 16, 59, 54, 57, 170, 18, 172, + 144, 88, 156, 157, 61, 28, 50, 51, 52, 32, + 33, 98, 156, 157, 158, 159, 54, 104, 57, 54, + 107, 63, 50, 273, 48, 49, 50, 51, 52, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 255, 268, 257, 57, 21, 5, 143, 59, 145, 57, + 59, 0, 16, 57, 3, 4, 5, 6, 7, 8, + 9, 158, 57, 18, 28, 162, 16, 164, 32, 33, + 233, 20, 21, 22, 23, 24, 16, 12, 28, 28, + 54, 178, 32, 33, 9, 6, 57, 314, 28, 106, + 63, 188, 32, 33, 32, 236, 147, 226, 261, 32, + 64, 65, 66, 12, 320, 239, 269, 279, 57, 159, + 59, -1, -1, 267, -1, -1, 343, 214, 301, 302, + 217, 218, 219, 220, 221, 222, 223, 224, 311, 38, + -1, -1, 41, 42, 43, 44, 45, 46, -1, -1, + 237, -1, 239, -1, -1, -1, -1, -1, 363, -1, + -1, 16, -1, -1, 308, -1, -1, -1, 312, -1, + 25, 26, 27, 260, 29, 30, 31, 32, 33, 266, + 333, 268, -1, 356, -1, -1, -1, -1, 12, 276, + -1, 364, -1, 280, -1, 282, -1, 284, 342, -1, + 373, -1, -1, -1, 377, -1, -1, -1, 381, 353, + 354, -1, -1, -1, 38, -1, 303, 41, 42, 43, + 44, 45, 46, -1, -1, 369, -1, -1, -1, 316, + -1, 375, 376, -1, -1, -1, -1, 43, 44, 45, + 46, 328, 48, 49, 50, 51, 52, 334, -1, -1, + 56, -1, -1, -1, 341, -1, 343, -1, 345, -1, + 347, -1, -1, -1, 351, 48, 49, 50, 51, 52, + -1, 358, -1, 56, 361, -1, -1, -1, -1, -1, + 367, 0, -1, 370, 3, 4, 5, 6, 7, 8, + 9, -1, -1, 3, 4, 5, 6, 7, 8, 9, + -1, 20, 21, 22, 23, 24, -1, -1, -1, 28, + 20, 21, 22, 23, 24, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 10, 11, 12, -1, + -1, -1, 16, -1, -1, -1, 55, -1, 57, 58, + 59, 25, 26, 27, -1, 29, 30, 31, 32, 33, -1, -1, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - 12, -1, 56, -1, -1, -1, -1, -1, -1, -1, + 12, -1, 56, -1, 16, 17, -1, -1, -1, -1, -1, -1, 66, 67, 68, -1, 28, -1, -1, -1, + 32, 33, -1, -1, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, -1, -1, 56, 12, 13, 14, -1, -1, + -1, -1, 64, 65, 66, 67, 68, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, -1, -1, 56, + 12, 13, 14, -1, -1, -1, -1, -1, -1, 66, + 67, 68, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 12, -1, 56, -1, -1, -1, -1, -1, -1, -1, -1, -1, 66, 67, 68, -1, -1, -1, -1, -1, -1, -1, -1, -1, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 12, -1, 56, 57, -1, -1, + 50, 51, 52, 53, -1, -1, 56, -1, -1, 12, + -1, -1, -1, -1, 64, 65, 66, 67, 68, 22, + 23, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, -1, 12, 56, 14, -1, -1, -1, -1, -1, + -1, -1, -1, 66, 67, 68, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 12, -1, 56, -1, -1, -1, -1, -1, -1, -1, -1, -1, 66, 67, 68, -1, -1, -1, -1, -1, -1, -1, -1, -1, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 12, -1, 56, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 66, 67, + -1, 59, -1, -1, -1, -1, -1, -1, 66, 67, 68, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 36, -1, 38, 39, 40, 41, 42, 43, 44, 45, - 46, 47, 48, 49, 50, 51, 52, 12, -1, -1, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 12, 56, -1, -1, -1, -1, -1, -1, -1, -1, -1, 66, 67, 68, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, -1, -1, - -1, 56, -1, -1, -1, 16, -1, -1, -1, -1, - -1, 66, 67, 68, 25, 26, 27, 28, 29, 30, - 31, 32, 33, -1, 35, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 47, 48, 49, -1, - -1, -1, -1, -1, -1, -1, -1, 58, -1, 60, - 19, 62, -1, 64, 65, 66, 25, 26, 27, 28, - 29, 30, 31, 32, 33, -1, 35, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 47, 48, - 49, -1, -1, -1, -1, -1, -1, -1, -1, 58, - -1, 60, -1, 62, 25, 26, 27, 28, 29, 30, - 31, 32, 33, -1, 35, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 47, 48, 49, -1, - -1, -1, -1, -1, -1, -1, -1, 58, -1, 60, - -1, 62, -1, 64, 65, 66, 25, 26, 27, 28, - 29, 30, 31, 32, 33, -1, 35, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 47, 48, - 49, -1, -1, -1, -1, 54, -1, -1, -1, 58, - -1, 60, -1, 62, 25, 26, 27, 28, 29, 30, - 31, 32, 33, -1, 35, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 47, 48, 49, 50, - -1, -1, -1, -1, -1, -1, -1, 58, -1, 60, - -1, 62, 25, 26, 27, 28, 29, 30, 31, 32, - 33, -1, 35, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 47, 48, 49, -1, -1, -1, - -1, -1, -1, -1, -1, 58, 59, 60, -1, 62, + -1, -1, -1, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 12, -1, 56, -1, -1, -1, -1, -1, -1, + 63, -1, -1, 66, 67, 68, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 12, -1, 56, -1, -1, -1, -1, + -1, -1, 63, -1, -1, 66, 67, 68, -1, 28, + -1, -1, -1, -1, -1, -1, -1, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 12, -1, 56, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 66, 67, 68, + -1, 28, -1, -1, -1, -1, -1, -1, -1, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 12, -1, 56, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 66, + 67, 68, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 12, + -1, 56, 57, -1, -1, -1, -1, -1, -1, -1, + -1, 66, 67, 68, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 12, -1, 56, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 66, 67, 68, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 36, -1, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 12, -1, -1, 56, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 66, 67, 68, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, -1, -1, -1, 56, -1, -1, -1, + 16, -1, -1, -1, -1, -1, 66, 67, 68, 25, + 26, 27, 28, 29, 30, 31, 32, 33, -1, 35, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 47, 48, 49, -1, -1, -1, -1, -1, -1, + -1, -1, 58, -1, 60, -1, 62, -1, 64, 65, + 66, 16, -1, -1, 19, -1, -1, -1, -1, -1, 25, 26, 27, 28, 29, 30, 31, 32, 33, -1, 35, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 47, 48, 49, -1, -1, -1, -1, -1, + -1, -1, 47, 48, 49, -1, -1, -1, -1, 16, -1, -1, -1, 58, -1, 60, -1, 62, 25, 26, 27, 28, 29, 30, 31, 32, 33, -1, 35, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 47, 48, 49, -1, -1, -1, -1, -1, -1, -1, - -1, 58, -1, 60, -1, 62 + 47, 48, 49, -1, -1, -1, -1, 54, 16, -1, + -1, 58, -1, 60, -1, 62, -1, 25, 26, 27, + 28, 29, 30, 31, 32, 33, -1, 35, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 47, + 48, 49, 50, -1, -1, -1, 16, -1, -1, -1, + 58, -1, 60, -1, 62, 25, 26, 27, 28, 29, + 30, 31, 32, 33, -1, 35, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 47, 48, 49, + -1, -1, -1, -1, 16, -1, -1, -1, 58, 59, + 60, -1, 62, 25, 26, 27, 28, 29, 30, 31, + 32, 33, -1, 35, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 47, 48, 49, -1, -1, + -1, -1, 16, -1, -1, -1, 58, -1, 60, -1, + 62, 25, 26, 27, 28, 29, 30, 31, 32, 33, + -1, 35, -1, 12, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 47, 48, 49, -1, -1, -1, -1, + -1, -1, -1, -1, 58, -1, 60, -1, 62, 38, + -1, -1, -1, -1, 43, 44, 45, 46, -1, 48, + 49, 50, 51, 52, -1, -1, -1, 56 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { - 0, 13, 79, 81, 80, 82, 84, 0, 28, 32, - 33, 77, 78, 167, 3, 4, 5, 6, 7, 8, - 9, 20, 21, 22, 23, 24, 83, 85, 86, 89, - 90, 94, 96, 105, 110, 111, 113, 114, 116, 118, - 120, 57, 77, 28, 87, 88, 169, 91, 92, 169, - 25, 26, 27, 28, 29, 30, 31, 35, 47, 48, - 49, 58, 60, 62, 126, 127, 128, 131, 132, 133, - 138, 139, 144, 159, 163, 164, 167, 19, 124, 126, - 13, 15, 93, 95, 103, 106, 162, 164, 167, 126, - 126, 115, 126, 117, 126, 121, 14, 93, 99, 103, - 77, 12, 57, 57, 34, 126, 58, 126, 126, 126, - 160, 145, 140, 12, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 56, 66, 67, 68, 123, 55, 58, 62, - 75, 125, 28, 104, 28, 143, 97, 98, 169, 99, - 107, 108, 126, 57, 12, 14, 112, 112, 13, 112, - 13, 112, 126, 169, 143, 28, 101, 143, 99, 16, - 64, 65, 66, 126, 157, 158, 169, 92, 126, 130, - 59, 82, 28, 29, 32, 62, 146, 147, 148, 168, - 126, 141, 142, 126, 126, 126, 126, 126, 126, 126, + 0, 13, 79, 81, 80, 82, 84, 0, 16, 28, + 32, 33, 77, 78, 166, 3, 4, 5, 6, 7, + 8, 9, 20, 21, 22, 23, 24, 83, 85, 86, + 89, 90, 94, 96, 105, 110, 111, 113, 114, 116, + 118, 120, 33, 57, 77, 28, 87, 88, 168, 91, + 92, 168, 16, 25, 26, 27, 28, 29, 30, 31, + 35, 47, 48, 49, 58, 60, 62, 126, 127, 128, + 131, 132, 133, 138, 139, 144, 159, 163, 164, 166, + 19, 124, 126, 13, 15, 93, 95, 103, 106, 162, + 164, 166, 126, 126, 115, 126, 117, 126, 121, 14, + 93, 99, 103, 77, 12, 57, 57, 34, 28, 126, + 58, 126, 126, 126, 160, 145, 140, 12, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 56, 66, 67, 68, + 123, 55, 58, 62, 75, 125, 28, 104, 28, 143, + 97, 98, 168, 99, 107, 108, 126, 57, 12, 14, + 112, 112, 13, 112, 13, 112, 126, 168, 143, 28, + 101, 143, 99, 64, 65, 66, 126, 157, 158, 168, + 92, 126, 130, 59, 82, 28, 29, 32, 62, 146, + 147, 148, 167, 126, 141, 142, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, - 126, 54, 126, 126, 12, 38, 41, 42, 43, 44, - 45, 46, 28, 129, 50, 126, 149, 28, 167, 126, - 14, 97, 144, 57, 34, 143, 57, 10, 11, 109, - 162, 162, 28, 29, 165, 167, 28, 29, 165, 167, - 143, 143, 126, 143, 126, 143, 122, 34, 102, 143, - 143, 28, 29, 33, 166, 66, 157, 18, 126, 12, - 57, 126, 134, 135, 136, 137, 59, 54, 126, 61, - 57, 54, 63, 57, 126, 54, 126, 126, 126, 126, - 126, 126, 126, 126, 134, 63, 50, 161, 169, 98, - 126, 108, 112, 112, 21, 126, 100, 169, 126, 17, - 28, 153, 155, 157, 167, 126, 157, 158, 169, 59, - 82, 57, 126, 63, 148, 126, 126, 126, 59, 5, - 150, 143, 143, 126, 57, 28, 29, 167, 57, 143, - 28, 167, 18, 126, 12, 135, 54, 126, 9, 151, - 22, 23, 119, 169, 126, 156, 126, 155, 157, 158, - 126, 126, 6, 152, 126, 155, 153, 154, 28, 143, - 126, 57, 126, 63, 112, 143, 57, 126, 155, 126, - 143, 153, 155, 143, 143 + 126, 126, 126, 126, 54, 126, 126, 12, 38, 41, + 42, 43, 44, 45, 46, 28, 129, 50, 126, 149, + 28, 166, 126, 14, 97, 144, 57, 34, 143, 57, + 10, 11, 109, 162, 162, 28, 29, 165, 166, 28, + 29, 165, 166, 143, 143, 126, 143, 126, 143, 122, + 34, 102, 143, 143, 66, 157, 18, 126, 12, 57, + 126, 134, 135, 136, 137, 59, 54, 126, 61, 57, + 54, 63, 57, 126, 54, 126, 126, 126, 126, 126, + 126, 126, 126, 134, 63, 50, 161, 168, 98, 126, + 108, 112, 112, 21, 126, 100, 168, 126, 17, 28, + 153, 155, 157, 166, 126, 157, 158, 168, 59, 82, + 57, 126, 63, 148, 126, 126, 126, 59, 5, 150, + 143, 143, 126, 57, 28, 29, 166, 57, 143, 28, + 166, 18, 126, 12, 135, 54, 126, 9, 151, 22, + 23, 119, 168, 126, 156, 126, 155, 157, 158, 126, + 126, 6, 152, 126, 155, 153, 154, 28, 143, 126, + 57, 126, 63, 112, 143, 57, 126, 155, 126, 143, + 153, 155, 143, 143 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ @@ -1279,26 +1273,26 @@ static const yytype_uint8 yyr1[] = 0, 76, 77, 77, 78, 78, 78, 79, 80, 79, 81, 82, 83, 83, 83, 83, 83, 83, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 86, 86, 86, 86, 87, 87, 87, 88, 88, - 89, 90, 91, 91, 92, 93, 95, 94, 96, 96, - 96, 96, 96, 96, 97, 97, 98, 99, 99, 99, - 100, 100, 102, 101, 104, 103, 106, 105, 107, 107, - 108, 109, 109, 109, 109, 110, 110, 111, 112, 112, - 113, 114, 115, 115, 116, 117, 117, 118, 119, 119, - 121, 122, 120, 123, 123, 123, 125, 124, 124, 126, - 126, 126, 126, 126, 126, 127, 127, 129, 128, 130, - 128, 131, 131, 131, 132, 132, 132, 132, 132, 132, + 85, 86, 86, 86, 87, 87, 87, 88, 88, 89, + 90, 91, 91, 92, 93, 95, 94, 96, 96, 96, + 96, 96, 96, 97, 97, 98, 99, 99, 99, 100, + 100, 102, 101, 104, 103, 106, 105, 107, 107, 108, + 109, 109, 109, 109, 110, 110, 111, 112, 112, 113, + 114, 115, 115, 116, 117, 117, 118, 119, 119, 121, + 122, 120, 123, 123, 123, 125, 124, 124, 126, 126, + 126, 126, 126, 126, 127, 127, 129, 128, 130, 128, + 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 133, 133, 134, 134, 135, 136, 135, 137, 137, 138, - 138, 140, 139, 141, 141, 142, 142, 143, 143, 145, - 144, 146, 146, 147, 147, 148, 148, 148, 148, 149, - 149, 150, 150, 151, 151, 151, 152, 152, 153, 153, - 153, 153, 154, 154, 155, 156, 155, 155, 155, 157, - 157, 157, 158, 158, 159, 159, 159, 159, 159, 160, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 133, + 133, 134, 134, 135, 136, 135, 137, 137, 138, 138, + 140, 139, 141, 141, 142, 142, 143, 143, 145, 144, + 146, 146, 147, 147, 148, 148, 148, 148, 149, 149, + 150, 150, 151, 151, 151, 152, 152, 153, 153, 153, + 153, 154, 154, 155, 156, 155, 155, 155, 157, 157, + 157, 158, 158, 159, 159, 159, 159, 159, 159, 160, 159, 159, 159, 159, 161, 159, 162, 162, 163, 163, 164, 164, 164, 164, 164, 165, 165, 165, 166, 166, - 166, 167, 167, 168, 168, 169 + 166, 167, 167, 168 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -1307,26 +1301,26 @@ static const yytype_uint8 yyr2[] = 0, 2, 1, 1, 1, 3, 2, 0, 0, 3, 2, 2, 1, 1, 1, 1, 1, 1, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 5, 4, 2, 2, 6, 8, 10, 9, 11, - 2, 2, 1, 3, 3, 4, 0, 3, 3, 3, - 4, 4, 3, 4, 1, 3, 3, 0, 2, 4, - 1, 3, 0, 3, 0, 3, 0, 3, 1, 3, - 2, 0, 1, 1, 1, 2, 4, 2, 2, 2, - 4, 4, 3, 5, 2, 3, 5, 2, 1, 1, - 0, 0, 10, 1, 1, 1, 0, 3, 1, 1, - 1, 1, 1, 1, 3, 1, 3, 0, 5, 0, - 5, 2, 2, 2, 3, 3, 3, 3, 3, 3, + 1, 4, 2, 2, 6, 8, 10, 9, 11, 2, + 2, 1, 3, 3, 4, 0, 3, 3, 3, 4, + 4, 3, 4, 1, 3, 3, 0, 2, 4, 1, + 3, 0, 3, 0, 3, 0, 3, 1, 3, 2, + 0, 1, 1, 1, 2, 4, 2, 2, 2, 4, + 4, 3, 5, 2, 3, 5, 2, 1, 1, 0, + 0, 10, 1, 1, 1, 0, 3, 1, 1, 1, + 1, 1, 1, 3, 1, 3, 0, 5, 0, 5, + 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, - 5, 4, 0, 1, 1, 0, 2, 1, 3, 1, - 1, 0, 4, 0, 1, 1, 3, 0, 2, 0, - 4, 0, 1, 1, 3, 1, 3, 3, 5, 1, - 2, 0, 2, 0, 2, 4, 0, 2, 1, 1, - 2, 2, 1, 3, 1, 0, 4, 2, 2, 1, - 1, 1, 1, 2, 1, 1, 1, 1, 3, 0, + 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, + 4, 0, 1, 1, 0, 2, 1, 3, 1, 1, + 0, 4, 0, 1, 1, 3, 0, 2, 0, 4, + 0, 1, 1, 3, 1, 3, 3, 5, 1, 2, + 0, 2, 0, 2, 4, 0, 2, 1, 1, 2, + 2, 1, 3, 1, 0, 4, 2, 2, 1, 1, + 1, 1, 2, 2, 1, 1, 1, 1, 3, 0, 4, 3, 3, 4, 0, 8, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1 + 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, + 1, 1, 1, 1 }; @@ -2104,15 +2098,15 @@ yyreduce: switch (yyn) { case 2: -#line 346 "Aql/grammar.y" /* yacc.c:1646 */ +#line 343 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeValueString((yyvsp[0].strval).value, (yyvsp[0].strval).length); } -#line 2112 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2106 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 3: -#line 349 "Aql/grammar.y" /* yacc.c:1646 */ +#line 346 "Aql/grammar.y" /* yacc.c:1646 */ { char const* p = (yyvsp[0].node)->getStringValue(); size_t const len = (yyvsp[0].node)->getStringLength(); @@ -2123,282 +2117,271 @@ yyreduce: (yyval.node) = (yyvsp[0].node); } -#line 2127 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2121 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 4: -#line 362 "Aql/grammar.y" /* yacc.c:1646 */ +#line 359 "Aql/grammar.y" /* yacc.c:1646 */ { auto node = static_cast(parser->peekStack()); node->addMember((yyvsp[0].node)); } -#line 2136 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2130 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 5: -#line 366 "Aql/grammar.y" /* yacc.c:1646 */ +#line 363 "Aql/grammar.y" /* yacc.c:1646 */ { auto node = static_cast(parser->peekStack()); node->addMember((yyvsp[0].node)); } -#line 2145 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2139 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 6: -#line 370 "Aql/grammar.y" /* yacc.c:1646 */ +#line 367 "Aql/grammar.y" /* yacc.c:1646 */ { auto node = static_cast(parser->peekStack()); node->addMember((yyvsp[0].node)); } -#line 2154 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2148 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 7: -#line 377 "Aql/grammar.y" /* yacc.c:1646 */ +#line 374 "Aql/grammar.y" /* yacc.c:1646 */ { } -#line 2161 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2155 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 8: -#line 379 "Aql/grammar.y" /* yacc.c:1646 */ +#line 376 "Aql/grammar.y" /* yacc.c:1646 */ { auto node = parser->ast()->createNodeArray(); parser->pushStack(node); } -#line 2170 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2164 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 9: -#line 382 "Aql/grammar.y" /* yacc.c:1646 */ +#line 379 "Aql/grammar.y" /* yacc.c:1646 */ { auto node = static_cast(parser->popStack()); auto withNode = parser->ast()->createNodeWithCollections(node); parser->ast()->addOperation(withNode); } -#line 2180 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2174 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 10: -#line 390 "Aql/grammar.y" /* yacc.c:1646 */ +#line 387 "Aql/grammar.y" /* yacc.c:1646 */ { } -#line 2187 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2181 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 11: -#line 395 "Aql/grammar.y" /* yacc.c:1646 */ +#line 392 "Aql/grammar.y" /* yacc.c:1646 */ { } -#line 2194 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2188 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 12: -#line 400 "Aql/grammar.y" /* yacc.c:1646 */ +#line 397 "Aql/grammar.y" /* yacc.c:1646 */ { } -#line 2201 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2195 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 13: +#line 399 "Aql/grammar.y" /* yacc.c:1646 */ + { + parser->ast()->scopes()->endNested(); + } +#line 2203 "Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 14: #line 402 "Aql/grammar.y" /* yacc.c:1646 */ { parser->ast()->scopes()->endNested(); } -#line 2209 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2211 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 14: + case 15: #line 405 "Aql/grammar.y" /* yacc.c:1646 */ { parser->ast()->scopes()->endNested(); } -#line 2217 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2219 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 15: + case 16: #line 408 "Aql/grammar.y" /* yacc.c:1646 */ { parser->ast()->scopes()->endNested(); } -#line 2225 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2227 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 16: + case 17: #line 411 "Aql/grammar.y" /* yacc.c:1646 */ { parser->ast()->scopes()->endNested(); } -#line 2233 "Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 17: -#line 414 "Aql/grammar.y" /* yacc.c:1646 */ - { - parser->ast()->scopes()->endNested(); - } -#line 2241 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2235 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 18: -#line 420 "Aql/grammar.y" /* yacc.c:1646 */ +#line 417 "Aql/grammar.y" /* yacc.c:1646 */ { } -#line 2248 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2242 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 19: -#line 422 "Aql/grammar.y" /* yacc.c:1646 */ +#line 419 "Aql/grammar.y" /* yacc.c:1646 */ { } -#line 2255 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2249 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 20: -#line 427 "Aql/grammar.y" /* yacc.c:1646 */ +#line 424 "Aql/grammar.y" /* yacc.c:1646 */ { } -#line 2262 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2256 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 21: -#line 429 "Aql/grammar.y" /* yacc.c:1646 */ +#line 426 "Aql/grammar.y" /* yacc.c:1646 */ { } -#line 2269 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2263 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 22: -#line 431 "Aql/grammar.y" /* yacc.c:1646 */ +#line 428 "Aql/grammar.y" /* yacc.c:1646 */ { } -#line 2276 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2270 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 23: -#line 433 "Aql/grammar.y" /* yacc.c:1646 */ +#line 430 "Aql/grammar.y" /* yacc.c:1646 */ { } -#line 2283 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2277 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 24: -#line 435 "Aql/grammar.y" /* yacc.c:1646 */ +#line 432 "Aql/grammar.y" /* yacc.c:1646 */ { } -#line 2290 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2284 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 25: -#line 437 "Aql/grammar.y" /* yacc.c:1646 */ +#line 434 "Aql/grammar.y" /* yacc.c:1646 */ { } -#line 2297 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2291 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 26: -#line 439 "Aql/grammar.y" /* yacc.c:1646 */ +#line 436 "Aql/grammar.y" /* yacc.c:1646 */ { } -#line 2304 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2298 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 27: -#line 441 "Aql/grammar.y" /* yacc.c:1646 */ +#line 438 "Aql/grammar.y" /* yacc.c:1646 */ { } -#line 2311 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2305 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 28: -#line 443 "Aql/grammar.y" /* yacc.c:1646 */ +#line 440 "Aql/grammar.y" /* yacc.c:1646 */ { } -#line 2318 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2312 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 29: -#line 445 "Aql/grammar.y" /* yacc.c:1646 */ +#line 442 "Aql/grammar.y" /* yacc.c:1646 */ { } -#line 2325 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2319 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 30: -#line 447 "Aql/grammar.y" /* yacc.c:1646 */ +#line 444 "Aql/grammar.y" /* yacc.c:1646 */ { } -#line 2332 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2326 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 31: -#line 452 "Aql/grammar.y" /* yacc.c:1646 */ - { - parser->ast()->scopes()->start(arangodb::aql::AQL_SCOPE_FOR); - - auto node = parser->ast()->createNodeFor((yyvsp[-3].strval).value, (yyvsp[-3].strval).length, (yyvsp[0].node), true); - parser->ast()->addOperation(node); - } -#line 2343 "Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 32: -#line 458 "Aql/grammar.y" /* yacc.c:1646 */ +#line 449 "Aql/grammar.y" /* yacc.c:1646 */ { parser->ast()->scopes()->start(arangodb::aql::AQL_SCOPE_FOR); auto node = parser->ast()->createNodeFor((yyvsp[-2].strval).value, (yyvsp[-2].strval).length, (yyvsp[0].node), true); parser->ast()->addOperation(node); } -#line 2354 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2337 "Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 32: +#line 455 "Aql/grammar.y" /* yacc.c:1646 */ + { + } +#line 2344 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 33: -#line 464 "Aql/grammar.y" /* yacc.c:1646 */ +#line 457 "Aql/grammar.y" /* yacc.c:1646 */ { } -#line 2361 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2351 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 34: -#line 466 "Aql/grammar.y" /* yacc.c:1646 */ - { - } -#line 2368 "Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 35: -#line 471 "Aql/grammar.y" /* yacc.c:1646 */ +#line 462 "Aql/grammar.y" /* yacc.c:1646 */ { parser->ast()->scopes()->start(arangodb::aql::AQL_SCOPE_FOR); auto node = parser->ast()->createNodeTraversal((yyvsp[-5].strval).value, (yyvsp[-5].strval).length, (yyvsp[-3].node), (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2378 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2361 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 36: -#line 476 "Aql/grammar.y" /* yacc.c:1646 */ + case 35: +#line 467 "Aql/grammar.y" /* yacc.c:1646 */ { parser->ast()->scopes()->start(arangodb::aql::AQL_SCOPE_FOR); auto node = parser->ast()->createNodeTraversal((yyvsp[-7].strval).value, (yyvsp[-7].strval).length, (yyvsp[-5].strval).value, (yyvsp[-5].strval).length, (yyvsp[-3].node), (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2388 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2371 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 37: -#line 481 "Aql/grammar.y" /* yacc.c:1646 */ + case 36: +#line 472 "Aql/grammar.y" /* yacc.c:1646 */ { parser->ast()->scopes()->start(arangodb::aql::AQL_SCOPE_FOR); auto node = parser->ast()->createNodeTraversal((yyvsp[-9].strval).value, (yyvsp[-9].strval).length, (yyvsp[-7].strval).value, (yyvsp[-7].strval).length, (yyvsp[-5].strval).value, (yyvsp[-5].strval).length, (yyvsp[-3].node), (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2398 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2381 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 38: -#line 489 "Aql/grammar.y" /* yacc.c:1646 */ + case 37: +#line 480 "Aql/grammar.y" /* yacc.c:1646 */ { if (!TRI_CaseEqualString((yyvsp[-3].strval).value, "TO")) { parser->registerParseError(TRI_ERROR_QUERY_PARSE, "unexpected qualifier '%s', expecting 'TO'", (yyvsp[-3].strval).value, yylloc.first_line, yylloc.first_column); @@ -2407,11 +2390,11 @@ yyreduce: auto node = parser->ast()->createNodeShortestPath((yyvsp[-8].strval).value, (yyvsp[-8].strval).length, (yyvsp[-6].intval), (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2411 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2394 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 39: -#line 497 "Aql/grammar.y" /* yacc.c:1646 */ + case 38: +#line 488 "Aql/grammar.y" /* yacc.c:1646 */ { if (!TRI_CaseEqualString((yyvsp[-3].strval).value, "TO")) { parser->registerParseError(TRI_ERROR_QUERY_PARSE, "unexpected qualifier '%s', expecting 'TO'", (yyvsp[-3].strval).value, yylloc.first_line, yylloc.first_column); @@ -2420,51 +2403,51 @@ yyreduce: auto node = parser->ast()->createNodeShortestPath((yyvsp[-10].strval).value, (yyvsp[-10].strval).length, (yyvsp[-8].strval).value, (yyvsp[-8].strval).length, (yyvsp[-6].intval), (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2424 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2407 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 40: -#line 508 "Aql/grammar.y" /* yacc.c:1646 */ + case 39: +#line 499 "Aql/grammar.y" /* yacc.c:1646 */ { // operand is a reference. can use it directly auto node = parser->ast()->createNodeFilter((yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2434 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2417 "Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 40: +#line 507 "Aql/grammar.y" /* yacc.c:1646 */ + { + } +#line 2424 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 41: -#line 516 "Aql/grammar.y" /* yacc.c:1646 */ +#line 512 "Aql/grammar.y" /* yacc.c:1646 */ { } -#line 2441 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2431 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 42: -#line 521 "Aql/grammar.y" /* yacc.c:1646 */ +#line 514 "Aql/grammar.y" /* yacc.c:1646 */ { } -#line 2448 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2438 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 43: -#line 523 "Aql/grammar.y" /* yacc.c:1646 */ - { - } -#line 2455 "Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 44: -#line 528 "Aql/grammar.y" /* yacc.c:1646 */ +#line 519 "Aql/grammar.y" /* yacc.c:1646 */ { auto node = parser->ast()->createNodeLet((yyvsp[-2].strval).value, (yyvsp[-2].strval).length, (yyvsp[0].node), true); parser->ast()->addOperation(node); } -#line 2464 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2447 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 45: -#line 535 "Aql/grammar.y" /* yacc.c:1646 */ + case 44: +#line 526 "Aql/grammar.y" /* yacc.c:1646 */ { if (! TRI_CaseEqualString((yyvsp[-2].strval).value, "COUNT")) { parser->registerParseError(TRI_ERROR_QUERY_PARSE, "unexpected qualifier '%s', expecting 'COUNT'", (yyvsp[-2].strval).value, yylloc.first_line, yylloc.first_column); @@ -2472,20 +2455,20 @@ yyreduce: (yyval.strval) = (yyvsp[0].strval); } -#line 2476 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2459 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 46: -#line 545 "Aql/grammar.y" /* yacc.c:1646 */ + case 45: +#line 536 "Aql/grammar.y" /* yacc.c:1646 */ { auto node = parser->ast()->createNodeArray(); parser->pushStack(node); } -#line 2485 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2468 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 47: -#line 548 "Aql/grammar.y" /* yacc.c:1646 */ + case 46: +#line 539 "Aql/grammar.y" /* yacc.c:1646 */ { auto list = static_cast(parser->popStack()); @@ -2494,11 +2477,11 @@ yyreduce: } (yyval.node) = list; } -#line 2498 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2481 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 48: -#line 559 "Aql/grammar.y" /* yacc.c:1646 */ + case 47: +#line 550 "Aql/grammar.y" /* yacc.c:1646 */ { /* COLLECT WITH COUNT INTO var OPTIONS ... */ auto scopes = parser->ast()->scopes(); @@ -2508,11 +2491,11 @@ yyreduce: auto node = parser->ast()->createNodeCollectCount(parser->ast()->createNodeArray(), (yyvsp[-1].strval).value, (yyvsp[-1].strval).length, (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2512 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2495 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 49: -#line 568 "Aql/grammar.y" /* yacc.c:1646 */ + case 48: +#line 559 "Aql/grammar.y" /* yacc.c:1646 */ { /* COLLECT var = expr WITH COUNT INTO var OPTIONS ... */ auto scopes = parser->ast()->scopes(); @@ -2524,11 +2507,11 @@ yyreduce: auto node = parser->ast()->createNodeCollectCount((yyvsp[-2].node), (yyvsp[-1].strval).value, (yyvsp[-1].strval).length, (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2528 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2511 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 50: -#line 579 "Aql/grammar.y" /* yacc.c:1646 */ + case 49: +#line 570 "Aql/grammar.y" /* yacc.c:1646 */ { /* AGGREGATE var = expr OPTIONS ... */ auto scopes = parser->ast()->scopes(); @@ -2559,11 +2542,11 @@ yyreduce: auto node = parser->ast()->createNodeCollect(parser->ast()->createNodeArray(), (yyvsp[-2].node), into, intoExpression, nullptr, (yyvsp[-1].node)); parser->ast()->addOperation(node); } -#line 2563 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2546 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 51: -#line 609 "Aql/grammar.y" /* yacc.c:1646 */ + case 50: +#line 600 "Aql/grammar.y" /* yacc.c:1646 */ { /* COLLECT var = expr AGGREGATE var = expr OPTIONS ... */ auto scopes = parser->ast()->scopes(); @@ -2631,11 +2614,11 @@ yyreduce: auto node = parser->ast()->createNodeCollect((yyvsp[-3].node), (yyvsp[-2].node), into, intoExpression, nullptr, (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2635 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2618 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 52: -#line 676 "Aql/grammar.y" /* yacc.c:1646 */ + case 51: +#line 667 "Aql/grammar.y" /* yacc.c:1646 */ { /* COLLECT var = expr INTO var OPTIONS ... */ auto scopes = parser->ast()->scopes(); @@ -2661,11 +2644,11 @@ yyreduce: auto node = parser->ast()->createNodeCollect((yyvsp[-2].node), parser->ast()->createNodeArray(), into, intoExpression, nullptr, (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2665 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2648 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 53: -#line 701 "Aql/grammar.y" /* yacc.c:1646 */ + case 52: +#line 692 "Aql/grammar.y" /* yacc.c:1646 */ { /* COLLECT var = expr INTO var KEEP ... OPTIONS ... */ auto scopes = parser->ast()->scopes(); @@ -2696,61 +2679,80 @@ yyreduce: auto node = parser->ast()->createNodeCollect((yyvsp[-3].node), parser->ast()->createNodeArray(), into, intoExpression, (yyvsp[-1].node), (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2700 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2683 "Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 53: +#line 725 "Aql/grammar.y" /* yacc.c:1646 */ + { + } +#line 2690 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 54: -#line 734 "Aql/grammar.y" /* yacc.c:1646 */ +#line 727 "Aql/grammar.y" /* yacc.c:1646 */ { } -#line 2707 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2697 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 55: -#line 736 "Aql/grammar.y" /* yacc.c:1646 */ - { - } -#line 2714 "Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 56: -#line 741 "Aql/grammar.y" /* yacc.c:1646 */ +#line 732 "Aql/grammar.y" /* yacc.c:1646 */ { auto node = parser->ast()->createNodeAssign((yyvsp[-2].strval).value, (yyvsp[-2].strval).length, (yyvsp[0].node)); parser->pushArrayElement(node); } -#line 2723 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2706 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 57: -#line 748 "Aql/grammar.y" /* yacc.c:1646 */ + case 56: +#line 739 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = nullptr; } -#line 2731 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2714 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 58: -#line 751 "Aql/grammar.y" /* yacc.c:1646 */ + case 57: +#line 742 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeValueString((yyvsp[0].strval).value, (yyvsp[0].strval).length); } -#line 2739 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2722 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 59: -#line 754 "Aql/grammar.y" /* yacc.c:1646 */ + case 58: +#line 745 "Aql/grammar.y" /* yacc.c:1646 */ { auto node = parser->ast()->createNodeArray(); node->addMember(parser->ast()->createNodeValueString((yyvsp[-2].strval).value, (yyvsp[-2].strval).length)); node->addMember((yyvsp[0].node)); (yyval.node) = node; } -#line 2750 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2733 "Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 59: +#line 754 "Aql/grammar.y" /* yacc.c:1646 */ + { + if (! parser->ast()->scopes()->existsVariable((yyvsp[0].strval).value, (yyvsp[0].strval).length)) { + parser->registerParseError(TRI_ERROR_QUERY_PARSE, "use of unknown variable '%s' for KEEP", (yyvsp[0].strval).value, yylloc.first_line, yylloc.first_column); + } + + auto node = parser->ast()->createNodeReference((yyvsp[0].strval).value, (yyvsp[0].strval).length); + if (node == nullptr) { + ABORT_OOM + } + + // indicate the this node is a reference to the variable name, not the variable value + node->setFlag(FLAG_KEEP_VARIABLENAME); + parser->pushArrayElement(node); + } +#line 2752 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 60: -#line 763 "Aql/grammar.y" /* yacc.c:1646 */ +#line 768 "Aql/grammar.y" /* yacc.c:1646 */ { if (! parser->ast()->scopes()->existsVariable((yyvsp[0].strval).value, (yyvsp[0].strval).length)) { parser->registerParseError(TRI_ERROR_QUERY_PARSE, "use of unknown variable '%s' for KEEP", (yyvsp[0].strval).value, yylloc.first_line, yylloc.first_column); @@ -2765,30 +2767,11 @@ yyreduce: node->setFlag(FLAG_KEEP_VARIABLENAME); parser->pushArrayElement(node); } -#line 2769 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2771 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 61: -#line 777 "Aql/grammar.y" /* yacc.c:1646 */ - { - if (! parser->ast()->scopes()->existsVariable((yyvsp[0].strval).value, (yyvsp[0].strval).length)) { - parser->registerParseError(TRI_ERROR_QUERY_PARSE, "use of unknown variable '%s' for KEEP", (yyvsp[0].strval).value, yylloc.first_line, yylloc.first_column); - } - - auto node = parser->ast()->createNodeReference((yyvsp[0].strval).value, (yyvsp[0].strval).length); - if (node == nullptr) { - ABORT_OOM - } - - // indicate the this node is a reference to the variable name, not the variable value - node->setFlag(FLAG_KEEP_VARIABLENAME); - parser->pushArrayElement(node); - } -#line 2788 "Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 62: -#line 794 "Aql/grammar.y" /* yacc.c:1646 */ +#line 785 "Aql/grammar.y" /* yacc.c:1646 */ { if (! TRI_CaseEqualString((yyvsp[0].strval).value, "KEEP")) { parser->registerParseError(TRI_ERROR_QUERY_PARSE, "unexpected qualifier '%s', expecting 'KEEP'", (yyvsp[0].strval).value, yylloc.first_line, yylloc.first_column); @@ -2797,158 +2780,158 @@ yyreduce: auto node = parser->ast()->createNodeArray(); parser->pushStack(node); } -#line 2801 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2784 "Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 62: +#line 792 "Aql/grammar.y" /* yacc.c:1646 */ + { + auto list = static_cast(parser->popStack()); + (yyval.node) = list; + } +#line 2793 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 63: -#line 801 "Aql/grammar.y" /* yacc.c:1646 */ +#line 799 "Aql/grammar.y" /* yacc.c:1646 */ { - auto list = static_cast(parser->popStack()); - (yyval.node) = list; + auto node = parser->ast()->createNodeArray(); + parser->pushStack(node); } -#line 2810 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2802 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 64: -#line 808 "Aql/grammar.y" /* yacc.c:1646 */ - { - auto node = parser->ast()->createNodeArray(); - parser->pushStack(node); - } -#line 2819 "Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 65: -#line 811 "Aql/grammar.y" /* yacc.c:1646 */ +#line 802 "Aql/grammar.y" /* yacc.c:1646 */ { auto list = static_cast(parser->popStack()); (yyval.node) = list; } -#line 2828 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2811 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 66: -#line 818 "Aql/grammar.y" /* yacc.c:1646 */ + case 65: +#line 809 "Aql/grammar.y" /* yacc.c:1646 */ { auto node = parser->ast()->createNodeArray(); parser->pushStack(node); } -#line 2837 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2820 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 67: -#line 821 "Aql/grammar.y" /* yacc.c:1646 */ + case 66: +#line 812 "Aql/grammar.y" /* yacc.c:1646 */ { auto list = static_cast(parser->popStack()); auto node = parser->ast()->createNodeSort(list); parser->ast()->addOperation(node); } -#line 2847 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2830 "Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 67: +#line 820 "Aql/grammar.y" /* yacc.c:1646 */ + { + parser->pushArrayElement((yyvsp[0].node)); + } +#line 2838 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 68: -#line 829 "Aql/grammar.y" /* yacc.c:1646 */ +#line 823 "Aql/grammar.y" /* yacc.c:1646 */ { parser->pushArrayElement((yyvsp[0].node)); } -#line 2855 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2846 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 69: -#line 832 "Aql/grammar.y" /* yacc.c:1646 */ - { - parser->pushArrayElement((yyvsp[0].node)); - } -#line 2863 "Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 70: -#line 838 "Aql/grammar.y" /* yacc.c:1646 */ +#line 829 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeSortElement((yyvsp[-1].node), (yyvsp[0].node)); } -#line 2871 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2854 "Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 70: +#line 835 "Aql/grammar.y" /* yacc.c:1646 */ + { + (yyval.node) = parser->ast()->createNodeValueBool(true); + } +#line 2862 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 71: -#line 844 "Aql/grammar.y" /* yacc.c:1646 */ +#line 838 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeValueBool(true); } -#line 2879 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2870 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 72: -#line 847 "Aql/grammar.y" /* yacc.c:1646 */ - { - (yyval.node) = parser->ast()->createNodeValueBool(true); - } -#line 2887 "Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 73: -#line 850 "Aql/grammar.y" /* yacc.c:1646 */ +#line 841 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeValueBool(false); } -#line 2895 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2878 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 74: -#line 853 "Aql/grammar.y" /* yacc.c:1646 */ + case 73: +#line 844 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = (yyvsp[0].node); } -#line 2903 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2886 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 75: -#line 859 "Aql/grammar.y" /* yacc.c:1646 */ + case 74: +#line 850 "Aql/grammar.y" /* yacc.c:1646 */ { auto offset = parser->ast()->createNodeValueInt(0); auto node = parser->ast()->createNodeLimit(offset, (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2913 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2896 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 76: -#line 864 "Aql/grammar.y" /* yacc.c:1646 */ + case 75: +#line 855 "Aql/grammar.y" /* yacc.c:1646 */ { auto node = parser->ast()->createNodeLimit((yyvsp[-2].node), (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2922 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2905 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 77: -#line 871 "Aql/grammar.y" /* yacc.c:1646 */ + case 76: +#line 862 "Aql/grammar.y" /* yacc.c:1646 */ { auto node = parser->ast()->createNodeReturn((yyvsp[0].node)); parser->ast()->addOperation(node); parser->ast()->scopes()->endNested(); } -#line 2932 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2915 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 78: -#line 879 "Aql/grammar.y" /* yacc.c:1646 */ + case 77: +#line 870 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = (yyvsp[0].node); } -#line 2940 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2923 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 79: -#line 882 "Aql/grammar.y" /* yacc.c:1646 */ + case 78: +#line 873 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = (yyvsp[0].node); } -#line 2948 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2931 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 80: -#line 888 "Aql/grammar.y" /* yacc.c:1646 */ + case 79: +#line 879 "Aql/grammar.y" /* yacc.c:1646 */ { if (! parser->configureWriteQuery((yyvsp[-1].node), (yyvsp[0].node))) { YYABORT; @@ -2956,11 +2939,11 @@ yyreduce: auto node = parser->ast()->createNodeRemove((yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2960 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2943 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 81: -#line 898 "Aql/grammar.y" /* yacc.c:1646 */ + case 80: +#line 889 "Aql/grammar.y" /* yacc.c:1646 */ { if (! parser->configureWriteQuery((yyvsp[-1].node), (yyvsp[0].node))) { YYABORT; @@ -2968,11 +2951,11 @@ yyreduce: auto node = parser->ast()->createNodeInsert((yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2972 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2955 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 82: -#line 908 "Aql/grammar.y" /* yacc.c:1646 */ + case 81: +#line 899 "Aql/grammar.y" /* yacc.c:1646 */ { if (! parser->configureWriteQuery((yyvsp[-1].node), (yyvsp[0].node))) { YYABORT; @@ -2981,11 +2964,11 @@ yyreduce: AstNode* node = parser->ast()->createNodeUpdate(nullptr, (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2985 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2968 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 83: -#line 916 "Aql/grammar.y" /* yacc.c:1646 */ + case 82: +#line 907 "Aql/grammar.y" /* yacc.c:1646 */ { if (! parser->configureWriteQuery((yyvsp[-1].node), (yyvsp[0].node))) { YYABORT; @@ -2994,18 +2977,18 @@ yyreduce: AstNode* node = parser->ast()->createNodeUpdate((yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2998 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2981 "Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 83: +#line 918 "Aql/grammar.y" /* yacc.c:1646 */ + { + } +#line 2988 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 84: -#line 927 "Aql/grammar.y" /* yacc.c:1646 */ - { - } -#line 3005 "Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 85: -#line 932 "Aql/grammar.y" /* yacc.c:1646 */ +#line 923 "Aql/grammar.y" /* yacc.c:1646 */ { if (! parser->configureWriteQuery((yyvsp[-1].node), (yyvsp[0].node))) { YYABORT; @@ -3014,11 +2997,11 @@ yyreduce: AstNode* node = parser->ast()->createNodeReplace(nullptr, (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 3018 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3001 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 86: -#line 940 "Aql/grammar.y" /* yacc.c:1646 */ + case 85: +#line 931 "Aql/grammar.y" /* yacc.c:1646 */ { if (! parser->configureWriteQuery((yyvsp[-1].node), (yyvsp[0].node))) { YYABORT; @@ -3027,44 +3010,44 @@ yyreduce: AstNode* node = parser->ast()->createNodeReplace((yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 3031 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3014 "Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 86: +#line 942 "Aql/grammar.y" /* yacc.c:1646 */ + { + } +#line 3021 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 87: -#line 951 "Aql/grammar.y" /* yacc.c:1646 */ - { - } -#line 3038 "Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 88: -#line 956 "Aql/grammar.y" /* yacc.c:1646 */ +#line 947 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.intval) = static_cast(NODE_TYPE_UPDATE); } -#line 3046 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3029 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 89: -#line 959 "Aql/grammar.y" /* yacc.c:1646 */ + case 88: +#line 950 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.intval) = static_cast(NODE_TYPE_REPLACE); } -#line 3054 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3037 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 90: -#line 965 "Aql/grammar.y" /* yacc.c:1646 */ + case 89: +#line 956 "Aql/grammar.y" /* yacc.c:1646 */ { // reserve a variable named "$OLD", we might need it in the update expression // and in a later return thing parser->pushStack(parser->ast()->createNodeVariable(TRI_CHAR_LENGTH_PAIR(Variable::NAME_OLD), true)); } -#line 3064 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3047 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 91: -#line 969 "Aql/grammar.y" /* yacc.c:1646 */ + case 90: +#line 960 "Aql/grammar.y" /* yacc.c:1646 */ { AstNode* variableNode = static_cast(parser->popStack()); @@ -3104,11 +3087,11 @@ yyreduce: parser->pushStack(forNode); } -#line 3108 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3091 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 92: -#line 1007 "Aql/grammar.y" /* yacc.c:1646 */ + case 91: +#line 998 "Aql/grammar.y" /* yacc.c:1646 */ { AstNode* forNode = static_cast(parser->popStack()); forNode->changeMember(1, (yyvsp[-1].node)); @@ -3120,35 +3103,35 @@ yyreduce: auto node = parser->ast()->createNodeUpsert(static_cast((yyvsp[-3].intval)), parser->ast()->createNodeReference(TRI_CHAR_LENGTH_PAIR(Variable::NAME_OLD)), (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 3124 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3107 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 93: -#line 1021 "Aql/grammar.y" /* yacc.c:1646 */ + case 92: +#line 1012 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeQuantifier(Quantifier::ALL); } -#line 3132 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3115 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 94: -#line 1024 "Aql/grammar.y" /* yacc.c:1646 */ + case 93: +#line 1015 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeQuantifier(Quantifier::ANY); } -#line 3140 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3123 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 95: -#line 1027 "Aql/grammar.y" /* yacc.c:1646 */ + case 94: +#line 1018 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeQuantifier(Quantifier::NONE); } -#line 3148 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3131 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 96: -#line 1033 "Aql/grammar.y" /* yacc.c:1646 */ + case 95: +#line 1024 "Aql/grammar.y" /* yacc.c:1646 */ { auto const scopeType = parser->ast()->scopes()->type(); @@ -3157,83 +3140,83 @@ yyreduce: parser->registerParseError(TRI_ERROR_QUERY_PARSE, "cannot use DISTINCT modifier on top-level query element", yylloc.first_line, yylloc.first_column); } } -#line 3161 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3144 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 97: -#line 1040 "Aql/grammar.y" /* yacc.c:1646 */ + case 96: +#line 1031 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeDistinct((yyvsp[0].node)); } -#line 3169 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3152 "Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 97: +#line 1034 "Aql/grammar.y" /* yacc.c:1646 */ + { + (yyval.node) = (yyvsp[0].node); + } +#line 3160 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 98: +#line 1040 "Aql/grammar.y" /* yacc.c:1646 */ + { + (yyval.node) = (yyvsp[0].node); + } +#line 3168 "Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 99: #line 1043 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = (yyvsp[0].node); } -#line 3177 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3176 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 99: + case 100: +#line 1046 "Aql/grammar.y" /* yacc.c:1646 */ + { + (yyval.node) = (yyvsp[0].node); + } +#line 3184 "Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 101: #line 1049 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = (yyvsp[0].node); } -#line 3185 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3192 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 100: + case 102: #line 1052 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = (yyvsp[0].node); } -#line 3193 "Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 101: -#line 1055 "Aql/grammar.y" /* yacc.c:1646 */ - { - (yyval.node) = (yyvsp[0].node); - } -#line 3201 "Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 102: -#line 1058 "Aql/grammar.y" /* yacc.c:1646 */ - { - (yyval.node) = (yyvsp[0].node); - } -#line 3209 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3200 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 103: -#line 1061 "Aql/grammar.y" /* yacc.c:1646 */ - { - (yyval.node) = (yyvsp[0].node); - } -#line 3217 "Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 104: -#line 1064 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1055 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeRange((yyvsp[-2].node), (yyvsp[0].node)); } -#line 3225 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3208 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 105: -#line 1070 "Aql/grammar.y" /* yacc.c:1646 */ + case 104: +#line 1061 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.strval) = (yyvsp[0].strval); } -#line 3233 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3216 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 106: -#line 1073 "Aql/grammar.y" /* yacc.c:1646 */ + case 105: +#line 1064 "Aql/grammar.y" /* yacc.c:1646 */ { std::string temp((yyvsp[-2].strval).value, (yyvsp[-2].strval).length); temp.append("::"); @@ -3247,215 +3230,215 @@ yyreduce: (yyval.strval).value = p; (yyval.strval).length = temp.size(); } -#line 3251 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3234 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 107: -#line 1089 "Aql/grammar.y" /* yacc.c:1646 */ + case 106: +#line 1080 "Aql/grammar.y" /* yacc.c:1646 */ { parser->pushStack((yyvsp[-1].strval).value); auto node = parser->ast()->createNodeArray(); parser->pushStack(node); } -#line 3262 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3245 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 108: -#line 1094 "Aql/grammar.y" /* yacc.c:1646 */ + case 107: +#line 1085 "Aql/grammar.y" /* yacc.c:1646 */ { auto list = static_cast(parser->popStack()); (yyval.node) = parser->ast()->createNodeFunctionCall(static_cast(parser->popStack()), list); } -#line 3271 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3254 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 109: -#line 1098 "Aql/grammar.y" /* yacc.c:1646 */ + case 108: +#line 1089 "Aql/grammar.y" /* yacc.c:1646 */ { auto node = parser->ast()->createNodeArray(); parser->pushStack(node); } -#line 3280 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3263 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 110: -#line 1101 "Aql/grammar.y" /* yacc.c:1646 */ + case 109: +#line 1092 "Aql/grammar.y" /* yacc.c:1646 */ { auto list = static_cast(parser->popStack()); (yyval.node) = parser->ast()->createNodeFunctionCall(TRI_CHAR_LENGTH_PAIR("LIKE"), list); } -#line 3289 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3272 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 111: -#line 1108 "Aql/grammar.y" /* yacc.c:1646 */ + case 110: +#line 1099 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeUnaryOperator(NODE_TYPE_OPERATOR_UNARY_PLUS, (yyvsp[0].node)); } -#line 3297 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3280 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 112: -#line 1111 "Aql/grammar.y" /* yacc.c:1646 */ + case 111: +#line 1102 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeUnaryOperator(NODE_TYPE_OPERATOR_UNARY_MINUS, (yyvsp[0].node)); } -#line 3305 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3288 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 113: -#line 1114 "Aql/grammar.y" /* yacc.c:1646 */ + case 112: +#line 1105 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeUnaryOperator(NODE_TYPE_OPERATOR_UNARY_NOT, (yyvsp[0].node)); } -#line 3313 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3296 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 114: -#line 1120 "Aql/grammar.y" /* yacc.c:1646 */ + case 113: +#line 1111 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_OR, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3321 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3304 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 115: -#line 1123 "Aql/grammar.y" /* yacc.c:1646 */ + case 114: +#line 1114 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_AND, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3329 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3312 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 116: -#line 1126 "Aql/grammar.y" /* yacc.c:1646 */ + case 115: +#line 1117 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_PLUS, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3337 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3320 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 117: -#line 1129 "Aql/grammar.y" /* yacc.c:1646 */ + case 116: +#line 1120 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_MINUS, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3345 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3328 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 118: -#line 1132 "Aql/grammar.y" /* yacc.c:1646 */ + case 117: +#line 1123 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_TIMES, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3353 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3336 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 119: -#line 1135 "Aql/grammar.y" /* yacc.c:1646 */ + case 118: +#line 1126 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_DIV, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3361 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3344 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 120: -#line 1138 "Aql/grammar.y" /* yacc.c:1646 */ + case 119: +#line 1129 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_MOD, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3369 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3352 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 121: -#line 1141 "Aql/grammar.y" /* yacc.c:1646 */ + case 120: +#line 1132 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_EQ, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3377 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3360 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 122: -#line 1144 "Aql/grammar.y" /* yacc.c:1646 */ + case 121: +#line 1135 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_NE, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3385 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3368 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 123: -#line 1147 "Aql/grammar.y" /* yacc.c:1646 */ + case 122: +#line 1138 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_LT, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3393 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3376 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 124: -#line 1150 "Aql/grammar.y" /* yacc.c:1646 */ + case 123: +#line 1141 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_GT, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3401 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3384 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 125: -#line 1153 "Aql/grammar.y" /* yacc.c:1646 */ + case 124: +#line 1144 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_LE, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3409 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3392 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 126: -#line 1156 "Aql/grammar.y" /* yacc.c:1646 */ + case 125: +#line 1147 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_GE, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3417 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3400 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 127: -#line 1159 "Aql/grammar.y" /* yacc.c:1646 */ + case 126: +#line 1150 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_IN, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3425 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3408 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 128: -#line 1162 "Aql/grammar.y" /* yacc.c:1646 */ + case 127: +#line 1153 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_NIN, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3433 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3416 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 129: -#line 1165 "Aql/grammar.y" /* yacc.c:1646 */ + case 128: +#line 1156 "Aql/grammar.y" /* yacc.c:1646 */ { AstNode* arguments = parser->ast()->createNodeArray(2); arguments->addMember((yyvsp[-2].node)); arguments->addMember((yyvsp[0].node)); (yyval.node) = parser->ast()->createNodeFunctionCall(TRI_CHAR_LENGTH_PAIR("LIKE"), arguments); } -#line 3444 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3427 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 130: -#line 1171 "Aql/grammar.y" /* yacc.c:1646 */ + case 129: +#line 1162 "Aql/grammar.y" /* yacc.c:1646 */ { AstNode* arguments = parser->ast()->createNodeArray(2); arguments->addMember((yyvsp[-2].node)); arguments->addMember((yyvsp[0].node)); (yyval.node) = parser->ast()->createNodeFunctionCall(TRI_CHAR_LENGTH_PAIR("REGEX_TEST"), arguments); } -#line 3455 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3438 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 131: -#line 1177 "Aql/grammar.y" /* yacc.c:1646 */ + case 130: +#line 1168 "Aql/grammar.y" /* yacc.c:1646 */ { AstNode* arguments = parser->ast()->createNodeArray(2); arguments->addMember((yyvsp[-2].node)); @@ -3463,122 +3446,122 @@ yyreduce: AstNode* node = parser->ast()->createNodeFunctionCall(TRI_CHAR_LENGTH_PAIR("REGEX_TEST"), arguments); (yyval.node) = parser->ast()->createNodeUnaryOperator(NODE_TYPE_OPERATOR_UNARY_NOT, node); } -#line 3467 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3450 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 132: -#line 1184 "Aql/grammar.y" /* yacc.c:1646 */ + case 131: +#line 1175 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryArrayOperator(NODE_TYPE_OPERATOR_BINARY_ARRAY_EQ, (yyvsp[-3].node), (yyvsp[0].node), (yyvsp[-2].node)); } -#line 3475 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3458 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 133: -#line 1187 "Aql/grammar.y" /* yacc.c:1646 */ + case 132: +#line 1178 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryArrayOperator(NODE_TYPE_OPERATOR_BINARY_ARRAY_NE, (yyvsp[-3].node), (yyvsp[0].node), (yyvsp[-2].node)); } -#line 3483 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3466 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 134: -#line 1190 "Aql/grammar.y" /* yacc.c:1646 */ + case 133: +#line 1181 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryArrayOperator(NODE_TYPE_OPERATOR_BINARY_ARRAY_LT, (yyvsp[-3].node), (yyvsp[0].node), (yyvsp[-2].node)); } -#line 3491 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3474 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 135: -#line 1193 "Aql/grammar.y" /* yacc.c:1646 */ + case 134: +#line 1184 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryArrayOperator(NODE_TYPE_OPERATOR_BINARY_ARRAY_GT, (yyvsp[-3].node), (yyvsp[0].node), (yyvsp[-2].node)); } -#line 3499 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3482 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 136: -#line 1196 "Aql/grammar.y" /* yacc.c:1646 */ + case 135: +#line 1187 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryArrayOperator(NODE_TYPE_OPERATOR_BINARY_ARRAY_LE, (yyvsp[-3].node), (yyvsp[0].node), (yyvsp[-2].node)); } -#line 3507 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3490 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 137: -#line 1199 "Aql/grammar.y" /* yacc.c:1646 */ + case 136: +#line 1190 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryArrayOperator(NODE_TYPE_OPERATOR_BINARY_ARRAY_GE, (yyvsp[-3].node), (yyvsp[0].node), (yyvsp[-2].node)); } -#line 3515 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3498 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 138: -#line 1202 "Aql/grammar.y" /* yacc.c:1646 */ + case 137: +#line 1193 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryArrayOperator(NODE_TYPE_OPERATOR_BINARY_ARRAY_IN, (yyvsp[-3].node), (yyvsp[0].node), (yyvsp[-2].node)); } -#line 3523 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3506 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 139: -#line 1205 "Aql/grammar.y" /* yacc.c:1646 */ + case 138: +#line 1196 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryArrayOperator(NODE_TYPE_OPERATOR_BINARY_ARRAY_NIN, (yyvsp[-3].node), (yyvsp[0].node), (yyvsp[-2].node)); } -#line 3531 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3514 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 140: -#line 1211 "Aql/grammar.y" /* yacc.c:1646 */ + case 139: +#line 1202 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeTernaryOperator((yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3539 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3522 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 141: -#line 1214 "Aql/grammar.y" /* yacc.c:1646 */ + case 140: +#line 1205 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeTernaryOperator((yyvsp[-3].node), (yyvsp[-3].node), (yyvsp[0].node)); } -#line 3547 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3530 "Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 141: +#line 1211 "Aql/grammar.y" /* yacc.c:1646 */ + { + } +#line 3537 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 142: -#line 1220 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1213 "Aql/grammar.y" /* yacc.c:1646 */ { } -#line 3554 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3544 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 143: -#line 1222 "Aql/grammar.y" /* yacc.c:1646 */ - { - } -#line 3561 "Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 144: -#line 1227 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1218 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = (yyvsp[0].node); } -#line 3569 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3552 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 145: -#line 1230 "Aql/grammar.y" /* yacc.c:1646 */ + case 144: +#line 1221 "Aql/grammar.y" /* yacc.c:1646 */ { parser->ast()->scopes()->start(arangodb::aql::AQL_SCOPE_SUBQUERY); parser->ast()->startSubQuery(); } -#line 3578 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3561 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 146: -#line 1233 "Aql/grammar.y" /* yacc.c:1646 */ + case 145: +#line 1224 "Aql/grammar.y" /* yacc.c:1646 */ { AstNode* node = parser->ast()->endSubQuery(); parser->ast()->scopes()->endCurrent(); @@ -3589,98 +3572,98 @@ yyreduce: (yyval.node) = parser->ast()->createNodeReference(variableName); } -#line 3593 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3576 "Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 146: +#line 1237 "Aql/grammar.y" /* yacc.c:1646 */ + { + parser->pushArrayElement((yyvsp[0].node)); + } +#line 3584 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 147: -#line 1246 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1240 "Aql/grammar.y" /* yacc.c:1646 */ { parser->pushArrayElement((yyvsp[0].node)); } -#line 3601 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3592 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 148: -#line 1249 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1246 "Aql/grammar.y" /* yacc.c:1646 */ { - parser->pushArrayElement((yyvsp[0].node)); + (yyval.node) = (yyvsp[0].node); } -#line 3609 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3600 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 149: -#line 1255 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1249 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = (yyvsp[0].node); } -#line 3617 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3608 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 150: -#line 1258 "Aql/grammar.y" /* yacc.c:1646 */ - { - (yyval.node) = (yyvsp[0].node); - } -#line 3625 "Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 151: -#line 1264 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1255 "Aql/grammar.y" /* yacc.c:1646 */ { auto node = parser->ast()->createNodeArray(); parser->pushStack(node); } -#line 3634 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3617 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 152: -#line 1267 "Aql/grammar.y" /* yacc.c:1646 */ + case 151: +#line 1258 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = static_cast(parser->popStack()); } -#line 3642 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3625 "Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 152: +#line 1264 "Aql/grammar.y" /* yacc.c:1646 */ + { + } +#line 3632 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 153: -#line 1273 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1266 "Aql/grammar.y" /* yacc.c:1646 */ { } -#line 3649 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3639 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 154: -#line 1275 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1271 "Aql/grammar.y" /* yacc.c:1646 */ { + parser->pushArrayElement((yyvsp[0].node)); } -#line 3656 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3647 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 155: -#line 1280 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1274 "Aql/grammar.y" /* yacc.c:1646 */ { parser->pushArrayElement((yyvsp[0].node)); } -#line 3664 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3655 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 156: -#line 1283 "Aql/grammar.y" /* yacc.c:1646 */ - { - parser->pushArrayElement((yyvsp[0].node)); - } -#line 3672 "Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 157: -#line 1289 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1280 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = nullptr; } -#line 3680 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3663 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 158: -#line 1292 "Aql/grammar.y" /* yacc.c:1646 */ + case 157: +#line 1283 "Aql/grammar.y" /* yacc.c:1646 */ { if ((yyvsp[0].node) == nullptr) { ABORT_OOM @@ -3692,56 +3675,56 @@ yyreduce: (yyval.node) = (yyvsp[0].node); } -#line 3696 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3679 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 159: -#line 1306 "Aql/grammar.y" /* yacc.c:1646 */ + case 158: +#line 1297 "Aql/grammar.y" /* yacc.c:1646 */ { auto node = parser->ast()->createNodeObject(); parser->pushStack(node); } -#line 3705 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3688 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 160: -#line 1309 "Aql/grammar.y" /* yacc.c:1646 */ + case 159: +#line 1300 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = static_cast(parser->popStack()); } -#line 3713 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3696 "Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 160: +#line 1306 "Aql/grammar.y" /* yacc.c:1646 */ + { + } +#line 3703 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 161: -#line 1315 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1308 "Aql/grammar.y" /* yacc.c:1646 */ { } -#line 3720 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3710 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 162: -#line 1317 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1313 "Aql/grammar.y" /* yacc.c:1646 */ { } -#line 3727 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3717 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 163: -#line 1322 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1315 "Aql/grammar.y" /* yacc.c:1646 */ { } -#line 3734 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3724 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 164: -#line 1324 "Aql/grammar.y" /* yacc.c:1646 */ - { - } -#line 3741 "Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 165: -#line 1329 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1320 "Aql/grammar.y" /* yacc.c:1646 */ { // attribute-name-only (comparable to JS enhanced object literals, e.g. { foo, bar }) auto ast = parser->ast(); @@ -3756,20 +3739,20 @@ yyreduce: auto node = ast->createNodeReference(variable); parser->pushObjectElement((yyvsp[0].strval).value, (yyvsp[0].strval).length, node); } -#line 3760 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3743 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 166: -#line 1343 "Aql/grammar.y" /* yacc.c:1646 */ + case 165: +#line 1334 "Aql/grammar.y" /* yacc.c:1646 */ { // attribute-name : attribute-value parser->pushObjectElement((yyvsp[-2].strval).value, (yyvsp[-2].strval).length, (yyvsp[0].node)); } -#line 3769 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3752 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 167: -#line 1347 "Aql/grammar.y" /* yacc.c:1646 */ + case 166: +#line 1338 "Aql/grammar.y" /* yacc.c:1646 */ { // bind-parameter : attribute-value if ((yyvsp[-2].strval).length < 1 || (yyvsp[-2].strval).value[0] == '@') { @@ -3779,230 +3762,243 @@ yyreduce: auto param = parser->ast()->createNodeParameter((yyvsp[-2].strval).value, (yyvsp[-2].strval).length); parser->pushObjectElement(param, (yyvsp[0].node)); } -#line 3783 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3766 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 168: -#line 1356 "Aql/grammar.y" /* yacc.c:1646 */ + case 167: +#line 1347 "Aql/grammar.y" /* yacc.c:1646 */ { // [ attribute-name-expression ] : attribute-value parser->pushObjectElement((yyvsp[-3].node), (yyvsp[0].node)); } -#line 3792 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3775 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 169: -#line 1363 "Aql/grammar.y" /* yacc.c:1646 */ + case 168: +#line 1354 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.intval) = 1; } -#line 3800 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3783 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 170: -#line 1366 "Aql/grammar.y" /* yacc.c:1646 */ + case 169: +#line 1357 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.intval) = (yyvsp[-1].intval) + 1; } -#line 3808 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3791 "Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 170: +#line 1363 "Aql/grammar.y" /* yacc.c:1646 */ + { + (yyval.node) = nullptr; + } +#line 3799 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 171: +#line 1366 "Aql/grammar.y" /* yacc.c:1646 */ + { + (yyval.node) = (yyvsp[0].node); + } +#line 3807 "Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 172: #line 1372 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = nullptr; } -#line 3816 "Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 172: -#line 1375 "Aql/grammar.y" /* yacc.c:1646 */ - { - (yyval.node) = (yyvsp[0].node); - } -#line 3824 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3815 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 173: -#line 1381 "Aql/grammar.y" /* yacc.c:1646 */ - { - (yyval.node) = nullptr; - } -#line 3832 "Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 174: -#line 1384 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1375 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeArrayLimit(nullptr, (yyvsp[0].node)); } -#line 3840 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3823 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 175: -#line 1387 "Aql/grammar.y" /* yacc.c:1646 */ + case 174: +#line 1378 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeArrayLimit((yyvsp[-2].node), (yyvsp[0].node)); } -#line 3848 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3831 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 176: -#line 1393 "Aql/grammar.y" /* yacc.c:1646 */ + case 175: +#line 1384 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = nullptr; } -#line 3856 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3839 "Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 176: +#line 1387 "Aql/grammar.y" /* yacc.c:1646 */ + { + (yyval.node) = (yyvsp[0].node); + } +#line 3847 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 177: +#line 1393 "Aql/grammar.y" /* yacc.c:1646 */ + { + (yyval.node) = parser->ast()->createNodeValueString((yyvsp[0].strval).value, (yyvsp[0].strval).length); + } +#line 3855 "Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 178: #line 1396 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = (yyvsp[0].node); } -#line 3864 "Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 178: -#line 1402 "Aql/grammar.y" /* yacc.c:1646 */ - { - (yyval.node) = parser->ast()->createNodeValueString((yyvsp[0].strval).value, (yyvsp[0].strval).length); - } -#line 3872 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3863 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 179: -#line 1405 "Aql/grammar.y" /* yacc.c:1646 */ - { - (yyval.node) = (yyvsp[0].node); - } -#line 3880 "Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 180: -#line 1408 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1399 "Aql/grammar.y" /* yacc.c:1646 */ { auto tmp = parser->ast()->createNodeValueString((yyvsp[0].strval).value, (yyvsp[0].strval).length); (yyval.node) = parser->ast()->createNodeCollectionDirection((yyvsp[-1].intval), tmp); } -#line 3889 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3872 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 181: -#line 1412 "Aql/grammar.y" /* yacc.c:1646 */ + case 180: +#line 1403 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeCollectionDirection((yyvsp[-1].intval), (yyvsp[0].node)); } -#line 3897 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3880 "Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 181: +#line 1409 "Aql/grammar.y" /* yacc.c:1646 */ + { + auto node = static_cast(parser->peekStack()); + node->addMember((yyvsp[0].node)); + } +#line 3889 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 182: -#line 1418 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1413 "Aql/grammar.y" /* yacc.c:1646 */ { auto node = static_cast(parser->peekStack()); node->addMember((yyvsp[0].node)); } -#line 3906 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3898 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 183: -#line 1422 "Aql/grammar.y" /* yacc.c:1646 */ - { - auto node = static_cast(parser->peekStack()); - node->addMember((yyvsp[0].node)); - } -#line 3915 "Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 184: -#line 1429 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1420 "Aql/grammar.y" /* yacc.c:1646 */ { auto node = parser->ast()->createNodeArray(); node->addMember((yyvsp[0].node)); (yyval.node) = parser->ast()->createNodeCollectionList(node); } -#line 3925 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3908 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 185: -#line 1434 "Aql/grammar.y" /* yacc.c:1646 */ + case 184: +#line 1425 "Aql/grammar.y" /* yacc.c:1646 */ { auto node = parser->ast()->createNodeArray(); parser->pushStack(node); node->addMember((yyvsp[-1].node)); } -#line 3935 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3918 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 186: -#line 1438 "Aql/grammar.y" /* yacc.c:1646 */ + case 185: +#line 1429 "Aql/grammar.y" /* yacc.c:1646 */ { auto node = static_cast(parser->popStack()); (yyval.node) = parser->ast()->createNodeCollectionList(node); } -#line 3944 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3927 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 187: -#line 1442 "Aql/grammar.y" /* yacc.c:1646 */ + case 186: +#line 1433 "Aql/grammar.y" /* yacc.c:1646 */ { // graph name (yyval.node) = (yyvsp[0].node); } -#line 3953 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3936 "Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 187: +#line 1437 "Aql/grammar.y" /* yacc.c:1646 */ + { + // graph name + (yyval.node) = parser->ast()->createNodeValueString((yyvsp[0].strval).value, (yyvsp[0].strval).length); + } +#line 3945 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 188: #line 1446 "Aql/grammar.y" /* yacc.c:1646 */ { - // graph name - (yyval.node) = parser->ast()->createNodeValueString((yyvsp[0].strval).value, (yyvsp[0].strval).length); + (yyval.intval) = 2; } -#line 3962 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3953 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 189: -#line 1455 "Aql/grammar.y" /* yacc.c:1646 */ - { - (yyval.intval) = 2; - } -#line 3970 "Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 190: -#line 1458 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1449 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.intval) = 1; } -#line 3978 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3961 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 191: -#line 1461 "Aql/grammar.y" /* yacc.c:1646 */ + case 190: +#line 1452 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.intval) = 0; } -#line 3986 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3969 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 192: -#line 1467 "Aql/grammar.y" /* yacc.c:1646 */ + case 191: +#line 1458 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeDirection((yyvsp[0].intval), 1); } -#line 3994 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3977 "Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 193: -#line 1470 "Aql/grammar.y" /* yacc.c:1646 */ + case 192: +#line 1461 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeDirection((yyvsp[0].intval), (yyvsp[-1].node)); } -#line 4002 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3985 "Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 193: +#line 1467 "Aql/grammar.y" /* yacc.c:1646 */ + { + auto* ast = parser->ast(); + auto* node = ast->createNodeView((yyvsp[0].strval).value); + + TRI_ASSERT(node != nullptr); + + (yyval.node) = node; + } +#line 3998 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 194: -#line 1476 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1475 "Aql/grammar.y" /* yacc.c:1646 */ { // variable or collection auto ast = parser->ast(); @@ -4035,27 +4031,27 @@ yyreduce: (yyval.node) = node; } -#line 4039 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4035 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 195: -#line 1508 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1507 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = (yyvsp[0].node); } -#line 4047 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4043 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 196: -#line 1511 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1510 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = (yyvsp[0].node); } -#line 4055 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4051 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 197: -#line 1514 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1513 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = (yyvsp[0].node); @@ -4063,11 +4059,11 @@ yyreduce: ABORT_OOM } } -#line 4067 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4063 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 198: -#line 1521 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1520 "Aql/grammar.y" /* yacc.c:1646 */ { if ((yyvsp[-1].node)->type == NODE_TYPE_EXPANSION) { // create a dummy passthru node that reduces and evaluates the expansion first @@ -4078,20 +4074,20 @@ yyreduce: (yyval.node) = (yyvsp[-1].node); } } -#line 4082 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4078 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 199: -#line 1531 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1530 "Aql/grammar.y" /* yacc.c:1646 */ { parser->ast()->scopes()->start(arangodb::aql::AQL_SCOPE_SUBQUERY); parser->ast()->startSubQuery(); } -#line 4091 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4087 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 200: -#line 1534 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1533 "Aql/grammar.y" /* yacc.c:1646 */ { AstNode* node = parser->ast()->endSubQuery(); parser->ast()->scopes()->endCurrent(); @@ -4102,11 +4098,11 @@ yyreduce: (yyval.node) = parser->ast()->createNodeReference(variableName); } -#line 4106 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4102 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 201: -#line 1544 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1543 "Aql/grammar.y" /* yacc.c:1646 */ { // named variable access, e.g. variable.reference if ((yyvsp[-2].node)->type == NODE_TYPE_EXPANSION) { @@ -4122,11 +4118,11 @@ yyreduce: (yyval.node) = parser->ast()->createNodeAttributeAccess((yyvsp[-2].node), (yyvsp[0].strval).value, (yyvsp[0].strval).length); } } -#line 4126 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4122 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 202: -#line 1559 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1558 "Aql/grammar.y" /* yacc.c:1646 */ { // named variable access, e.g. variable.@reference if ((yyvsp[-2].node)->type == NODE_TYPE_EXPANSION) { @@ -4141,11 +4137,11 @@ yyreduce: (yyval.node) = parser->ast()->createNodeBoundAttributeAccess((yyvsp[-2].node), (yyvsp[0].node)); } } -#line 4145 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4141 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 203: -#line 1573 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1572 "Aql/grammar.y" /* yacc.c:1646 */ { // indexed variable access, e.g. variable[index] if ((yyvsp[-3].node)->type == NODE_TYPE_EXPANSION) { @@ -4160,11 +4156,11 @@ yyreduce: (yyval.node) = parser->ast()->createNodeIndexedAccess((yyvsp[-3].node), (yyvsp[-1].node)); } } -#line 4164 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4160 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 204: -#line 1587 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1586 "Aql/grammar.y" /* yacc.c:1646 */ { // variable expansion, e.g. variable[*], with optional FILTER, LIMIT and RETURN clauses if ((yyvsp[0].intval) > 1 && (yyvsp[-2].node)->type == NODE_TYPE_EXPANSION) { @@ -4188,11 +4184,11 @@ yyreduce: auto scopes = parser->ast()->scopes(); scopes->stackCurrentVariable(scopes->getVariable(nextName)); } -#line 4192 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4188 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 205: -#line 1609 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1608 "Aql/grammar.y" /* yacc.c:1646 */ { auto scopes = parser->ast()->scopes(); scopes->unstackCurrentVariable(); @@ -4211,27 +4207,27 @@ yyreduce: (yyval.node) = parser->ast()->createNodeExpansion((yyvsp[-5].intval), iterator, parser->ast()->createNodeReference(variable->name), (yyvsp[-3].node), (yyvsp[-2].node), (yyvsp[-1].node)); } } -#line 4215 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4211 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 206: -#line 1630 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1629 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = (yyvsp[0].node); } -#line 4223 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4219 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 207: -#line 1633 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1632 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = (yyvsp[0].node); } -#line 4231 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4227 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 208: -#line 1639 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1638 "Aql/grammar.y" /* yacc.c:1646 */ { if ((yyvsp[0].node) == nullptr) { ABORT_OOM @@ -4239,11 +4235,11 @@ yyreduce: (yyval.node) = (yyvsp[0].node); } -#line 4243 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4239 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 209: -#line 1646 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1645 "Aql/grammar.y" /* yacc.c:1646 */ { if ((yyvsp[0].node) == nullptr) { ABORT_OOM @@ -4251,147 +4247,131 @@ yyreduce: (yyval.node) = (yyvsp[0].node); } -#line 4255 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4251 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 210: -#line 1656 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1655 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeValueString((yyvsp[0].strval).value, (yyvsp[0].strval).length); } -#line 4263 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4259 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 211: -#line 1659 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1658 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = (yyvsp[0].node); } -#line 4271 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4267 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 212: -#line 1662 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1661 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeValueNull(); } -#line 4279 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4275 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 213: -#line 1665 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1664 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeValueBool(true); } -#line 4287 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4283 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 214: -#line 1668 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1667 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeValueBool(false); } -#line 4295 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4291 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 215: -#line 1674 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1673 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeCollection((yyvsp[0].strval).value, arangodb::AccessMode::Type::WRITE); } -#line 4303 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4299 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 216: -#line 1677 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1676 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeCollection((yyvsp[0].strval).value, arangodb::AccessMode::Type::WRITE); } -#line 4311 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4307 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 217: -#line 1680 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1679 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = (yyvsp[0].node); } -#line 4319 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4315 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 218: -#line 1686 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1685 "Aql/grammar.y" /* yacc.c:1646 */ { - (yyval.node) = parser->ast()->createNodeView((yyvsp[0].strval).value); + if ((yyvsp[0].strval).length < 2 || (yyvsp[0].strval).value[0] != '@') { + parser->registerParseError(TRI_ERROR_QUERY_BIND_PARAMETER_TYPE, TRI_errno_string(TRI_ERROR_QUERY_BIND_PARAMETER_TYPE), (yyvsp[0].strval).value, yylloc.first_line, yylloc.first_column); + } + + (yyval.node) = parser->ast()->createNodeParameterView((yyvsp[0].strval).value, (yyvsp[0].strval).length); } #line 4327 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 219: -#line 1689 "Aql/grammar.y" /* yacc.c:1646 */ - { - (yyval.node) = parser->ast()->createNodeView((yyvsp[0].strval).value); - } -#line 4335 "Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 220: #line 1692 "Aql/grammar.y" /* yacc.c:1646 */ { if ((yyvsp[0].strval).length < 2 || (yyvsp[0].strval).value[0] != '@') { parser->registerParseError(TRI_ERROR_QUERY_BIND_PARAMETER_TYPE, TRI_errno_string(TRI_ERROR_QUERY_BIND_PARAMETER_TYPE), (yyvsp[0].strval).value, yylloc.first_line, yylloc.first_column); } + (yyval.node) = parser->ast()->createNodeParameterCollection((yyvsp[0].strval).value, (yyvsp[0].strval).length); + } +#line 4339 "Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 220: +#line 1699 "Aql/grammar.y" /* yacc.c:1646 */ + { (yyval.node) = parser->ast()->createNodeParameter((yyvsp[0].strval).value, (yyvsp[0].strval).length); } #line 4347 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 221: -#line 1702 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1705 "Aql/grammar.y" /* yacc.c:1646 */ { - if ((yyvsp[0].strval).length < 2 || (yyvsp[0].strval).value[0] != '@') { - parser->registerParseError(TRI_ERROR_QUERY_BIND_PARAMETER_TYPE, TRI_errno_string(TRI_ERROR_QUERY_BIND_PARAMETER_TYPE), (yyvsp[0].strval).value, yylloc.first_line, yylloc.first_column); - } - - (yyval.node) = parser->ast()->createNodeParameter((yyvsp[0].strval).value, (yyvsp[0].strval).length); + (yyval.strval) = (yyvsp[0].strval); } -#line 4359 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4355 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 222: -#line 1709 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1708 "Aql/grammar.y" /* yacc.c:1646 */ { - (yyval.node) = parser->ast()->createNodeParameter((yyvsp[0].strval).value, (yyvsp[0].strval).length); + (yyval.strval) = (yyvsp[0].strval); } -#line 4367 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4363 "Aql/grammar.cpp" /* yacc.c:1646 */ break; case 223: -#line 1715 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1713 "Aql/grammar.y" /* yacc.c:1646 */ { (yyval.strval) = (yyvsp[0].strval); } +#line 4371 "Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + #line 4375 "Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 224: -#line 1718 "Aql/grammar.y" /* yacc.c:1646 */ - { - (yyval.strval) = (yyvsp[0].strval); - } -#line 4383 "Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 225: -#line 1723 "Aql/grammar.y" /* yacc.c:1646 */ - { - (yyval.strval) = (yyvsp[0].strval); - } -#line 4391 "Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - -#line 4395 "Aql/grammar.cpp" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires diff --git a/arangod/Aql/grammar.h b/arangod/Aql/grammar.h index aa4627dbf1..a41e0467ef 100644 --- a/arangod/Aql/grammar.h +++ b/arangod/Aql/grammar.h @@ -126,7 +126,7 @@ extern int Aqldebug; union YYSTYPE { -#line 21 "Aql/grammar.y" /* yacc.c:1909 */ +#line 19 "Aql/grammar.y" /* yacc.c:1909 */ arangodb::aql::AstNode* node; struct { diff --git a/arangod/Aql/grammar.hpp b/arangod/Aql/grammar.hpp index aa4627dbf1..a41e0467ef 100644 --- a/arangod/Aql/grammar.hpp +++ b/arangod/Aql/grammar.hpp @@ -126,7 +126,7 @@ extern int Aqldebug; union YYSTYPE { -#line 21 "Aql/grammar.y" /* yacc.c:1909 */ +#line 19 "Aql/grammar.y" /* yacc.c:1909 */ arangodb::aql::AstNode* node; struct { diff --git a/arangod/Aql/grammar.y b/arangod/Aql/grammar.y index f20a2f77c6..cab6f62d5f 100644 --- a/arangod/Aql/grammar.y +++ b/arangod/Aql/grammar.y @@ -326,7 +326,6 @@ static AstNode const* GetIntoExpression(AstNode const* node) { %type simple_value; %type value_literal; %type collection_name; -%type view_name; %type in_or_into_collection; %type bind_parameter; %type variable_name; @@ -447,13 +446,7 @@ statement_block_statement: ; for_statement: - T_FOR variable_name T_IN T_VIEW view_name { - parser->ast()->scopes()->start(arangodb::aql::AQL_SCOPE_FOR); - - auto node = parser->ast()->createNodeFor($2.value, $2.length, $5, true); - parser->ast()->addOperation(node); - } - | T_FOR variable_name T_IN expression { + T_FOR variable_name T_IN expression { parser->ast()->scopes()->start(arangodb::aql::AQL_SCOPE_FOR); auto node = parser->ast()->createNodeFor($2.value, $2.length, $4, true); @@ -1471,7 +1464,15 @@ graph_direction_steps: ; reference: - T_STRING { + T_VIEW T_STRING { + auto* ast = parser->ast(); + auto* node = ast->createNodeView($2.value); + + TRI_ASSERT(node != nullptr); + + $$ = node; + } + | T_STRING { // variable or collection auto ast = parser->ast(); AstNode* node = nullptr; @@ -1680,29 +1681,20 @@ collection_name: } ; -view_name: - T_STRING { - $$ = parser->ast()->createNodeView($1.value); - } - | T_QUOTED_STRING { - $$ = parser->ast()->createNodeView($1.value); +bind_parameter: + T_VIEW T_DATA_SOURCE_PARAMETER { + if ($2.length < 2 || $2.value[0] != '@') { + parser->registerParseError(TRI_ERROR_QUERY_BIND_PARAMETER_TYPE, TRI_errno_string(TRI_ERROR_QUERY_BIND_PARAMETER_TYPE), $2.value, yylloc.first_line, yylloc.first_column); + } + + $$ = parser->ast()->createNodeParameterView($2.value, $2.length); } | T_DATA_SOURCE_PARAMETER { if ($1.length < 2 || $1.value[0] != '@') { parser->registerParseError(TRI_ERROR_QUERY_BIND_PARAMETER_TYPE, TRI_errno_string(TRI_ERROR_QUERY_BIND_PARAMETER_TYPE), $1.value, yylloc.first_line, yylloc.first_column); } - $$ = parser->ast()->createNodeParameter($1.value, $1.length); - } - ; - -bind_parameter: - T_DATA_SOURCE_PARAMETER { - if ($1.length < 2 || $1.value[0] != '@') { - parser->registerParseError(TRI_ERROR_QUERY_BIND_PARAMETER_TYPE, TRI_errno_string(TRI_ERROR_QUERY_BIND_PARAMETER_TYPE), $1.value, yylloc.first_line, yylloc.first_column); - } - - $$ = parser->ast()->createNodeParameter($1.value, $1.length); + $$ = parser->ast()->createNodeParameterCollection($1.value, $1.length); } | T_PARAMETER { $$ = parser->ast()->createNodeParameter($1.value, $1.length); diff --git a/arangod/IResearch/IResearchLink.cpp b/arangod/IResearch/IResearchLink.cpp index 34722043d6..f159e8cf0a 100644 --- a/arangod/IResearch/IResearchLink.cpp +++ b/arangod/IResearch/IResearchLink.cpp @@ -231,7 +231,7 @@ bool IResearchLink::init(arangodb::velocypack::Slice const& definition) { if (view) { wiew = logicalView; // remeber the DBServer view instance - logicalView = view->ensure(id()); // repoint LogicalView at the per-cid instance + logicalView = view->ensure(_collection->id()); // repoint LogicalView at the per-cid instance } else { logicalView = nullptr; } @@ -547,4 +547,4 @@ NS_END // arangodb // ----------------------------------------------------------------------------- // --SECTION-- END-OF-FILE -// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- \ No newline at end of file diff --git a/arangod/IResearch/IResearchViewDBServer.cpp b/arangod/IResearch/IResearchViewDBServer.cpp index 367bc04e7b..40bfd8732a 100644 --- a/arangod/IResearch/IResearchViewDBServer.cpp +++ b/arangod/IResearch/IResearchViewDBServer.cpp @@ -405,18 +405,15 @@ std::shared_ptr IResearchViewDBServer::ensure( return nullptr; } - auto id = view->id(); - - // hold a reference to the original view in the deleter so that the view is still valid inside the deleter + // hold a reference to the original view in the deleter so that the view is still valid for the duration of the pointer wrapper return std::shared_ptr( view.get(), - [this, id, cid](arangodb::LogicalView* ptr)->void { + [this, view, cid](arangodb::LogicalView*)->void { static const auto visitor = [](TRI_voc_cid_t)->bool { return false; }; // same view in vocbase and with no collections - if (ptr - && ptr == vocbase().lookupView(id).get() // avoid double dropView(...) - && ptr->visitCollections(visitor)) { + if (view.get() == vocbase().lookupView(view->id()).get() // avoid double dropView(...) + && view->visitCollections(visitor)) { drop(cid); } } diff --git a/arangod/RocksDBEngine/RocksDBTransactionCollection.cpp b/arangod/RocksDBEngine/RocksDBTransactionCollection.cpp index 81922368e5..fc9c54a41d 100644 --- a/arangod/RocksDBEngine/RocksDBTransactionCollection.cpp +++ b/arangod/RocksDBEngine/RocksDBTransactionCollection.cpp @@ -132,6 +132,10 @@ void RocksDBTransactionCollection::freeOperations( bool RocksDBTransactionCollection::canAccess( AccessMode::Type accessType) const { + if (!_collection) { + return false; // not opened. probably a mistake made by the caller + } + // check if access type matches if (AccessMode::isWriteOrExclusive(accessType) && !AccessMode::isWriteOrExclusive(_accessType)) { diff --git a/arangod/Transaction/Methods.cpp b/arangod/Transaction/Methods.cpp index 2174483d7e..63d71ebd0c 100644 --- a/arangod/Transaction/Methods.cpp +++ b/arangod/Transaction/Methods.cpp @@ -168,6 +168,10 @@ static OperationResult emptyResult(OperationOptions const& options) { getStateRegistrationCallbacks().emplace_back(callback); } +/*static*/ void transaction::Methods::clearStateRegistrationCallbacks() { + getStateRegistrationCallbacks().clear(); +} + /// @brief Get the field names of the used index std::vector> transaction::Methods::IndexHandle::fieldNames() const { diff --git a/arangod/Transaction/Methods.h b/arangod/Transaction/Methods.h index 90c66af3d2..06d90a6e7b 100644 --- a/arangod/Transaction/Methods.h +++ b/arangod/Transaction/Methods.h @@ -154,6 +154,12 @@ class Methods { /// @note not thread-safe on the assumption of static factory registration static void addStateRegistrationCallback(StateRegistrationCallback callback); + /// @brief clear all called for state instance association events + /// @note not thread-safe on the assumption of static factory registration + /// @note FOR USE IN TESTS ONLY to reset test state + /// FIXME TODO StateRegistrationCallback logic should be moved into its own feature + static void clearStateRegistrationCallbacks(); + /// @brief default batch size for index and other operations static constexpr uint64_t defaultBatchSize() { return 1000; } @@ -609,4 +615,4 @@ class Methods { } } -#endif +#endif \ No newline at end of file diff --git a/tests/IResearch/IResearchQueryJoin-test.cpp b/tests/IResearch/IResearchQueryJoin-test.cpp index 2025582e57..73da0942bb 100644 --- a/tests/IResearch/IResearchQueryJoin-test.cpp +++ b/tests/IResearch/IResearchQueryJoin-test.cpp @@ -439,78 +439,50 @@ TEST_CASE("IResearchQueryTestJoinDuplicateDataSource", "[iresearch][iresearch-qu view->sync(); } + // explicit collection and view with the same 'collection' name + { + std::string const query = "LET c=5 FOR x IN collection_1 FILTER x.seq == c FOR d IN VIEW collection_1 FILTER x.seq == d.seq RETURN x"; + auto const boundParameters = arangodb::velocypack::Parser::fromJson("{ }"); + + CHECK((arangodb::tests::assertRules(vocbase, query, {}, boundParameters))); + + // arangodb::aql::ExecutionPlan::fromNodeFor(...) throws TRI_ERROR_INTERNAL + auto queryResult = arangodb::tests::executeQuery(vocbase, query, boundParameters); + CHECK((TRI_ERROR_INTERNAL == queryResult.code)); + } + + // explicit collection and view with the same 'view' name + { + std::string const query = "LET c=5 FOR x IN testView FILTER x.seq == c FOR d IN VIEW testView FILTER x.seq == d.seq RETURN x"; + auto const boundParameters = arangodb::velocypack::Parser::fromJson("{ }"); + + CHECK(arangodb::tests::assertRules(vocbase, query, {}, boundParameters)); + + // arangodb::transaction::Methods::addCollectionAtRuntime(...) throws TRI_ERROR_ARANGO_DATA_SOURCE_NOT_FOUND + auto queryResult = arangodb::tests::executeQuery(vocbase, query, boundParameters); + CHECK((TRI_ERROR_ARANGO_DATA_SOURCE_NOT_FOUND == queryResult.code)); + } + // bind collection and view with the same name { std::string const query = "LET c=5 FOR x IN @@dataSource FILTER x.seq == c FOR d IN VIEW @@dataSource FILTER x.seq == d.seq RETURN x"; auto const boundParameters = arangodb::velocypack::Parser::fromJson("{ \"@dataSource\" : \"testView\" }"); -/* FIXME will fail - * on TRI_ASSERT(trxCollection->collection() != nullptr); - * in transaction::Methods::documentCollection(...) - CHECK(arangodb::tests::assertRules( - vocbase, query, { - arangodb::aql::OptimizerRule::handleViewsRule_pass6, - }, - boundParameters - )); - - std::vector expectedDocs { - arangodb::velocypack::Slice(insertedDocsCollectionWithTheSameNameAsView[5].vpack()), - }; + CHECK(arangodb::tests::assertRules(vocbase, query, {}, boundParameters)); auto queryResult = arangodb::tests::executeQuery(vocbase, query, boundParameters); - REQUIRE(TRI_ERROR_INTERNAL == queryResult.code); -// FIXME remove line above and uncomment lines below -// will not return any results because of the: -// https://github.com/arangodb/backlog/issues/342 -// unable to resolve collection and view with the same name for the time being -// -// REQUIRE(TRI_ERROR_NO_ERROR == queryResult.code); -// -// auto result = queryResult.result->slice(); -// CHECK(result.isArray()); -// -// arangodb::velocypack::ArrayIterator resultIt(result); -// REQUIRE(expectedDocs.size() == resultIt.size()); -// -// // Check documents -// auto expectedDoc = expectedDocs.begin(); -// for (;resultIt.valid(); resultIt.next(), ++expectedDoc) { -// auto const actualDoc = resultIt.value(); -// auto const resolved = actualDoc.resolveExternals(); -// -// CHECK((0 == arangodb::basics::VelocyPackHelper::compare(arangodb::velocypack::Slice(*expectedDoc), resolved, true))); -// } -// CHECK(expectedDoc == expectedDocs.end()); -*/ + CHECK((TRI_ERROR_ARANGO_DATA_SOURCE_NOT_FOUND == queryResult.code)); } // bind collection and view with the same name - // - // FIXME - // will not return any results because of the: - // https://github.com/arangodb/backlog/issues/342 { std::string const query = "LET c=5 FOR x IN @@dataSource FILTER x.seq == c FOR d IN VIEW @@dataSource FILTER x.seq == d.seq RETURN d"; auto const boundParameters = arangodb::velocypack::Parser::fromJson("{ \"@dataSource\" : \"testView\" }"); -/* FIXME will fail - * on TRI_ASSERT(trxCollection->collection() != nullptr); - * in transaction::Methods::documentCollection(...) - CHECK(arangodb::tests::assertRules( - vocbase, query, { - arangodb::aql::OptimizerRule::handleViewsRule_pass6, - }, - boundParameters - )); - - std::vector expectedDocs { - arangodb::velocypack::Slice(insertedDocsCollectionWithTheSameNameAsView[5].vpack()), - }; + CHECK(arangodb::tests::assertRules(vocbase, query, {}, boundParameters)); auto queryResult = arangodb::tests::executeQuery(vocbase, query, boundParameters); - REQUIRE(TRI_ERROR_INTERNAL == queryResult.code); -*/ + CHECK((TRI_ERROR_ARANGO_DATA_SOURCE_NOT_FOUND == queryResult.code)); } } diff --git a/tests/IResearch/IResearchViewDBServer-test.cpp b/tests/IResearch/IResearchViewDBServer-test.cpp index 46683e040f..8fca66ef15 100644 --- a/tests/IResearch/IResearchViewDBServer-test.cpp +++ b/tests/IResearch/IResearchViewDBServer-test.cpp @@ -386,6 +386,8 @@ SECTION("test_query") { REQUIRE((false == !wiewImpl)); auto logicalView = wiewImpl->ensure(42); REQUIRE((false == !logicalView)); + auto* viewImpl = dynamic_cast(logicalView.get()); + REQUIRE((false == !viewImpl)); arangodb::CollectionNameResolver resolver(vocbase); auto state = s.engine.createTransactionState(resolver, arangodb::transaction::Options()); @@ -891,7 +893,8 @@ SECTION("test_updateProperties") { auto collectionJson = arangodb::velocypack::Parser::fromJson("{ \"name\": \"testCollection\" }"); auto json = arangodb::velocypack::Parser::fromJson("{ \"name\": \"testView\", \"type\": \"arangosearch\", \"properties\": { \"collections\": [ 3, 4, 5 ], \"threadsMaxIdle\": 24, \"threadsMaxTotal\": 42 } }"); TRI_vocbase_t vocbase(TRI_vocbase_type_e::TRI_VOCBASE_TYPE_NORMAL, 1, "testVocbase"); - vocbase.createCollection(collectionJson->slice()); + auto* logicalCollection = vocbase.createCollection(collectionJson->slice()); + CHECK((nullptr != logicalCollection)); auto wiew = arangodb::iresearch::IResearchViewDBServer::make(vocbase, json->slice(), true, 42); CHECK((false == !wiew)); auto* impl = dynamic_cast(wiew.get()); @@ -952,7 +955,8 @@ SECTION("test_updateProperties") { auto collectionJson = arangodb::velocypack::Parser::fromJson("{ \"name\": \"testCollection\" }"); auto json = arangodb::velocypack::Parser::fromJson("{ \"name\": \"testView\", \"type\": \"arangosearch\", \"properties\": { \"collections\": [ 3, 4, 5 ], \"threadsMaxIdle\": 24, \"threadsMaxTotal\": 42 } }"); TRI_vocbase_t vocbase(TRI_vocbase_type_e::TRI_VOCBASE_TYPE_NORMAL, 1, "testVocbase"); - vocbase.createCollection(collectionJson->slice()); + auto* logicalCollection = vocbase.createCollection(collectionJson->slice()); + CHECK((nullptr != logicalCollection)); auto wiew = arangodb::iresearch::IResearchViewDBServer::make(vocbase, json->slice(), true, 42); CHECK((false == !wiew)); auto* impl = dynamic_cast(wiew.get()); @@ -1013,7 +1017,8 @@ SECTION("test_updateProperties") { auto collectionJson = arangodb::velocypack::Parser::fromJson("{ \"name\": \"testCollection\" }"); auto json = arangodb::velocypack::Parser::fromJson("{ \"name\": \"testView\", \"type\": \"arangosearch\", \"properties\": { \"collections\": [ 3, 4, 5 ], \"threadsMaxIdle\": 24, \"threadsMaxTotal\": 42 } }"); TRI_vocbase_t vocbase(TRI_vocbase_type_e::TRI_VOCBASE_TYPE_NORMAL, 1, "testVocbase"); - vocbase.createCollection(collectionJson->slice()); + auto* logicalCollection = vocbase.createCollection(collectionJson->slice()); + CHECK((nullptr != logicalCollection)); auto wiew = arangodb::iresearch::IResearchViewDBServer::make(vocbase, json->slice(), true, 42); CHECK((false == !wiew)); auto* impl = dynamic_cast(wiew.get()); @@ -1073,10 +1078,14 @@ SECTION("test_updateProperties") { s.agency->responses.clear(); s.agency->responses["POST /_api/agency/read HTTP/1.1\r\n\r\n[[\"/Sync/LatestID\"]]"] = "http/1.0 200\n\n[ { \"\": { \"Sync\": { \"LatestID\" : 1 } } } ]"; s.agency->responses["POST /_api/agency/write HTTP/1.1"] = "http/1.0 200\n\n{\"results\": []}"; - auto collectionJson = arangodb::velocypack::Parser::fromJson("{ \"name\": \"testCollection\" }"); + auto collection0Json = arangodb::velocypack::Parser::fromJson("{ \"name\": \"testCollection\" }"); + auto collection1Json = arangodb::velocypack::Parser::fromJson("{ \"name\": \"testCollection1\", \"id\": \"123\" }"); auto json = arangodb::velocypack::Parser::fromJson("{ \"name\": \"testView\", \"type\": \"arangosearch\", \"properties\": { \"collections\": [ 3, 4, 5 ], \"threadsMaxIdle\": 24, \"threadsMaxTotal\": 42 } }"); TRI_vocbase_t vocbase(TRI_vocbase_type_e::TRI_VOCBASE_TYPE_NORMAL, 1, "testVocbase"); - vocbase.createCollection(collectionJson->slice()); + auto* logicalCollection0 = vocbase.createCollection(collection0Json->slice()); + CHECK((nullptr != logicalCollection0)); + auto* logicalCollection1 = vocbase.createCollection(collection1Json->slice()); + CHECK((nullptr != logicalCollection1)); auto wiew = arangodb::iresearch::IResearchViewDBServer::make(vocbase, json->slice(), true, 42); CHECK((false == !wiew)); auto* impl = dynamic_cast(wiew.get()); @@ -1111,7 +1120,7 @@ SECTION("test_updateProperties") { wiew->toVelocyPack(builder, true, false); builder.close(); auto slice = builder.slice().get("properties"); - CHECK((slice.hasKey("collections") && slice.get("collections").isArray() && 2 == slice.get("collections").length())); + CHECK((slice.hasKey("collections") && slice.get("collections").isArray() && 1 == slice.get("collections").length())); CHECK((!slice.hasKey("links"))); CHECK((slice.hasKey("threadsMaxIdle") && slice.get("threadsMaxIdle").isNumber() && 5 == slice.get("threadsMaxIdle").getNumber())); CHECK((slice.hasKey("threadsMaxTotal") && slice.get("threadsMaxTotal").isNumber() && 52 == slice.get("threadsMaxTotal").getNumber())); @@ -1180,4 +1189,4 @@ SECTION("test_visitCollections") { // ----------------------------------------------------------------------------- // --SECTION-- END-OF-FILE -// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- \ No newline at end of file diff --git a/tests/IResearch/StorageEngineMock.cpp b/tests/IResearch/StorageEngineMock.cpp index 989e6360e1..d9b06ee39f 100644 --- a/tests/IResearch/StorageEngineMock.cpp +++ b/tests/IResearch/StorageEngineMock.cpp @@ -1402,7 +1402,7 @@ TransactionCollectionMock::TransactionCollectionMock(arangodb::TransactionState* } bool TransactionCollectionMock::canAccess(arangodb::AccessMode::Type accessType) const { - return true; + return nullptr != _collection; // collection must have be opened previously } void TransactionCollectionMock::freeOperations(arangodb::transaction::Methods* activeTrx, bool mustRollback) { @@ -1491,7 +1491,16 @@ arangodb::Result TransactionStateMock::beginTransaction(arangodb::transaction::H static std::atomic lastId(0); ++beginTransactionCount; - useCollections(_nestingLevel); + + auto res = useCollections(_nestingLevel); + + if (!res.ok()) { + updateStatus(arangodb::transaction::Status::ABORTED); + const_cast(_id) = 0; // avoid use of TransactionManagerFeature::manager()->unregisterTransaction(...) + + return res; + } + const_cast(_id) = ++lastId; // ensure each transaction state has a unique ID updateStatus(arangodb::transaction::Status::RUNNING); diff --git a/tests/IResearch/common.cpp b/tests/IResearch/common.cpp index da172134cb..22cc0fa048 100644 --- a/tests/IResearch/common.cpp +++ b/tests/IResearch/common.cpp @@ -47,7 +47,9 @@ NS_END NS_BEGIN(arangodb) NS_BEGIN(tests) -void init(bool withICU /*= false*/) {} // nothing to do here +void init(bool withICU /*= false*/) { + arangodb::transaction::Methods::clearStateRegistrationCallbacks(); +} bool assertRules( TRI_vocbase_t& vocbase, @@ -156,4 +158,4 @@ NS_END // arangodb // ----------------------------------------------------------------------------- // --SECTION-- END-OF-FILE -// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- \ No newline at end of file