Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,10 @@ 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_models` (optional, default=False): Whether you want model names to be
in lowercase, or to match the case in the model — not compatible with Redshift
- `case_sensitive_cols` (optional, default=False): Whether you want column names to be
in lowercase, or to match the case in the model

### Usage:

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
select
*
from {{ source('codegen_integration_tests__data_source_schema', 'codegen_integration_tests__data_source_table_case_sensitive') }}

Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{% set actual_model_yaml = codegen.generate_model_yaml(
model_names=['Model_from_source_case_sensitive'],
case_sensitive_models=True,
case_sensitive_cols=True,
include_data_types=False
)
%}

{% set expected_model_yaml %}
version: 2

models:
- name: Model_from_source_case_sensitive
description: ""
columns:
- name: My_Integer_Col
description: ""

- name: My_Bool_Col
description: ""

{% endset %}

{{ assert_equal (actual_model_yaml | trim, expected_model_yaml | trim) }}
8 changes: 6 additions & 2 deletions integration_tests/tests/test_helper_get_models.sql
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,13 @@
-- depends_on: {{ ref('model_without_any_ctes') }}

{% if execute %}
{% set actual_list = codegen.get_models(prefix='model_')|sort %}
{% set uppercase_model_names = codegen.get_models(prefix='Model_') %}
{% set lowercase_model_names = codegen.get_models(prefix='model_') %}

{% set all_models = uppercase_model_names + lowercase_model_names %}
{% set actual_list = all_models | sort %}
{% endif %}

{% set expected_list = ['model_data_a', 'model_from_source', 'model_incremental', 'model_repeated', 'model_struct', 'model_without_any_ctes', 'model_without_import_ctes'] %}
{% set expected_list = ['model_data_a', 'model_from_source', 'Model_from_source_case_sensitive', 'model_incremental', 'model_repeated', 'model_struct', 'model_without_any_ctes', 'model_without_import_ctes'] %}

{{ assert_equal (actual_list, expected_list) }}
20 changes: 10 additions & 10 deletions macros/generate_model_yaml.sql
Original file line number Diff line number Diff line change
@@ -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, case_sensitive_cols, parent_column_name="") %}
{{ return(adapter.dispatch('generate_column_yaml', 'codegen')(column, model_yaml, column_desc_dict, include_data_types, case_sensitive_cols, parent_column_name)) }}
{% 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, case_sensitive_cols, parent_column_name="") %}
{% 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 %}
Expand All @@ -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, case_sensitive_cols, parent_column_name=column_name) %}
{% 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_models=False,case_sensitive_cols=False) -%}
{{ return(adapter.dispatch('generate_model_yaml', 'codegen')(model_names, upstream_descriptions, include_data_types, case_sensitive_models, 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_models, case_sensitive_cols) %}

{% set model_yaml=[] %}

Expand All @@ -40,7 +40,7 @@
{{ exceptions.raise_compiler_error("The `model_names` argument must always be a list, even if there is only one model.") }}
{% else %}
{% for model in model_names %}
{% do model_yaml.append(' - name: ' ~ model | lower) %}
{% do model_yaml.append(' - name: ' ~ (model if case_sensitive_models else model | lower) ) %}
{% do model_yaml.append(' description: ""') %}
{% do model_yaml.append(' columns:') %}

Expand All @@ -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, case_sensitive_cols=case_sensitive_cols) %}
{% endfor %}
{% endfor %}
{% endif %}
Expand Down
Loading