@@ -788,3 +788,44 @@ def test_data_diff_forward_only(sushi_context_fixed_date, capsys, caplog):
788788 assert row_diff .stats ["distinct_count_t" ] == 2
789789 assert row_diff .s_sample .shape == (2 , 2 )
790790 assert row_diff .t_sample .shape == (2 , 2 )
791+
792+
793+ def test_data_diff_empty_tables ():
794+ engine_adapter = DuckDBConnectionConfig ().create_engine_adapter ()
795+
796+ columns_to_types_src = {
797+ "key" : exp .DataType .build ("int" ),
798+ "value" : exp .DataType .build ("varchar" ),
799+ }
800+ columns_to_types_target = {
801+ "key" : exp .DataType .build ("int" ),
802+ "value2" : exp .DataType .build ("varchar" ),
803+ }
804+
805+ engine_adapter .create_table ("table_diff_source" , columns_to_types_src )
806+ engine_adapter .create_table ("table_diff_target" , columns_to_types_target )
807+
808+ table_diff = TableDiff (
809+ adapter = engine_adapter ,
810+ source = "table_diff_source" ,
811+ target = "table_diff_target" ,
812+ source_alias = "dev" ,
813+ target_alias = "prod" ,
814+ on = ["key" ],
815+ )
816+
817+ # should show the schema diff
818+ schema_diff = table_diff .schema_diff ()
819+ assert len (schema_diff .added ) == 1
820+ assert schema_diff .added [0 ][0 ] == "value2"
821+ assert len (schema_diff .removed ) == 1
822+ assert schema_diff .removed [0 ][0 ] == "value"
823+
824+ # should not error on the row diff
825+ row_diff = table_diff .row_diff ()
826+ assert row_diff .empty
827+
828+ output = capture_console_output ("show_row_diff" , row_diff = row_diff )
829+ assert (
830+ strip_ansi_codes (output ) == "Neither the source nor the target table contained any records"
831+ )
0 commit comments