diff --git a/src/graph/optimizer/rule/CollapseProjectRule.cpp b/src/graph/optimizer/rule/CollapseProjectRule.cpp index c2f6764229a..a40974c1c0d 100644 --- a/src/graph/optimizer/rule/CollapseProjectRule.cpp +++ b/src/graph/optimizer/rule/CollapseProjectRule.cpp @@ -9,6 +9,7 @@ #include "graph/optimizer/OptGroup.h" #include "graph/planner/plan/PlanNode.h" #include "graph/planner/plan/Query.h" +#include "graph/util/ExpressionUtils.h" using nebula::graph::PlanNode; using nebula::graph::QueryContext; diff --git a/src/graph/optimizer/rule/OptimizeEdgeIndexScanByFilterRule.cpp b/src/graph/optimizer/rule/OptimizeEdgeIndexScanByFilterRule.cpp index 92964ec0f47..3471d0947d1 100644 --- a/src/graph/optimizer/rule/OptimizeEdgeIndexScanByFilterRule.cpp +++ b/src/graph/optimizer/rule/OptimizeEdgeIndexScanByFilterRule.cpp @@ -11,6 +11,7 @@ #include "graph/optimizer/OptimizerUtils.h" #include "graph/planner/plan/PlanNode.h" #include "graph/planner/plan/Scan.h" +#include "graph/util/ExpressionUtils.h" using nebula::Expression; using nebula::graph::EdgeIndexFullScan; diff --git a/src/graph/optimizer/rule/OptimizeTagIndexScanByFilterRule.cpp b/src/graph/optimizer/rule/OptimizeTagIndexScanByFilterRule.cpp index 008cce33843..60bf9ab1f80 100644 --- a/src/graph/optimizer/rule/OptimizeTagIndexScanByFilterRule.cpp +++ b/src/graph/optimizer/rule/OptimizeTagIndexScanByFilterRule.cpp @@ -12,6 +12,7 @@ #include "graph/optimizer/rule/IndexScanRule.h" #include "graph/planner/plan/PlanNode.h" #include "graph/planner/plan/Scan.h" +#include "graph/util/ExpressionUtils.h" using nebula::graph::Filter; using nebula::graph::OptimizerUtils; diff --git a/src/graph/optimizer/rule/PushLimitDownGetNeighborsRule.cpp b/src/graph/optimizer/rule/PushLimitDownGetNeighborsRule.cpp index ce806640403..85a2ee6ff92 100644 --- a/src/graph/optimizer/rule/PushLimitDownGetNeighborsRule.cpp +++ b/src/graph/optimizer/rule/PushLimitDownGetNeighborsRule.cpp @@ -9,6 +9,7 @@ #include "graph/optimizer/OptGroup.h" #include "graph/planner/plan/PlanNode.h" #include "graph/planner/plan/Query.h" +#include "graph/util/ExpressionUtils.h" using nebula::graph::GetNeighbors; using nebula::graph::Limit; diff --git a/src/graph/optimizer/rule/PushStepLimitDownGetNeighborsRule.cpp b/src/graph/optimizer/rule/PushStepLimitDownGetNeighborsRule.cpp index 460725bc90f..4cc457b95bc 100644 --- a/src/graph/optimizer/rule/PushStepLimitDownGetNeighborsRule.cpp +++ b/src/graph/optimizer/rule/PushStepLimitDownGetNeighborsRule.cpp @@ -9,6 +9,7 @@ #include "graph/optimizer/OptGroup.h" #include "graph/planner/plan/PlanNode.h" #include "graph/planner/plan/Query.h" +#include "graph/util/ExpressionUtils.h" using nebula::graph::GetNeighbors; using nebula::graph::Limit; diff --git a/src/graph/optimizer/rule/PushStepSampleDownGetNeighborsRule.cpp b/src/graph/optimizer/rule/PushStepSampleDownGetNeighborsRule.cpp index 30d9afb4c74..39beb7be84d 100644 --- a/src/graph/optimizer/rule/PushStepSampleDownGetNeighborsRule.cpp +++ b/src/graph/optimizer/rule/PushStepSampleDownGetNeighborsRule.cpp @@ -9,6 +9,7 @@ #include "graph/optimizer/OptGroup.h" #include "graph/planner/plan/PlanNode.h" #include "graph/planner/plan/Query.h" +#include "graph/util/ExpressionUtils.h" using nebula::graph::GetNeighbors; using nebula::graph::PlanNode; diff --git a/src/graph/planner/plan/Query.cpp b/src/graph/planner/plan/Query.cpp index 988f8b33245..b45c4bb88a6 100644 --- a/src/graph/planner/plan/Query.cpp +++ b/src/graph/planner/plan/Query.cpp @@ -10,6 +10,7 @@ #include #include +#include "graph/util/ExpressionUtils.h" #include "graph/util/ToJson.h" using folly::stringPrintf; @@ -17,6 +18,11 @@ using folly::stringPrintf; namespace nebula { namespace graph { +int64_t Explore::limit() const { + QueryExpressionContext ctx; + DCHECK(ExpressionUtils::isEvaluableExpr(limit_)); + return DCHECK_NOTNULL(limit_)->eval(ctx).getInt(); +} std::unique_ptr Explore::explain() const { auto desc = SingleInputNode::explain(); addDescription("space", folly::to(space_), desc.get()); @@ -318,6 +324,17 @@ void Sort::cloneMembers(const Sort& p) { factors_ = std::move(factors); } +// Get constant count value +int64_t Limit::count() const { + if (count_ == nullptr) { + return -1; + } + DCHECK(ExpressionUtils::isEvaluableExpr(count_)); + QueryExpressionContext ctx; + auto s = count_->eval(ctx).getInt(); + DCHECK_GE(s, 0); + return s; +} std::unique_ptr Limit::explain() const { auto desc = SingleInputNode::explain(); addDescription("offset", folly::to(offset_), desc.get()); @@ -364,6 +381,15 @@ void TopN::cloneMembers(const TopN& l) { count_ = l.count_; } +// Get constant count +int64_t Sample::count() const { + DCHECK(ExpressionUtils::isEvaluableExpr(count_)); + QueryExpressionContext qec; + auto count = count_->eval(qec).getInt(); + DCHECK_GE(count, 0); + return count; +} + std::unique_ptr Sample::explain() const { auto desc = SingleInputNode::explain(); addDescription("count", count_->toString(), desc.get()); diff --git a/src/graph/planner/plan/Query.h b/src/graph/planner/plan/Query.h index 2f74d3883d7..076b7471b53 100644 --- a/src/graph/planner/plan/Query.h +++ b/src/graph/planner/plan/Query.h @@ -35,11 +35,7 @@ class Explore : public SingleInputNode { bool dedup() const { return dedup_; } // Get the constant limit value - int64_t limit() const { - QueryExpressionContext ctx; - DCHECK(ExpressionUtils::isEvaluableExpr(limit_)); - return DCHECK_NOTNULL(limit_)->eval(ctx).getInt(); - } + int64_t limit() const; // Get the limit value in runtime int64_t limit(QueryExpressionContext& ctx) const { @@ -682,17 +678,7 @@ class Limit final : public SingleInputNode { int64_t offset() const { return offset_; } // Get constant count value - int64_t count() const { - if (count_ == nullptr) { - return -1; - } - DCHECK(ExpressionUtils::isEvaluableExpr(count_)); - QueryExpressionContext ctx; - auto s = count_->eval(ctx).getInt(); - DCHECK_GE(s, 0); - return s; - } - + int64_t count() const; // Get count in runtime int64_t count(QueryExpressionContext& ctx) const { if (count_ == nullptr) { @@ -801,13 +787,7 @@ class Sample final : public SingleInputNode { } // Get constant count - int64_t count() const { - DCHECK(ExpressionUtils::isEvaluableExpr(count_)); - QueryExpressionContext qec; - auto count = count_->eval(qec).getInt(); - DCHECK_GE(count, 0); - return count; - } + int64_t count() const; // Get Runtime count int64_t count(QueryExpressionContext& qec) const { diff --git a/src/graph/util/FTIndexUtils.cpp b/src/graph/util/FTIndexUtils.cpp index 289d0d20606..82d97cee8f4 100644 --- a/src/graph/util/FTIndexUtils.cpp +++ b/src/graph/util/FTIndexUtils.cpp @@ -6,6 +6,7 @@ #include "graph/util/FTIndexUtils.h" #include "common/expression/Expression.h" +#include "graph/util/ExpressionUtils.h" DECLARE_uint32(ft_request_retry_times); diff --git a/src/graph/util/FTIndexUtils.h b/src/graph/util/FTIndexUtils.h index 43ae6319220..cbca1bd4444 100644 --- a/src/graph/util/FTIndexUtils.h +++ b/src/graph/util/FTIndexUtils.h @@ -9,7 +9,6 @@ #include "clients/meta/MetaClient.h" #include "common/base/StatusOr.h" #include "common/plugin/fulltext/elasticsearch/ESGraphAdapter.h" -#include "graph/util/ExpressionUtils.h" #include "graph/util/SchemaUtil.h" #include "parser/MaintainSentences.h" diff --git a/src/graph/validator/FindPathValidator.cpp b/src/graph/validator/FindPathValidator.cpp index 8fcf186f2df..bfd39c137d6 100644 --- a/src/graph/validator/FindPathValidator.cpp +++ b/src/graph/validator/FindPathValidator.cpp @@ -7,6 +7,7 @@ #include "graph/planner/plan/Algo.h" #include "graph/planner/plan/Logic.h" +#include "graph/util/ExpressionUtils.h" #include "graph/util/ValidateUtil.h" namespace nebula { diff --git a/src/graph/validator/MutateValidator.cpp b/src/graph/validator/MutateValidator.cpp index 9048dab224f..9fbb5500a85 100644 --- a/src/graph/validator/MutateValidator.cpp +++ b/src/graph/validator/MutateValidator.cpp @@ -7,6 +7,7 @@ #include "common/expression/LabelAttributeExpression.h" #include "graph/planner/plan/Mutate.h" #include "graph/planner/plan/Query.h" +#include "graph/util/ExpressionUtils.h" #include "graph/util/SchemaUtil.h" #include "graph/visitor/RewriteSymExprVisitor.h" diff --git a/src/graph/visitor/VidExtractVisitor.cpp b/src/graph/visitor/VidExtractVisitor.cpp index c70b75c4420..82cc0e1dff4 100644 --- a/src/graph/visitor/VidExtractVisitor.cpp +++ b/src/graph/visitor/VidExtractVisitor.cpp @@ -5,6 +5,8 @@ #include "graph/visitor/VidExtractVisitor.h" +#include "graph/util/ExpressionUtils.h" + namespace nebula { namespace graph { diff --git a/src/mock/MockCluster.h b/src/mock/MockCluster.h index 8548a0e51f4..cd8d565a445 100644 --- a/src/mock/MockCluster.h +++ b/src/mock/MockCluster.h @@ -41,9 +41,7 @@ class MockCluster { void startMeta(const std::string& rootPath, HostAddr addr = HostAddr("127.0.0.1", 0)); - void startStorage(HostAddr addr, - const std::string& rootPath, - SchemaVer schemaVerCount = 1); + void startStorage(HostAddr addr, const std::string& rootPath, SchemaVer schemaVerCount = 1); /** * Init a meta client connect to current meta server. diff --git a/src/parser/Clauses.cpp b/src/parser/Clauses.cpp index bd483639584..e5eddbb8399 100644 --- a/src/parser/Clauses.cpp +++ b/src/parser/Clauses.cpp @@ -5,8 +5,19 @@ #include "parser/Clauses.h" +#include "graph/util/ExpressionUtils.h" + namespace nebula { +bool YieldColumns::hasAgg() const { + for (auto &col : columns_) { + if (graph::ExpressionUtils::findAny(col->expr(), {Expression::Kind::kAggregate})) { + return true; + } + } + return false; +} + std::string StepClause::toString() const { std::string buf; buf.reserve(256); diff --git a/src/parser/Clauses.h b/src/parser/Clauses.h index 5ca7d024e2c..4d7fa6c9b41 100644 --- a/src/parser/Clauses.h +++ b/src/parser/Clauses.h @@ -7,7 +7,6 @@ #include "common/base/Base.h" #include "common/expression/Expression.h" -#include "graph/util/ExpressionUtils.h" #include "interface/gen-cpp2/storage_types.h" namespace nebula { @@ -275,14 +274,7 @@ class YieldColumns final { YieldColumn *back() { return columns_.back().get(); } - bool hasAgg() const { - for (auto &col : columns_) { - if (graph::ExpressionUtils::findAny(col->expr(), {Expression::Kind::kAggregate})) { - return true; - } - } - return false; - } + bool hasAgg() const; private: std::vector> columns_;