aboutsummaryrefslogtreecommitdiffstats
path: root/yql/essentials/core/yql_opt_utils.cpp
diff options
context:
space:
mode:
authorziganshinmr <ziganshinmr@yandex-team.com>2024-12-13 18:32:53 +0300
committerziganshinmr <ziganshinmr@yandex-team.com>2024-12-13 19:32:39 +0300
commit90f6b5cc50436aca207edd0d3cb61a9670fd88b1 (patch)
tree2a174d2582e405c4c6981fdea811a43e388bd4b7 /yql/essentials/core/yql_opt_utils.cpp
parent338a2a1a277ede0e1fb5a15c3ebf4b9d928630e8 (diff)
downloadydb-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.cpp14
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())) {