aboutsummaryrefslogtreecommitdiffstats
path: root/yql/essentials/core/yql_opt_utils.cpp
diff options
context:
space:
mode:
authorvvvv <vvvv@yandex-team.com>2024-12-16 19:11:26 +0300
committervvvv <vvvv@yandex-team.com>2024-12-16 19:30:58 +0300
commit2bb2097a0d38fd6cfce127240628bdad3ece5409 (patch)
tree1a22780fd5ff5a270c6eeadfdcb3bd340615058f /yql/essentials/core/yql_opt_utils.cpp
parentdae2dbe3496d7557b1ece64d5464bd8e686995a8 (diff)
downloadydb-2bb2097a0d38fd6cfce127240628bdad3ece5409.tar.gz
Check NoYield flag in DQ optmizer
пример диагностики Error: Cannot execute Apply over stream/flow inside DQ stage PROCESS \$input \^ commit_hash:5211a03edd7fd313d71dfbec23fd284617ca71c8
Diffstat (limited to 'yql/essentials/core/yql_opt_utils.cpp')
-rw-r--r--yql/essentials/core/yql_opt_utils.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/yql/essentials/core/yql_opt_utils.cpp b/yql/essentials/core/yql_opt_utils.cpp
index 2ab0522ede..618105e08d 100644
--- a/yql/essentials/core/yql_opt_utils.cpp
+++ b/yql/essentials/core/yql_opt_utils.cpp
@@ -1832,6 +1832,15 @@ TExprNode::TPtr FindNonYieldTransparentNodeImpl(const TExprNode::TPtr& root, con
}
return candidate;
}
+
+ auto callableType = candidate.Get()->Head().GetTypeAnn()->Cast<TCallableExprType>();
+ for (const auto& arg : callableType->GetArguments()) {
+ if (arg.Type->GetKind() == ETypeAnnotationKind::Stream &&
+ arg.Flags & NUdf::ICallablePayload::TArgumentFlags::NoYield) {
+ return candidate;
+ }
+ }
+
if (!udfSupportsYield) {
while (TCoApply::Match(candidate.Get())) {
candidate = candidate->HeadPtr();