aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authora-romanov <Anton.Romanov@ydb.tech>2023-02-27 21:01:45 +0300
committera-romanov <Anton.Romanov@ydb.tech>2023-02-27 21:01:45 +0300
commit13baabf7885e98651484e65c69bd6c78ab80d064 (patch)
tree25e4b157d5e65ad8d3e5914a807a3e36e895dd45
parent9b4ad7622e194abb175d789bf48db7081282300f (diff)
downloadydb-13baabf7885e98651484e65c69bd6c78ab80d064.tar.gz
Extract original members after join with changed keys.
-rw-r--r--ydb/library/yql/dq/opt/dq_opt_join.cpp21
1 files changed, 14 insertions, 7 deletions
diff --git a/ydb/library/yql/dq/opt/dq_opt_join.cpp b/ydb/library/yql/dq/opt/dq_opt_join.cpp
index d761555b0c..47058f2cd5 100644
--- a/ydb/library/yql/dq/opt/dq_opt_join.cpp
+++ b/ydb/library/yql/dq/opt/dq_opt_join.cpp
@@ -1113,13 +1113,20 @@ TExprBase DqBuildHashJoin(const TDqJoin& join, EHashJoinMode mode, TExprContext&
if (!PrepareJoinSide<false>(connRight, rightNames, rightJoinKeys, remapRight, filter || leftKind, joinKeys, ctx, optCtx))
return join;
- return Build<TDqJoin>(ctx, join.Pos())
- .LeftInput(connLeft)
- .LeftLabel(join.LeftLabel())
- .RightInput(connRight)
- .RightLabel(join.RightLabel())
- .JoinType(join.JoinType())
- .JoinKeys(ctx.ChangeChildren(join.JoinKeys().Ref(), std::move(joinKeys)))
+ const auto& items = GetSeqItemType(*join.Ref().GetTypeAnn()).Cast<TStructExprType>()->GetItems();
+ TExprNode::TListType fields(items.size());
+ std::transform(items.cbegin(), items.cend(), fields.begin(), [&](const TItemExprType* item) { return ctx.NewAtom(join.Pos(), item->GetName()); });
+
+ return Build<TCoExtractMembers>(ctx, join.Pos())
+ .Input<TDqJoin>()
+ .LeftInput(connLeft)
+ .LeftLabel(join.LeftLabel())
+ .RightInput(connRight)
+ .RightLabel(join.RightLabel())
+ .JoinType(join.JoinType())
+ .JoinKeys(ctx.ChangeChildren(join.JoinKeys().Ref(), std::move(joinKeys)))
+ .Build()
+ .Members().Add(std::move(fields)).Build()
.Done();
}