diff options
author | vvvv <vvvv@yandex-team.com> | 2024-12-16 19:11:26 +0300 |
---|---|---|
committer | vvvv <vvvv@yandex-team.com> | 2024-12-16 19:30:58 +0300 |
commit | 2bb2097a0d38fd6cfce127240628bdad3ece5409 (patch) | |
tree | 1a22780fd5ff5a270c6eeadfdcb3bd340615058f /yql/essentials/core/yql_opt_utils.cpp | |
parent | dae2dbe3496d7557b1ece64d5464bd8e686995a8 (diff) | |
download | ydb-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.cpp | 9 |
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(); |