diff --git a/arangod/Aql/Expression.cpp b/arangod/Aql/Expression.cpp index 8231ff3421..eaf6752c77 100644 --- a/arangod/Aql/Expression.cpp +++ b/arangod/Aql/Expression.cpp @@ -1621,6 +1621,7 @@ bool Expression::canRunOnDBServer() { TRI_ASSERT(_node != nullptr); return _node->canRunOnDBServer(); } + bool Expression::isDeterministic() { if (_type == UNPROCESSED) { initExpression(); diff --git a/arangod/Aql/OptimizerRules.cpp b/arangod/Aql/OptimizerRules.cpp index f0f12f091e..53ef0a83fc 100644 --- a/arangod/Aql/OptimizerRules.cpp +++ b/arangod/Aql/OptimizerRules.cpp @@ -7253,10 +7253,12 @@ void arangodb::aql::moveFiltersIntoEnumerateRule(Optimizer* opt, std::unique_ptr if (!expr->isDeterministic() || !expr->canRunOnDBServer()) { break; } + if (expr->node() == nullptr) { break; } + TRI_ASSERT(!expr->willUseV8()); found.clear(); Ast::getReferencedVariables(expr->node(), found); if (found.size() == 1 && found.find(outVariable) != found.end()) {