From 4bac7dd3082dc43b230ae2e4194fbf99ad494dee Mon Sep 17 00:00:00 2001 From: xtcyclist <7731943+xtcyclist@users.noreply.github.com> Date: Thu, 20 Oct 2022 13:28:38 +0800 Subject: [PATCH] Partial fix of optional match, for bug #4745. --- src/graph/planner/match/MatchPlanner.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/graph/planner/match/MatchPlanner.cpp b/src/graph/planner/match/MatchPlanner.cpp index 8110793578d..68d10babb6d 100644 --- a/src/graph/planner/match/MatchPlanner.cpp +++ b/src/graph/planner/match/MatchPlanner.cpp @@ -109,6 +109,7 @@ Status MatchPlanner::connectMatchPlan(SubPlan& queryPlan, MatchClauseContext* ma } queryPlan = SegmentsConnector::leftJoin(matchCtx->qctx, queryPlan, matchPlan, intersectedAliases); + matchCtx->isOptional = false; } else { queryPlan = SegmentsConnector::innerJoin(matchCtx->qctx, queryPlan, matchPlan, intersectedAliases); @@ -127,7 +128,8 @@ Status MatchPlanner::genQueryPartPlan(QueryContext* qctx, for (auto& match : queryPart.matchs) { NG_RETURN_IF_ERROR(connectMatchPlan(queryPlan, match.get())); // connect match filter - if (match->where != nullptr && !match->isOptional) { + if ((match->where != nullptr && !match->isOptional) || + (match->isOptional && queryPart.matchs.size())) { match->where->inputColNames = queryPlan.root->colNames(); auto wherePlanStatus = std::make_unique()->transform(match->where.get()); NG_RETURN_IF_ERROR(wherePlanStatus);