diff options
author | a-romanov <Anton.Romanov@ydb.tech> | 2023-03-13 14:13:56 +0300 |
---|---|---|
committer | a-romanov <Anton.Romanov@ydb.tech> | 2023-03-13 14:13:56 +0300 |
commit | db11197d6262105fddc5d10bd6f64d2441b55ed2 (patch) | |
tree | 02feb76503c5388b367cfae79125600a39df5903 | |
parent | b289c1b08d7c71b12149c22feb733cd79c9f0143 (diff) | |
download | ydb-db11197d6262105fddc5d10bd6f64d2441b55ed2.tar.gz |
YQL-15118 Hybrid MapReduce with Mapper.
-rw-r--r-- | ydb/library/yql/core/common_opt/yql_co_flow1.cpp | 5 |
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; |