diff options
author | vvvv <vvvv@ydb.tech> | 2023-09-25 19:41:20 +0300 |
---|---|---|
committer | vvvv <vvvv@ydb.tech> | 2023-09-25 20:31:38 +0300 |
commit | 771abca8c8d7e166d12fff27d6cf8f0af02b8359 (patch) | |
tree | 5607f526e4243cbec44861ca3cbf2247afb7eaac | |
parent | 11a3b79d048efe1df794768637350775668ea512 (diff) | |
download | ydb-771abca8c8d7e166d12fff27d6cf8f0af02b8359.tar.gz |
YQL-16507 Avoid visit of world child
-rw-r--r-- | ydb/library/yql/providers/result/provider/yql_result_provider.cpp | 6 | ||||
-rw-r--r-- | ydb/library/yql/providers/yt/provider/yql_yt_physical_optimize.cpp | 10 |
2 files changed, 16 insertions, 0 deletions
diff --git a/ydb/library/yql/providers/result/provider/yql_result_provider.cpp b/ydb/library/yql/providers/result/provider/yql_result_provider.cpp index f3476eb9517..a4802acc61c 100644 --- a/ydb/library/yql/providers/result/provider/yql_result_provider.cpp +++ b/ydb/library/yql/providers/result/provider/yql_result_provider.cpp @@ -282,12 +282,18 @@ namespace { NThreading::TFuture<void> DoGetAsyncFuture(const TExprNode& input) final { Y_UNUSED(input); + YQL_ENSURE(DelegatedProvider); + YQL_ENSURE(DelegatedNode); + YQL_ENSURE(DelegatedNodeOutput); return DelegatedProvider->GetCallableExecutionTransformer() .GetAsyncFuture(*DelegatedNode); } TStatus DoApplyAsyncChanges(TExprNode::TPtr input, TExprNode::TPtr& output, TExprContext& ctx) final { output = input; + YQL_ENSURE(DelegatedProvider); + YQL_ENSURE(DelegatedNode); + YQL_ENSURE(DelegatedNodeOutput); auto status = DelegatedProvider->GetCallableExecutionTransformer() .ApplyAsyncChanges(DelegatedNode, DelegatedNodeOutput, ctx); if (status == TStatus::Repeat && input != DelegatedNodeOutput->TailPtr()) { diff --git a/ydb/library/yql/providers/yt/provider/yql_yt_physical_optimize.cpp b/ydb/library/yql/providers/yt/provider/yql_yt_physical_optimize.cpp index 8ada8dc400a..503dfd69acb 100644 --- a/ydb/library/yql/providers/yt/provider/yql_yt_physical_optimize.cpp +++ b/ydb/library/yql/providers/yt/provider/yql_yt_physical_optimize.cpp @@ -5647,7 +5647,12 @@ private: TNodeSet nodesToOptimize; TProcessedNodesSet processedNodes; + processedNodes.insert(res->Head().UniqueId()); VisitExpr(res, [&nodesToOptimize, &processedNodes](const TExprNode::TPtr& input) { + if (processedNodes.contains(input->UniqueId())) { + return false; + } + if (auto read = TMaybeNode<TYtLength>(input).Input().Maybe<TYtReadTable>()) { nodesToOptimize.insert(read.Cast().Raw()); return false; @@ -5711,7 +5716,12 @@ private: TNodeSet nodesToOptimize; TProcessedNodesSet processedNodes; + processedNodes.insert(res->Head().UniqueId()); VisitExpr(res, [&nodesToOptimize, &processedNodes](const TExprNode::TPtr& input) { + if (processedNodes.contains(input->UniqueId())) { + return false; + } + if (TYtTableContent::Match(input.Get())) { nodesToOptimize.insert(input.Get()); return false; |