@@ -2077,14 +2077,12 @@ def merge(
2077
2077
result_columns = []
2078
2078
matching_join_labels = []
2079
2079
2080
- coalesced_ids = []
2081
- for left_id , right_id in zip (left_join_ids , right_join_ids ):
2082
- joined_expr , coalesced_id = joined_expr .project_to_id (
2083
- ops .coalesce_op .as_expr (
2084
- get_column_left [left_id ], get_column_right [right_id ]
2085
- ),
2086
- )
2087
- coalesced_ids .append (coalesced_id )
2080
+ left_post_join_ids = tuple (get_column_left [id ] for id in left_join_ids )
2081
+ right_post_join_ids = tuple (get_column_right [id ] for id in right_join_ids )
2082
+
2083
+ joined_expr , coalesced_ids = coalesce_columns (
2084
+ joined_expr , left_post_join_ids , right_post_join_ids , how = how , drop = False
2085
+ )
2088
2086
2089
2087
for col_id in self .value_columns :
2090
2088
if col_id in left_join_ids :
@@ -2102,7 +2100,6 @@ def merge(
2102
2100
result_columns .append (get_column_left [col_id ])
2103
2101
for col_id in other .value_columns :
2104
2102
if col_id in right_join_ids :
2105
- key_part = right_join_ids .index (col_id )
2106
2103
if other .col_id_to_label [matching_right_id ] in matching_join_labels :
2107
2104
pass
2108
2105
else :
@@ -2928,26 +2925,31 @@ def resolve_label_id(label: Label) -> str:
2928
2925
)
2929
2926
2930
2927
2928
+ # TODO: Rewrite just to return expressions
2931
2929
def coalesce_columns (
2932
2930
expr : core .ArrayValue ,
2933
2931
left_ids : typing .Sequence [str ],
2934
2932
right_ids : typing .Sequence [str ],
2935
2933
how : str ,
2934
+ drop : bool = True ,
2936
2935
) -> Tuple [core .ArrayValue , Sequence [str ]]:
2937
2936
result_ids = []
2938
2937
for left_id , right_id in zip (left_ids , right_ids ):
2939
2938
if how == "left" or how == "inner" or how == "cross" :
2940
2939
result_ids .append (left_id )
2941
- expr = expr .drop_columns ([right_id ])
2940
+ if drop :
2941
+ expr = expr .drop_columns ([right_id ])
2942
2942
elif how == "right" :
2943
2943
result_ids .append (right_id )
2944
- expr = expr .drop_columns ([left_id ])
2944
+ if drop :
2945
+ expr = expr .drop_columns ([left_id ])
2945
2946
elif how == "outer" :
2946
2947
coalesced_id = guid .generate_guid ()
2947
2948
expr , coalesced_id = expr .project_to_id (
2948
2949
ops .coalesce_op .as_expr (left_id , right_id )
2949
2950
)
2950
- expr = expr .drop_columns ([left_id , right_id ])
2951
+ if drop :
2952
+ expr = expr .drop_columns ([left_id , right_id ])
2951
2953
result_ids .append (coalesced_id )
2952
2954
else :
2953
2955
raise ValueError (f"Unexpected join type: { how } . { constants .FEEDBACK_LINK } " )
0 commit comments