Skip to content

Commit c7c92d7

Browse files
committed
feat: add case sensitive option for generate_model_yaml column names
1 parent 474f7a1 commit c7c92d7

10 files changed

+55
-10
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,8 @@ schema.yml file.
257257
- `model_names` (required): The model(s) you wish to generate YAML for.
258258
- `upstream_descriptions` (optional, default=False): Whether you want to include descriptions for identical column names from upstream models and sources.
259259
- `include_data_types` (optional, default=True): Whether you want to add data types to your model column definitions.
260+
- `case_sensitive_cols` (optional, default=False): Whether you want column names to be
261+
in lowercase, or to match the case in the source table.
260262

261263
### Usage:
262264

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
col_A,col_B
2+
1,a
3+
2,b
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{% set actual_model_yaml = codegen.generate_model_yaml(
2+
model_names=['data__a_relation_case_sensitive_columns'],
3+
case_sensitive_cols=True,
4+
)
5+
%}
6+
7+
{% set expected_model_yaml %}
8+
version: 2
9+
10+
models:
11+
- name: data__a_relation_case_sensitive_columns
12+
description: ""
13+
columns:
14+
- name: col_A
15+
data_type: {{ integer_type_value() }}
16+
description: ""
17+
18+
- name: col_B
19+
data_type: {{ text_type_value() }}
20+
description: ""
21+
22+
{% endset %}
23+
24+
{{ assert_equal (actual_model_yaml | trim, expected_model_yaml | trim) }}

integration_tests/tests/test_generate_source.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ sources:
1111
- name: {{ raw_schema | trim | lower }}
1212
tables:
1313
- name: data__a_relation
14+
- name: data__a_relation_case_sensitive_columns
1415
- name: data__b_relation
1516
- name: data__campaign_analytics
1617
{% endset %}

integration_tests/tests/test_generate_source_all_args.sql

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,16 @@ sources:
4040
data_type: {{ text_type_value() }}
4141
description: ""
4242

43+
- name: data__a_relation_case_sensitive_columns
44+
description: ""
45+
columns:
46+
- name: col_a
47+
data_type: {{ integer_type_value() }}
48+
description: ""
49+
- name: col_b
50+
data_type: {{ text_type_value() }}
51+
description: ""
52+
4353
- name: data__b_relation
4454
description: ""
4555
columns:

integration_tests/tests/test_generate_source_include_database_property.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ sources:
1111
database: {{ target.database | trim | lower }}
1212
tables:
1313
- name: data__a_relation
14+
- name: data__a_relation_case_sensitive_columns
1415
- name: data__b_relation
1516
- name: data__campaign_analytics
1617
{% endset %}

integration_tests/tests/test_generate_source_include_schema_property.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ sources:
1111
schema: {{ raw_schema | trim | lower }}
1212
tables:
1313
- name: data__a_relation
14+
- name: data__a_relation_case_sensitive_columns
1415
- name: data__b_relation
1516
- name: data__campaign_analytics
1617
{% endset %}

integration_tests/tests/test_generate_source_table_descriptions.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ sources:
1313
tables:
1414
- name: data__a_relation
1515
description: ""
16+
- name: data__a_relation_case_sensitive_columns
17+
description: ""
1618
- name: data__b_relation
1719
description: ""
1820
- name: data__campaign_analytics

integration_tests/tests/test_generate_source_table_name.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ sources:
1212
schema: {{ raw_schema | trim | lower }}
1313
tables:
1414
- name: data__a_relation
15+
- name: data__a_relation_case_sensitive_columns
1516
- name: data__b_relation
1617
- name: data__campaign_analytics
1718

macros/generate_model_yaml.sql

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
{% macro generate_column_yaml(column, model_yaml, column_desc_dict, include_data_types, parent_column_name="") %}
2-
{{ return(adapter.dispatch('generate_column_yaml', 'codegen')(column, model_yaml, column_desc_dict, include_data_types, parent_column_name)) }}
1+
{% macro generate_column_yaml(column, model_yaml, column_desc_dict, include_data_types, parent_column_name="", case_sensitive_cols=False) %}
2+
{{ return(adapter.dispatch('generate_column_yaml', 'codegen')(column, model_yaml, column_desc_dict, include_data_types, parent_column_name, case_sensitive_cols)) }}
33
{% endmacro %}
44

5-
{% macro default__generate_column_yaml(column, model_yaml, column_desc_dict, include_data_types, parent_column_name) %}
5+
{% macro default__generate_column_yaml(column, model_yaml, column_desc_dict, include_data_types, parent_column_name, case_sensitive_cols) %}
66
{% if parent_column_name %}
77
{% set column_name = parent_column_name ~ "." ~ column.name %}
88
{% else %}
99
{% set column_name = column.name %}
1010
{% endif %}
1111

12-
{% do model_yaml.append(' - name: ' ~ column_name | lower ) %}
12+
{% do model_yaml.append(' - name: ' ~ (column_name if case_sensitive_cols else column_name | lower)) %}
1313
{% if include_data_types %}
1414
{% do model_yaml.append(' data_type: ' ~ codegen.data_type_format_model(column)) %}
1515
{% endif %}
@@ -18,17 +18,17 @@
1818

1919
{% if column.fields|length > 0 %}
2020
{% for child_column in column.fields %}
21-
{% set model_yaml = codegen.generate_column_yaml(child_column, model_yaml, column_desc_dict, include_data_types, parent_column_name=column_name) %}
21+
{% 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) %}
2222
{% endfor %}
2323
{% endif %}
2424
{% do return(model_yaml) %}
2525
{% endmacro %}
2626

27-
{% macro generate_model_yaml(model_names=[], upstream_descriptions=False, include_data_types=True) -%}
28-
{{ return(adapter.dispatch('generate_model_yaml', 'codegen')(model_names, upstream_descriptions, include_data_types)) }}
27+
{% macro generate_model_yaml(model_names=[], upstream_descriptions=False, include_data_types=True, case_sensitive_cols=False) -%}
28+
{{ return(adapter.dispatch('generate_model_yaml', 'codegen')(model_names, upstream_descriptions, include_data_types, case_sensitive_cols)) }}
2929
{%- endmacro %}
3030

31-
{% macro default__generate_model_yaml(model_names, upstream_descriptions, include_data_types) %}
31+
{% macro default__generate_model_yaml(model_names, upstream_descriptions, include_data_types, case_sensitive_cols) %}
3232

3333
{% set model_yaml=[] %}
3434

@@ -49,7 +49,7 @@
4949
{% set column_desc_dict = codegen.build_dict_column_descriptions(model) if upstream_descriptions else {} %}
5050

5151
{% for column in columns %}
52-
{% set model_yaml = codegen.generate_column_yaml(column, model_yaml, column_desc_dict, include_data_types) %}
52+
{% 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) %}
5353
{% endfor %}
5454
{% endfor %}
5555
{% endif %}
@@ -62,4 +62,4 @@
6262

6363
{% endif %}
6464

65-
{% endmacro %}
65+
{% endmacro %}

0 commit comments

Comments
 (0)