aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorimunkin <imunkin@yandex-team.com>2025-02-03 13:31:40 +0300
committerimunkin <imunkin@yandex-team.com>2025-02-03 13:45:06 +0300
commitc40911de0e1191345518cc1f29623a1ce7a7ca28 (patch)
tree4fc6f96b02a3a0a95f69b66f98acd43ff18435e0
parent7571c5fd5f85c524170a5641fbdf21bd31d60789 (diff)
downloadydb-c40911de0e1191345518cc1f29623a1ce7a7ca28.tar.gz
Implement folding for (FromFlow(ToFlow(...))) sequence
commit_hash:5cb105d0190cd090b6fa32b7345c8628fc7154b4
-rw-r--r--yql/essentials/core/peephole_opt/yql_opt_peephole_physical.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/yql/essentials/core/peephole_opt/yql_opt_peephole_physical.cpp b/yql/essentials/core/peephole_opt/yql_opt_peephole_physical.cpp
index d9f635a76e..be39675faf 100644
--- a/yql/essentials/core/peephole_opt/yql_opt_peephole_physical.cpp
+++ b/yql/essentials/core/peephole_opt/yql_opt_peephole_physical.cpp
@@ -8380,6 +8380,17 @@ TExprNode::TPtr DropToFlowDeps(const TExprNode::TPtr& node, TExprContext& ctx) {
return ctx.ChangeChildren(*node, std::move(children));
}
+TExprNode::TPtr OptimizeFromFlow(const TExprNode::TPtr& node, TExprContext& ctx) {
+ Y_UNUSED(ctx);
+ const auto& input = node->Head();
+ if (input.IsCallable("ToFlow")) {
+ YQL_CLOG(DEBUG, CorePeepHole) << "Drop FromFlow over ToFlow";
+ return ctx.NewCallable(node->Pos(), "ToStream", input.ChildrenList());
+ }
+
+ return node;
+}
+
TExprNode::TPtr OptimizeToFlow(const TExprNode::TPtr& node, TExprContext& ctx) {
if (node->ChildrenSize() == 1 && node->Head().IsCallable("FromFlow")) {
YQL_CLOG(DEBUG, CorePeepHole) << "Drop ToFlow over FromFlow";
@@ -8697,6 +8708,7 @@ struct TPeepHoleRules {
{"TopSort", &OptimizeTopOrSort<true, true>},
{"Sort", &OptimizeTopOrSort<true, false>},
{"ToFlow", &OptimizeToFlow},
+ {"FromFlow", &OptimizeFromFlow},
{"Coalesce", &OptimizeCoalesce},
};