Skip to content

Commit

Permalink
Multi paths. (#3318)
Browse files Browse the repository at this point in the history
* Add path list for match.

* Support paths.

* Fix test and optimize the linked objects.

Co-authored-by: Yee <2520865+yixinglu@users.noreply.github.com>
  • Loading branch information
CPWstatic and yixinglu authored Nov 22, 2021
1 parent b575189 commit 80e827f
Show file tree
Hide file tree
Showing 22 changed files with 131 additions and 145 deletions.
22 changes: 1 addition & 21 deletions src/common/expression/test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,10 @@ set(expression_test_common_libs
$<TARGET_OBJECTS:version_obj>
$<TARGET_OBJECTS:graph_session_obj>
$<TARGET_OBJECTS:graph_flags_obj>
$<TARGET_OBJECTS:graph_auth_obj>
$<TARGET_OBJECTS:util_obj>
$<TARGET_OBJECTS:expr_visitor_obj>
$<TARGET_OBJECTS:graph_context_obj>
$<TARGET_OBJECTS:planner_obj>
$<TARGET_OBJECTS:validator_obj>
$<TARGET_OBJECTS:plan_obj>
$<TARGET_OBJECTS:idgenerator_obj>
$<TARGET_OBJECTS:graph_obj>
$<TARGET_OBJECTS:ssl_obj>
Expand Down Expand Up @@ -78,16 +76,7 @@ nebula_add_test(
TypeCastingExpressionTest.cpp
VersionedVariableExpressionTest.cpp
OBJECTS
$<TARGET_OBJECTS:expression_obj>
$<TARGET_OBJECTS:datatypes_obj>
$<TARGET_OBJECTS:base_obj>
$<TARGET_OBJECTS:expr_ctx_mock_obj>
$<TARGET_OBJECTS:function_manager_obj>
$<TARGET_OBJECTS:wkt_wkb_io_obj>
$<TARGET_OBJECTS:agg_function_manager_obj>
$<TARGET_OBJECTS:time_obj>
$<TARGET_OBJECTS:time_utils_obj>
$<TARGET_OBJECTS:fs_obj>
${expression_test_common_libs}
LIBRARIES
gtest
Expand All @@ -101,16 +90,7 @@ nebula_add_executable(
SOURCES
ExpressionBenchmark.cpp
OBJECTS
$<TARGET_OBJECTS:expression_obj>
$<TARGET_OBJECTS:datatypes_obj>
$<TARGET_OBJECTS:base_obj>
$<TARGET_OBJECTS:expr_ctx_mock_obj>
$<TARGET_OBJECTS:function_manager_obj>
$<TARGET_OBJECTS:wkt_wkb_io_obj>
$<TARGET_OBJECTS:agg_function_manager_obj>
$<TARGET_OBJECTS:time_obj>
$<TARGET_OBJECTS:time_utils_obj>
$<TARGET_OBJECTS:fs_obj>
${expression_test_common_libs}
LIBRARIES
follybenchmark
Expand Down
49 changes: 4 additions & 45 deletions src/common/geo/io/wkb/test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,53 +2,12 @@
#
# This source code is licensed under Apache 2.0 License.

set(WKB_TEST_LIBS
$<TARGET_OBJECTS:parser_obj>
$<TARGET_OBJECTS:expression_obj>
$<TARGET_OBJECTS:encryption_obj>
$<TARGET_OBJECTS:network_obj>
$<TARGET_OBJECTS:fs_obj>
$<TARGET_OBJECTS:stats_obj>
$<TARGET_OBJECTS:time_obj>
$<TARGET_OBJECTS:common_thrift_obj>
$<TARGET_OBJECTS:thrift_obj>
$<TARGET_OBJECTS:thread_obj>
$<TARGET_OBJECTS:datatypes_obj>
$<TARGET_OBJECTS:base_obj>
$<TARGET_OBJECTS:function_manager_obj>
$<TARGET_OBJECTS:wkt_wkb_io_obj>
$<TARGET_OBJECTS:agg_function_manager_obj>
$<TARGET_OBJECTS:meta_thrift_obj>
$<TARGET_OBJECTS:graph_thrift_obj>
$<TARGET_OBJECTS:http_client_obj>
$<TARGET_OBJECTS:storage_thrift_obj>
$<TARGET_OBJECTS:meta_obj>
$<TARGET_OBJECTS:meta_client_obj>
$<TARGET_OBJECTS:conf_obj>
$<TARGET_OBJECTS:charset_obj>
$<TARGET_OBJECTS:file_based_cluster_id_man_obj>
$<TARGET_OBJECTS:process_obj>
$<TARGET_OBJECTS:time_utils_obj>
$<TARGET_OBJECTS:ft_es_graph_adapter_obj>
$<TARGET_OBJECTS:ws_common_obj>
$<TARGET_OBJECTS:version_obj>
$<TARGET_OBJECTS:graph_session_obj>
$<TARGET_OBJECTS:graph_flags_obj>
$<TARGET_OBJECTS:graph_auth_obj>
$<TARGET_OBJECTS:util_obj>
$<TARGET_OBJECTS:expr_visitor_obj>
$<TARGET_OBJECTS:graph_context_obj>
$<TARGET_OBJECTS:planner_obj>
$<TARGET_OBJECTS:validator_obj>
$<TARGET_OBJECTS:idgenerator_obj>
$<TARGET_OBJECTS:graph_obj>
$<TARGET_OBJECTS:ssl_obj>
$<TARGET_OBJECTS:memory_obj>
)

nebula_add_test(
NAME wkb_test
SOURCES WKBTest.cpp
OBJECTS ${WKB_TEST_LIBS}
OBJECTS
$<TARGET_OBJECTS:datatypes_obj>
$<TARGET_OBJECTS:base_obj>
$<TARGET_OBJECTS:wkt_wkb_io_obj>
LIBRARIES gtest gtest_main ${THRIFT_LIBRARIES} ${PROXYGEN_LIBRARIES}
)
49 changes: 4 additions & 45 deletions src/common/geo/io/wkt/test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,53 +2,12 @@
#
# This source code is licensed under Apache 2.0 License.

set(WKT_TEST_LIBS
$<TARGET_OBJECTS:parser_obj>
$<TARGET_OBJECTS:expression_obj>
$<TARGET_OBJECTS:encryption_obj>
$<TARGET_OBJECTS:network_obj>
$<TARGET_OBJECTS:fs_obj>
$<TARGET_OBJECTS:stats_obj>
$<TARGET_OBJECTS:time_obj>
$<TARGET_OBJECTS:common_thrift_obj>
$<TARGET_OBJECTS:thrift_obj>
$<TARGET_OBJECTS:thread_obj>
$<TARGET_OBJECTS:datatypes_obj>
$<TARGET_OBJECTS:base_obj>
$<TARGET_OBJECTS:function_manager_obj>
$<TARGET_OBJECTS:wkt_wkb_io_obj>
$<TARGET_OBJECTS:agg_function_manager_obj>
$<TARGET_OBJECTS:meta_thrift_obj>
$<TARGET_OBJECTS:graph_thrift_obj>
$<TARGET_OBJECTS:http_client_obj>
$<TARGET_OBJECTS:storage_thrift_obj>
$<TARGET_OBJECTS:meta_obj>
$<TARGET_OBJECTS:meta_client_obj>
$<TARGET_OBJECTS:conf_obj>
$<TARGET_OBJECTS:charset_obj>
$<TARGET_OBJECTS:file_based_cluster_id_man_obj>
$<TARGET_OBJECTS:process_obj>
$<TARGET_OBJECTS:time_utils_obj>
$<TARGET_OBJECTS:ft_es_graph_adapter_obj>
$<TARGET_OBJECTS:ws_common_obj>
$<TARGET_OBJECTS:version_obj>
$<TARGET_OBJECTS:graph_session_obj>
$<TARGET_OBJECTS:graph_flags_obj>
$<TARGET_OBJECTS:graph_auth_obj>
$<TARGET_OBJECTS:util_obj>
$<TARGET_OBJECTS:expr_visitor_obj>
$<TARGET_OBJECTS:graph_context_obj>
$<TARGET_OBJECTS:planner_obj>
$<TARGET_OBJECTS:validator_obj>
$<TARGET_OBJECTS:idgenerator_obj>
$<TARGET_OBJECTS:graph_obj>
$<TARGET_OBJECTS:ssl_obj>
$<TARGET_OBJECTS:memory_obj>
)

nebula_add_test(
NAME wkt_test
SOURCES WKTTest.cpp
OBJECTS ${WKT_TEST_LIBS}
OBJECTS
$<TARGET_OBJECTS:datatypes_obj>
$<TARGET_OBJECTS:base_obj>
$<TARGET_OBJECTS:wkt_wkb_io_obj>
LIBRARIES gtest gtest_main ${THRIFT_LIBRARIES} ${PROXYGEN_LIBRARIES}
)
1 change: 1 addition & 0 deletions src/daemons/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ nebula_add_executable(
$<TARGET_OBJECTS:expr_visitor_obj>
$<TARGET_OBJECTS:optimizer_obj>
$<TARGET_OBJECTS:planner_obj>
$<TARGET_OBJECTS:plan_obj>
$<TARGET_OBJECTS:executor_obj>
$<TARGET_OBJECTS:scheduler_obj>
$<TARGET_OBJECTS:idgenerator_obj>
Expand Down
3 changes: 1 addition & 2 deletions src/graph/context/test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,10 @@ SET(CONTEXT_TEST_LIBS
$<TARGET_OBJECTS:graph_context_obj>
$<TARGET_OBJECTS:expr_visitor_obj>
$<TARGET_OBJECTS:parser_obj>
$<TARGET_OBJECTS:validator_obj>
$<TARGET_OBJECTS:graph_flags_obj>
$<TARGET_OBJECTS:graph_auth_obj>
$<TARGET_OBJECTS:graph_session_obj>
$<TARGET_OBJECTS:planner_obj>
$<TARGET_OBJECTS:plan_obj>
$<TARGET_OBJECTS:idgenerator_obj>
$<TARGET_OBJECTS:ssl_obj>
$<TARGET_OBJECTS:memory_obj>
Expand Down
1 change: 1 addition & 0 deletions src/graph/executor/test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ SET(EXEC_QUERY_TEST_OBJS
$<TARGET_OBJECTS:parser_obj>
$<TARGET_OBJECTS:validator_obj>
$<TARGET_OBJECTS:planner_obj>
$<TARGET_OBJECTS:plan_obj>
$<TARGET_OBJECTS:scheduler_obj>
$<TARGET_OBJECTS:executor_obj>
$<TARGET_OBJECTS:util_obj>
Expand Down
1 change: 1 addition & 0 deletions src/graph/optimizer/test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ set(OPTIMIZER_TEST_LIB
$<TARGET_OBJECTS:graph_flags_obj>
$<TARGET_OBJECTS:util_obj>
$<TARGET_OBJECTS:planner_obj>
$<TARGET_OBJECTS:plan_obj>
$<TARGET_OBJECTS:parser_obj>
$<TARGET_OBJECTS:graph_context_obj>
$<TARGET_OBJECTS:validator_obj>
Expand Down
18 changes: 11 additions & 7 deletions src/graph/planner/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,17 @@ nebula_add_library(
match/PropIndexSeek.cpp
match/VertexIdSeek.cpp
match/LabelIndexSeek.cpp
ngql/PathPlanner.cpp
ngql/GoPlanner.cpp
ngql/SubgraphPlanner.cpp
ngql/LookupPlanner.cpp
ngql/FetchVerticesPlanner.cpp
ngql/FetchEdgesPlanner.cpp
ngql/MaintainPlanner.cpp
)

nebula_add_library(
plan_obj OBJECT
plan/PlanNode.cpp
plan/ExecutionPlan.cpp
plan/Algo.cpp
Expand All @@ -34,11 +45,4 @@ nebula_add_library(
plan/Query.cpp
plan/Mutate.cpp
plan/Maintain.cpp
ngql/PathPlanner.cpp
ngql/GoPlanner.cpp
ngql/SubgraphPlanner.cpp
ngql/LookupPlanner.cpp
ngql/FetchVerticesPlanner.cpp
ngql/FetchEdgesPlanner.cpp
ngql/MaintainPlanner.cpp
)
7 changes: 1 addition & 6 deletions src/graph/planner/Planner.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

#include "common/base/Base.h"
#include "graph/context/ast/AstContext.h"
#include "graph/planner/plan/ExecutionPlan.h"
#include "graph/planner/plan/PlanNode.h"

namespace nebula {
Expand All @@ -23,12 +24,6 @@ extern const char* kVertexID;
extern const char* kVertices;
extern const char* kEdges;

struct SubPlan {
// root and tail of a subplan.
PlanNode* root{nullptr};
PlanNode* tail{nullptr};
};

std::ostream& operator<<(std::ostream& os, const SubPlan& subplan);

using MatchFunc = std::function<bool(AstContext* astContext)>;
Expand Down
7 changes: 6 additions & 1 deletion src/graph/planner/plan/ExecutionPlan.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,14 @@ struct PlanDescription;
struct PlanNodeDescription;

namespace graph {

class PlanNode;

struct SubPlan {
// root and tail of a subplan.
PlanNode* root{nullptr};
PlanNode* tail{nullptr};
};

class ExecutionPlan final {
public:
explicit ExecutionPlan(PlanNode* root = nullptr);
Expand Down
1 change: 1 addition & 0 deletions src/graph/planner/test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ nebula_add_test(
$<TARGET_OBJECTS:validator_obj>
$<TARGET_OBJECTS:expr_visitor_obj>
$<TARGET_OBJECTS:planner_obj>
$<TARGET_OBJECTS:plan_obj>
$<TARGET_OBJECTS:executor_obj>
$<TARGET_OBJECTS:scheduler_obj>
$<TARGET_OBJECTS:util_obj>
Expand Down
1 change: 0 additions & 1 deletion src/graph/util/PlannerUtil.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
#include "common/expression/ColumnExpression.h"
#include "graph/context/QueryContext.h"
#include "graph/context/ast/QueryAstContext.h"
#include "graph/planner/Planner.h"
#include "graph/planner/plan/Query.h"

namespace nebula {
Expand Down
1 change: 0 additions & 1 deletion src/graph/util/ValidateUtil.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
#include "common/expression/ColumnExpression.h"
#include "graph/context/QueryContext.h"
#include "graph/context/ast/QueryAstContext.h"
#include "graph/planner/Planner.h"
#include "graph/planner/plan/Query.h"
#include "graph/util/ExpressionUtils.h"

Expand Down
3 changes: 1 addition & 2 deletions src/graph/util/test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,10 @@ nebula_add_test(
$<TARGET_OBJECTS:graph_auth_obj>
$<TARGET_OBJECTS:graph_flags_obj>
$<TARGET_OBJECTS:util_obj>
$<TARGET_OBJECTS:planner_obj>
$<TARGET_OBJECTS:plan_obj>
$<TARGET_OBJECTS:parser_obj>
$<TARGET_OBJECTS:graph_context_obj>
$<TARGET_OBJECTS:memory_obj>
$<TARGET_OBJECTS:validator_obj>
$<TARGET_OBJECTS:version_obj>
LIBRARIES
gtest
Expand Down
5 changes: 4 additions & 1 deletion src/graph/validator/MatchValidator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,10 @@ Status MatchValidator::validateImpl() {

auto matchClauseCtx = getContext<MatchClauseContext>();
matchClauseCtx->aliasesUsed = aliasesUsed;
NG_RETURN_IF_ERROR(validatePath(matchClause->path(), *matchClauseCtx));
if (matchClause->path()->pathSize() > 1) {
return Status::SemanticError("Multi paths not supported.");
}
NG_RETURN_IF_ERROR(validatePath(matchClause->path()->path(0) /* TODO */, *matchClauseCtx));
if (matchClause->where() != nullptr) {
auto whereClauseCtx = getContext<WhereClauseContext>();
whereClauseCtx->aliasesUsed = &matchClauseCtx->aliasesGenerated;
Expand Down
1 change: 1 addition & 0 deletions src/graph/validator/test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ set(VALIDATOR_TEST_LIBS
$<TARGET_OBJECTS:validator_obj>
$<TARGET_OBJECTS:expr_visitor_obj>
$<TARGET_OBJECTS:planner_obj>
$<TARGET_OBJECTS:plan_obj>
$<TARGET_OBJECTS:graph_flags_obj>
$<TARGET_OBJECTS:parser_obj>
$<TARGET_OBJECTS:idgenerator_obj>
Expand Down
1 change: 1 addition & 0 deletions src/graph/visitor/test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ nebula_add_test(
$<TARGET_OBJECTS:util_obj>
$<TARGET_OBJECTS:validator_obj>
$<TARGET_OBJECTS:expr_visitor_obj>
$<TARGET_OBJECTS:plan_obj>
$<TARGET_OBJECTS:planner_obj>
$<TARGET_OBJECTS:graph_session_obj>
$<TARGET_OBJECTS:graph_flags_obj>
Expand Down
19 changes: 17 additions & 2 deletions src/parser/MatchSentence.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ std::string MatchClause::toString() const {
}

buf += "MATCH ";
buf += path_->toString();
buf += pathList_->toString();
if (where_ != nullptr) {
buf += " ";
buf += where_->toString();
Expand Down Expand Up @@ -224,7 +224,7 @@ std::string MatchSentence::toString() const {
std::string buf;
buf.reserve(256);

for (auto &clause : clauses_) {
for (auto& clause : clauses_) {
buf += clause->toString();
buf += " ";
}
Expand All @@ -234,4 +234,19 @@ std::string MatchSentence::toString() const {
return buf;
}

MatchPathList::MatchPathList(MatchPath* path) { pathList_.emplace_back(path); }

void MatchPathList::add(MatchPath* path) { pathList_.emplace_back(path); }

std::string MatchPathList::toString() const {
std::string buf;
buf.reserve(256);
std::vector<std::string> pathList;
std::transform(pathList_.begin(), pathList_.end(), std::back_inserter(pathList), [](auto& path) {
return path->toString();
});
folly::join(",", pathList.begin(), pathList.end(), buf);
return buf;
}

} // namespace nebula
Loading

0 comments on commit 80e827f

Please sign in to comment.