aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraneporada <aneporada@yandex-team.com>2024-12-17 00:11:53 +0300
committeraneporada <aneporada@yandex-team.com>2024-12-17 00:26:07 +0300
commita0ed0141c57419c25ed8b04129d18443261a8ad0 (patch)
treeb86820ede195e563807c4d006faf985b6c6cc83c
parent32f5d73eb971a8e57dd292d2ec1518e9210012d2 (diff)
downloadydb-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.cpp5
-rw-r--r--yql/essentials/core/type_ann/type_ann_list.cpp3
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;
}