aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraneporada <aneporada@ydb.tech>2022-09-06 10:06:46 +0300
committeraneporada <aneporada@ydb.tech>2022-09-06 10:06:46 +0300
commitf3eaf82aa0692585e04b0aa4b1be94aa30cd3bcc (patch)
tree48a5efc313acc5288363b95617f08e4ce9a89af1
parent73c2d8a01f891bf51f963fe8a1bfa3c2724e6cb2 (diff)
downloadydb-f3eaf82aa0692585e04b0aa4b1be94aa30cd3bcc.tar.gz
[][refactoring] Reduce copy-paste by introducing BuildJoinRenameLambda
-rw-r--r--ydb/core/kqp/provider/yql_kikimr_opt_join.cpp36
-rw-r--r--ydb/library/yql/core/yql_join.cpp40
-rw-r--r--ydb/library/yql/core/yql_join.h2
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,