diff options
author | imunkin <imunkin@yandex-team.com> | 2025-02-03 13:31:40 +0300 |
---|---|---|
committer | imunkin <imunkin@yandex-team.com> | 2025-02-03 13:45:06 +0300 |
commit | c40911de0e1191345518cc1f29623a1ce7a7ca28 (patch) | |
tree | 4fc6f96b02a3a0a95f69b66f98acd43ff18435e0 | |
parent | 7571c5fd5f85c524170a5641fbdf21bd31d60789 (diff) | |
download | ydb-c40911de0e1191345518cc1f29623a1ce7a7ca28.tar.gz |
Implement folding for (FromFlow(ToFlow(...))) sequence
commit_hash:5cb105d0190cd090b6fa32b7345c8628fc7154b4
-rw-r--r-- | yql/essentials/core/peephole_opt/yql_opt_peephole_physical.cpp | 12 |
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}, }; |