diff --git a/src/validator/FindPathValidator.cpp b/src/validator/FindPathValidator.cpp index 2a1738c08590140393154d081e13969f9b29b8c0..5e4fad0a74dfd3075a75ff3d72ed26bc1d1e8ac7 100644 --- a/src/validator/FindPathValidator.cpp +++ b/src/validator/FindPathValidator.cpp @@ -21,7 +21,7 @@ Status FindPathValidator::validateImpl() { NG_RETURN_IF_ERROR(validateOver(fpSentence->over(), over_)); NG_RETURN_IF_ERROR(validateStep(fpSentence->step(), steps_)); - outputs_.emplace_back("_path", Value::Type::PATH); + outputs_.emplace_back("path", Value::Type::PATH); return Status::OK(); } @@ -75,7 +75,7 @@ Status FindPathValidator::singlePairPlan() { auto* dataCollect = DataCollect::make( qctx_, loop, DataCollect::CollectKind::kBFSShortest, {conjunct->outputVar()}); - dataCollect->setColNames({"_path"}); + dataCollect->setColNames({"path"}); root_ = dataCollect; tail_ = loop; @@ -202,7 +202,7 @@ Status FindPathValidator::allPairPaths() { auto* dataCollect = DataCollect::make( qctx_, loop, DataCollect::CollectKind::kAllPaths, {conjunct->outputVar()}); - dataCollect->setColNames({"_path"}); + dataCollect->setColNames({"path"}); root_ = dataCollect; tail_ = loopDepTail_ == nullptr ? projectFrom : loopDepTail_; @@ -346,7 +346,7 @@ Status FindPathValidator::multiPairPlan() { auto* dataCollect = DataCollect::make( qctx_, loop, DataCollect::CollectKind::kMultiplePairShortest, {conjunct->outputVar()}); - dataCollect->setColNames({"_path"}); + dataCollect->setColNames({"path"}); root_ = dataCollect; tail_ = loopDepTail_ == nullptr ? projectFrom : loopDepTail_; diff --git a/tests/query/v1/test_find_path.py b/tests/query/v1/test_find_path.py index 33e74a2d7c642680609a32fdc839d30833c41447..852030aad0fc4bdd7b62a85cb48f12bd1c977ad2 100644 --- a/tests/query/v1/test_find_path.py +++ b/tests/query/v1/test_find_path.py @@ -18,7 +18,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Tim Duncan", ("like", 0, "Tony Parker")] ] @@ -30,7 +30,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Tim Duncan", ("like", 0, "Tony Parker"), ("like", 0, "LaMarcus Aldridge")] ] @@ -42,7 +42,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Tiago Splitter", ("like", 0, "Tim Duncan"), ("like", 0, "Tony Parker"), ("like", 0, "LaMarcus Aldridge")] ] @@ -54,7 +54,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Tiago Splitter", ("like", 0, "Tim Duncan"), ("teammate", 0, "LaMarcus Aldridge")] ] @@ -66,7 +66,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Tiago Splitter", ("like", 0, "Tim Duncan"), ("teammate", 0, "LaMarcus Aldridge")] ] @@ -80,7 +80,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Tim Duncan", ("like", 0, "Tony Parker")], ["Tim Duncan", ("like", 0, "Tony Parker"), ("like", 0, "Tim Duncan"), ("like", 0, "Tony Parker")], @@ -95,7 +95,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Tim Duncan", ("like", 0, "Tony Parker")], ["Tim Duncan", ("like", 0, "Manu Ginobili")], @@ -114,7 +114,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Tim Duncan", ("like", 0, "Tony Parker")], ["Tim Duncan", ("like", 0, "Tony Parker"), ("like", 0, "LaMarcus Aldridge")], @@ -130,7 +130,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Tim Duncan", ("like", 0, "Tony Parker")], ["Tim Duncan", ("serve", 0, "Spurs")], @@ -153,7 +153,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Tim Duncan", ("like", 0, "Tony Parker")], ["Tim Duncan", ("serve", 0, "Spurs")], @@ -166,7 +166,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Tim Duncan", ("like", 0, "Tony Parker")], ["Tim Duncan", ("teammate", 0, "Tony Parker")], @@ -180,7 +180,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Yao Ming", ("like", 0, "Shaquile O'Neal"), ("like", 0, "Tim Duncan"), ("like", 0, "Manu Ginobili")], ["Yao Ming", ("like", 0, "Shaquile O'Neal"), ("like", 0, "Tim Duncan"), ("teammate", 0, "Manu Ginobili")], @@ -200,7 +200,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Yao Ming", ("like", 0, "Shaquile O'Neal"), ("like", 0, "Tim Duncan"), ("like", 0, "Manu Ginobili")], ["Yao Ming", ("like", 0, "Shaquile O'Neal"), ("like", 0, "Tim Duncan"), ("teammate", 0, "Manu Ginobili")], @@ -218,7 +218,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Yao Ming", ("like", 0, "Tracy McGrady"), ("serve", 0, "Spurs")], ["Yao Ming", ("like", 0, "Shaquile O'Neal"), ("serve", 0, "Lakers")], @@ -234,7 +234,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Tim Duncan", ("like", 0, "Tony Parker")], ["Tim Duncan", ("like", 0, "Tony Parker"), ("like", 0, "LaMarcus Aldridge")], @@ -247,7 +247,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Tiago Splitter", ("like", 0, "Tim Duncan"), ("like", 0, "Tony Parker")], ["Tiago Splitter", ("serve", 0, "Spurs")], @@ -262,7 +262,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Yao Ming", ("like", 0, "Shaquile O'Neal"), ("like", 0, "Tim Duncan"), ("like", 0, "Tony Parker")], ["Yao Ming", ("like", 0, "Tracy McGrady")], @@ -275,7 +275,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Shaquile O\'Neal", ("like", 0, "Tim Duncan"), ("serve", 0, "Spurs")], ["Shaquile O\'Neal", ("serve", 0, "Lakers")], @@ -290,7 +290,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Shaquile O\'Neal", ("like", 0, "Tim Duncan"), ("serve", 0, "Spurs")], ["Shaquile O\'Neal", ("serve", 0, "Lakers")], @@ -305,7 +305,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Shaquile O\'Neal", ("like", 0, "Tim Duncan"), ("like", 0, "Manu Ginobili")], ] @@ -317,7 +317,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Shaquile O\'Neal", ("like", 0, "Tim Duncan"), ("serve", 0, "Spurs")], ["Shaquile O\'Neal", ("serve", 0, "Lakers")], @@ -332,7 +332,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Shaquile O\'Neal", ("like", 0, "Tim Duncan"), ("serve", 0, "Spurs")], ["Shaquile O\'Neal", ("serve", 0, "Lakers")], @@ -347,7 +347,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Shaquile O\'Neal", ("like", 0, "Tim Duncan"), ("like", 0, "Manu Ginobili")], ] @@ -359,7 +359,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Marco Belinelli", ("serve", 0, "Spurs")], ["Marco Belinelli", ("serve", 1, "Spurs")], @@ -374,7 +374,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [] } self.check_column_names(resp, expected_data["column_names"]) @@ -386,7 +386,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Yao Ming", ("like", 0, "Shaquile O'Neal"), ("like", 0, "Tim Duncan"), ("like", 0, "Tony Parker")], ] @@ -399,7 +399,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Shaquile O\'Neal", ("like", 0, "Tim Duncan"), ("like", 0, "Manu Ginobili")], ["Shaquile O\'Neal", ("like", 0, "Tim Duncan"), ("teammate", 0, "Manu Ginobili")], @@ -413,7 +413,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Shaquile O\'Neal", ("like", 0, "Tim Duncan"), ("like", 0, "Manu Ginobili")], ["Shaquile O\'Neal", ("like", 0, "Tim Duncan"), ("teammate", 0, "Manu Ginobili")], @@ -427,7 +427,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Tracy McGrady", ("like", 0, "Rudy Gay"), ("like", 0, "LaMarcus Aldridge"), ("like", 0, "Tony Parker")], ["Shaquile O\'Neal", ("like", 0, "Tim Duncan"), ("like", 0, "Tony Parker")], @@ -441,7 +441,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Tracy McGrady", ("like", 0, "Rudy Gay"), ("like", 0, "LaMarcus Aldridge"), ("like", 0, "Tony Parker")], ["Shaquile O\'Neal", ("like", 0, "Tim Duncan"), ("like", 0, "Tony Parker")], @@ -455,7 +455,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Manu Ginobili", ("like", 0, "Tim Duncan")], ["Tony Parker", ("like", 0, "Tim Duncan")], @@ -469,7 +469,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Manu Ginobili", ("like", 0, "Tim Duncan")], ["Tony Parker", ("like", 0, "Tim Duncan")], @@ -483,7 +483,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Manu Ginobili", ("like", 0, "Tim Duncan")], ["Tony Parker", ("like", 0, "Tim Duncan")], @@ -504,7 +504,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Manu Ginobili", ("like", 0, "Tim Duncan")], ["Tony Parker", ("like", 0, "Tim Duncan")], @@ -526,7 +526,7 @@ class TestFindPath(NebulaTestSuite): resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Tim Duncan", ("like", 0, "Manu Ginobili")], ["Tim Duncan", ("like", 0, "Tony Parker"), ("like", 0, "LaMarcus Aldridge")], @@ -536,80 +536,80 @@ class TestFindPath(NebulaTestSuite): self.check_path_result_without_prop(resp.rows(), expected_data["rows"]) def test_path_limit(self): - stmt = 'FIND SHORTEST PATH FROM "Tim Duncan" TO "Nobody","Spur" OVER like,serve UPTO 3 STEPS | LIMIT 3' + stmt = 'FIND SHORTEST PATH FROM "Tim Duncan" TO "Nobody","Spur" OVER like,serve UPTO 3 STEPS | ORDER BY $-.path | LIMIT 3' resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [] } self.check_column_names(resp, expected_data["column_names"]) self.check_empty_result(resp) - stmt = 'FIND ALL PATH FROM "Tim Duncan" TO "Tony Parker","Spurs" OVER like,serve UPTO 3 STEPS | LIMIT 3' + stmt = 'FIND ALL PATH FROM "Tim Duncan" TO "Tony Parker","Spurs" OVER like,serve UPTO 3 STEPS | ORDER BY $-.path | LIMIT 3' resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ - ["Tim Duncan", ("like", 0, "Tony Parker")], - ["Tim Duncan", ("serve", 0, "Spurs")], - ["Tim Duncan", ("like", 0, "Tony Parker"), ("serve", 0, "Spurs")], + ["Tim Duncan", ("like", 0, "Manu Ginobili"), ("serve", 0, "Spurs")], + ["Tim Duncan", ("like", 0, "Manu Ginobili"), ("like", 0, "Tim Duncan"), ("serve", 0, "Spurs")], + ["Tim Duncan", ("like", 0, "Manu Ginobili"), ("like", 0, "Tim Duncan"), ("like", 0, "Tony Parker")], ] } self.check_column_names(resp, expected_data["column_names"]) self.check_path_result_without_prop(resp.rows(), expected_data["rows"]) stmt = '''$a = GO FROM "Tim Duncan" over * YIELD like._dst AS src, serve._src AS dst; - FIND ALL PATH FROM $a.src TO $a.dst OVER like UPTO 3 STEPS | LIMIT 5''' + FIND ALL PATH FROM $a.src TO $a.dst OVER like UPTO 3 STEPS | ORDER BY $-.path | LIMIT 5''' resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Manu Ginobili", ("like", 0, "Tim Duncan")], - ["Tony Parker", ("like", 0, "Tim Duncan")], - ["Tony Parker", ("like", 0, "Manu Ginobili"), ("like", 0, "Tim Duncan")], - ["Tony Parker", ("like", 0, "LaMarcus Aldridge"), ("like", 0, "Tim Duncan")], + ["Manu Ginobili", ("like", 0, "Tim Duncan"), ("like", 0, "Manu Ginobili"), ("like", 0, "Tim Duncan")], ["Manu Ginobili", ("like", 0, "Tim Duncan"), ("like", 0, "Tony Parker"), ("like", 0, "Tim Duncan")], + ["Tony Parker", ("like", 0, "LaMarcus Aldridge"), ("like", 0, "Tim Duncan")], + ["Tony Parker", ("like", 0, "LaMarcus Aldridge"), ("like", 0, "Tony Parker"), ("like", 0, "Tim Duncan")], ] } self.check_column_names(resp, expected_data["column_names"]) self.check_path_result_without_prop(resp.rows(), expected_data["rows"]) stmt = '''FIND SHORTEST PATH FROM "Shaquile O\'Neal", "Nobody" TO "Manu Ginobili", "Spurs", "Lakers" - OVER * UPTO 5 STEPS | LIMIT 2''' + OVER * UPTO 5 STEPS | ORDER BY $-.path | LIMIT 2''' resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ + ["Shaquile O\'Neal", ("serve", 0, "Lakers")], ["Shaquile O\'Neal", ("like", 0, "Tim Duncan"), ("like", 0, "Manu Ginobili")], - ["Shaquile O\'Neal", ("like", 0, "Tim Duncan"), ("teammate", 0, "Manu Ginobili")], ] } self.check_column_names(resp, expected_data["column_names"]) self.check_path_result_without_prop(resp.rows(), expected_data["rows"]) stmt = '''GO FROM "Tim Duncan" over * YIELD like._dst AS src, serve._src AS dst - | FIND SHORTEST PATH FROM $-.src TO $-.dst OVER like UPTO 5 STEPS | LIMIT 1''' + | FIND SHORTEST PATH FROM $-.src TO $-.dst OVER like UPTO 5 STEPS | ORDER BY $-.path | LIMIT 1''' resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ - ["Tony Parker", ("like", 0, "Tim Duncan")], + ["Manu Ginobili", ("like", 0, "Tim Duncan")] ] } self.check_column_names(resp, expected_data["column_names"]) self.check_path_result_without_prop(resp.rows(), expected_data["rows"]) stmt = '''GO FROM "Tim Duncan" over * YIELD like._dst AS src, serve._src AS dst - | FIND SHORTEST PATH FROM $-.src TO $-.dst OVER like UPTO 5 STEPS | LIMIT 10''' + | FIND SHORTEST PATH FROM $-.src TO $-.dst OVER like UPTO 5 STEPS | ORDER BY $-.path | LIMIT 10''' resp = self.execute(stmt) self.check_resp_succeeded(resp) expected_data = { - "column_names": ["_path"], + "column_names": ["path"], "rows": [ ["Manu Ginobili", ("like", 0, "Tim Duncan")], ["Tony Parker", ("like", 0, "Tim Duncan")],