diff --git a/integration_tests/models/generic_tests/equality_less_columns.sql b/integration_tests/models/generic_tests/equality_less_columns.sql new file mode 100644 index 00000000..415bf949 --- /dev/null +++ b/integration_tests/models/generic_tests/equality_less_columns.sql @@ -0,0 +1,9 @@ +with data as ( + + select * from {{ ref('data_test_equality_b') }} + +) + +select + col_a, col_b +from data diff --git a/integration_tests/models/generic_tests/schema.yml b/integration_tests/models/generic_tests/schema.yml index 461f391e..4cd626a6 100644 --- a/integration_tests/models/generic_tests/schema.yml +++ b/integration_tests/models/generic_tests/schema.yml @@ -250,3 +250,10 @@ models: - dbt_utils.fewer_rows_than: compare_model: ref('data_test_fewer_rows_than_table_2') group_by_columns: ['col_a'] + + - name: equality_less_columns + tests: + - dbt_utils.equality: + compare_model: ref('data_test_equality_a') + error_if: "<1" #sneaky way to ensure that the test is returning failing rows + warn_if: "<0" diff --git a/integration_tests/models/sql/test_union.sql b/integration_tests/models/sql/test_union.sql index 69836833..8d675ede 100644 --- a/integration_tests/models/sql/test_union.sql +++ b/integration_tests/models/sql/test_union.sql @@ -2,7 +2,7 @@ select id, name, - favorite_color + favorite_color, + favorite_number from {{ ref('test_union_base') }} - diff --git a/macros/generic_tests/equality.sql b/macros/generic_tests/equality.sql index e844a24a..e6f812b7 100644 --- a/macros/generic_tests/equality.sql +++ b/macros/generic_tests/equality.sql @@ -23,9 +23,22 @@ {{ return('') }} {% endif %} + + -- setup {%- do dbt_utils._is_relation(model, 'test_equality') -%} +{# Ensure there are no extra columns in the compare_model vs model #} +{%- if not compare_columns and not ignore_columns -%} + {%- do dbt_utils._is_ephemeral(model, 'test_equality') -%} + {%- set compare_columns_set = set(adapter.get_columns_in_relation(model) | map(attribute='quoted')) -%} + {%- do dbt_utils._is_ephemeral(model, 'test_equality') -%} + {%- set compare_model_columns_set = set(adapter.get_columns_in_relation(compare_model) | map(attribute='quoted')) -%} + {% if compare_columns_set != compare_model_columns_set %} + {{ return("select 1, 'b_minus_a' as which_diff from " ~ compare_model) }} + {% endif %} +{% endif %} + {%- if not precision -%} {#- If the compare_cols arg is provided, we can run this test without querying the