diff --git a/arangod/Aql/Optimizer.cpp b/arangod/Aql/Optimizer.cpp index 8b2eba5ce0..3e5addfa03 100644 --- a/arangod/Aql/Optimizer.cpp +++ b/arangod/Aql/Optimizer.cpp @@ -463,6 +463,11 @@ void Optimizer::setupRules () { registerRule("distribute-sort-to-cluster", distributeSortToCluster, distributeSortToCluster_pass10, + false);*/ + + registerRule("remove-unnecessary-remote-scatter", + removeUnnecessaryRemoteScatter, + removeUnnecessaryRemoteScatter_pass10, false); } diff --git a/arangod/Aql/Optimizer.h b/arangod/Aql/Optimizer.h index b668149aa4..114e6cf5c4 100644 --- a/arangod/Aql/Optimizer.h +++ b/arangod/Aql/Optimizer.h @@ -145,7 +145,12 @@ namespace triagens { // move SortNodes into the distribution. // adjust gathernode to also contain the sort criterions. - distributeSortToCluster_pass10 = 1020 + distributeSortToCluster_pass10 = 1020, + + // try to get rid of a RemoteNode->ScatterNode combination which has + // only a SingletonNode and possibly some CalculationNodes as dependencies + + removeUnnecessaryRemoteScatter_pass10 = 1030 }; public: diff --git a/arangod/Aql/OptimizerRules.cpp b/arangod/Aql/OptimizerRules.cpp index d593d7d47f..ccd83c1cf1 100644 --- a/arangod/Aql/OptimizerRules.cpp +++ b/arangod/Aql/OptimizerRules.cpp @@ -1905,6 +1905,7 @@ class ScatterToSingletonViaCalcOnlyFinder: public WalkerWorker { case EN::SCATTER:{ if (_scatter != nullptr) { return true; // somehow found 2 scatter nodes . . . + // FIXME is this even possible? } _scatter = en; return false; // continue . . . @@ -1915,7 +1916,7 @@ class ScatterToSingletonViaCalcOnlyFinder: public WalkerWorker { } case EN::SINGLETON: { if (_scatter == nullptr) { - return true; // found no scatter nodes + return true; // found no scatter nodes, abort } auto newPlan = _plan->clone(); if (newPlan == nullptr) { diff --git a/arangod/Aql/OptimizerRules.h b/arangod/Aql/OptimizerRules.h index 71665095f3..14a9abaa58 100644 --- a/arangod/Aql/OptimizerRules.h +++ b/arangod/Aql/OptimizerRules.h @@ -116,8 +116,6 @@ namespace triagens { int distributeSortToCluster (Optimizer*, ExecutionPlan*, Optimizer::Rule const*); - int distributeSortToCluster (Optimizer*, ExecutionPlan*, Optimizer::Rule const*); - //////////////////////////////////////////////////////////////////////////////// /// @brief try to get rid of a RemoteNode->ScatterNode combination which has /// only a SingletonNode and possibly some CalculationNodes as dependencies