diff --git a/src/graph/optimizer/OptGroup.cpp b/src/graph/optimizer/OptGroup.cpp index 2b68497d229..871513a2704 100644 --- a/src/graph/optimizer/OptGroup.cpp +++ b/src/graph/optimizer/OptGroup.cpp @@ -161,6 +161,8 @@ const PlanNode *OptGroup::getPlan() const { void OptGroup::deleteRefGroupNode(const OptGroupNode *node) { groupNodesReferenced_.erase(node); +#if 0 + // FIXME(yee): This cleanup will crash the optimizer for LDBC queries, try to fix it next PR if (groupNodesReferenced_.empty()) { // Cleanup all opt group nodes in current opt group if it's NOT referenced by any other opt // group nodes @@ -168,6 +170,7 @@ void OptGroup::deleteRefGroupNode(const OptGroupNode *node) { n->release(); } } +#endif } OptGroupNode *OptGroupNode::create(OptContext *ctx, PlanNode *node, const OptGroup *group) { diff --git a/src/graph/optimizer/Optimizer.cpp b/src/graph/optimizer/Optimizer.cpp index 669c258982f..80793021087 100644 --- a/src/graph/optimizer/Optimizer.cpp +++ b/src/graph/optimizer/Optimizer.cpp @@ -128,6 +128,9 @@ void Optimizer::addBodyToGroupNode(OptContext *ctx, namespace { +// The plan node referenced by argument always is in the left side of plan tree. So we only need to +// check whether the left root child of binary input plan node contains what the argument needs in +// its output columns bool findArgumentRefPlanNodeInPath(const std::vector &path, PlanNode *argument) { DCHECK_EQ(argument->kind(), PlanNode::Kind::kArgument); for (int i = path.size() - 1; i >= 0; i--) {