diff options
author | aneporada <aneporada@yandex-team.com> | 2024-12-17 00:11:53 +0300 |
---|---|---|
committer | aneporada <aneporada@yandex-team.com> | 2024-12-17 00:26:07 +0300 |
commit | a0ed0141c57419c25ed8b04129d18443261a8ad0 (patch) | |
tree | b86820ede195e563807c4d006faf985b6c6cc83c | |
parent | 32f5d73eb971a8e57dd292d2ec1518e9210012d2 (diff) | |
download | ydb-a0ed0141c57419c25ed8b04129d18443261a8ad0.tar.gz |
Fix FlatMap over Optional with Pg lambda
commit_hash:a52a24f4c4ad29082428362e7072c8d9cf8d2feb
-rw-r--r-- | yql/essentials/core/peephole_opt/yql_opt_peephole_physical.cpp | 5 | ||||
-rw-r--r-- | yql/essentials/core/type_ann/type_ann_list.cpp | 3 |
2 files changed, 6 insertions, 2 deletions
diff --git a/yql/essentials/core/peephole_opt/yql_opt_peephole_physical.cpp b/yql/essentials/core/peephole_opt/yql_opt_peephole_physical.cpp index 07e5880c23..6131a31b15 100644 --- a/yql/essentials/core/peephole_opt/yql_opt_peephole_physical.cpp +++ b/yql/essentials/core/peephole_opt/yql_opt_peephole_physical.cpp @@ -2469,7 +2469,10 @@ TExprNode::TPtr ExpandFlatMap(const TExprNode::TPtr& node, TExprContext& ctx) { } } - if (ETypeAnnotationKind::Optional == node->GetTypeAnn()->GetKind()) { + if (ETypeAnnotationKind::Optional == node->GetTypeAnn()->GetKind() || + ETypeAnnotationKind::Pg == node->GetTypeAnn()->GetKind()) + { + YQL_ENSURE(node->Head().GetTypeAnn()->GetKind() == ETypeAnnotationKind::Optional); YQL_CLOG(DEBUG, CorePeepHole) << node->Content() << " over Optional"; return ctx.Builder(node->Pos()) .Callable("IfPresent") diff --git a/yql/essentials/core/type_ann/type_ann_list.cpp b/yql/essentials/core/type_ann/type_ann_list.cpp index 674260bf35..b8c6782267 100644 --- a/yql/essentials/core/type_ann/type_ann_list.cpp +++ b/yql/essentials/core/type_ann/type_ann_list.cpp @@ -1224,6 +1224,7 @@ namespace { // lambda L F L S L // lambda S F L S S // lambda O F L S O + // lambda P F L S P // lambda F F F - F bool warn = false; @@ -1300,7 +1301,7 @@ namespace { return IGraphTransformer::TStatus::Repeat; } - input->SetTypeAnn(MakeSequenceType(resultKind, *lambdaItemType, ctx.Expr)); + input->SetTypeAnn(resultKind == ETypeAnnotationKind::Pg ? lambdaItemType : MakeSequenceType(resultKind, *lambdaItemType, ctx.Expr)); return IGraphTransformer::TStatus::Ok; } |