@@ -2759,7 +2759,7 @@ class TYtPhysicalFinalizingTransformer : public TSyncTransformerBase {
2759
2759
std::vector<std::vector<const TExprNode*>> UsedByMerges;
2760
2760
};
2761
2761
2762
- void GatherColumnUsage (EColumnGroupMode mode, const TExprNode* writer, const TOpDeps::mapped_type& readers, TColumnUsage& usage, TNodeMap<size_t >& uniquePaths) {
2762
+ void GatherColumnUsage (EColumnGroupMode mode, const TExprNode* writer, const TOpDeps::mapped_type& readers, const TOpDeps& opDeps, TColumnUsage& usage, TNodeMap<size_t >& uniquePaths) {
2763
2763
for (const auto & outTable: GetRealOperation (TExprBase (writer)).Output ()) {
2764
2764
usage.OutTypes .push_back (outTable.Ref ().GetTypeAnn ()->Cast <TListExprType>()->GetItemType ()->Cast <TStructExprType>());
2765
2765
}
@@ -2790,11 +2790,17 @@ class TYtPhysicalFinalizingTransformer : public TSyncTransformerBase {
2790
2790
} else if (auto maybeMerge = TMaybeNode<TYtMerge>(std::get<0 >(item)); maybeMerge && AllOf (maybeMerge.Cast ().Input ().Item (0 ).Paths (),
2791
2791
[](const TYtPath& path) { return path.Ref ().GetTypeAnn ()->Equals (*path.Table ().Ref ().GetTypeAnn ()); })) {
2792
2792
2793
- usage.UsedByMerges [outIndex].push_back (std::get<0 >(item));
2793
+ // YtMerge may have no usage in the graph (only via Left!)
2794
+ if (opDeps.contains (std::get<0 >(item))) {
2795
+ usage.UsedByMerges [outIndex].push_back (std::get<0 >(item));
2796
+ }
2794
2797
2795
2798
} else if (TYtCopy::Match (std::get<0 >(item))) {
2796
2799
2797
- usage.UsedByMerges [outIndex].push_back (std::get<0 >(item));
2800
+ // YtCopy may have no usage in the graph (only via Left!)
2801
+ if (opDeps.contains (std::get<0 >(item))) {
2802
+ usage.UsedByMerges [outIndex].push_back (std::get<0 >(item));
2803
+ }
2798
2804
2799
2805
} else if (EColumnGroupMode::Single == mode) {
2800
2806
usage.FullUsage [outIndex] = true ;
@@ -2845,7 +2851,7 @@ class TYtPhysicalFinalizingTransformer : public TSyncTransformerBase {
2845
2851
TColumnUsage& usage = colUsages[writer];
2846
2852
usage.GenerateGroups = true ;
2847
2853
2848
- GatherColumnUsage (mode, writer, readers, usage, uniquePaths);
2854
+ GatherColumnUsage (mode, writer, readers, opDeps, usage, uniquePaths);
2849
2855
bool hasMergeDep = false ;
2850
2856
for (const auto & item: usage.UsedByMerges ) {
2851
2857
hasMergeDep = hasMergeDep || !item.empty ();
@@ -2863,7 +2869,7 @@ class TYtPhysicalFinalizingTransformer : public TSyncTransformerBase {
2863
2869
if (res.second ) { // Not processed before
2864
2870
TColumnUsage& usage = res.first ->second ;
2865
2871
usage.GenerateGroups = TYtCopy::Match (merge); // Maybe we need to rewrite YtCopy to YtMerge
2866
- GatherColumnUsage (mode, merge, opDeps.at (merge), usage, uniquePaths);
2872
+ GatherColumnUsage (mode, merge, opDeps.at (merge), opDeps, usage, uniquePaths);
2867
2873
bool hasMergeDep = false ;
2868
2874
for (const auto & item: usage.UsedByMerges ) {
2869
2875
hasMergeDep = hasMergeDep || !item.empty ();
0 commit comments