Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added case_sensitive_cols argument to generate_base_model macro #63

Merged
merged 4 commits into from
Jun 22, 2022
Merged
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 @@ -76,6 +76,7 @@ model.
* `source_name` (required): The source you wish to generate base model SQL for.
* `table_name` (required): The source table you wish to generate base model SQL for.
* `leading_commas` (optional, default=False): Whether you want your commas to be leading (vs trailing).
* `case_sensitive_cols ` (optional, default=False): Whether your source table has case sensitive column names. If true, keeps the case of the column names from the source.


### Usage:
Expand Down
30 changes: 30 additions & 0 deletions integration_tests/macros/operations/create_source_table.sql
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
{% macro create_source_table() %}

{% if target.type == "redshift" %}
{% set disable_case_sensitive %}
reset enable_case_sensitive_identifier;
{% endset %}
{{ run_query(disable_case_sensitive) }}
{% endif %}

{% set target_schema=api.Relation.create(
database=target.database,
schema="codegen_integration_tests__data_source_schema"
Expand All @@ -25,4 +32,27 @@ 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
{% endset %}

{{ run_query(drop_table_sql_case_sensitive) }}

{% if target.type == "redshift" %}
{% set enable_case_sensitive %}
set enable_case_sensitive_identifier to true;
{% endset %}
{{ run_query(enable_case_sensitive) }}
{% endif %}

{% set create_table_sql_case_sensitive %}
create table {{ target_schema }}.codegen_integration_tests__data_source_table_case_sensitive as (
select
1 as {% if target.type == "bigquery" %}My_Integer_Col{% else %}"My_Integer_Col"{% endif %},
true as {% if target.type == "bigquery" %}My_Bool_Col{% else %}"My_Bool_Col"{% endif %}
)
{% endset %}

{{ run_query(create_table_sql_case_sensitive) }}

{% endmacro %}
1 change: 1 addition & 0 deletions integration_tests/models/source.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ sources:
- name: codegen_integration_tests__data_source_schema
tables:
- name: codegen_integration_tests__data_source_table
- name: codegen_integration_tests__data_source_table_case_sensitive
30 changes: 30 additions & 0 deletions integration_tests/tests/test_generate_base_models_all_args.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@

{% set actual_base_model = codegen.generate_base_model(
source_name='codegen_integration_tests__data_source_schema',
table_name='codegen_integration_tests__data_source_table_case_sensitive',
leading_commas=True,
case_sensitive_cols=True
)
%}

{% set expected_base_model %}
with source as (

select * from {%raw%}{{ source('codegen_integration_tests__data_source_schema', 'codegen_integration_tests__data_source_table_case_sensitive') }}{%endraw%}

),

renamed as (

select
{% if target.type == "bigquery" %}My_Integer_Col{% else %}"My_Integer_Col"{% endif %}
, {% if target.type == "bigquery" %}My_Bool_Col{% else %}"My_Bool_Col"{% endif %}

from source

)

select * from renamed
{% endset %}

{{ assert_equal (actual_base_model | trim, expected_base_model | trim) }}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{% set actual_base_model = codegen.generate_base_model(
source_name='codegen_integration_tests__data_source_schema',
table_name='codegen_integration_tests__data_source_table_case_sensitive',
case_sensitive_cols=True
)
%}

{% set expected_base_model %}
with source as (

select * from {%raw%}{{ source('codegen_integration_tests__data_source_schema', 'codegen_integration_tests__data_source_table_case_sensitive') }}{%endraw%}

),

renamed as (

select
{% if target.type == "bigquery" %}My_Integer_Col{% else %}"My_Integer_Col"{% endif %},
{% if target.type == "bigquery" %}My_Bool_Col{% else %}"My_Bool_Col"{% endif %}

from source

)

select * from renamed
{% endset %}

{{ assert_equal (actual_base_model | trim, expected_base_model | trim) }}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
{% set actual_base_model = codegen.generate_base_model(
source_name='codegen_integration_tests__data_source_schema',
table_name='codegen_integration_tests__data_source_table',
leading_commas=True,
leading_commas=True
)
%}

Expand Down
2 changes: 1 addition & 1 deletion integration_tests/tests/test_generate_source.sql
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
version: 2

sources:
- name: {{ raw_schema | trim }}
- name: {{ raw_schema | trim | lower }}
tables:
- name: data__a_relation
- name: data__b_relation
Expand Down
2 changes: 1 addition & 1 deletion integration_tests/tests/test_generate_source_all_args.sql
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
version: 2

sources:
- name: {{ raw_schema | trim }}
- name: {{ raw_schema | trim | lower }}
tables:
- name: data__a_relation
columns:
Expand Down
2 changes: 1 addition & 1 deletion integration_tests/tests/test_generate_source_exclude.sql
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
version: 2

sources:
- name: {{ raw_schema | trim }}
- name: {{ raw_schema | trim | lower}}
tables:
- name: data__b_relation
{% endset %}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
version: 2

sources:
- name: {{ raw_schema | trim }}
- name: {{ raw_schema | trim | lower }}
tables:
- name: data__b_relation
{% endset %}
Expand Down
6 changes: 3 additions & 3 deletions macros/generate_base_model.sql
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{% macro generate_base_model(source_name, table_name, leading_commas=False) %}
{% macro generate_base_model(source_name, table_name, leading_commas=False, case_sensitive_cols=False) %}

{%- set source_relation = source(source_name, table_name) -%}

Expand All @@ -16,11 +16,11 @@ renamed as (
select
{%- if leading_commas -%}
{%- for column in column_names %}
{{", " if not loop.first}}{{ column | lower }}
{{", " if not loop.first}}{% if not case_sensitive_cols %}{{ column | lower }}{% elif target.type == "bigquery" %}{{ column }}{% else %}{{ "\"" ~ column ~ "\"" }}{% endif %}
{%- endfor %}
{%- else -%}
{%- for column in column_names %}
{{ column | lower }}{{"," if not loop.last}}
{% if not case_sensitive_cols %}{{ column | lower }}{% elif target.type == "bigquery" %}{{ column }}{% else %}{{ "\"" ~ column ~ "\"" }}{% endif %}{{"," if not loop.last}}
{%- endfor -%}
{%- endif %}

Expand Down