diff options
author | ziganshinmr <ziganshinmr@yandex-team.com> | 2024-12-13 18:32:53 +0300 |
---|---|---|
committer | ziganshinmr <ziganshinmr@yandex-team.com> | 2024-12-13 19:32:39 +0300 |
commit | 90f6b5cc50436aca207edd0d3cb61a9670fd88b1 (patch) | |
tree | 2a174d2582e405c4c6981fdea811a43e388bd4b7 /yql/essentials/core/yql_opt_utils.cpp | |
parent | 338a2a1a277ede0e1fb5a15c3ebf4b9d928630e8 (diff) | |
download | ydb-90f6b5cc50436aca207edd0d3cb61a9670fd88b1.tar.gz |
Block output for YT operations
commit_hash:469d6669ff3d3216234cac1ac27e03e22600aff8
Diffstat (limited to 'yql/essentials/core/yql_opt_utils.cpp')
-rw-r--r-- | yql/essentials/core/yql_opt_utils.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/yql/essentials/core/yql_opt_utils.cpp b/yql/essentials/core/yql_opt_utils.cpp index d067386eea..2ab0522ede 100644 --- a/yql/essentials/core/yql_opt_utils.cpp +++ b/yql/essentials/core/yql_opt_utils.cpp @@ -2222,7 +2222,13 @@ TVector<TString> GenNoClashColumns(const TStructExprType& source, TStringBuf pre return result; } -bool CheckSupportedTypes(const TTypeAnnotationNode::TListType& typesToCheck, const TSet<TString>& supportedTypes, const TSet<NUdf::EDataSlot>& supportedDataTypes, std::function<void(const TString&)> unsupportedTypeHandler) { +bool CheckSupportedTypes( + const TTypeAnnotationNode::TListType& typesToCheck, + const TSet<TString>& supportedTypes, + const TSet<NUdf::EDataSlot>& supportedDataTypes, + std::function<void(const TString&)> unsupportedTypeHandler, + bool allowNestedOptionals +) { TSet<ETypeAnnotationKind> supported; for (const auto &e: supportedTypes) { if (e == "pg") { @@ -2278,7 +2284,11 @@ bool CheckSupportedTypes(const TTypeAnnotationNode::TListType& typesToCheck, con auto el = stack.back(); stack.pop_back(); if (el->GetKind() == ETypeAnnotationKind::Optional) { - stack.push_back(el->Cast<TOptionalExprType>()->GetItemType()); + auto elInnerType = el->Cast<TOptionalExprType>()->GetItemType(); + if (!allowNestedOptionals && elInnerType->GetKind() == ETypeAnnotationKind::Optional) { + unsupportedTypeHandler(TStringBuilder() << "nested optionals are unsupported"); + } + stack.push_back(elInnerType); continue; } if (!supported.contains(el->GetKind())) { |