diff --git a/CHANGELOG.md b/CHANGELOG.md index 2be4fed..c223dd6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## Fixes - Column `description` fields are now correctly escaped in `generate_model_yaml` ([#142](https://github.com/dbt-labs/dbt-codegen/issues/142)) +- Fix `generate_source` behavior of applying a lowercase function to all object names ([#112](https://github.com/dbt-labs/dbt-codegen/issues/112)) # dbt-codegen v0.11.0 diff --git a/README.md b/README.md index 58c4a3b..29066e4 100644 --- a/README.md +++ b/README.md @@ -69,6 +69,15 @@ which you can then paste into a schema file. the database to your source definition - `include_schema` (optional, default=False): Whether you want to add the schema to your source definition +- `case_sensitive_databases` (optional, default=False): Whether you want database names to be +in lowercase, or to match the case in the source table +- `case_sensitive_schemas` (optional, default=False): Whether you want schema names to be +in lowercase, or to match the case in the source table +- `case_sensitive_tables` (optional, default=False): Whether you want table names to be +in lowercase, or to match the case in the source table +- `case_sensitive_cols` (optional, default=False): Whether you want column names to be +in lowercase, or to match the case in the source table + ### Outputting to a file diff --git a/integration_tests/dbt_project.yml b/integration_tests/dbt_project.yml index db3781e..166f04e 100644 --- a/integration_tests/dbt_project.yml +++ b/integration_tests/dbt_project.yml @@ -18,7 +18,10 @@ clean-targets: seeds: +schema: raw_data +quote_columns: false - + codegen_integration_tests: + data__Case_Sensitive: + +schema: Raw_Data_Case_Sensitive + quote_columns: true vars: my_table_reference: table_c diff --git a/integration_tests/seeds/data__Case_Sensitive.csv b/integration_tests/seeds/data__Case_Sensitive.csv new file mode 100644 index 0000000..d0f2e97 --- /dev/null +++ b/integration_tests/seeds/data__Case_Sensitive.csv @@ -0,0 +1,3 @@ +Col_A,Col_B +1,a +2,b diff --git a/integration_tests/tests/test_generate_source_all_args.sql b/integration_tests/tests/test_generate_source_all_args.sql index cf6703a..5d26d91 100644 --- a/integration_tests/tests/test_generate_source_all_args.sql +++ b/integration_tests/tests/test_generate_source_all_args.sql @@ -12,7 +12,11 @@ name=raw_schema, table_names=None, include_database=True, - include_schema=True + include_schema=True, + case_sensitive_databases=False, + case_sensitive_schemas=False, + case_sensitive_tables=False, + case_sensitive_cols=False ) %} diff --git a/integration_tests/tests/test_generate_source_case_sensitive.sql b/integration_tests/tests/test_generate_source_case_sensitive.sql new file mode 100644 index 0000000..48f3d69 --- /dev/null +++ b/integration_tests/tests/test_generate_source_case_sensitive.sql @@ -0,0 +1,35 @@ + +{% set raw_schema = generate_schema_name('Raw_Data_Case_Sensitive') %} + +-- test default args +{% set actual_source_yaml = codegen.generate_source( + schema_name=raw_schema, + database_name=target.database, + generate_columns=True, + name=raw_schema, + include_database=True, + include_schema=True, + case_sensitive_databases=True, + case_sensitive_schemas=True, + case_sensitive_tables=True, + case_sensitive_cols=True +) %} + +{% set expected_source_yaml %} +version: 2 + +sources: + - name: codegen_integration_tests_postgres_raw_data_case_sensitive + database: circle_test + schema: codegen_integration_tests_postgres_Raw_Data_Case_Sensitive + tables: + - name: data__Case_Sensitive + columns: + - name: Col_A + data_type: integer + - name: Col_B + data_type: text +{% endset %} + + +{{ assert_equal (actual_source_yaml | trim, expected_source_yaml | trim) }} diff --git a/macros/generate_source.sql b/macros/generate_source.sql index 2bc32fa..f769911 100644 --- a/macros/generate_source.sql +++ b/macros/generate_source.sql @@ -13,11 +13,11 @@ {% endmacro %} -{% macro generate_source(schema_name, database_name=target.database, generate_columns=False, include_descriptions=False, include_data_types=True, table_pattern='%', exclude='', name=schema_name, table_names=None, include_database=False, include_schema=False) %} - {{ return(adapter.dispatch('generate_source', 'codegen')(schema_name, database_name, generate_columns, include_descriptions, include_data_types, table_pattern, exclude, name, table_names, include_database, include_schema)) }} +{% macro generate_source(schema_name, database_name=target.database, generate_columns=False, include_descriptions=False, include_data_types=True, table_pattern='%', exclude='', name=schema_name, table_names=None, include_database=False, include_schema=False, case_sensitive_databases=False, case_sensitive_schemas=False, case_sensitive_tables=False, case_sensitive_cols=False) %} + {{ return(adapter.dispatch('generate_source', 'codegen')(schema_name, database_name, generate_columns, include_descriptions, include_data_types, table_pattern, exclude, name, table_names, include_database, include_schema, case_sensitive_databases, case_sensitive_schemas, case_sensitive_tables, case_sensitive_cols)) }} {% endmacro %} -{% macro default__generate_source(schema_name, database_name, generate_columns, include_descriptions, include_data_types, table_pattern, exclude, name, table_names, include_database, include_schema) %} +{% macro default__generate_source(schema_name, database_name, generate_columns, include_descriptions, include_data_types, table_pattern, exclude, name, table_names, include_database, include_schema, case_sensitive_databases, case_sensitive_schemas, case_sensitive_tables, case_sensitive_cols) %} {% set sources_yaml=[] %} {% do sources_yaml.append('version: 2') %} @@ -30,11 +30,11 @@ {% endif %} {% if database_name != target.database or include_database %} -{% do sources_yaml.append(' database: ' ~ database_name | lower) %} +{% do sources_yaml.append(' database: ' ~ (database_name if case_sensitive_databases else database_name | lower)) %} {% endif %} {% if schema_name != name or include_schema %} -{% do sources_yaml.append(' schema: ' ~ schema_name | lower) %} +{% do sources_yaml.append(' schema: ' ~ (schema_name if case_sensitive_schemas else schema_name | lower)) %} {% endif %} {% do sources_yaml.append(' tables:') %} @@ -46,7 +46,7 @@ {% endif %} {% for table in tables %} - {% do sources_yaml.append(' - name: ' ~ table | lower ) %} + {% do sources_yaml.append(' - name: ' ~ (table if case_sensitive_tables else table | lower) ) %} {% if include_descriptions %} {% do sources_yaml.append(' description: ""' ) %} {% endif %} @@ -62,7 +62,7 @@ {% set columns=adapter.get_columns_in_relation(table_relation) %} {% for column in columns %} - {% do sources_yaml.append(' - name: ' ~ column.name | lower ) %} + {% do sources_yaml.append(' - name: ' ~ (column.name if case_sensitive_cols else column.name | lower)) %} {% if include_data_types %} {% do sources_yaml.append(' data_type: ' ~ codegen.data_type_format_source(column)) %} {% endif %}