diff --git a/README.md b/README.md index 438d248..a3664f2 100644 --- a/README.md +++ b/README.md @@ -257,6 +257,8 @@ schema.yml file. - `model_names` (required): The model(s) you wish to generate YAML for. - `upstream_descriptions` (optional, default=False): Whether you want to include descriptions for identical column names from upstream models and sources. - `include_data_types` (optional, default=True): Whether you want to add data types to your model column definitions. +- `case_sensitive_cols` (optional, default=False): Whether you want column names to be + in lowercase, or to match the case in the model table. ### Usage: diff --git a/integration_tests/seeds/data__a_relation_case_sensitive_columns.csv b/integration_tests/seeds/data__a_relation_case_sensitive_columns.csv new file mode 100644 index 0000000..5a00e95 --- /dev/null +++ b/integration_tests/seeds/data__a_relation_case_sensitive_columns.csv @@ -0,0 +1,3 @@ +col_A,col_B +1,a +2,b diff --git a/integration_tests/tests/test_generate_model_yaml_case_sensitive_columns.sql b/integration_tests/tests/test_generate_model_yaml_case_sensitive_columns.sql new file mode 100644 index 0000000..5866806 --- /dev/null +++ b/integration_tests/tests/test_generate_model_yaml_case_sensitive_columns.sql @@ -0,0 +1,24 @@ +{% set actual_model_yaml = codegen.generate_model_yaml( + model_names=['data__a_relation_case_sensitive_columns'], + case_sensitive_cols=True, + ) +%} + +{% set expected_model_yaml %} +version: 2 + +models: + - name: data__a_relation_case_sensitive_columns + description: "" + columns: + - name: col_A + data_type: {{ integer_type_value() }} + description: "" + + - name: col_B + data_type: {{ text_type_value() }} + description: "" + +{% endset %} + +{{ assert_equal (actual_model_yaml | trim, expected_model_yaml | trim) }} diff --git a/integration_tests/tests/test_generate_source.sql b/integration_tests/tests/test_generate_source.sql index ce48bd6..fa92f50 100644 --- a/integration_tests/tests/test_generate_source.sql +++ b/integration_tests/tests/test_generate_source.sql @@ -11,6 +11,7 @@ sources: - name: {{ raw_schema | trim | lower }} tables: - name: data__a_relation + - name: data__a_relation_case_sensitive_columns - name: data__b_relation - name: data__campaign_analytics {% endset %} diff --git a/integration_tests/tests/test_generate_source_all_args.sql b/integration_tests/tests/test_generate_source_all_args.sql index 5d26d91..8be7407 100644 --- a/integration_tests/tests/test_generate_source_all_args.sql +++ b/integration_tests/tests/test_generate_source_all_args.sql @@ -40,6 +40,16 @@ sources: data_type: {{ text_type_value() }} description: "" + - name: data__a_relation_case_sensitive_columns + description: "" + columns: + - name: col_a + data_type: {{ integer_type_value() }} + description: "" + - name: col_b + data_type: {{ text_type_value() }} + description: "" + - name: data__b_relation description: "" columns: diff --git a/integration_tests/tests/test_generate_source_include_database_property.sql b/integration_tests/tests/test_generate_source_include_database_property.sql index 7ae7ee0..a50456b 100644 --- a/integration_tests/tests/test_generate_source_include_database_property.sql +++ b/integration_tests/tests/test_generate_source_include_database_property.sql @@ -11,6 +11,7 @@ sources: database: {{ target.database | trim | lower }} tables: - name: data__a_relation + - name: data__a_relation_case_sensitive_columns - name: data__b_relation - name: data__campaign_analytics {% endset %} diff --git a/integration_tests/tests/test_generate_source_include_schema_property.sql b/integration_tests/tests/test_generate_source_include_schema_property.sql index 6fe08f7..7c1a3bd 100644 --- a/integration_tests/tests/test_generate_source_include_schema_property.sql +++ b/integration_tests/tests/test_generate_source_include_schema_property.sql @@ -11,6 +11,7 @@ sources: schema: {{ raw_schema | trim | lower }} tables: - name: data__a_relation + - name: data__a_relation_case_sensitive_columns - name: data__b_relation - name: data__campaign_analytics {% endset %} diff --git a/integration_tests/tests/test_generate_source_table_descriptions.sql b/integration_tests/tests/test_generate_source_table_descriptions.sql index 772c637..9b7f493 100644 --- a/integration_tests/tests/test_generate_source_table_descriptions.sql +++ b/integration_tests/tests/test_generate_source_table_descriptions.sql @@ -13,6 +13,8 @@ sources: tables: - name: data__a_relation description: "" + - name: data__a_relation_case_sensitive_columns + description: "" - name: data__b_relation description: "" - name: data__campaign_analytics diff --git a/integration_tests/tests/test_generate_source_table_name.sql b/integration_tests/tests/test_generate_source_table_name.sql index a636ac0..3b42e56 100644 --- a/integration_tests/tests/test_generate_source_table_name.sql +++ b/integration_tests/tests/test_generate_source_table_name.sql @@ -12,6 +12,7 @@ sources: schema: {{ raw_schema | trim | lower }} tables: - name: data__a_relation + - name: data__a_relation_case_sensitive_columns - name: data__b_relation - name: data__campaign_analytics diff --git a/macros/generate_model_yaml.sql b/macros/generate_model_yaml.sql index d4fbbee..ce5bb0c 100644 --- a/macros/generate_model_yaml.sql +++ b/macros/generate_model_yaml.sql @@ -1,15 +1,15 @@ -{% macro generate_column_yaml(column, model_yaml, column_desc_dict, include_data_types, parent_column_name="") %} - {{ return(adapter.dispatch('generate_column_yaml', 'codegen')(column, model_yaml, column_desc_dict, include_data_types, parent_column_name)) }} +{% macro generate_column_yaml(column, model_yaml, column_desc_dict, include_data_types, parent_column_name="", case_sensitive_cols=False) %} + {{ return(adapter.dispatch('generate_column_yaml', 'codegen')(column, model_yaml, column_desc_dict, include_data_types, parent_column_name, case_sensitive_cols)) }} {% endmacro %} -{% macro default__generate_column_yaml(column, model_yaml, column_desc_dict, include_data_types, parent_column_name) %} +{% macro default__generate_column_yaml(column, model_yaml, column_desc_dict, include_data_types, parent_column_name, case_sensitive_cols) %} {% if parent_column_name %} {% set column_name = parent_column_name ~ "." ~ column.name %} {% else %} {% set column_name = column.name %} {% endif %} - {% do model_yaml.append(' - name: ' ~ column_name | lower ) %} + {% do model_yaml.append(' - name: ' ~ (column_name if case_sensitive_cols else column_name | lower)) %} {% if include_data_types %} {% do model_yaml.append(' data_type: ' ~ codegen.data_type_format_model(column)) %} {% endif %} @@ -18,17 +18,17 @@ {% if column.fields|length > 0 %} {% for child_column in column.fields %} - {% set model_yaml = codegen.generate_column_yaml(child_column, model_yaml, column_desc_dict, include_data_types, parent_column_name=column_name) %} + {% set model_yaml = codegen.generate_column_yaml(child_column, model_yaml, column_desc_dict, include_data_types, parent_column_name=column_name, case_sensitive_cols=case_sensitive_cols) %} {% endfor %} {% endif %} {% do return(model_yaml) %} {% endmacro %} -{% macro generate_model_yaml(model_names=[], upstream_descriptions=False, include_data_types=True) -%} - {{ return(adapter.dispatch('generate_model_yaml', 'codegen')(model_names, upstream_descriptions, include_data_types)) }} +{% macro generate_model_yaml(model_names=[], upstream_descriptions=False, include_data_types=True, case_sensitive_cols=False) -%} + {{ return(adapter.dispatch('generate_model_yaml', 'codegen')(model_names, upstream_descriptions, include_data_types, case_sensitive_cols)) }} {%- endmacro %} -{% macro default__generate_model_yaml(model_names, upstream_descriptions, include_data_types) %} +{% macro default__generate_model_yaml(model_names, upstream_descriptions, include_data_types, case_sensitive_cols) %} {% set model_yaml=[] %} @@ -49,7 +49,7 @@ {% set column_desc_dict = codegen.build_dict_column_descriptions(model) if upstream_descriptions else {} %} {% for column in columns %} - {% set model_yaml = codegen.generate_column_yaml(column, model_yaml, column_desc_dict, include_data_types) %} + {% set model_yaml = codegen.generate_column_yaml(column, model_yaml, column_desc_dict, include_data_types, parent_column_name="", case_sensitive_cols=case_sensitive_cols) %} {% endfor %} {% endfor %} {% endif %} @@ -62,4 +62,4 @@ {% endif %} -{% endmacro %} \ No newline at end of file +{% endmacro %}