diff options
author | ziganshinmr <[email protected]> | 2025-08-15 20:07:35 +0300 |
---|---|---|
committer | ziganshinmr <[email protected]> | 2025-08-15 20:48:49 +0300 |
commit | e3a3861faa1198b56f8a27ac90ed7101526429e0 (patch) | |
tree | 9a3165aa5c7bf75c1373fb99cc01056d8a4b96b2 /yql/essentials/ast/yql_expr.cpp | |
parent | e2abc784771d6557e7efbba0ddcf9e4846a42db0 (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.cpp | 21 |
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; |