summaryrefslogtreecommitdiffstats
path: root/yql/essentials/ast/yql_expr.cpp
diff options
context:
space:
mode:
authorziganshinmr <[email protected]>2025-08-15 20:07:35 +0300
committerziganshinmr <[email protected]>2025-08-15 20:48:49 +0300
commite3a3861faa1198b56f8a27ac90ed7101526429e0 (patch)
tree9a3165aa5c7bf75c1373fb99cc01056d8a4b96b2 /yql/essentials/ast/yql_expr.cpp
parente2abc784771d6557e7efbba0ddcf9e4846a42db0 (diff)
Revert commit rXXXXXX, Forbid fuse maps with DependsOn loss in peephole
commit_hash:9422f72a87a79cbf10721618865b186a27bbae03
Diffstat (limited to 'yql/essentials/ast/yql_expr.cpp')
-rw-r--r--yql/essentials/ast/yql_expr.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/yql/essentials/ast/yql_expr.cpp b/yql/essentials/ast/yql_expr.cpp
index 97bd2f294ea..4c596895077 100644
--- a/yql/essentials/ast/yql_expr.cpp
+++ b/yql/essentials/ast/yql_expr.cpp
@@ -2300,6 +2300,22 @@ const TTypeAnnotationNode* CompileTypeAnnotation(const TAstNode& node, TExprCont
return compileCtx.CompileTypeAnnotationNode(node);
}
+template<class Set>
+bool IsDependedImpl(const TExprNode& node, const Set& dependences, TNodeSet& visited) {
+ if (!visited.emplace(&node).second)
+ return false;
+
+ if (dependences.cend() != dependences.find(&node))
+ return true;
+
+ for (const auto& child : node.Children()) {
+ if (IsDependedImpl(*child, dependences, visited))
+ return true;
+ }
+
+ return false;
+}
+
namespace {
enum EChangeState : ui8 {
@@ -2635,6 +2651,11 @@ TExprNode::TListType TExprContext::ReplaceNodes(TExprNode::TListType&& starts, c
template TExprNode::TListType TExprContext::ReplaceNodes<true>(TExprNode::TListType&& starts, const TNodeOnNodeOwnedMap& replaces);
template TExprNode::TListType TExprContext::ReplaceNodes<false>(TExprNode::TListType&& starts, const TNodeOnNodeOwnedMap& replaces);
+bool IsDepended(const TExprNode& node, const TNodeSet& dependences) {
+ TNodeSet visited;
+ return !dependences.empty() && IsDependedImpl(node, dependences, visited);
+}
+
void CheckArguments(const TExprNode& root) {
try {
TNodeMap<TNodeSetPtr> unresolvedArgsMap;