diff options
author | aneporada <aneporada@ydb.tech> | 2022-09-06 10:06:46 +0300 |
---|---|---|
committer | aneporada <aneporada@ydb.tech> | 2022-09-06 10:06:46 +0300 |
commit | f3eaf82aa0692585e04b0aa4b1be94aa30cd3bcc (patch) | |
tree | 48a5efc313acc5288363b95617f08e4ce9a89af1 | |
parent | 73c2d8a01f891bf51f963fe8a1bfa3c2724e6cb2 (diff) | |
download | ydb-f3eaf82aa0692585e04b0aa4b1be94aa30cd3bcc.tar.gz |
[][refactoring] Reduce copy-paste by introducing BuildJoinRenameLambda
-rw-r--r-- | ydb/core/kqp/provider/yql_kikimr_opt_join.cpp | 36 | ||||
-rw-r--r-- | ydb/library/yql/core/yql_join.cpp | 40 | ||||
-rw-r--r-- | ydb/library/yql/core/yql_join.h | 2 |
3 files changed, 44 insertions, 34 deletions
diff --git a/ydb/core/kqp/provider/yql_kikimr_opt_join.cpp b/ydb/core/kqp/provider/yql_kikimr_opt_join.cpp index 662082c5432..15c78510d88 100644 --- a/ydb/core/kqp/provider/yql_kikimr_opt_join.cpp +++ b/ydb/core/kqp/provider/yql_kikimr_opt_join.cpp @@ -924,43 +924,11 @@ TExprNode::TPtr KiRewriteEquiJoin(TExprBase node, const TKikimrTablesData& table TExprBase joinExpr = rewrittenJoin.Cast(); auto resultType = node.Ptr()->GetTypeAnn()->Cast<TListExprType>()->GetItemType()->Cast<TStructExprType>(); auto renameMap = LoadJoinRenameMap(*joinOptions.Ptr()); - - THashMap<TStringBuf, TStringBuf> reverseRenameMap; - for (auto& pair : renameMap) { - for (TStringBuf newName : pair.second) { - reverseRenameMap[newName] = pair.first; - } - } - - TCoArgument rowArg = Build<TCoArgument>(ctx, joinExpr.Pos()) - .Name("row") - .Done(); - - TVector<TExprBase> renameTuples; - for (auto& item : resultType->GetItems()) { - TStringBuf newName = item->GetName(); - auto renamedFrom = reverseRenameMap.FindPtr(newName); - TStringBuf oldName = renamedFrom ? *renamedFrom : newName; - - auto tuple = Build<TCoNameValueTuple>(ctx, joinExpr.Pos()) - .Name().Build(newName) - .Value<TCoMember>() - .Struct(rowArg) - .Name().Build(oldName) - .Build() - .Done(); - - renameTuples.push_back(tuple); - } + TCoLambda renamingLambda = BuildJoinRenameLambda(joinExpr.Pos(), renameMap, *resultType, ctx); return Build<TCoMap>(ctx, joinExpr.Pos()) .Input(joinExpr) - .Lambda() - .Args({rowArg}) - .Body<TCoAsStruct>() - .Add(renameTuples) - .Build() - .Build() + .Lambda(renamingLambda) .Done() .Ptr(); } diff --git a/ydb/library/yql/core/yql_join.cpp b/ydb/library/yql/core/yql_join.cpp index b6e1861badc..b10fbd20276 100644 --- a/ydb/library/yql/core/yql_join.cpp +++ b/ydb/library/yql/core/yql_join.cpp @@ -895,6 +895,46 @@ TMap<TStringBuf, TVector<TStringBuf>> LoadJoinRenameMap(const TExprNode& setting return res; } +TCoLambda BuildJoinRenameLambda(TPositionHandle pos, const TMap<TStringBuf, TVector<TStringBuf>>& renameMap, + const TStructExprType& joinResultType, TExprContext& ctx) +{ + THashMap<TStringBuf, TStringBuf> reverseRenameMap; + for (const auto& [oldName , targets] : renameMap) { + for (TStringBuf newName : targets) { + reverseRenameMap[newName] = oldName; + } + } + + TCoArgument rowArg = Build<TCoArgument>(ctx, pos) + .Name("row") + .Done(); + + TVector<TExprBase> renameTuples; + for (auto& item : joinResultType.GetItems()) { + TStringBuf newName = item->GetName(); + auto renamedFrom = reverseRenameMap.FindPtr(newName); + TStringBuf oldName = renamedFrom ? *renamedFrom : newName; + + auto tuple = Build<TCoNameValueTuple>(ctx, pos) + .Name().Build(newName) + .Value<TCoMember>() + .Struct(rowArg) + .Name().Build(oldName) + .Build() + .Done(); + + renameTuples.push_back(tuple); + } + + return Build<TCoLambda>(ctx, pos) + .Args({rowArg}) + .Body<TCoAsStruct>() + .Add(renameTuples) + .Build() + .Done(); +} + + TSet<TVector<TStringBuf>> LoadJoinSortSets(const TExprNode& settings) { TSet<TVector<TStringBuf>> res; for (const auto& child : settings.Children()) { diff --git a/ydb/library/yql/core/yql_join.h b/ydb/library/yql/core/yql_join.h index 672645bf120..a37b517bbb3 100644 --- a/ydb/library/yql/core/yql_join.h +++ b/ydb/library/yql/core/yql_join.h @@ -84,6 +84,8 @@ TExprNode::TPtr FilterOutNullJoinColumns(TPositionHandle pos, const TExprNode::T const TJoinLabel& label, const TSet<TString>& optionalKeyColumns, TExprContext& ctx); TMap<TStringBuf, TVector<TStringBuf>> LoadJoinRenameMap(const TExprNode& settings); +NNodes::TCoLambda BuildJoinRenameLambda(TPositionHandle pos, const TMap<TStringBuf, TVector<TStringBuf>>& renameMap, + const TStructExprType& joinResultType, TExprContext& ctx); TSet<TVector<TStringBuf>> LoadJoinSortSets(const TExprNode& settings); THashMap<TString, const TTypeAnnotationNode*> GetJoinColumnTypes(const TExprNode& joins, |