66from rich .prompt import Confirm
77
88from typing import List , Optional , Dict
9- from .utils import dbt_diff_string_template , getLogger
9+ from .utils import (
10+ dbt_diff_string_template ,
11+ getLogger ,
12+ columns_added_template ,
13+ columns_removed_template ,
14+ no_differences_template ,
15+ )
1016from pathlib import Path
1117
1218import keyring
@@ -175,7 +181,6 @@ def _get_diff_vars(
175181
176182
177183def _local_diff (diff_vars : TDiffVars ) -> None :
178- column_diffs_str = ""
179184 dev_qualified_str = "." .join (diff_vars .dev_path )
180185 prod_qualified_str = "." .join (diff_vars .prod_path )
181186 diff_output_str = _diff_output_base (dev_qualified_str , prod_qualified_str )
@@ -196,14 +201,14 @@ def _local_diff(diff_vars: TDiffVars) -> None:
196201 return
197202
198203 column_set = set (table1_columns ).intersection (table2_columns )
199- table1_diff = set (table1_columns ).difference (table2_columns )
200- table2_diff = set (table2_columns ).difference (table1_columns )
204+ columns_added = set (table1_columns ).difference (table2_columns )
205+ columns_removed = set (table2_columns ).difference (table1_columns )
201206
202- if table1_diff :
203- column_diffs_str += f"Column(s) added: { table1_diff } \n "
207+ if columns_added :
208+ diff_output_str += columns_added_template ( columns_added )
204209
205- if table2_diff :
206- column_diffs_str += f"Column(s) removed: { table2_diff } \n "
210+ if columns_removed :
211+ diff_output_str += columns_removed_template ( columns_removed )
207212
208213 column_set = column_set - set (diff_vars .primary_keys )
209214
@@ -225,10 +230,10 @@ def _local_diff(diff_vars: TDiffVars) -> None:
225230 )
226231
227232 if list (diff ):
228- diff_output_str += f"{ column_diffs_str } { diff .get_stats_string (is_dbt = True )} \n "
233+ diff_output_str += f"{ diff .get_stats_string (is_dbt = True )} \n "
229234 rich .print (diff_output_str )
230235 else :
231- diff_output_str += f" { column_diffs_str } [bold][green]No row differences[/][/] \n "
236+ diff_output_str += no_differences_template ()
232237 rich .print (diff_output_str )
233238
234239
@@ -304,6 +309,18 @@ def _cloud_diff(diff_vars: TDiffVars, datasource_id: int, api: DatafoldAPI) -> N
304309 diff_percent_list = {
305310 x .column_name : str (x .match ) + "%" for x in diff_results .values .columns_diff_stats if x .match != 100.0
306311 }
312+ columns_added = diff_results .schema_ .exclusive_columns [1 ]
313+ columns_removed = diff_results .schema_ .exclusive_columns [0 ]
314+ column_type_changes = diff_results .schema_ .column_type_differs
315+
316+ if columns_added :
317+ diff_output_str += columns_added_template (columns_added )
318+
319+ if columns_removed :
320+ diff_output_str += columns_removed_template (columns_removed )
321+
322+ if column_type_changes :
323+ diff_output_str += "Type change: " + str (column_type_changes ) + "\n "
307324
308325 if any ([rows_added_count , rows_removed_count , rows_updated ]):
309326 diff_output = dbt_diff_string_template (
@@ -314,10 +331,10 @@ def _cloud_diff(diff_vars: TDiffVars, datasource_id: int, api: DatafoldAPI) -> N
314331 diff_percent_list ,
315332 "Value Match Percent:" ,
316333 )
317- diff_output_str += f"{ diff_url } \n { diff_output } \n "
334+ diff_output_str += f"\n { diff_url } \n { diff_output } \n "
318335 rich .print (diff_output_str )
319336 else :
320- diff_output_str += f"{ diff_url } \n [green]No row differences[/] \n "
337+ diff_output_str += f"\n { diff_url } \n { no_differences_template () } \n "
321338 rich .print (diff_output_str )
322339
323340 except BaseException as ex : # Catch KeyboardInterrupt too
0 commit comments