@@ -379,7 +379,7 @@ class TYtPhysicalFinalizingTransformer : public TSyncTransformerBase {
379379 }
380380
381381 if (const auto mode = State_->Configuration ->ColumnGroupMode .Get ().GetOrElse (EColumnGroupMode::Disable); mode != EColumnGroupMode::Disable) {
382- status = CalculateColumnGroups (input, output, opDepsOrder, opDeps, mode, ctx);
382+ status = CalculateColumnGroups (input, output, opDepsOrder, opDeps, lefts, mode, ctx);
383383 if (status.Level != TStatus::Ok) {
384384 return status;
385385 }
@@ -2822,7 +2822,9 @@ class TYtPhysicalFinalizingTransformer : public TSyncTransformerBase {
28222822 }
28232823 }
28242824
2825- TStatus CalculateColumnGroups (TExprNode::TPtr input, TExprNode::TPtr& output, std::vector<const TExprNode*> opDepsOrder, const TOpDeps& opDeps, EColumnGroupMode mode, TExprContext& ctx) {
2825+ TStatus CalculateColumnGroups (TExprNode::TPtr input, TExprNode::TPtr& output, const std::vector<const TExprNode*>& opDepsOrder, const TOpDeps& opDeps,
2826+ const TNodeSet& lefts, EColumnGroupMode mode, TExprContext& ctx)
2827+ {
28262828 const auto maxGroups = State_->Configuration ->MaxColumnGroups .Get ().GetOrElse (DEFAULT_MAX_COLUMN_GROUPS);
28272829 const auto minGroupSize = State_->Configuration ->MinColumnGroupSize .Get ().GetOrElse (DEFAULT_MIN_COLUMN_GROUP_SIZE);
28282830
@@ -2908,6 +2910,7 @@ class TYtPhysicalFinalizingTransformer : public TSyncTransformerBase {
29082910 }
29092911
29102912 TNodeOnNodeOwnedMap remap;
2913+ TNodeOnNodeOwnedMap newOps;
29112914 for (auto & x: colUsages) {
29122915 auto writer = x.first ;
29132916 TColumnUsage& usage = x.second ;
@@ -3012,11 +3015,22 @@ class TYtPhysicalFinalizingTransformer : public TSyncTransformerBase {
30123015 }
30133016 if (newOp) {
30143017 remap[writer] = newOp;
3018+ newOps[writer] = newOp;
30153019 }
30163020 }
30173021 }
30183022 }
30193023
3024+ if (!lefts.empty () && !newOps.empty ()) {
3025+ for (auto node: lefts) {
3026+ TCoLeft left (node);
3027+ auto newIt = newOps.find (left.Input ().Raw ());
3028+ if (newIt != newOps.end ()) {
3029+ remap[node] = ctx.ChangeChild (*node, TCoLeft::idx_Input, TExprNode::TPtr (newIt->second ));
3030+ }
3031+ }
3032+ }
3033+
30203034 if (!remap.empty ()) {
30213035 YQL_CLOG (INFO, ProviderYt) << " PhysicalFinalizing-CalculateColumnGroups" ;
30223036 return RemapExpr (input, output, remap, ctx, TOptimizeExprSettings{State_->Types });
0 commit comments