diff options
author | a-romanov <Anton.Romanov@ydb.tech> | 2023-07-03 11:06:28 +0300 |
---|---|---|
committer | a-romanov <Anton.Romanov@ydb.tech> | 2023-07-03 11:06:28 +0300 |
commit | dd9b387d6da3c433023de20df735ab169acd6642 (patch) | |
tree | 22443a537bfa69c3461dc26eb789518a7ecd7f00 | |
parent | 6d589b99505f87df63cba108a7e02803161d4d8f (diff) | |
download | ydb-dd9b387d6da3c433023de20df735ab169acd6642.tar.gz |
YQL-8971 YQL-15555 Fix distinct on StrictCast.
-rw-r--r-- | ydb/library/yql/core/yql_expr_constraint.cpp | 6 |
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; } |