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
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,7 @@ 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_data_types` (optional, default=False): Whether you want to have the data types with the same case as the target database.

### Usage:

Expand Down
13 changes: 13 additions & 0 deletions integration_tests/macros/bool_type_value.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{%- macro bool_type_value(case_sensitive=False) -%}
{%- if target.type == "redshift" -%}
boolean
{%- elif target.type == "snowflake" -%}
{%- if case_sensitive -%}BOOLEAN{%- else -%}boolean{%- endif -%}
{%- elif target.type == "bigquery" -%}
{%- if case_sensitive -%}BOOLEAN{%- else -%}boolean{%- endif -%}
{%- elif target.type == "postgres" -%}
boolean
{%- else -%}
{%- if case_sensitive -%}BOOLEAN{%- else -%}boolean{%- endif -%}
{%- endif -%}
{%- endmacro -%}
14 changes: 9 additions & 5 deletions integration_tests/macros/integer_type_value.sql
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
{%- macro integer_type_value() -%}
{%- if target.type == "snowflake" -%}
number
{%- macro integer_type_value(case_sensitive=False) -%}
{%- if target.type == "redshift" -%}
integer
{%- elif target.type == "snowflake" -%}
{%- if case_sensitive -%}NUMBER{%- else -%}number{%- endif -%}
{%- elif target.type == "bigquery" -%}
int64
{%- if case_sensitive -%}INT64{%- else -%}int64{%- endif -%}
{%- elif target.type == "postgres" -%}
integer
{%- else -%}
integer
{%- if case_sensitive -%}INTEGER{%- else -%}integer{%- endif -%}
{%- endif -%}
{%- endmacro -%}
4 changes: 2 additions & 2 deletions integration_tests/macros/operations/create_source_table.sql
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
{% do adapter.create_schema(target_schema) %}

{% set drop_table_sql %}
drop table if exists {{ target_schema }}.codegen_integration_tests__data_source_table {% if target.type == "redshift" %}cascade{% endif %}
drop table if exists {{ target_schema }}.codegen_integration_tests__data_source_table {% if target.type in ["redshift", "postgres"] %}cascade{% endif %}
{% endset %}

{{ run_query(drop_table_sql) }}
Expand All @@ -26,7 +26,7 @@ create table {{ target_schema }}.codegen_integration_tests__data_source_table as
{{ run_query(create_table_sql) }}

{% set drop_table_sql_case_sensitive %}
drop table if exists {{ target_schema }}.codegen_integration_tests__data_source_table_case_sensitive {% if target.type == "redshift" %}cascade{% endif %}
drop table if exists {{ target_schema }}.codegen_integration_tests__data_source_table_case_sensitive {% if target.type in ["redshift", "postgres"] %}cascade{% endif %}
{% endset %}

{{ run_query(drop_table_sql_case_sensitive) }}
Expand Down
14 changes: 8 additions & 6 deletions integration_tests/macros/text_type_value.sql
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
{%- macro text_type_value() -%}
{%- macro text_type_value(case_sensitive=False) -%}
{%- if target.type == "redshift"-%}
character varying
character varying
{%- elif target.type == "snowflake" -%}
varchar
{%- if case_sensitive -%}VARCHAR{%- else -%}varchar{%- endif -%}
{%- elif target.type == "bigquery" -%}
string
{%- if case_sensitive -%}STRING{%- else -%}string{%- endif -%}
{%- elif target.type == "postgres" -%}
text
{%- else -%}
text
{%- if case_sensitive -%}TEXT{%- else -%}text{%- endif -%}
{%- endif -%}
{%- endmacro -%}
{%- endmacro -%}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{# Test with case_sensitive_data_types=False (default behavior) #}
{% set actual_model_yaml_lowercase = codegen.generate_model_yaml(
model_names=['model_from_source'],
case_sensitive_data_types=False
)
%}

{% set expected_model_yaml_lowercase %}
version: 2

models:
- name: model_from_source
description: ""
columns:
- name: my_integer_col
data_type: {{ integer_type_value() | lower }}
description: ""

- name: my_bool_col
data_type: {{ bool_type_value() | lower }}
description: ""

{% endset %}

{{ assert_equal (actual_model_yaml_lowercase | trim, expected_model_yaml_lowercase | trim) }}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{# Test with case_sensitive_data_types=True #}
{% set actual_model_yaml_uppercase = codegen.generate_model_yaml(
model_names=['model_from_source'],
case_sensitive_data_types=True
)
%}

{% set expected_model_yaml_uppercase %}
version: 2

models:
- name: model_from_source
description: ""
columns:
- name: my_integer_col
data_type: {{ integer_type_value(case_sensitive=True) }}
description: ""

- name: my_bool_col
data_type: {{ bool_type_value(case_sensitive=True) }}
description: ""

{% endset %}


{{ assert_equal (actual_model_yaml_uppercase | trim, expected_model_yaml_uppercase | trim) }}
20 changes: 10 additions & 10 deletions macros/generate_model_yaml.sql
Original file line number Diff line number Diff line change
@@ -1,34 +1,34 @@
{% 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_data_types=False) %}
{{ return(adapter.dispatch('generate_column_yaml', 'codegen')(column, model_yaml, column_desc_dict, include_data_types, parent_column_name, case_sensitive_data_types)) }}
{% 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_data_types) %}
{% 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 | lower ) %}
{% if include_data_types %}
{% do model_yaml.append(' data_type: ' ~ codegen.data_type_format_model(column)) %}
{% do model_yaml.append(' data_type: ' ~ codegen.data_type_format_model(column, case_sensitive_data_types)) %}
{% endif %}
{% do model_yaml.append(' description: ' ~ (column_desc_dict.get(column.name | lower,'') | tojson)) %}
{% do model_yaml.append('') %}

{% 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_data_types=case_sensitive_data_types) %}
{% 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_data_types=False) -%}
{{ return(adapter.dispatch('generate_model_yaml', 'codegen')(model_names, upstream_descriptions, include_data_types, case_sensitive_data_types)) }}
{%- 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_data_types) %}

{% set model_yaml=[] %}

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_data_types=case_sensitive_data_types) %}
{% endfor %}
{% endfor %}
{% endif %}
Expand Down
8 changes: 4 additions & 4 deletions macros/helpers/helpers.sql
Original file line number Diff line number Diff line change
Expand Up @@ -79,14 +79,14 @@
{{ return(formatted['data_type'] | lower) }}
{% endmacro %}

{% macro data_type_format_model(column) -%}
{{ return(adapter.dispatch('data_type_format_model', 'codegen')(column)) }}
{% macro data_type_format_model(column, case_sensitive_data_types=False) -%}
{{ return(adapter.dispatch('data_type_format_model', 'codegen')(column, case_sensitive_data_types)) }}
{%- endmacro %}

{# format a column data type for a model #}
{% macro default__data_type_format_model(column) %}
{% macro default__data_type_format_model(column, case_sensitive_data_types) %}
{% set formatted = codegen.format_column(column) %}
{{ return(formatted['data_type'] | lower) }}
{{ return(formatted['data_type'] if case_sensitive_data_types else formatted['data_type'] | lower) }}
{% endmacro %}

{# retrieve entire resource dictionary based on unique id #}
Expand Down
1 change: 1 addition & 0 deletions run_test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ echo `pwd`
cd integration_tests
cp ci/sample.profiles.yml profiles.yml

dbt --warn-error clean --target $1 || exit 1
dbt --warn-error deps --target $1 || exit 1
dbt --warn-error run-operation create_source_table --target $1 || exit 1
dbt --warn-error seed --target $1 --full-refresh || exit 1
Expand Down
Loading