diff --git a/Documentation/Books/Manual/ReleaseNotes/NewFeatures31.mdpp b/Documentation/Books/Manual/ReleaseNotes/NewFeatures31.mdpp index b793674fa0..b13e3f1e85 100644 --- a/Documentation/Books/Manual/ReleaseNotes/NewFeatures31.mdpp +++ b/Documentation/Books/Manual/ReleaseNotes/NewFeatures31.mdpp @@ -4,6 +4,21 @@ The following list shows in detail which features have been added or improved in ArangoDB 3.1. ArangoDB 3.1 also contains several bugfixes that are not listed here. +!SECTION SmartGraphs + +ArangoDB 3.1 adds a first major enterprise only feature called SmartGraphs. +SmartGraphs form an addition to the already existing graph features and allow to +scale graphs beyond a single machine while keeping almost the same query performance. +The SmartGraph feature is suggested for all graph database use cases that require +a cluster of database servers for what ever reason. +You can either have a graph that is too large to be stored on a single machine only. +Or you can have a small graph, but at the same time need additional data with has to be +sharded and you want to keep all of them in the same envirenment. +Or you simply use the cluster for high-availability. +In all the above cases SmartGraphs will significantly increase the performance of +graph operations. +For more detailed information read [this manual section](../Graphs/SmartGraphs/index.html). + !SECTION Data format The format of the revision values stored in the `_rev` attribute of documents @@ -153,7 +168,6 @@ AQL query editor in the web interface. Audit logging has been added, see [Auditing](../Auditing/index.html). - !SECTION Client tools Added option `--skip-lines` for arangoimp diff --git a/arangod/Agency/Inception.cpp b/arangod/Agency/Inception.cpp index f3f0d961cd..bf0682e407 100644 --- a/arangod/Agency/Inception.cpp +++ b/arangod/Agency/Inception.cpp @@ -439,7 +439,7 @@ bool Inception::estimateRAFTInterval() { } } - maxmean = 1.0e-2*std::ceil(100*(.15 + 1.0e-3*maxmean)); + maxmean = 1.e-3*std::ceil(1.e3*(.1 + 1.0e-3*(maxmean+3*maxstdev))); LOG_TOPIC(INFO, Logger::AGENCY) << "Auto-adapting RAFT timing to: {" << maxmean diff --git a/arangod/Agency/Supervision.cpp b/arangod/Agency/Supervision.cpp index 4ac4c94af1..7b9e252b47 100644 --- a/arangod/Agency/Supervision.cpp +++ b/arangod/Agency/Supervision.cpp @@ -50,8 +50,8 @@ Supervision::Supervision() : arangodb::Thread("Supervision"), _agent(nullptr), _snapshot("Supervision"), - _frequency(5.0), - _gracePeriod(15), + _frequency(5.), + _gracePeriod(15.), _jobId(0), _jobIdMax(0), _selfShutdown(false) {} diff --git a/arangod/Agency/Supervision.h b/arangod/Agency/Supervision.h index def1932d0b..0c9d266732 100644 --- a/arangod/Agency/Supervision.h +++ b/arangod/Agency/Supervision.h @@ -161,8 +161,8 @@ class Supervision : public arangodb::Thread { arangodb::basics::ConditionVariable _cv; /**< @brief Control if thread should run */ - long _frequency; - long _gracePeriod; + double _frequency; + double _gracePeriod; uint64_t _jobId; uint64_t _jobIdMax; diff --git a/arangod/Aql/grammar.cpp b/arangod/Aql/grammar.cpp index d938080cb6..c2f89f3e3e 100644 --- a/arangod/Aql/grammar.cpp +++ b/arangod/Aql/grammar.cpp @@ -2090,15 +2090,15 @@ yyreduce: switch (yyn) { case 2: -#line 368 "Aql/grammar.y" /* yacc.c:1646 */ +#line 368 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeValueString((yyvsp[0].strval).value, (yyvsp[0].strval).length); } -#line 2098 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2098 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 3: -#line 371 "Aql/grammar.y" /* yacc.c:1646 */ +#line 371 "Aql/grammar.y" /* yacc.c:1661 */ { char const* p = (yyvsp[0].node)->getStringValue(); size_t const len = (yyvsp[0].node)->getStringLength(); @@ -2107,271 +2107,271 @@ yyreduce: } (yyval.node) = (yyvsp[0].node); } -#line 2111 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2111 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 4: -#line 382 "Aql/grammar.y" /* yacc.c:1646 */ +#line 382 "Aql/grammar.y" /* yacc.c:1661 */ { auto node = static_cast(parser->peekStack()); node->addMember((yyvsp[0].node)); } -#line 2120 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2120 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 5: -#line 386 "Aql/grammar.y" /* yacc.c:1646 */ +#line 386 "Aql/grammar.y" /* yacc.c:1661 */ { auto node = static_cast(parser->peekStack()); node->addMember((yyvsp[0].node)); } -#line 2129 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2129 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 6: -#line 390 "Aql/grammar.y" /* yacc.c:1646 */ +#line 390 "Aql/grammar.y" /* yacc.c:1661 */ { auto node = static_cast(parser->peekStack()); node->addMember((yyvsp[0].node)); } -#line 2138 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2138 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 7: -#line 397 "Aql/grammar.y" /* yacc.c:1646 */ +#line 397 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 2145 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2145 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 8: -#line 399 "Aql/grammar.y" /* yacc.c:1646 */ +#line 399 "Aql/grammar.y" /* yacc.c:1661 */ { auto node = parser->ast()->createNodeArray(); parser->pushStack(node); } -#line 2154 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2154 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 9: -#line 402 "Aql/grammar.y" /* yacc.c:1646 */ +#line 402 "Aql/grammar.y" /* yacc.c:1661 */ { auto node = static_cast(parser->popStack()); auto withNode = parser->ast()->createNodeWithCollections(node); parser->ast()->addOperation(withNode); } -#line 2164 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2164 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 10: -#line 410 "Aql/grammar.y" /* yacc.c:1646 */ +#line 410 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 2171 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2171 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 11: -#line 415 "Aql/grammar.y" /* yacc.c:1646 */ +#line 415 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 2178 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2178 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 12: -#line 420 "Aql/grammar.y" /* yacc.c:1646 */ +#line 420 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 2185 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2185 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 13: -#line 422 "Aql/grammar.y" /* yacc.c:1646 */ +#line 422 "Aql/grammar.y" /* yacc.c:1661 */ { parser->ast()->scopes()->endNested(); } -#line 2193 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2193 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 14: -#line 425 "Aql/grammar.y" /* yacc.c:1646 */ +#line 425 "Aql/grammar.y" /* yacc.c:1661 */ { parser->ast()->scopes()->endNested(); } -#line 2201 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2201 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 15: -#line 428 "Aql/grammar.y" /* yacc.c:1646 */ +#line 428 "Aql/grammar.y" /* yacc.c:1661 */ { parser->ast()->scopes()->endNested(); } -#line 2209 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2209 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 16: -#line 431 "Aql/grammar.y" /* yacc.c:1646 */ +#line 431 "Aql/grammar.y" /* yacc.c:1661 */ { parser->ast()->scopes()->endNested(); } -#line 2217 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2217 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 17: -#line 434 "Aql/grammar.y" /* yacc.c:1646 */ +#line 434 "Aql/grammar.y" /* yacc.c:1661 */ { parser->ast()->scopes()->endNested(); } -#line 2225 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2225 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 18: -#line 440 "Aql/grammar.y" /* yacc.c:1646 */ +#line 440 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 2232 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2232 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 19: -#line 442 "Aql/grammar.y" /* yacc.c:1646 */ +#line 442 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 2239 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2239 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 20: -#line 447 "Aql/grammar.y" /* yacc.c:1646 */ +#line 447 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 2246 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2246 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 21: -#line 449 "Aql/grammar.y" /* yacc.c:1646 */ +#line 449 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 2253 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2253 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 22: -#line 451 "Aql/grammar.y" /* yacc.c:1646 */ +#line 451 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 2260 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2260 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 23: -#line 453 "Aql/grammar.y" /* yacc.c:1646 */ +#line 453 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 2267 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2267 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 24: -#line 455 "Aql/grammar.y" /* yacc.c:1646 */ +#line 455 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 2274 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2274 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 25: -#line 457 "Aql/grammar.y" /* yacc.c:1646 */ +#line 457 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 2281 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2281 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 26: -#line 459 "Aql/grammar.y" /* yacc.c:1646 */ +#line 459 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 2288 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2288 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 27: -#line 461 "Aql/grammar.y" /* yacc.c:1646 */ +#line 461 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 2295 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2295 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 28: -#line 463 "Aql/grammar.y" /* yacc.c:1646 */ +#line 463 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 2302 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2302 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 29: -#line 465 "Aql/grammar.y" /* yacc.c:1646 */ +#line 465 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 2309 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2309 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 30: -#line 467 "Aql/grammar.y" /* yacc.c:1646 */ +#line 467 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 2316 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2316 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 31: -#line 472 "Aql/grammar.y" /* yacc.c:1646 */ +#line 472 "Aql/grammar.y" /* yacc.c:1661 */ { 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 2327 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2327 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 32: -#line 478 "Aql/grammar.y" /* yacc.c:1646 */ +#line 478 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 2334 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2334 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 33: -#line 480 "Aql/grammar.y" /* yacc.c:1646 */ +#line 480 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 2341 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2341 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 34: -#line 485 "Aql/grammar.y" /* yacc.c:1646 */ +#line 485 "Aql/grammar.y" /* yacc.c:1661 */ { 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 2351 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2351 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 35: -#line 490 "Aql/grammar.y" /* yacc.c:1646 */ +#line 490 "Aql/grammar.y" /* yacc.c:1661 */ { 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 2361 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2361 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 36: -#line 495 "Aql/grammar.y" /* yacc.c:1646 */ +#line 495 "Aql/grammar.y" /* yacc.c:1661 */ { 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 2371 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2371 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 37: -#line 503 "Aql/grammar.y" /* yacc.c:1646 */ +#line 503 "Aql/grammar.y" /* yacc.c:1661 */ { 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); @@ -2380,11 +2380,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 2384 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2384 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 38: -#line 511 "Aql/grammar.y" /* yacc.c:1646 */ +#line 511 "Aql/grammar.y" /* yacc.c:1661 */ { 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); @@ -2393,51 +2393,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 2397 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2397 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 39: -#line 522 "Aql/grammar.y" /* yacc.c:1646 */ +#line 522 "Aql/grammar.y" /* yacc.c:1661 */ { // operand is a reference. can use it directly auto node = parser->ast()->createNodeFilter((yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2407 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2407 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 40: -#line 530 "Aql/grammar.y" /* yacc.c:1646 */ +#line 530 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 2414 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2414 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 41: -#line 535 "Aql/grammar.y" /* yacc.c:1646 */ +#line 535 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 2421 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2421 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 42: -#line 537 "Aql/grammar.y" /* yacc.c:1646 */ +#line 537 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 2428 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2428 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 43: -#line 542 "Aql/grammar.y" /* yacc.c:1646 */ +#line 542 "Aql/grammar.y" /* yacc.c:1661 */ { auto node = parser->ast()->createNodeLet((yyvsp[-2].strval).value, (yyvsp[-2].strval).length, (yyvsp[0].node), true); parser->ast()->addOperation(node); } -#line 2437 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2437 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 44: -#line 549 "Aql/grammar.y" /* yacc.c:1646 */ +#line 549 "Aql/grammar.y" /* yacc.c:1661 */ { 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); @@ -2445,20 +2445,20 @@ yyreduce: (yyval.strval) = (yyvsp[0].strval); } -#line 2449 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2449 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 45: -#line 559 "Aql/grammar.y" /* yacc.c:1646 */ +#line 559 "Aql/grammar.y" /* yacc.c:1661 */ { auto node = parser->ast()->createNodeArray(); parser->pushStack(node); } -#line 2458 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2458 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 46: -#line 562 "Aql/grammar.y" /* yacc.c:1646 */ +#line 562 "Aql/grammar.y" /* yacc.c:1661 */ { auto list = static_cast(parser->popStack()); @@ -2467,11 +2467,11 @@ yyreduce: } (yyval.node) = list; } -#line 2471 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2471 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 47: -#line 573 "Aql/grammar.y" /* yacc.c:1646 */ +#line 573 "Aql/grammar.y" /* yacc.c:1661 */ { /* COLLECT WITH COUNT INTO var OPTIONS ... */ auto scopes = parser->ast()->scopes(); @@ -2481,11 +2481,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 2485 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2485 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 48: -#line 582 "Aql/grammar.y" /* yacc.c:1646 */ +#line 582 "Aql/grammar.y" /* yacc.c:1661 */ { /* COLLECT var = expr WITH COUNT INTO var OPTIONS ... */ auto scopes = parser->ast()->scopes(); @@ -2497,11 +2497,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 2501 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2501 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 49: -#line 593 "Aql/grammar.y" /* yacc.c:1646 */ +#line 593 "Aql/grammar.y" /* yacc.c:1661 */ { /* AGGREGATE var = expr OPTIONS ... */ auto scopes = parser->ast()->scopes(); @@ -2532,11 +2532,11 @@ yyreduce: auto node = parser->ast()->createNodeCollect(parser->ast()->createNodeArray(), (yyvsp[-2].node), into, intoExpression, nullptr, (yyvsp[-1].node)); parser->ast()->addOperation(node); } -#line 2536 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2536 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 50: -#line 623 "Aql/grammar.y" /* yacc.c:1646 */ +#line 623 "Aql/grammar.y" /* yacc.c:1661 */ { /* COLLECT var = expr AGGREGATE var = expr OPTIONS ... */ auto scopes = parser->ast()->scopes(); @@ -2604,11 +2604,11 @@ yyreduce: auto node = parser->ast()->createNodeCollect((yyvsp[-3].node), (yyvsp[-2].node), into, intoExpression, nullptr, (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2608 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2608 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 51: -#line 690 "Aql/grammar.y" /* yacc.c:1646 */ +#line 690 "Aql/grammar.y" /* yacc.c:1661 */ { /* COLLECT var = expr INTO var OPTIONS ... */ auto scopes = parser->ast()->scopes(); @@ -2634,11 +2634,11 @@ yyreduce: auto node = parser->ast()->createNodeCollect((yyvsp[-2].node), parser->ast()->createNodeArray(), into, intoExpression, nullptr, (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2638 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2638 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 52: -#line 715 "Aql/grammar.y" /* yacc.c:1646 */ +#line 715 "Aql/grammar.y" /* yacc.c:1661 */ { /* COLLECT var = expr INTO var KEEP ... OPTIONS ... */ auto scopes = parser->ast()->scopes(); @@ -2669,61 +2669,61 @@ 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 2673 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2673 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 53: -#line 748 "Aql/grammar.y" /* yacc.c:1646 */ +#line 748 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 2680 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2680 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 54: -#line 750 "Aql/grammar.y" /* yacc.c:1646 */ +#line 750 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 2687 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2687 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 55: -#line 755 "Aql/grammar.y" /* yacc.c:1646 */ +#line 755 "Aql/grammar.y" /* yacc.c:1661 */ { auto node = parser->ast()->createNodeAssign((yyvsp[-2].strval).value, (yyvsp[-2].strval).length, (yyvsp[0].node)); parser->pushArrayElement(node); } -#line 2696 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2696 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 56: -#line 762 "Aql/grammar.y" /* yacc.c:1646 */ +#line 762 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = nullptr; } -#line 2704 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2704 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 57: -#line 765 "Aql/grammar.y" /* yacc.c:1646 */ +#line 765 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeValueString((yyvsp[0].strval).value, (yyvsp[0].strval).length); } -#line 2712 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2712 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 58: -#line 768 "Aql/grammar.y" /* yacc.c:1646 */ +#line 768 "Aql/grammar.y" /* yacc.c:1661 */ { 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 2723 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2723 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 59: -#line 777 "Aql/grammar.y" /* yacc.c:1646 */ +#line 777 "Aql/grammar.y" /* yacc.c:1661 */ { 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); @@ -2738,11 +2738,11 @@ yyreduce: node->setFlag(FLAG_KEEP_VARIABLENAME); parser->pushArrayElement(node); } -#line 2742 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2742 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 60: -#line 791 "Aql/grammar.y" /* yacc.c:1646 */ +#line 791 "Aql/grammar.y" /* yacc.c:1661 */ { 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); @@ -2757,11 +2757,11 @@ yyreduce: node->setFlag(FLAG_KEEP_VARIABLENAME); parser->pushArrayElement(node); } -#line 2761 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2761 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 61: -#line 808 "Aql/grammar.y" /* yacc.c:1646 */ +#line 808 "Aql/grammar.y" /* yacc.c:1661 */ { 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); @@ -2770,158 +2770,158 @@ yyreduce: auto node = parser->ast()->createNodeArray(); parser->pushStack(node); } -#line 2774 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2774 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 62: -#line 815 "Aql/grammar.y" /* yacc.c:1646 */ +#line 815 "Aql/grammar.y" /* yacc.c:1661 */ { auto list = static_cast(parser->popStack()); (yyval.node) = list; } -#line 2783 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2783 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 63: -#line 822 "Aql/grammar.y" /* yacc.c:1646 */ +#line 822 "Aql/grammar.y" /* yacc.c:1661 */ { auto node = parser->ast()->createNodeArray(); parser->pushStack(node); } -#line 2792 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2792 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 64: -#line 825 "Aql/grammar.y" /* yacc.c:1646 */ +#line 825 "Aql/grammar.y" /* yacc.c:1661 */ { auto list = static_cast(parser->popStack()); (yyval.node) = list; } -#line 2801 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2801 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 65: -#line 832 "Aql/grammar.y" /* yacc.c:1646 */ +#line 832 "Aql/grammar.y" /* yacc.c:1661 */ { auto node = parser->ast()->createNodeArray(); parser->pushStack(node); } -#line 2810 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2810 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 66: -#line 835 "Aql/grammar.y" /* yacc.c:1646 */ +#line 835 "Aql/grammar.y" /* yacc.c:1661 */ { auto list = static_cast(parser->popStack()); auto node = parser->ast()->createNodeSort(list); parser->ast()->addOperation(node); } -#line 2820 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2820 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 67: -#line 843 "Aql/grammar.y" /* yacc.c:1646 */ +#line 843 "Aql/grammar.y" /* yacc.c:1661 */ { parser->pushArrayElement((yyvsp[0].node)); } -#line 2828 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2828 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 68: -#line 846 "Aql/grammar.y" /* yacc.c:1646 */ +#line 846 "Aql/grammar.y" /* yacc.c:1661 */ { parser->pushArrayElement((yyvsp[0].node)); } -#line 2836 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2836 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 69: -#line 852 "Aql/grammar.y" /* yacc.c:1646 */ +#line 852 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeSortElement((yyvsp[-1].node), (yyvsp[0].node)); } -#line 2844 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2844 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 70: -#line 858 "Aql/grammar.y" /* yacc.c:1646 */ +#line 858 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeValueBool(true); } -#line 2852 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2852 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 71: -#line 861 "Aql/grammar.y" /* yacc.c:1646 */ +#line 861 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeValueBool(true); } -#line 2860 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2860 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 72: -#line 864 "Aql/grammar.y" /* yacc.c:1646 */ +#line 864 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeValueBool(false); } -#line 2868 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2868 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 73: -#line 867 "Aql/grammar.y" /* yacc.c:1646 */ +#line 867 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = (yyvsp[0].node); } -#line 2876 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2876 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 74: -#line 873 "Aql/grammar.y" /* yacc.c:1646 */ +#line 873 "Aql/grammar.y" /* yacc.c:1661 */ { auto offset = parser->ast()->createNodeValueInt(0); auto node = parser->ast()->createNodeLimit(offset, (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2886 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2886 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 75: -#line 878 "Aql/grammar.y" /* yacc.c:1646 */ +#line 878 "Aql/grammar.y" /* yacc.c:1661 */ { auto node = parser->ast()->createNodeLimit((yyvsp[-2].node), (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2895 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2895 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 76: -#line 885 "Aql/grammar.y" /* yacc.c:1646 */ +#line 885 "Aql/grammar.y" /* yacc.c:1661 */ { auto node = parser->ast()->createNodeReturn((yyvsp[0].node)); parser->ast()->addOperation(node); parser->ast()->scopes()->endNested(); } -#line 2905 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2905 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 77: -#line 893 "Aql/grammar.y" /* yacc.c:1646 */ +#line 893 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = (yyvsp[0].node); } -#line 2913 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2913 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 78: -#line 896 "Aql/grammar.y" /* yacc.c:1646 */ +#line 896 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = (yyvsp[0].node); } -#line 2921 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2921 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 79: -#line 902 "Aql/grammar.y" /* yacc.c:1646 */ +#line 902 "Aql/grammar.y" /* yacc.c:1661 */ { if (! parser->configureWriteQuery((yyvsp[-1].node), (yyvsp[0].node))) { YYABORT; @@ -2929,11 +2929,11 @@ yyreduce: auto node = parser->ast()->createNodeRemove((yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2933 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2933 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 80: -#line 912 "Aql/grammar.y" /* yacc.c:1646 */ +#line 912 "Aql/grammar.y" /* yacc.c:1661 */ { if (! parser->configureWriteQuery((yyvsp[-1].node), (yyvsp[0].node))) { YYABORT; @@ -2941,11 +2941,11 @@ yyreduce: auto node = parser->ast()->createNodeInsert((yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2945 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2945 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 81: -#line 922 "Aql/grammar.y" /* yacc.c:1646 */ +#line 922 "Aql/grammar.y" /* yacc.c:1661 */ { if (! parser->configureWriteQuery((yyvsp[-1].node), (yyvsp[0].node))) { YYABORT; @@ -2954,11 +2954,11 @@ yyreduce: AstNode* node = parser->ast()->createNodeUpdate(nullptr, (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2958 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2958 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 82: -#line 930 "Aql/grammar.y" /* yacc.c:1646 */ +#line 930 "Aql/grammar.y" /* yacc.c:1661 */ { if (! parser->configureWriteQuery((yyvsp[-1].node), (yyvsp[0].node))) { YYABORT; @@ -2967,18 +2967,18 @@ yyreduce: AstNode* node = parser->ast()->createNodeUpdate((yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2971 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2971 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 83: -#line 941 "Aql/grammar.y" /* yacc.c:1646 */ +#line 941 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 2978 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2978 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 84: -#line 946 "Aql/grammar.y" /* yacc.c:1646 */ +#line 946 "Aql/grammar.y" /* yacc.c:1661 */ { if (! parser->configureWriteQuery((yyvsp[-1].node), (yyvsp[0].node))) { YYABORT; @@ -2987,11 +2987,11 @@ yyreduce: AstNode* node = parser->ast()->createNodeReplace(nullptr, (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2991 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2991 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 85: -#line 954 "Aql/grammar.y" /* yacc.c:1646 */ +#line 954 "Aql/grammar.y" /* yacc.c:1661 */ { if (! parser->configureWriteQuery((yyvsp[-1].node), (yyvsp[0].node))) { YYABORT; @@ -3000,44 +3000,44 @@ yyreduce: AstNode* node = parser->ast()->createNodeReplace((yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 3004 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3004 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 86: -#line 965 "Aql/grammar.y" /* yacc.c:1646 */ +#line 965 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 3011 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3011 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 87: -#line 970 "Aql/grammar.y" /* yacc.c:1646 */ +#line 970 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.intval) = static_cast(NODE_TYPE_UPDATE); } -#line 3019 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3019 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 88: -#line 973 "Aql/grammar.y" /* yacc.c:1646 */ +#line 973 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.intval) = static_cast(NODE_TYPE_REPLACE); } -#line 3027 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3027 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 89: -#line 979 "Aql/grammar.y" /* yacc.c:1646 */ +#line 979 "Aql/grammar.y" /* yacc.c:1661 */ { // 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 3037 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3037 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 90: -#line 983 "Aql/grammar.y" /* yacc.c:1646 */ +#line 983 "Aql/grammar.y" /* yacc.c:1661 */ { if (! parser->configureWriteQuery((yyvsp[-1].node), (yyvsp[0].node))) { YYABORT; @@ -3082,35 +3082,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 3086 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3086 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 91: -#line 1030 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1030 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeQuantifier(Quantifier::ALL); } -#line 3094 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3094 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 92: -#line 1033 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1033 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeQuantifier(Quantifier::ANY); } -#line 3102 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3102 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 93: -#line 1036 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1036 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeQuantifier(Quantifier::NONE); } -#line 3110 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3110 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 94: -#line 1042 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1042 "Aql/grammar.y" /* yacc.c:1661 */ { auto const scopeType = parser->ast()->scopes()->type(); @@ -3119,83 +3119,83 @@ yyreduce: parser->registerParseError(TRI_ERROR_QUERY_PARSE, "cannot use DISTINCT modifier on top-level query element", yylloc.first_line, yylloc.first_column); } } -#line 3123 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3123 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 95: -#line 1049 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1049 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeDistinct((yyvsp[0].node)); } -#line 3131 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3131 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 96: -#line 1052 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1052 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = (yyvsp[0].node); } -#line 3139 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3139 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 97: -#line 1058 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1058 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = (yyvsp[0].node); } -#line 3147 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3147 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 98: -#line 1061 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1061 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = (yyvsp[0].node); } -#line 3155 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3155 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 99: -#line 1064 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1064 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = (yyvsp[0].node); } -#line 3163 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3163 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 100: -#line 1067 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1067 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = (yyvsp[0].node); } -#line 3171 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3171 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 101: -#line 1070 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1070 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = (yyvsp[0].node); } -#line 3179 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3179 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 102: -#line 1073 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1073 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeRange((yyvsp[-2].node), (yyvsp[0].node)); } -#line 3187 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3187 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 103: -#line 1079 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1079 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.strval) = (yyvsp[0].strval); } -#line 3195 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3195 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 104: -#line 1082 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1082 "Aql/grammar.y" /* yacc.c:1661 */ { std::string temp((yyvsp[-2].strval).value, (yyvsp[-2].strval).length); temp.append("::"); @@ -3209,215 +3209,215 @@ yyreduce: (yyval.strval).value = p; (yyval.strval).length = temp.size(); } -#line 3213 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3213 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 105: -#line 1098 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1098 "Aql/grammar.y" /* yacc.c:1661 */ { parser->pushStack((yyvsp[-1].strval).value); auto node = parser->ast()->createNodeArray(); parser->pushStack(node); } -#line 3224 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3224 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 106: -#line 1103 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1103 "Aql/grammar.y" /* yacc.c:1661 */ { auto list = static_cast(parser->popStack()); (yyval.node) = parser->ast()->createNodeFunctionCall(static_cast(parser->popStack()), list); } -#line 3233 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3233 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 107: -#line 1107 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1107 "Aql/grammar.y" /* yacc.c:1661 */ { auto node = parser->ast()->createNodeArray(); parser->pushStack(node); } -#line 3242 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3242 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 108: -#line 1110 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1110 "Aql/grammar.y" /* yacc.c:1661 */ { auto list = static_cast(parser->popStack()); (yyval.node) = parser->ast()->createNodeFunctionCall("LIKE", list); } -#line 3251 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3251 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 109: -#line 1117 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1117 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeUnaryOperator(NODE_TYPE_OPERATOR_UNARY_PLUS, (yyvsp[0].node)); } -#line 3259 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3259 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 110: -#line 1120 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1120 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeUnaryOperator(NODE_TYPE_OPERATOR_UNARY_MINUS, (yyvsp[0].node)); } -#line 3267 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3267 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 111: -#line 1123 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1123 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeUnaryOperator(NODE_TYPE_OPERATOR_UNARY_NOT, (yyvsp[0].node)); } -#line 3275 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3275 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 112: -#line 1129 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1129 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_OR, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3283 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3283 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 113: -#line 1132 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1132 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_AND, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3291 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3291 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 114: -#line 1135 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1135 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_PLUS, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3299 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3299 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 115: -#line 1138 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1138 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_MINUS, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3307 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3307 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 116: -#line 1141 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1141 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_TIMES, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3315 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3315 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 117: -#line 1144 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1144 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_DIV, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3323 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3323 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 118: -#line 1147 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1147 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_MOD, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3331 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3331 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 119: -#line 1150 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1150 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_EQ, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3339 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3339 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 120: -#line 1153 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1153 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_NE, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3347 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3347 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 121: -#line 1156 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1156 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_LT, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3355 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3355 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 122: -#line 1159 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1159 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_GT, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3363 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3363 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 123: -#line 1162 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1162 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_LE, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3371 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3371 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 124: -#line 1165 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1165 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_GE, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3379 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3379 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 125: -#line 1168 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1168 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_IN, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3387 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3387 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 126: -#line 1171 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1171 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_NIN, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3395 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3395 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 127: -#line 1174 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1174 "Aql/grammar.y" /* yacc.c:1661 */ { AstNode* arguments = parser->ast()->createNodeArray(2); arguments->addMember((yyvsp[-2].node)); arguments->addMember((yyvsp[0].node)); (yyval.node) = parser->ast()->createNodeFunctionCall("LIKE", arguments); } -#line 3406 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3406 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 128: -#line 1180 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1180 "Aql/grammar.y" /* yacc.c:1661 */ { AstNode* arguments = parser->ast()->createNodeArray(2); arguments->addMember((yyvsp[-2].node)); arguments->addMember((yyvsp[0].node)); (yyval.node) = parser->ast()->createNodeFunctionCall("REGEX_TEST", arguments); } -#line 3417 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3417 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 129: -#line 1186 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1186 "Aql/grammar.y" /* yacc.c:1661 */ { AstNode* arguments = parser->ast()->createNodeArray(2); arguments->addMember((yyvsp[-2].node)); @@ -3425,114 +3425,114 @@ yyreduce: AstNode* node = parser->ast()->createNodeFunctionCall("REGEX_TEST", arguments); (yyval.node) = parser->ast()->createNodeUnaryOperator(NODE_TYPE_OPERATOR_UNARY_NOT, node); } -#line 3429 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3429 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 130: -#line 1193 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1193 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeBinaryArrayOperator(NODE_TYPE_OPERATOR_BINARY_ARRAY_EQ, (yyvsp[-3].node), (yyvsp[0].node), (yyvsp[-2].node)); } -#line 3437 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3437 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 131: -#line 1196 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1196 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeBinaryArrayOperator(NODE_TYPE_OPERATOR_BINARY_ARRAY_NE, (yyvsp[-3].node), (yyvsp[0].node), (yyvsp[-2].node)); } -#line 3445 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3445 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 132: -#line 1199 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1199 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeBinaryArrayOperator(NODE_TYPE_OPERATOR_BINARY_ARRAY_LT, (yyvsp[-3].node), (yyvsp[0].node), (yyvsp[-2].node)); } -#line 3453 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3453 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 133: -#line 1202 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1202 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeBinaryArrayOperator(NODE_TYPE_OPERATOR_BINARY_ARRAY_GT, (yyvsp[-3].node), (yyvsp[0].node), (yyvsp[-2].node)); } -#line 3461 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3461 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 134: -#line 1205 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1205 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeBinaryArrayOperator(NODE_TYPE_OPERATOR_BINARY_ARRAY_LE, (yyvsp[-3].node), (yyvsp[0].node), (yyvsp[-2].node)); } -#line 3469 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3469 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 135: -#line 1208 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1208 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeBinaryArrayOperator(NODE_TYPE_OPERATOR_BINARY_ARRAY_GE, (yyvsp[-3].node), (yyvsp[0].node), (yyvsp[-2].node)); } -#line 3477 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3477 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 136: -#line 1211 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1211 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeBinaryArrayOperator(NODE_TYPE_OPERATOR_BINARY_ARRAY_IN, (yyvsp[-3].node), (yyvsp[0].node), (yyvsp[-2].node)); } -#line 3485 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3485 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 137: -#line 1214 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1214 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeBinaryArrayOperator(NODE_TYPE_OPERATOR_BINARY_ARRAY_NIN, (yyvsp[-3].node), (yyvsp[0].node), (yyvsp[-2].node)); } -#line 3493 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3493 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 138: -#line 1220 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1220 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeTernaryOperator((yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); } -#line 3501 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3501 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 139: -#line 1226 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1226 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 3508 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3508 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 140: -#line 1228 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1228 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 3515 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3515 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 141: -#line 1233 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1233 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = (yyvsp[0].node); } -#line 3523 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3523 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 142: -#line 1236 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1236 "Aql/grammar.y" /* yacc.c:1661 */ { parser->ast()->scopes()->start(arangodb::aql::AQL_SCOPE_SUBQUERY); parser->ast()->startSubQuery(); } -#line 3532 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3532 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 143: -#line 1239 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1239 "Aql/grammar.y" /* yacc.c:1661 */ { AstNode* node = parser->ast()->endSubQuery(); parser->ast()->scopes()->endCurrent(); @@ -3543,98 +3543,98 @@ yyreduce: (yyval.node) = parser->ast()->createNodeReference(variableName); } -#line 3547 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3547 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 144: -#line 1252 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1252 "Aql/grammar.y" /* yacc.c:1661 */ { parser->pushArrayElement((yyvsp[0].node)); } -#line 3555 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3555 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 145: -#line 1255 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1255 "Aql/grammar.y" /* yacc.c:1661 */ { parser->pushArrayElement((yyvsp[0].node)); } -#line 3563 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3563 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 146: -#line 1261 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1261 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = (yyvsp[0].node); } -#line 3571 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3571 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 147: -#line 1264 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1264 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = (yyvsp[0].node); } -#line 3579 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3579 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 148: -#line 1270 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1270 "Aql/grammar.y" /* yacc.c:1661 */ { auto node = parser->ast()->createNodeArray(); parser->pushStack(node); } -#line 3588 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3588 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 149: -#line 1273 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1273 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = static_cast(parser->popStack()); } -#line 3596 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3596 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 150: -#line 1279 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1279 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 3603 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3603 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 151: -#line 1281 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1281 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 3610 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3610 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 152: -#line 1286 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1286 "Aql/grammar.y" /* yacc.c:1661 */ { parser->pushArrayElement((yyvsp[0].node)); } -#line 3618 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3618 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 153: -#line 1289 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1289 "Aql/grammar.y" /* yacc.c:1661 */ { parser->pushArrayElement((yyvsp[0].node)); } -#line 3626 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3626 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 154: -#line 1295 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1295 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = nullptr; } -#line 3634 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3634 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 155: -#line 1298 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1298 "Aql/grammar.y" /* yacc.c:1661 */ { if ((yyvsp[0].node) == nullptr) { ABORT_OOM @@ -3646,56 +3646,56 @@ yyreduce: (yyval.node) = (yyvsp[0].node); } -#line 3650 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3650 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 156: -#line 1312 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1312 "Aql/grammar.y" /* yacc.c:1661 */ { auto node = parser->ast()->createNodeObject(); parser->pushStack(node); } -#line 3659 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3659 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 157: -#line 1315 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1315 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = static_cast(parser->popStack()); } -#line 3667 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3667 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 158: -#line 1321 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1321 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 3674 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3674 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 159: -#line 1323 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1323 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 3681 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3681 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 160: -#line 1328 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1328 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 3688 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3688 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 161: -#line 1330 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1330 "Aql/grammar.y" /* yacc.c:1661 */ { } -#line 3695 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3695 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 162: -#line 1335 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1335 "Aql/grammar.y" /* yacc.c:1661 */ { // attribute-name-only (comparable to JS enhanced object literals, e.g. { foo, bar }) auto ast = parser->ast(); @@ -3710,20 +3710,20 @@ yyreduce: auto node = ast->createNodeReference(variable); parser->pushObjectElement((yyvsp[0].strval).value, (yyvsp[0].strval).length, node); } -#line 3714 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3714 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 163: -#line 1349 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1349 "Aql/grammar.y" /* yacc.c:1661 */ { // attribute-name : attribute-value parser->pushObjectElement((yyvsp[-2].strval).value, (yyvsp[-2].strval).length, (yyvsp[0].node)); } -#line 3723 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3723 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 164: -#line 1353 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1353 "Aql/grammar.y" /* yacc.c:1661 */ { // bind-parameter : attribute-value if ((yyvsp[-2].strval).length < 1 || (yyvsp[-2].strval).value[0] == '@') { @@ -3733,100 +3733,100 @@ yyreduce: auto param = parser->ast()->createNodeParameter((yyvsp[-2].strval).value, (yyvsp[-2].strval).length); parser->pushObjectElement(param, (yyvsp[0].node)); } -#line 3737 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3737 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 165: -#line 1362 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1362 "Aql/grammar.y" /* yacc.c:1661 */ { // [ attribute-name-expression ] : attribute-value parser->pushObjectElement((yyvsp[-3].node), (yyvsp[0].node)); } -#line 3746 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3746 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 166: -#line 1369 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1369 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.intval) = 1; } -#line 3754 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3754 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 167: -#line 1372 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1372 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.intval) = (yyvsp[-1].intval) + 1; } -#line 3762 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3762 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 168: -#line 1378 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1378 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = nullptr; } -#line 3770 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3770 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 169: -#line 1381 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1381 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = (yyvsp[0].node); } -#line 3778 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3778 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 170: -#line 1387 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1387 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = nullptr; } -#line 3786 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3786 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 171: -#line 1390 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1390 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeArrayLimit(nullptr, (yyvsp[0].node)); } -#line 3794 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3794 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 172: -#line 1393 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1393 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeArrayLimit((yyvsp[-2].node), (yyvsp[0].node)); } -#line 3802 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3802 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 173: -#line 1399 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1399 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = nullptr; } -#line 3810 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3810 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 174: -#line 1402 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1402 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = (yyvsp[0].node); } -#line 3818 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3818 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 175: -#line 1408 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1408 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeValueString((yyvsp[0].strval).value, (yyvsp[0].strval).length); } -#line 3826 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3826 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 176: -#line 1411 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1411 "Aql/grammar.y" /* yacc.c:1661 */ { char const* p = (yyvsp[0].node)->getStringValue(); size_t const len = (yyvsp[0].node)->getStringLength(); @@ -3835,20 +3835,20 @@ yyreduce: } (yyval.node) = (yyvsp[0].node); } -#line 3839 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3839 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 177: -#line 1419 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1419 "Aql/grammar.y" /* yacc.c:1661 */ { auto tmp = parser->ast()->createNodeValueString((yyvsp[0].strval).value, (yyvsp[0].strval).length); (yyval.node) = parser->ast()->createNodeCollectionDirection((yyvsp[-1].intval), tmp); } -#line 3848 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3848 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 178: -#line 1423 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1423 "Aql/grammar.y" /* yacc.c:1661 */ { char const* p = (yyvsp[0].node)->getStringValue(); size_t const len = (yyvsp[0].node)->getStringLength(); @@ -3857,58 +3857,58 @@ yyreduce: } (yyval.node) = parser->ast()->createNodeCollectionDirection((yyvsp[-1].intval), (yyvsp[0].node)); } -#line 3861 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3861 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 179: -#line 1434 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1434 "Aql/grammar.y" /* yacc.c:1661 */ { auto node = static_cast(parser->peekStack()); node->addMember((yyvsp[0].node)); } -#line 3870 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3870 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 180: -#line 1438 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1438 "Aql/grammar.y" /* yacc.c:1661 */ { auto node = static_cast(parser->peekStack()); node->addMember((yyvsp[0].node)); } -#line 3879 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3879 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 181: -#line 1445 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1445 "Aql/grammar.y" /* yacc.c:1661 */ { auto node = parser->ast()->createNodeArray(); node->addMember((yyvsp[0].node)); (yyval.node) = parser->ast()->createNodeCollectionList(node); } -#line 3889 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3889 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 182: -#line 1450 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1450 "Aql/grammar.y" /* yacc.c:1661 */ { auto node = parser->ast()->createNodeArray(); parser->pushStack(node); node->addMember((yyvsp[-1].node)); } -#line 3899 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3899 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 183: -#line 1454 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1454 "Aql/grammar.y" /* yacc.c:1661 */ { auto node = static_cast(parser->popStack()); (yyval.node) = parser->ast()->createNodeCollectionList(node); } -#line 3908 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3908 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 184: -#line 1458 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1458 "Aql/grammar.y" /* yacc.c:1661 */ { // graph name char const* p = (yyvsp[0].node)->getStringValue(); @@ -3918,60 +3918,60 @@ yyreduce: } (yyval.node) = (yyvsp[0].node); } -#line 3922 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3922 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 185: -#line 1467 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1467 "Aql/grammar.y" /* yacc.c:1661 */ { // graph name (yyval.node) = parser->ast()->createNodeValueString((yyvsp[0].strval).value, (yyvsp[0].strval).length); } -#line 3931 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3931 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 186: -#line 1476 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1476 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.intval) = 2; } -#line 3939 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3939 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 187: -#line 1479 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1479 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.intval) = 1; } -#line 3947 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3947 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 188: -#line 1482 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1482 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.intval) = 0; } -#line 3955 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3955 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 189: -#line 1488 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1488 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeDirection((yyvsp[0].intval), 1); } -#line 3963 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3963 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 190: -#line 1491 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1491 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeDirection((yyvsp[0].intval), (yyvsp[-1].node)); } -#line 3971 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3971 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 191: -#line 1497 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1497 "Aql/grammar.y" /* yacc.c:1661 */ { // variable or collection auto ast = parser->ast(); @@ -4004,27 +4004,27 @@ yyreduce: (yyval.node) = node; } -#line 4008 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4008 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 192: -#line 1529 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1529 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = (yyvsp[0].node); } -#line 4016 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4016 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 193: -#line 1532 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1532 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = (yyvsp[0].node); } -#line 4024 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4024 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 194: -#line 1535 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1535 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = (yyvsp[0].node); @@ -4032,11 +4032,11 @@ yyreduce: ABORT_OOM } } -#line 4036 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4036 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 195: -#line 1542 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1542 "Aql/grammar.y" /* yacc.c:1661 */ { if ((yyvsp[-1].node)->type == NODE_TYPE_EXPANSION) { // create a dummy passthru node that reduces and evaluates the expansion first @@ -4047,20 +4047,20 @@ yyreduce: (yyval.node) = (yyvsp[-1].node); } } -#line 4051 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4051 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 196: -#line 1552 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1552 "Aql/grammar.y" /* yacc.c:1661 */ { parser->ast()->scopes()->start(arangodb::aql::AQL_SCOPE_SUBQUERY); parser->ast()->startSubQuery(); } -#line 4060 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4060 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 197: -#line 1555 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1555 "Aql/grammar.y" /* yacc.c:1661 */ { AstNode* node = parser->ast()->endSubQuery(); parser->ast()->scopes()->endCurrent(); @@ -4071,11 +4071,11 @@ yyreduce: (yyval.node) = parser->ast()->createNodeReference(variableName); } -#line 4075 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4075 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 198: -#line 1565 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1565 "Aql/grammar.y" /* yacc.c:1661 */ { // named variable access, e.g. variable.reference if ((yyvsp[-2].node)->type == NODE_TYPE_EXPANSION) { @@ -4091,11 +4091,11 @@ yyreduce: (yyval.node) = parser->ast()->createNodeAttributeAccess((yyvsp[-2].node), (yyvsp[0].strval).value, (yyvsp[0].strval).length); } } -#line 4095 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4095 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 199: -#line 1580 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1580 "Aql/grammar.y" /* yacc.c:1661 */ { // named variable access, e.g. variable.@reference if ((yyvsp[-2].node)->type == NODE_TYPE_EXPANSION) { @@ -4110,11 +4110,11 @@ yyreduce: (yyval.node) = parser->ast()->createNodeBoundAttributeAccess((yyvsp[-2].node), (yyvsp[0].node)); } } -#line 4114 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4114 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 200: -#line 1594 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1594 "Aql/grammar.y" /* yacc.c:1661 */ { // indexed variable access, e.g. variable[index] if ((yyvsp[-3].node)->type == NODE_TYPE_EXPANSION) { @@ -4129,11 +4129,11 @@ yyreduce: (yyval.node) = parser->ast()->createNodeIndexedAccess((yyvsp[-3].node), (yyvsp[-1].node)); } } -#line 4133 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4133 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 201: -#line 1608 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1608 "Aql/grammar.y" /* yacc.c:1661 */ { // variable expansion, e.g. variable[*], with optional FILTER, LIMIT and RETURN clauses if ((yyvsp[0].intval) > 1 && (yyvsp[-2].node)->type == NODE_TYPE_EXPANSION) { @@ -4157,11 +4157,11 @@ yyreduce: auto scopes = parser->ast()->scopes(); scopes->stackCurrentVariable(scopes->getVariable(nextName)); } -#line 4161 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4161 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 202: -#line 1630 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1630 "Aql/grammar.y" /* yacc.c:1661 */ { auto scopes = parser->ast()->scopes(); scopes->unstackCurrentVariable(); @@ -4180,27 +4180,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 4184 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4184 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 203: -#line 1651 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1651 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = (yyvsp[0].node); } -#line 4192 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4192 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 204: -#line 1654 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1654 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = (yyvsp[0].node); } -#line 4200 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4200 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 205: -#line 1660 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1660 "Aql/grammar.y" /* yacc.c:1661 */ { if ((yyvsp[0].node) == nullptr) { ABORT_OOM @@ -4208,11 +4208,11 @@ yyreduce: (yyval.node) = (yyvsp[0].node); } -#line 4212 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4212 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 206: -#line 1667 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1667 "Aql/grammar.y" /* yacc.c:1661 */ { if ((yyvsp[0].node) == nullptr) { ABORT_OOM @@ -4220,67 +4220,67 @@ yyreduce: (yyval.node) = (yyvsp[0].node); } -#line 4224 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4224 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 207: -#line 1677 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1677 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeValueString((yyvsp[0].strval).value, (yyvsp[0].strval).length); } -#line 4232 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4232 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 208: -#line 1680 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1680 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = (yyvsp[0].node); } -#line 4240 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4240 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 209: -#line 1683 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1683 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeValueNull(); } -#line 4248 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4248 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 210: -#line 1686 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1686 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeValueBool(true); } -#line 4256 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4256 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 211: -#line 1689 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1689 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeValueBool(false); } -#line 4264 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4264 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 212: -#line 1695 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1695 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeCollection((yyvsp[0].strval).value, TRI_TRANSACTION_WRITE); } -#line 4272 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4272 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 213: -#line 1698 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1698 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeCollection((yyvsp[0].strval).value, TRI_TRANSACTION_WRITE); } -#line 4280 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4280 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 214: -#line 1701 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1701 "Aql/grammar.y" /* yacc.c:1661 */ { 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); @@ -4288,43 +4288,43 @@ yyreduce: (yyval.node) = parser->ast()->createNodeParameter((yyvsp[0].strval).value, (yyvsp[0].strval).length); } -#line 4292 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4292 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 215: -#line 1711 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1711 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.node) = parser->ast()->createNodeParameter((yyvsp[0].strval).value, (yyvsp[0].strval).length); } -#line 4300 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4300 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 216: -#line 1717 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1717 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.strval) = (yyvsp[0].strval); } -#line 4308 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4308 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 217: -#line 1720 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1720 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.strval) = (yyvsp[0].strval); } -#line 4316 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4316 "Aql/grammar.cpp" /* yacc.c:1661 */ break; case 218: -#line 1725 "Aql/grammar.y" /* yacc.c:1646 */ +#line 1725 "Aql/grammar.y" /* yacc.c:1661 */ { (yyval.strval) = (yyvsp[0].strval); } -#line 4324 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4324 "Aql/grammar.cpp" /* yacc.c:1661 */ break; -#line 4328 "Aql/grammar.cpp" /* yacc.c:1646 */ +#line 4328 "Aql/grammar.cpp" /* yacc.c:1661 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires diff --git a/arangod/Aql/grammar.h b/arangod/Aql/grammar.h index 463db4cb8c..e4db7dca08 100644 --- a/arangod/Aql/grammar.h +++ b/arangod/Aql/grammar.h @@ -124,7 +124,7 @@ extern int Aqldebug; union YYSTYPE { -#line 19 "Aql/grammar.y" /* yacc.c:1909 */ +#line 19 "Aql/grammar.y" /* yacc.c:1915 */ arangodb::aql::AstNode* node; struct { @@ -134,7 +134,7 @@ union YYSTYPE bool boolval; int64_t intval; -#line 138 "Aql/grammar.hpp" /* yacc.c:1909 */ +#line 138 "Aql/grammar.hpp" /* yacc.c:1915 */ }; typedef union YYSTYPE YYSTYPE; diff --git a/arangod/RestHandler/RestImportHandler.cpp b/arangod/RestHandler/RestImportHandler.cpp index c4ff0ffed2..ab2b5c2d2f 100644 --- a/arangod/RestHandler/RestImportHandler.cpp +++ b/arangod/RestHandler/RestImportHandler.cpp @@ -91,7 +91,6 @@ RestStatus RestImportHandler::execute() { // extract the import type std::string const& documentType = _request->value("type", found); - ///////////////////////////////////////////////////////////////////////////////// switch (_response->transportType()) { case Endpoint::TransportType::HTTP: { if (found && @@ -102,8 +101,8 @@ RestStatus RestImportHandler::execute() { // CSV createFromKeyValueList(); } - } break; - ///////////////////////////////////////////////////////////////////////////////// + break; + } case Endpoint::TransportType::VPP: { if (found && (documentType == "documents" || documentType == "array" || @@ -113,7 +112,8 @@ RestStatus RestImportHandler::execute() { generateNotImplemented("ILLEGAL " + IMPORT_PATH); createFromKeyValueListVPack(); } - } break; + break; + } } ///////////////////////////////////////////////////////////////////////////////// } break; @@ -171,6 +171,7 @@ std::string RestImportHandler::buildParseError(size_t i, //////////////////////////////////////////////////////////////////////////////// /// @brief process a single VelocyPack document of Object Type //////////////////////////////////////////////////////////////////////////////// + int RestImportHandler::handleSingleDocument(SingleCollectionTransaction& trx, RestImportResult& result, VPackBuilder& babies, @@ -191,76 +192,81 @@ int RestImportHandler::handleSingleDocument(SingleCollectionTransaction& trx, registerError(result, errorMsg); return TRI_ERROR_ARANGO_DOCUMENT_TYPE_INVALID; } + + if (!isEdgeCollection) { + babies.add(slice); + return TRI_ERROR_NO_ERROR; + } + // document ok, now import it VPackBuilder newBuilder; - if (isEdgeCollection) { - // add prefixes to _from and _to - if (!_fromPrefix.empty() || !_toPrefix.empty()) { - TransactionBuilderLeaser tempBuilder(&trx); + // add prefixes to _from and _to + if (!_fromPrefix.empty() || !_toPrefix.empty()) { + TransactionBuilderLeaser tempBuilder(&trx); - tempBuilder->openObject(); - if (!_fromPrefix.empty()) { - VPackSlice from = slice.get(StaticStrings::FromString); - if (from.isString()) { - std::string f = from.copyString(); - if (f.find('/') == std::string::npos) { - tempBuilder->add(StaticStrings::FromString, - VPackValue(_fromPrefix + f)); - } - } else if (from.isInteger()) { - uint64_t f = from.getNumber(); + tempBuilder->openObject(); + if (!_fromPrefix.empty()) { + VPackSlice from = slice.get(StaticStrings::FromString); + if (from.isString()) { + std::string f = from.copyString(); + if (f.find('/') == std::string::npos) { tempBuilder->add(StaticStrings::FromString, - VPackValue(_fromPrefix + std::to_string(f))); + VPackValue(_fromPrefix + f)); } - } - if (!_toPrefix.empty()) { - VPackSlice to = slice.get(StaticStrings::ToString); - if (to.isString()) { - std::string t = to.copyString(); - if (t.find('/') == std::string::npos) { - tempBuilder->add(StaticStrings::ToString, - VPackValue(_toPrefix + t)); - } - } else if (to.isInteger()) { - uint64_t t = to.getNumber(); - tempBuilder->add(StaticStrings::ToString, - VPackValue(_toPrefix + std::to_string(t))); - } - } - tempBuilder->close(); - - if (tempBuilder->slice().length() > 0) { - newBuilder = - VPackCollection::merge(slice, tempBuilder->slice(), false, false); - slice = newBuilder.slice(); + } else if (from.isInteger()) { + uint64_t f = from.getNumber(); + tempBuilder->add(StaticStrings::FromString, + VPackValue(_fromPrefix + std::to_string(f))); } } - - try { - arangodb::basics::VelocyPackHelper::checkAndGetStringValue( - slice, StaticStrings::FromString); - arangodb::basics::VelocyPackHelper::checkAndGetStringValue( - slice, StaticStrings::ToString); - } catch (arangodb::basics::Exception const&) { - std::string part = VPackDumper::toString(slice); - if (part.size() > 255) { - // UTF-8 chars in string will be escaped so we can truncate it at any - // point - part = part.substr(0, 255) + "..."; + if (!_toPrefix.empty()) { + VPackSlice to = slice.get(StaticStrings::ToString); + if (to.isString()) { + std::string t = to.copyString(); + if (t.find('/') == std::string::npos) { + tempBuilder->add(StaticStrings::ToString, + VPackValue(_toPrefix + t)); + } + } else if (to.isInteger()) { + uint64_t t = to.getNumber(); + tempBuilder->add(StaticStrings::ToString, + VPackValue(_toPrefix + std::to_string(t))); } + } + tempBuilder->close(); - std::string errorMsg = - positionize(i) + - "missing '_from' or '_to' attribute, offending document: " + part; - - registerError(result, errorMsg); - return TRI_ERROR_ARANGO_INVALID_EDGE_ATTRIBUTE; + if (tempBuilder->slice().length() > 0) { + newBuilder = + VPackCollection::merge(slice, tempBuilder->slice(), false, false); + slice = newBuilder.slice(); } } + try { + arangodb::basics::VelocyPackHelper::checkAndGetStringValue( + slice, StaticStrings::FromString); + arangodb::basics::VelocyPackHelper::checkAndGetStringValue( + slice, StaticStrings::ToString); + } catch (arangodb::basics::Exception const&) { + std::string part = VPackDumper::toString(slice); + if (part.size() > 255) { + // UTF-8 chars in string will be escaped so we can truncate it at any + // point + part = part.substr(0, 255) + "..."; + } + + std::string errorMsg = + positionize(i) + + "missing '_from' or '_to' attribute, offending document: " + part; + + registerError(result, errorMsg); + return TRI_ERROR_ARANGO_INVALID_EDGE_ATTRIBUTE; + } + babies.add(slice); + return TRI_ERROR_NO_ERROR; } @@ -960,6 +966,10 @@ int RestImportHandler::performImport(SingleCollectionTransaction& trx, ++pos; } } + + if (opResult.failed() && res == TRI_ERROR_NO_ERROR) { + res = opResult.code; + } return res; } diff --git a/js/apps/system/_admin/aardvark/APP/frontend/scss/_navbar.scss b/js/apps/system/_admin/aardvark/APP/frontend/scss/_navbar.scss index b76bbaa5cc..17ab0146ef 100644 --- a/js/apps/system/_admin/aardvark/APP/frontend/scss/_navbar.scss +++ b/js/apps/system/_admin/aardvark/APP/frontend/scss/_navbar.scss @@ -41,7 +41,7 @@ $navbar-size: 150px; .arangodbLogo { height: auto; - margin-left: 6px; + margin-left: 3px; margin-top: 15px; width: $navbar-size - 6px; } @@ -171,7 +171,7 @@ $navbar-size: 150px; #communityLabel { color: $c-white; font-family: Roboto,sans-serif; - font-size: 7.3pt; + font-size: 7pt; font-weight: 100; left: 38px; letter-spacing: 1px; diff --git a/js/server/modules/@arangodb/foxx/context.js b/js/server/modules/@arangodb/foxx/context.js index f6bbb88e60..53e5f70135 100644 --- a/js/server/modules/@arangodb/foxx/context.js +++ b/js/server/modules/@arangodb/foxx/context.js @@ -52,6 +52,15 @@ module.exports = return this.service.router.use(path, router, name); } + reverse (routeName, params, suffix) { + return this.service.tree.reverse( + this.service.router._routes, + routeName, + params, + suffix + ); + } + registerType (type, def) { assert( ( diff --git a/js/server/modules/@arangodb/foxx/router/tree.js b/js/server/modules/@arangodb/foxx/router/tree.js index 04683548a1..dd6b4669e5 100644 --- a/js/server/modules/@arangodb/foxx/router/tree.js +++ b/js/server/modules/@arangodb/foxx/router/tree.js @@ -128,7 +128,7 @@ module.exports = const req = new SyntheticRequest(rawReq, this.context); const res = new SyntheticResponse(rawRes, this.context); - dispatch(route, req, res); + dispatch(route, req, res, this); return true; } @@ -176,6 +176,60 @@ module.exports = } return paths; } + + reverse (route, routeName, params, suffix) { + if (typeof params === 'string') { + suffix = params; + params = undefined; + } + const reversedRoute = reverse(route, routeName); + if (!reversedRoute) { + throw new Error(`Route could not be resolved: "${routeName}"`); + } + + params = Object.assign({}, params); + const parts = []; + for (const item of reversedRoute) { + const context = item.router || item.endpoint || item.middleware; + let i = 0; + for (let token of context._pathTokens) { + if (token === tokenize.PARAM) { + const name = context._pathParamNames[i]; + if (params.hasOwnProperty(name)) { + if (Array.isArray(params[name])) { + if (!params[name].length) { + throw new Error(`Not enough values for parameter "${name}"`); + } + token = params[name][0]; + params[name] = params[name].slice(1); + if (!params[name].length) { + delete params[name]; + } + } else { + token = String(params[name]); + delete params[name]; + } + } else { + throw new Error(`Missing value for parameter "${name}"`); + } + i++; + } + if (typeof token === 'string') { + parts.push(token); + } + } + } + + const query = querystring.encode(params); + let path = '/' + parts.join('/'); + if (suffix) { + path += '/' + suffix; + } + if (query) { + path += '?' + query; + } + return path; + } }; function applyPathParams (route) { @@ -204,7 +258,7 @@ function applyPathParams (route) { } } -function dispatch (route, req, res) { +function dispatch (route, req, res, tree) { let pathParams = {}; let queryParams = Object.assign({}, req.queryParams); let headers = Object.assign({}, req.headers); @@ -311,58 +365,8 @@ function dispatch (route, req, res) { req.path = joinPath(req.path, req.suffix); } res._responses = item._responses; - req.reverse = function (routeName, params, suffix) { - if (typeof params === 'string') { - suffix = params; - params = undefined; - } - const reversedRoute = reverse(route.slice(0, i), routeName); - if (!reversedRoute) { - throw new Error(`Route could not be resolved: "${routeName}"`); - } - - params = Object.assign({}, params); - const parts = []; - for (const item of reversedRoute) { - const context = item.router || item.endpoint || item.middleware; - let i = 0; - for (let token of context._pathTokens) { - if (token === tokenize.PARAM) { - const name = context._pathParamNames[i]; - if (params.hasOwnProperty(name)) { - if (Array.isArray(params[name])) { - if (!params[name].length) { - throw new Error(`Not enough values for parameter "${name}"`); - } - token = params[name][0]; - params[name] = params[name].slice(1); - if (!params[name].length) { - delete params[name]; - } - } else { - token = String(params[name]); - delete params[name]; - } - } else { - throw new Error(`Missing value for parameter "${name}"`); - } - i++; - } - if (typeof token === 'string') { - parts.push(token); - } - } - } - - const query = querystring.encode(params); - let path = '/' + parts.join('/'); - if (suffix) { - path += '/' + suffix; - } - if (query) { - path += '?' + query; - } - return path; + req.reverse = function (...args) { + return tree.reverse(route.slice(0, i), ...args); }; if (item.endpoint || item.router) { @@ -507,7 +511,6 @@ function search (router, path, visited) { const child = router._namedRoutes.get(name); if (child.router) { // traverse named child router - console.log(visited.indexOf(child)); if (tail.length && visited.indexOf(child) === -1) { visited.push(child); const result = search(child.router, tail, visited); @@ -516,17 +519,14 @@ function search (router, path, visited) { return result; } } - } else { + } else if (!tail.length) { // found named route - if (!tail.length) { - return [{endpoint: child}]; - } + return [{endpoint: child}]; } } // traverse anonymous child routers for (const child of router._routes) { - console.log(visited.indexOf(child)); if (child.router && visited.indexOf(child) === -1) { visited.push(child); const result = search(child.router, tail, visited); diff --git a/js/server/modules/@arangodb/foxx/service.js b/js/server/modules/@arangodb/foxx/service.js index d8bd641736..b07aedcb14 100644 --- a/js/server/modules/@arangodb/foxx/service.js +++ b/js/server/modules/@arangodb/foxx/service.js @@ -214,10 +214,10 @@ module.exports = buildRoutes () { const service = this; - const tree = new Tree(this.main.context, this.router); + this.tree = new Tree(this.main.context, this.router); let paths = []; try { - paths = tree.buildSwaggerPaths(); + paths = this.tree.buildSwaggerPaths(); } catch (e) { console.errorLines(e.stack); let err = e.cause; @@ -251,7 +251,7 @@ module.exports = let handled = true; try { - handled = tree.dispatch(req, res); + handled = service.tree.dispatch(req, res); } catch (e) { const logLevel = ( !e.statusCode ? 'error' : // Unhandled diff --git a/lib/Basics/StringRef.cpp b/lib/Basics/StringRef.cpp new file mode 100644 index 0000000000..d273b33ab6 --- /dev/null +++ b/lib/Basics/StringRef.cpp @@ -0,0 +1,32 @@ +//////////////////////////////////////////////////////////////////////////////// +/// DISCLAIMER +/// +/// Copyright 2014-2016 ArangoDB GmbH, Cologne, Germany +/// Copyright 2004-2014 triAGENS GmbH, Cologne, Germany +/// +/// Licensed under the Apache License, Version 2.0 (the "License"); +/// you may not use this file except in compliance with the License. +/// You may obtain a copy of the License at +/// +/// http://www.apache.org/licenses/LICENSE-2.0 +/// +/// Unless required by applicable law or agreed to in writing, software +/// distributed under the License is distributed on an "AS IS" BASIS, +/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +/// See the License for the specific language governing permissions and +/// limitations under the License. +/// +/// Copyright holder is ArangoDB GmbH, Cologne, Germany +/// +/// @author Jan Steemann +//////////////////////////////////////////////////////////////////////////////// + +#include "StringRef.h" + +#include + +std::ostream& operator<<(std::ostream& stream, arangodb::StringRef const& ref) { + stream << std::string(ref.data(), ref.length()); + return stream; +} + diff --git a/lib/Basics/StringRef.h b/lib/Basics/StringRef.h index 0c1bd8a014..2cf6c82bc1 100644 --- a/lib/Basics/StringRef.h +++ b/lib/Basics/StringRef.h @@ -30,6 +30,8 @@ #include #include +#include + namespace arangodb { /// @brief a struct describing a C character array @@ -174,6 +176,8 @@ class StringRef { } +std::ostream& operator<<(std::ostream&, arangodb::StringRef const&); + inline bool operator==(arangodb::StringRef const& lhs, arangodb::StringRef const& rhs) { return (lhs.size() == rhs.size() && memcmp(lhs.data(), rhs.data(), lhs.size()) == 0); } @@ -227,4 +231,5 @@ struct equal_to { } + #endif diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 9050e1f207..bc0a72f58e 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -140,6 +140,7 @@ add_library(${LIB_ARANGO} STATIC Basics/StaticStrings.cpp Basics/StringBuffer.cpp Basics/StringHeap.cpp + Basics/StringRef.cpp Basics/StringUtils.cpp Basics/Thread.cpp Basics/ThreadPool.cpp