diff --git a/src/graph/optimizer/Optimizer.cpp b/src/graph/optimizer/Optimizer.cpp index 3dfee9a598f..de570d6bac6 100644 --- a/src/graph/optimizer/Optimizer.cpp +++ b/src/graph/optimizer/Optimizer.cpp @@ -35,11 +35,6 @@ StatusOr Optimizer::findBestPlan(QueryContext *qctx) { auto root = qctx->plan()->root(); auto spaceID = qctx->rctx()->session()->space().id; - // auto status = preprocess(root, qctx, spaceID); - // if (!status.ok()) { - // LOG(ERROR) << "Failed to preprocess plan: " << status; - // } - auto ret = prepare(optCtx.get(), root); NG_RETURN_IF_ERROR(ret); auto rootGroup = std::move(ret).value(); @@ -54,11 +49,6 @@ StatusOr Optimizer::findBestPlan(QueryContext *qctx) { return newRoot; } -// Status Optimizer::preprocess(PlanNode *root, graph::QueryContext *qctx, GraphSpaceID spaceID) { -// ColumnTracker colsUsed; -// return root->pruneCulumns(colsUsed, qctx, spaceID); -// } - Status Optimizer::postprocess(PlanNode *root, graph::QueryContext *qctx, GraphSpaceID spaceID) { if (FLAGS_enable_optimizer_property_pruner_rule) { graph::PropertyTracker propsUsed; diff --git a/src/graph/planner/plan/PlanNode.h b/src/graph/planner/plan/PlanNode.h index d4bea302938..35e19b70b87 100644 --- a/src/graph/planner/plan/PlanNode.h +++ b/src/graph/planner/plan/PlanNode.h @@ -193,6 +193,10 @@ class PlanNode { virtual void accept(PlanNodeVisitor* visitor); + void markDeleted() { + deleted_ = true; + } + virtual PlanNode* clone() const = 0; virtual void calcCost(); @@ -315,6 +319,7 @@ class PlanNode { std::vector dependencies_; std::vector inputVars_; std::vector outputVars_; + bool deleted_{false}; }; std::ostream& operator<<(std::ostream& os, PlanNode::Kind kind); diff --git a/src/graph/visitor/PrunePropertiesVisitor.cpp b/src/graph/visitor/PrunePropertiesVisitor.cpp index e02c4e81f5c..6207b107c22 100644 --- a/src/graph/visitor/PrunePropertiesVisitor.cpp +++ b/src/graph/visitor/PrunePropertiesVisitor.cpp @@ -193,6 +193,7 @@ void PrunePropertiesVisitor::visit(Traverse *node) { status_ = depsPruneProperties(node->dependencies()); } +// AppendVertices should be deleted when no properties it pulls are used by the parent node. void PrunePropertiesVisitor::visit(AppendVertices *node) { auto &colNames = node->colNames(); DCHECK(!colNames.empty()); @@ -215,8 +216,9 @@ void PrunePropertiesVisitor::visit(AppendVertices *node) { if (it2 != propsUsed_.vertexPropsMap.end()) { auto &usedVertexProps = it2->second; if (usedVertexProps.empty()) { - // markAsToBeDeleted(); - // return depsPruneProperties(propsUsed_, qctx_, spaceID_); + node->markDeleted(); + status_ = depsPruneProperties(node->dependencies()); + return; } prunedVertexProps->reserve(usedVertexProps.size()); for (auto &vertexProp : *vertexProps) { @@ -238,9 +240,9 @@ void PrunePropertiesVisitor::visit(AppendVertices *node) { } } } else { - // AppendVertices should be deleted when no props are used by the parent node - // markAsToBeDeleted(); - // It could be done by ColumnPruner + node->markDeleted(); + status_ = depsPruneProperties(node->dependencies()); + return; } node->setVertexProps(std::move(prunedVertexProps)); }