aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraneporada <aneporada@ydb.tech>2022-07-21 14:41:36 +0300
committeraneporada <aneporada@ydb.tech>2022-07-21 14:41:36 +0300
commitb0cef02f0738c5798a6d1e28d09101cd5e60709d (patch)
tree84f181956aa2ccbbc5f79e73d5baa576b514ad01
parent288258a70a724752fbc8d41b996fcb58b36e2c08 (diff)
downloadydb-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.cpp9
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));
}
}