diff --git a/src/graph/validator/SetValidator.cpp b/src/graph/validator/SetValidator.cpp index a0b7a9ab92a..f808f248c63 100644 --- a/src/graph/validator/SetValidator.cpp +++ b/src/graph/validator/SetValidator.cpp @@ -77,11 +77,29 @@ Status SetValidator::toPlan() { tail_ = lValidator_->tail(); return Status::OK(); } + removeStartNode(lValidator_.get()); + removeStartNode(rValidator_.get()); tail_ = PassThroughNode::make(qctx_, nullptr); NG_RETURN_IF_ERROR(lValidator_->appendPlan(tail_)); NG_RETURN_IF_ERROR(rValidator_->appendPlan(tail_)); return Status::OK(); } +void SetValidator::removeStartNode(Validator* validator) { + if (validator->tail()->kind() != PlanNode::Kind::kStart) { + return; + } + + PlanNode* node = validator->root(); + while (node->dependencies()[0]->dependencies().size() > 0UL) { + node = const_cast(node->dependencies()[0]); + } + if (node->dependencies().size() == 1UL) { + // Remain one size for add dependency + node->dependencies()[0] = nullptr; + validator->setTail(node); + } +} + } // namespace graph } // namespace nebula diff --git a/src/graph/validator/SetValidator.h b/src/graph/validator/SetValidator.h index 68c651e92ed..f4ce2caa0aa 100644 --- a/src/graph/validator/SetValidator.h +++ b/src/graph/validator/SetValidator.h @@ -41,6 +41,8 @@ class SetValidator final : public Validator { */ Status toPlan() override; + void removeStartNode(Validator* validator); + private: std::unique_ptr lValidator_; std::unique_ptr rValidator_; diff --git a/tests/tck/features/set/Set.feature b/tests/tck/features/set/Set.feature index 7e8ce37f1a0..f5b6d6ba98c 100644 --- a/tests/tck/features/set/Set.feature +++ b/tests/tck/features/set/Set.feature @@ -254,6 +254,16 @@ Feature: Set Test | "Manu Ginobili" | 2002 | "Spurs" | | "Tony Parker" | 1999 | "Spurs" | | "Tony Parker" | 2018 | "Hornets" | + When executing query: + """ + fetch prop on player 'Tony Parker' yield player.age AS age + UNION + go from 'Tim Duncan' over like yield $$.player.age AS age + """ + Then the result should be, in any order: + | age | + | 36 | + | 41 | Scenario: Minus Given a graph with space named "nba"