Skip to content

Commit 20e5905

Browse files
authored
Merge pull request #685 from dbt-msft/feat/default-schema-concat-flag
✨ feat: add default schema concatenation flag support and update documentation
2 parents 077e555 + 95f2b5c commit 20e5905

3 files changed

Lines changed: 52 additions & 28 deletions

File tree

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,13 @@ See [the changelog](CHANGELOG.md)
6868
**Example usage in `dbt_project.yml`:**
6969

7070
```yaml
71-
vars:
71+
flags:
7272
dbt_sqlserver_use_default_schema_concat: true # Enable standard schema concatenation
7373
```
7474
75-
> **Note:** If you want to permanently customise schema generation and avoid any future deprecation of this flag, override the `sqlserver__generate_schema_name` macro directly in your project.
75+
This adapter also supports the same setting via `vars:` for backwards compatibility, so either method works in the current release.
76+
77+
> **Note:** If you want to permanently customise schema generation and avoid any future changes, override the `sqlserver__generate_schema_name` macro directly in your project instead.
7678

7779

7880

dbt/include/sqlserver/macros/adapters/schema.sql

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,16 +48,19 @@
4848
- `target.schema` when no custom schema is set
4949
- `custom_schema_name` (trim) when a custom schema is set
5050

51-
When the `dbt_sqlserver_use_default_schema_concat` variable is set to true,
51+
When the `dbt_sqlserver_use_default_schema_concat` flag is enabled,
5252
this delegates to dbt-core's `default__generate_schema_name`, which concatenates
5353
`target.schema` + `_` + `custom_schema_name`.
5454
55-
Set the flag in dbt_project.yml:
56-
vars:
55+
Set the flag in `dbt_project.yml`:
56+
flags:
5757
dbt_sqlserver_use_default_schema_concat: true
58+
5859
#}
5960
{% macro sqlserver__generate_schema_name(custom_schema_name, node) -%}
60-
{%- if var('dbt_sqlserver_use_default_schema_concat', false) -%}
61+
{%- if adapter.behavior.dbt_sqlserver_use_default_schema_concat -%}
62+
{{ default__generate_schema_name(custom_schema_name, node) }}
63+
{%- elif var('dbt_sqlserver_use_default_schema_concat', false) -%}
6164
{{ default__generate_schema_name(custom_schema_name, node) }}
6265
{%- else -%}
6366
{%- set default_schema = target.schema -%}

tests/unit/adapters/mssql/test_generate_schema_name.py

Lines changed: 41 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@
2727

2828
_SQLSERVER_GENERATE_SCHEMA_NAME = """
2929
{% macro sqlserver__generate_schema_name(custom_schema_name, node) -%}
30-
{%- if var('dbt_sqlserver_use_default_schema_concat', false) -%}
30+
{%- if adapter.behavior.dbt_sqlserver_use_default_schema_concat -%}
31+
{{ default__generate_schema_name(custom_schema_name, node) }}
32+
{%- elif var('dbt_sqlserver_use_default_schema_concat', false) -%}
3133
{{ default__generate_schema_name(custom_schema_name, node) }}
3234
{%- else -%}
3335
{%- set default_schema = target.schema -%}
@@ -41,8 +43,29 @@
4143
"""
4244

4345

44-
def _render(custom_schema_name, target_schema="my_target_schema", use_default_concat=False):
46+
def _render(
47+
custom_schema_name,
48+
target_schema="my_target_schema",
49+
use_default_concat=False,
50+
use_legacy_var=False,
51+
):
4552
"""Render sqlserver__generate_schema_name with a minimal Jinja2 env."""
53+
54+
class BehaviorFlag:
55+
def __init__(self, enabled):
56+
self.enabled = enabled
57+
58+
def __bool__(self):
59+
return self.enabled
60+
61+
@property
62+
def no_warn(self):
63+
return self.enabled
64+
65+
class Behavior:
66+
def __init__(self, enabled):
67+
self.dbt_sqlserver_use_default_schema_concat = BehaviorFlag(enabled)
68+
4669
env = jinja2.Environment(
4770
trim_blocks=True,
4871
lstrip_blocks=True,
@@ -61,10 +84,12 @@ def _render(custom_schema_name, target_schema="my_target_schema", use_default_co
6184
"node": None,
6285
"target": type("Target", (), {"schema": target_schema})(),
6386
"var": lambda key, default=None: (
64-
use_default_concat if key == "dbt_sqlserver_use_default_schema_concat" else default
87+
use_legacy_var if key == "dbt_sqlserver_use_default_schema_concat" else default
6588
),
89+
"adapter": type("Adapter", (), {"behavior": Behavior(use_default_concat)})(),
6690
}
67-
return tmpl.render(**ctx).strip()
91+
result = tmpl.render(**ctx).strip()
92+
return result
6893

6994

7095
# ---------------------------------------------------------------------------
@@ -96,23 +121,18 @@ def test_custom_schema_whitespace_is_trimmed(self):
96121

97122
def test_flag_absent_defaults_to_legacy(self):
98123
"""var() returning its default (False) gives the same legacy result."""
99-
env = jinja2.Environment(
100-
trim_blocks=True, lstrip_blocks=True, extensions=["jinja2.ext.do"]
101-
)
102-
tmpl = env.from_string(
103-
_DEFAULT_GENERATE_SCHEMA_NAME
104-
+ "\n"
105-
+ _SQLSERVER_GENERATE_SCHEMA_NAME
106-
+ "\n"
107-
+ "{{ sqlserver__generate_schema_name(custom_schema_name, node) }}"
124+
assert _render("sales", target_schema="prod", use_default_concat=False) == "sales"
125+
126+
def test_vars_enable_default_concat_when_flag_absent(self):
127+
assert (
128+
_render(
129+
"reporting",
130+
target_schema="dbt_dev",
131+
use_default_concat=False,
132+
use_legacy_var=True,
133+
)
134+
== "dbt_dev_reporting"
108135
)
109-
result = tmpl.render(
110-
custom_schema_name="sales",
111-
node=None,
112-
target=type("Target", (), {"schema": "prod"})(),
113-
var=lambda key, default=None: default, # always returns the default (False)
114-
).strip()
115-
assert result == "sales"
116136

117137

118138
# ---------------------------------------------------------------------------
@@ -165,5 +185,4 @@ def test_custom_schema_concatenation_uses_underscore_separator(self):
165185
],
166186
)
167187
def test_schema_name_generation(custom_schema_name, target_schema, use_default_concat, expected):
168-
result = _render(custom_schema_name, target_schema, use_default_concat)
169-
assert result == expected
188+
assert _render(custom_schema_name, target_schema, use_default_concat) == expected

0 commit comments

Comments
 (0)