aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authora-romanov <Anton.Romanov@ydb.tech>2023-07-03 11:06:28 +0300
committera-romanov <Anton.Romanov@ydb.tech>2023-07-03 11:06:28 +0300
commitdd9b387d6da3c433023de20df735ab169acd6642 (patch)
tree22443a537bfa69c3461dc26eb789518a7ecd7f00
parent6d589b99505f87df63cba108a7e02803161d4d8f (diff)
downloadydb-dd9b387d6da3c433023de20df735ab169acd6642.tar.gz
YQL-8971 YQL-15555 Fix distinct on StrictCast.
-rw-r--r--ydb/library/yql/core/yql_expr_constraint.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/ydb/library/yql/core/yql_expr_constraint.cpp b/ydb/library/yql/core/yql_expr_constraint.cpp
index 29b46cee571..3e825ada92c 100644
--- a/ydb/library/yql/core/yql_expr_constraint.cpp
+++ b/ydb/library/yql/core/yql_expr_constraint.cpp
@@ -572,6 +572,10 @@ private:
return bool(TConstraintNode::GetSubTypeByPath(path, *outItemType));
} : TConstraintNode::TPathFilter(filter);
+ const auto filterForDistinct = Strict ? [inItemType, outItemType](const TConstraintNode::TPathType& path) {
+ return NUdf::ECastOptions::Complete == CastResult<Strict>(TConstraintNode::GetSubTypeByPath(path, *inItemType), TConstraintNode::GetSubTypeByPath(path, *outItemType));
+ } : TConstraintNode::TPathFilter(filter);
+
FilterFromHead<TPassthroughConstraintNode>(input, filter, ctx);
FilterFromHead<TSortedConstraintNode>(input, filter, ctx);
FilterFromHead<TChoppedConstraintNode>(input, filter, ctx);
@@ -580,7 +584,7 @@ private:
FilterFromHead<TPartOfSortedConstraintNode>(input, filter, ctx);
FilterFromHead<TPartOfChoppedConstraintNode>(input, filter, ctx);
FilterFromHead<TPartOfUniqueConstraintNode>(input, filterForUnique, ctx);
- FilterFromHead<TPartOfDistinctConstraintNode>(input, filterForUnique, ctx);
+ FilterFromHead<TPartOfDistinctConstraintNode>(input, filterForDistinct, ctx);
return TStatus::Ok;
}