diff --git a/arangod/VocBase/TraverserOptions.cpp b/arangod/VocBase/TraverserOptions.cpp index 9ba48f9bf9..409db3b59b 100644 --- a/arangod/VocBase/TraverserOptions.cpp +++ b/arangod/VocBase/TraverserOptions.cpp @@ -347,6 +347,33 @@ arangodb::traverser::TraverserOptions::TraverserOptions( useBreadthFirst); } +arangodb::traverser::TraverserOptions::TraverserOptions( + TraverserOptions const& other) + : _trx(other._trx), + _baseVertexExpression(nullptr), + _tmpVar(nullptr), + _ctx(new aql::FixedVarExpressionContext()), + _isCoordinator(arangodb::ServerState::instance()->isCoordinator()), + minDepth(other.minDepth), + maxDepth(other.maxDepth), + useBreadthFirst(other.useBreadthFirst), + uniqueVertices(other.uniqueVertices), + uniqueEdges(other.uniqueEdges) { + TRI_ASSERT(other._baseLookupInfos.empty()); + TRI_ASSERT(other._depthLookupInfo.empty()); + TRI_ASSERT(other._vertexExpressions.empty()); + TRI_ASSERT(other._tmpVar == nullptr); + TRI_ASSERT(other._baseVertexExpression == nullptr); + + // Check for illegal option combination: + TRI_ASSERT(uniqueEdges != + arangodb::traverser::TraverserOptions::UniquenessLevel::GLOBAL); + TRI_ASSERT( + uniqueVertices != + arangodb::traverser::TraverserOptions::UniquenessLevel::GLOBAL || + useBreadthFirst); +} + arangodb::traverser::TraverserOptions::~TraverserOptions() { for (auto& pair : _vertexExpressions) { delete pair.second; diff --git a/arangod/VocBase/TraverserOptions.h b/arangod/VocBase/TraverserOptions.h index 434ab0a333..bca89c3e0c 100644 --- a/arangod/VocBase/TraverserOptions.h +++ b/arangod/VocBase/TraverserOptions.h @@ -135,6 +135,10 @@ struct TraverserOptions { TraverserOptions(arangodb::aql::Query*, arangodb::velocypack::Slice, arangodb::velocypack::Slice); + /// @brief This copy constructor is only working during planning phase. + /// After planning this node should not be copied anywhere. + TraverserOptions(TraverserOptions const&); + virtual ~TraverserOptions(); /// @brief Build a velocypack for cloning in the plan.