aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authora-romanov <Anton.Romanov@ydb.tech>2023-03-13 14:13:56 +0300
committera-romanov <Anton.Romanov@ydb.tech>2023-03-13 14:13:56 +0300
commitdb11197d6262105fddc5d10bd6f64d2441b55ed2 (patch)
tree02feb76503c5388b367cfae79125600a39df5903
parentb289c1b08d7c71b12149c22feb733cd79c9f0143 (diff)
downloadydb-db11197d6262105fddc5d10bd6f64d2441b55ed2.tar.gz
YQL-15118 Hybrid MapReduce with Mapper.
-rw-r--r--ydb/library/yql/core/common_opt/yql_co_flow1.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/ydb/library/yql/core/common_opt/yql_co_flow1.cpp b/ydb/library/yql/core/common_opt/yql_co_flow1.cpp
index 3371464698..00914926b1 100644
--- a/ydb/library/yql/core/common_opt/yql_co_flow1.cpp
+++ b/ydb/library/yql/core/common_opt/yql_co_flow1.cpp
@@ -1731,10 +1731,11 @@ void RegisterCoFlowCallables1(TCallableOptimizerMap& map) {
}
// Very special optimizer for hybrid reduce. Drops Chain1Map whose only purpose is make key switch column.
- if (const TCoCondense1 self(node); self.Input().Ref().IsCallable("Chain1Map") && self.SwitchHandler().Body().Ref().IsCallable("Member")
+ const TCoCondense1 self(node);
+ if (const TMaybeNode<TCoChain1Map> maybeChain(&SkipCallables(self.Input().Ref(), {"ExtractMembers"})); maybeChain && self.SwitchHandler().Body().Ref().IsCallable("Member")
&& &self.SwitchHandler().Body().Ref().Head() == self.SwitchHandler().Args().Arg(0).Raw()) {
const auto member = self.SwitchHandler().Body().Ref().Tail().Content();
- const TCoChain1Map chain(self.Input().Ptr());
+ const auto& chain = maybeChain.Cast();
if (const auto init = ExtractMemberFromLiteral(chain.InitHandler().Ref(), member), update = ExtractMemberFromLiteral(chain.UpdateHandler().Ref(), member);
init && update && init->IsCallable("Bool") && !FromString<bool>(init->Tail().Content())) {
if (std::map<std::string_view, TExprNode::TPtr> usedFields;