From 004da0c614ee2e9f6e3442b41a363ec8dbe4c01c Mon Sep 17 00:00:00 2001 From: Jan Christoph Uhde Date: Mon, 19 Dec 2016 10:52:42 +0100 Subject: [PATCH] only do not use geoindex in inner loop if we want to sort --- arangod/Aql/OptimizerRules.cpp | 14 ++++++-------- js/server/tests/aql/aql-optimizer-geoindex.js | 2 +- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/arangod/Aql/OptimizerRules.cpp b/arangod/Aql/OptimizerRules.cpp index c65b512f40..ec2a53437d 100644 --- a/arangod/Aql/OptimizerRules.cpp +++ b/arangod/Aql/OptimizerRules.cpp @@ -4343,7 +4343,7 @@ void replaceGeoCondition(ExecutionPlan* plan, GeoIndexInfo& info){ auto ast = plan->getAst(); CalculationNode* newNode = nullptr; Expression* expr = new Expression(ast, static_cast(info.setter)->expression()->nodeForModification()->clone(ast)); - + try { newNode = new CalculationNode(plan, plan->nextId(), expr, static_cast(info.setter)->outVariable()); } catch (...) { @@ -4353,7 +4353,7 @@ void replaceGeoCondition(ExecutionPlan* plan, GeoIndexInfo& info){ plan->registerNode(newNode); plan->replaceNode(info.setter, newNode); - + auto replaceInfo = iterativePreorderWithCondition(EN::FILTER, newNode->expression()->nodeForModification(), &isGeoFilterExpression); auto replacement = ast->createNodeValueBool(true); @@ -4381,10 +4381,11 @@ bool applyGeoOptimization(bool near, ExecutionPlan* plan, GeoIndexInfo& first, G } // We are not allowed to be a inner loop - if(first.collectionNode->isInInnerLoop()){ + if(first.collectionNode->isInInnerLoop() && first.executionNodeType == EN::SORT){ return false; } + LOG_TOPIC(DEBUG, Logger::DEVEL) << "NO INNER LOOP"; // //LOG_TOPIC(DEBUG, Logger::DEVEL) << " attributes: " << res.longitude[0] // // << ", " << res.longitude // // << " of collection:" << res.collectionNode->collection()->getName() @@ -4515,11 +4516,8 @@ void arangodb::aql::geoIndexRule(Optimizer* opt, } } - //if (modified){ - // opt->addPlan(newPlan, rule, modified); - //} else { - opt->addPlan(plan, rule, modified); - //} + + opt->addPlan(plan, rule, modified); LOG_TOPIC(DEBUG, Logger::DEVEL) << "EXIT GEO RULE - modified: " << modified; //LOG_TOPIC(DEBUG, Logger::DEVEL) << ""; diff --git a/js/server/tests/aql/aql-optimizer-geoindex.js b/js/server/tests/aql/aql-optimizer-geoindex.js index 23edece0c6..318bf39457 100644 --- a/js/server/tests/aql/aql-optimizer-geoindex.js +++ b/js/server/tests/aql/aql-optimizer-geoindex.js @@ -209,7 +209,7 @@ function optimizerRuleTestSuite() { , cluster : false , sort : false , filter : true - , index : false + , index : true }, ];