From fa9e55eafb2888a2c181c9368cfc11a4eb561ca8 Mon Sep 17 00:00:00 2001 From: Max Neunhoeffer Date: Fri, 29 Aug 2014 16:57:34 +0200 Subject: [PATCH] Finish taking into account multiple FILTER for IndexRangeRule. --- arangod/Aql/Optimizer.cpp | 5 ----- arangod/Aql/OptimizerRules.cpp | 7 ++++++- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/arangod/Aql/Optimizer.cpp b/arangod/Aql/Optimizer.cpp index 0e5b6a68fa..00d099a005 100644 --- a/arangod/Aql/Optimizer.cpp +++ b/arangod/Aql/Optimizer.cpp @@ -100,12 +100,7 @@ int Optimizer::createPlans (ExecutionPlan* plan, _newPlans.clear(); - // int pass = 1; while (leastDoneLevel < maxRuleLevel) { - /* - std::cout << "Entering pass " << pass << " of query optimization..." - << std::endl; - */ // Find variable usage for all old plans now: for (auto p : _plans.list) { if (! p->varUsageComputed()) { diff --git a/arangod/Aql/OptimizerRules.cpp b/arangod/Aql/OptimizerRules.cpp index f41762645e..80c80a9961 100644 --- a/arangod/Aql/OptimizerRules.cpp +++ b/arangod/Aql/OptimizerRules.cpp @@ -398,7 +398,12 @@ class FilterToEnumCollFinder : public WalkerWorker { bool before (ExecutionNode* en) { _canThrow = (_canThrow || en->canThrow()); // can any node walked over throw? - if (en->getType() == triagens::aql::ExecutionNode::CALCULATION) { + if (en->getType() == triagens::aql::ExecutionNode::FILTER) { + std::vector inVar = en->getVariablesUsedHere(); + TRI_ASSERT(inVar.size() == 1); + _varIds.insert(inVar[0]->id); + } + else if (en->getType() == triagens::aql::ExecutionNode::CALCULATION) { auto outvar = en->getVariablesSetHere(); TRI_ASSERT(outvar.size() == 1); if (_varIds.find(outvar[0]->id) != _varIds.end()) {