diff --git a/src/graph/optimizer/OptGroup.cpp b/src/graph/optimizer/OptGroup.cpp index 28337516eb8..eb73f9d4472 100644 --- a/src/graph/optimizer/OptGroup.cpp +++ b/src/graph/optimizer/OptGroup.cpp @@ -45,6 +45,7 @@ void OptGroup::addGroupNode(OptGroupNode *groupNode) { DCHECK(groupNode != nullptr); DCHECK(groupNode->group() == this); groupNodes_.emplace_back(groupNode); + groupNode->node()->updateSymbols(); } OptGroupNode *OptGroup::makeGroupNode(PlanNode *node) { diff --git a/src/graph/planner/plan/PlanNode.cpp b/src/graph/planner/plan/PlanNode.cpp index abe09aaa9b1..77ceecacf8d 100644 --- a/src/graph/planner/plan/PlanNode.cpp +++ b/src/graph/planner/plan/PlanNode.cpp @@ -370,6 +370,15 @@ void PlanNode::releaseSymbols() { } } +void PlanNode::updateSymbols() { + auto symTbl = qctx_->symTable(); + for (auto out : outputVars_) { + if (out != nullptr) { + symTbl->updateWrittenBy(out->name, out->name, this); + } + } +} + std::ostream& operator<<(std::ostream& os, PlanNode::Kind kind) { os << PlanNode::toString(kind); return os; diff --git a/src/graph/planner/plan/PlanNode.h b/src/graph/planner/plan/PlanNode.h index 0d54422c0ca..4db19bdadf0 100644 --- a/src/graph/planner/plan/PlanNode.h +++ b/src/graph/planner/plan/PlanNode.h @@ -269,6 +269,8 @@ class PlanNode { void releaseSymbols(); + void updateSymbols(); + static const char* toString(Kind kind); std::string toString() const; diff --git a/tests/tck/features/match/MultiQueryParts.feature b/tests/tck/features/match/MultiQueryParts.feature index 7e989932b22..07cdc177de6 100644 --- a/tests/tck/features/match/MultiQueryParts.feature +++ b/tests/tck/features/match/MultiQueryParts.feature @@ -148,6 +148,17 @@ Feature: Multi Query Parts | "Tim Duncan" | "Aron Baynes" | "Pistons" | "Grant Hill" | | "Tim Duncan" | "Aron Baynes" | "Spurs" | "Aron Baynes" | | "Tim Duncan" | "Aron Baynes" | "Spurs" | "Boris Diaw" | + When executing query: + """ + MATCH (v:player{name:"Tony Parker"}) + WITH v AS a + MATCH p=(o:player{name:"Tim Duncan"})-[]->(a) + RETURN o.player.name + """ + Then the result should be, in order: + | o.player.name | + | "Tim Duncan" | + | "Tim Duncan" | Scenario: Optional Match When executing query: