From cb8f8fa04cbf77f7df540a84879010d7c782fb42 Mon Sep 17 00:00:00 2001 From: Jan Vanbuel Date: Thu, 7 Aug 2025 12:53:43 +0200 Subject: [PATCH] fix: expect_column_values_to_have_consistent_casing correctly dealing with NULL values --- CHANGELOG.md | 4 ++++ .../models/schema_tests/data_test.sql | 15 +++++++++++++++ .../models/schema_tests/schema.yml | 17 ++++++++++------- ..._column_values_to_have_consistent_casing.sql | 2 +- 4 files changed, 30 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c161e7..75a7029 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# Unreleased +## Fixes +* Fix `expect_column_values_to_have_consistent_casing` to correctly handle `NULL` values in columns. + # dbt-expectations v0.10.5 ## Fixes * Update CI for dbt 1.9.x https://github.com/metaplane/dbt-expectations/pull/2 diff --git a/integration_tests/models/schema_tests/data_test.sql b/integration_tests/models/schema_tests/data_test.sql index 1fa089a..3be8824 100644 --- a/integration_tests/models/schema_tests/data_test.sql +++ b/integration_tests/models/schema_tests/data_test.sql @@ -55,3 +55,18 @@ select 1.0 as col_numeric_a_plus_b, 8 as idx_multiplied_by_2, -8 as idx_multiplied_by_minus_2 + +union all + +select + 5 as idx, + '2020-10-23' as date_col, + 0.5 as col_numeric_a, + 0.5 as col_numeric_b, + NULL as col_string_a, + 'abcde' as col_string_b, + null as col_null, + null as col_null_2, + 1 as col_numeric_a_plus_b, + 10 as idx_multiplied_by_2, + -10 as idx_multiplied_by_minus_2 diff --git a/integration_tests/models/schema_tests/schema.yml b/integration_tests/models/schema_tests/schema.yml index 4f5124f..1e5177c 100644 --- a/integration_tests/models/schema_tests/schema.yml +++ b/integration_tests/models/schema_tests/schema.yml @@ -404,14 +404,14 @@ models: column_list: ["col_null", "col_null_2"] ignore_row_if: "all_values_are_missing" - dbt_expectations.expect_table_row_count_to_equal: - value: 4 + value: 5 - dbt_expectations.expect_table_row_count_to_be_between: min_value: 1 - max_value: 4 + max_value: 5 - dbt_expectations.expect_table_row_count_to_be_between: min_value: 1 - dbt_expectations.expect_table_row_count_to_be_between: - max_value: 4 + max_value: 5 - dbt_expectations.expect_table_row_count_to_equal_other_table: compare_model: ref("data_test") row_condition: 1=1 @@ -476,7 +476,7 @@ models: ignore_row_if: "any_value_is_missing" - dbt_expectations.expect_multicolumn_sum_to_equal: column_list: ["col_numeric_a", "col_numeric_b"] - sum_total: 4 + sum_total: 5 - dbt_expectations.expect_multicolumn_sum_to_equal: column_list: ["col_numeric_a", "col_numeric_b"] sum_total: col_numeric_a_plus_b @@ -543,15 +543,18 @@ models: tests: - dbt_expectations.expect_column_values_to_be_in_set: value_set: ['a', 'b', 'c'] + row_condition: 'col_string_a is not NULL' quote_values: true - dbt_expectations.expect_column_values_to_not_be_in_set: value_set: ['2','3'] quote_values: true - dbt_expectations.expect_column_distinct_values_to_equal_set: value_set: ['a','b','c','c'] + row_condition: 'col_string_a is not NULL' - dbt_expectations.expect_column_distinct_values_to_be_in_set: value_set: ['a','b','c','d'] quote_values: true + row_condition: 'col_string_a is not NULL' - dbt_expectations.expect_column_distinct_values_to_contain_set: value_set: ['a','b'] - dbt_expectations.expect_column_value_lengths_to_equal: @@ -560,7 +563,7 @@ models: - dbt_expectations.expect_column_values_to_have_consistent_casing: display_inconsistent_columns: true - dbt_expectations.expect_column_distinct_count_to_be_less_than: - value: 4 + value: 5 - name: col_string_b tests: @@ -569,11 +572,11 @@ models: quote_values: true - dbt_expectations.expect_column_value_lengths_to_be_between: min_value: 1 - max_value: 4 + max_value: 5 - dbt_expectations.expect_column_value_lengths_to_be_between: min_value: 1 - dbt_expectations.expect_column_value_lengths_to_be_between: - max_value: 4 + max_value: 5 - name: col_null tests: diff --git a/macros/schema_tests/column_values_basic/expect_column_values_to_have_consistent_casing.sql b/macros/schema_tests/column_values_basic/expect_column_values_to_have_consistent_casing.sql index 1007150..1de4acf 100644 --- a/macros/schema_tests/column_values_basic/expect_column_values_to_have_consistent_casing.sql +++ b/macros/schema_tests/column_values_basic/expect_column_values_to_have_consistent_casing.sql @@ -26,7 +26,7 @@ with test_data as ( validation_errors as ( select - count(1) as set_count, + count(distinct_values) as set_count, count(distinct lower(distinct_values)) as set_count_case_insensitive from test_data