diff options
author | aneporada <aneporada@ydb.tech> | 2022-07-21 14:41:36 +0300 |
---|---|---|
committer | aneporada <aneporada@ydb.tech> | 2022-07-21 14:41:36 +0300 |
commit | b0cef02f0738c5798a6d1e28d09101cd5e60709d (patch) | |
tree | 84f181956aa2ccbbc5f79e73d5baa576b514ad01 | |
parent | 288258a70a724752fbc8d41b996fcb58b36e2c08 (diff) | |
download | ydb-b0cef02f0738c5798a6d1e28d09101cd5e60709d.tar.gz |
[] [refactoring] Simplify AST - do not emit RangeAnd with single argument
-rw-r--r-- | ydb/library/yql/core/extract_predicate/extract_predicate_impl.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/ydb/library/yql/core/extract_predicate/extract_predicate_impl.cpp b/ydb/library/yql/core/extract_predicate/extract_predicate_impl.cpp index ffa37ea263c..647b53252f6 100644 --- a/ydb/library/yql/core/extract_predicate/extract_predicate_impl.cpp +++ b/ydb/library/yql/core/extract_predicate/extract_predicate_impl.cpp @@ -1063,6 +1063,11 @@ TIndexRange ExtractIndexRangeFromKeys(const TVector<TString>& keys, const THashM return result; } +TExprNode::TPtr MakeRangeAnd(TPositionHandle pos, TExprNodeList&& children, TExprContext& ctx) { + YQL_ENSURE(!children.empty()); + return children.size() == 1 ? children.front() : ctx.NewCallable(pos, "RangeAnd", std::move(children)); +} + TExprNode::TPtr DoRebuildRangeForIndexKeys(const TStructExprType& rowType, const TExprNode::TPtr& range, const THashMap<TString, size_t>& indexKeysOrder, TIndexRange& resultIndexRange, TExprContext& ctx) { @@ -1173,11 +1178,11 @@ TExprNode::TPtr DoRebuildRangeForIndexKeys(const TStructExprType& rowType, const for (auto& chain : childrenChains) { YQL_ENSURE(!chain.empty()); - rebuilt.push_back(ctx.NewCallable(range->Pos(), "RangeAnd", std::move(chain))); + rebuilt.push_back(MakeRangeAnd(range->Pos(), std::move(chain), ctx)); } if (!rests.empty()) { - rebuilt.push_back(RebuildAsRangeRest(rowType, *ctx.NewCallable(range->Pos(), "RangeAnd", std::move(rests)), ctx)); + rebuilt.push_back(RebuildAsRangeRest(rowType, *MakeRangeAnd(range->Pos(), std::move(rests), ctx), ctx)); } } |