aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvvvv <vvvv@ydb.tech>2023-09-25 19:41:20 +0300
committervvvv <vvvv@ydb.tech>2023-09-25 20:31:38 +0300
commit771abca8c8d7e166d12fff27d6cf8f0af02b8359 (patch)
tree5607f526e4243cbec44861ca3cbf2247afb7eaac
parent11a3b79d048efe1df794768637350775668ea512 (diff)
downloadydb-771abca8c8d7e166d12fff27d6cf8f0af02b8359.tar.gz
YQL-16507 Avoid visit of world child
-rw-r--r--ydb/library/yql/providers/result/provider/yql_result_provider.cpp6
-rw-r--r--ydb/library/yql/providers/yt/provider/yql_yt_physical_optimize.cpp10
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;