dbt-sqlserver 1.9.2__tar.gz → 1.10.0rc1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dbt_sqlserver-1.9.2/dbt_sqlserver.egg-info → dbt_sqlserver-1.10.0rc1}/PKG-INFO +10 -15
- dbt_sqlserver-1.10.0rc1/dbt/adapters/sqlserver/__version__.py +1 -0
- dbt_sqlserver-1.10.0rc1/dbt/adapters/sqlserver/py.typed +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/adapters/sqlserver/sqlserver_adapter.py +29 -1
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/adapters/sqlserver/sqlserver_column.py +17 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/adapters/sqlserver/sqlserver_relation.py +14 -7
- dbt_sqlserver-1.10.0rc1/dbt/include/sqlserver/macros/adapters/catalog.sql +277 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/adapters/columns.sql +17 -27
- dbt_sqlserver-1.10.0rc1/dbt/include/sqlserver/macros/adapters/metadata.sql +208 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/adapters/relation.sql +1 -1
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/materializations/models/incremental/merge.sql +7 -3
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/materializations/models/table/table.sql +34 -15
- dbt_sqlserver-1.10.0rc1/dbt/include/sqlserver/macros/materializations/models/table/table_dml_refresh.sql +95 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/materializations/models/unit_test/unit_test_create_table_as.sql +1 -1
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/materializations/models/view/view.sql +48 -10
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/materializations/snapshots/snapshot.sql +9 -1
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/materializations/snapshots/snapshot_merge.sql +2 -2
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/relations/table/create.sql +3 -3
- dbt_sqlserver-1.10.0rc1/dbt/include/sqlserver/macros/relations/views/create.sql +25 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1/dbt_sqlserver.egg-info}/PKG-INFO +10 -15
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt_sqlserver.egg-info/SOURCES.txt +3 -2
- dbt_sqlserver-1.10.0rc1/dbt_sqlserver.egg-info/requires.txt +10 -0
- dbt_sqlserver-1.10.0rc1/pyproject.toml +85 -0
- dbt_sqlserver-1.9.2/MANIFEST.in +0 -1
- dbt_sqlserver-1.9.2/dbt/adapters/sqlserver/__version__.py +0 -1
- dbt_sqlserver-1.9.2/dbt/include/sqlserver/macros/adapters/catalog.sql +0 -269
- dbt_sqlserver-1.9.2/dbt/include/sqlserver/macros/adapters/metadata.sql +0 -112
- dbt_sqlserver-1.9.2/dbt/include/sqlserver/macros/relations/views/create.sql +0 -19
- dbt_sqlserver-1.9.2/dbt_sqlserver.egg-info/requires.txt +0 -4
- dbt_sqlserver-1.9.2/setup.py +0 -95
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/LICENSE +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/README.md +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/__init__.py +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/adapters/sqlserver/__init__.py +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/adapters/sqlserver/relation_configs/__init__.py +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/adapters/sqlserver/relation_configs/policies.py +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/adapters/sqlserver/sqlserver_configs.py +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/adapters/sqlserver/sqlserver_connections.py +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/adapters/sqlserver/sqlserver_credentials.py +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/__init__.py +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/dbt_project.yml +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/adapters/apply_grants.sql +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/adapters/indexes.sql +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/adapters/schema.sql +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/adapters/show.sql +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/adapters/validate_sql.sql +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/materializations/models/incremental/incremental.sql +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/materializations/models/incremental/incremental_strategies.sql +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/materializations/models/table/clone.sql +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/materializations/models/table/columns_spec_ddl.sql +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/materializations/models/view/create_view_as.sql +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/materializations/snapshots/helpers.sql +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/materializations/snapshots/strategies.sql +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/materializations/tests.sql +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/materializations/unit_tests.sql +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/relations/seeds/helpers.sql +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/relations/table/clone.sql +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/utils/any_value.sql +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/utils/array_construct.sql +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/utils/cast_bool_to_text.sql +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/utils/concat.sql +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/utils/date_trunc.sql +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/utils/dateadd.sql +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/utils/get_tables_by_pattern.sql +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/utils/hash.sql +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/utils/last_day.sql +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/utils/length.sql +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/utils/listagg.sql +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/utils/position.sql +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/utils/safe_cast.sql +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/utils/split_part.sql +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/utils/timestamps.sql +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/profile_template.yml +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt_sqlserver.egg-info/dependency_links.txt +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt_sqlserver.egg-info/top_level.txt +0 -0
- {dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/setup.cfg +0 -0
|
@@ -1,40 +1,35 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dbt-sqlserver
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.10.0rc1
|
|
4
4
|
Summary: A Microsoft SQL Server adapter plugin for dbt
|
|
5
|
-
Home-page: https://github.com/dbt-msft/dbt-sqlserver
|
|
6
5
|
Author: Mikael Ene, Anders Swanson, Sam Debruyn, Cor Zuurmond, Cody Scott
|
|
7
6
|
License: MIT
|
|
8
7
|
Project-URL: Setup & configuration, https://docs.getdbt.com/reference/warehouse-profiles/mssql-profile
|
|
9
8
|
Project-URL: Documentation & usage, https://docs.getdbt.com/reference/resource-configs/mssql-configs
|
|
10
9
|
Project-URL: Changelog, https://github.com/dbt-msft/dbt-sqlserver/blob/master/CHANGELOG.md
|
|
11
10
|
Project-URL: Issue Tracker, https://github.com/dbt-msft/dbt-sqlserver/issues
|
|
11
|
+
Project-URL: Source, https://github.com/dbt-msft/dbt-sqlserver
|
|
12
12
|
Classifier: Development Status :: 5 - Production/Stable
|
|
13
13
|
Classifier: License :: OSI Approved :: MIT License
|
|
14
14
|
Classifier: Operating System :: Microsoft :: Windows
|
|
15
15
|
Classifier: Operating System :: MacOS :: MacOS X
|
|
16
16
|
Classifier: Operating System :: POSIX :: Linux
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
18
17
|
Classifier: Programming Language :: Python :: 3.10
|
|
19
18
|
Classifier: Programming Language :: Python :: 3.11
|
|
20
19
|
Classifier: Programming Language :: Python :: 3.12
|
|
21
20
|
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Requires-Python: >=3.10
|
|
22
22
|
Description-Content-Type: text/markdown
|
|
23
23
|
License-File: LICENSE
|
|
24
|
-
Requires-Dist: dbt-core<2.0,>=1.
|
|
25
|
-
Requires-Dist: dbt-common<2.0,>=1.0
|
|
26
|
-
Requires-Dist: dbt-adapters<2.0,>=1.
|
|
24
|
+
Requires-Dist: dbt-core<2.0,>=1.10.0
|
|
25
|
+
Requires-Dist: dbt-common<2.0,>=1.22.0
|
|
26
|
+
Requires-Dist: dbt-adapters<2.0,>=1.15.2
|
|
27
27
|
Requires-Dist: pyodbc>=5.2.0
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
Dynamic: home-page
|
|
33
|
-
Dynamic: license
|
|
28
|
+
Provides-Extra: azure
|
|
29
|
+
Requires-Dist: azure-identity>=1.12.0; extra == "azure"
|
|
30
|
+
Provides-Extra: pyodbc
|
|
31
|
+
Requires-Dist: pyodbc>=5.2.0; extra == "pyodbc"
|
|
34
32
|
Dynamic: license-file
|
|
35
|
-
Dynamic: project-url
|
|
36
|
-
Dynamic: requires-dist
|
|
37
|
-
Dynamic: summary
|
|
38
33
|
|
|
39
34
|
# dbt-sqlserver
|
|
40
35
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
version = "1.10.0rc1"
|
|
File without changes
|
|
@@ -18,7 +18,7 @@ from dbt.adapters.capability import Capability, CapabilityDict, CapabilitySuppor
|
|
|
18
18
|
from dbt.adapters.events.types import SchemaCreation
|
|
19
19
|
from dbt.adapters.reference_keys import _make_ref_key_dict
|
|
20
20
|
from dbt.adapters.sql.impl import CREATE_SCHEMA_MACRO_NAME, SQLAdapter
|
|
21
|
-
from dbt.adapters.sqlserver.sqlserver_column import SQLServerColumn
|
|
21
|
+
from dbt.adapters.sqlserver.sqlserver_column import SQLServerColumn, SQLServerColumnNative
|
|
22
22
|
from dbt.adapters.sqlserver.sqlserver_configs import SQLServerConfigs
|
|
23
23
|
from dbt.adapters.sqlserver.sqlserver_connections import SQLServerConnectionManager
|
|
24
24
|
from dbt.adapters.sqlserver.sqlserver_relation import SQLServerRelation
|
|
@@ -48,6 +48,14 @@ class SQLServerAdapter(SQLAdapter):
|
|
|
48
48
|
ConstraintType.foreign_key: ConstraintSupport.ENFORCED,
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
+
def __init__(self, config, mp_context=None):
|
|
52
|
+
super().__init__(config, mp_context)
|
|
53
|
+
SQLServerRelation.disable_empty_relation_aliases = (
|
|
54
|
+
self.behavior.dbt_sqlserver_disable_empty_relation_aliases
|
|
55
|
+
)
|
|
56
|
+
if self.behavior.dbt_sqlserver_use_native_string_types:
|
|
57
|
+
self.Column = SQLServerColumnNative
|
|
58
|
+
|
|
51
59
|
@property
|
|
52
60
|
def _behavior_flags(self) -> List[BehaviorFlag]:
|
|
53
61
|
return [
|
|
@@ -71,6 +79,26 @@ class SQLServerAdapter(SQLAdapter):
|
|
|
71
79
|
"macro in your project instead."
|
|
72
80
|
),
|
|
73
81
|
},
|
|
82
|
+
{
|
|
83
|
+
"name": "dbt_sqlserver_disable_empty_relation_aliases",
|
|
84
|
+
"default": True,
|
|
85
|
+
"description": (
|
|
86
|
+
"When True, SQL Server limited relations used by --empty and sample mode "
|
|
87
|
+
"do not automatically receive dbt-generated aliases. Set this false to opt "
|
|
88
|
+
"out of alias generation temporarily for testing."
|
|
89
|
+
),
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"name": "dbt_sqlserver_use_native_string_types",
|
|
93
|
+
"default": False,
|
|
94
|
+
"description": (
|
|
95
|
+
"When True, uses SQL Server-native string type mappings: "
|
|
96
|
+
"STRING -> VARCHAR(MAX), NCHAR -> NCHAR(1), NVARCHAR -> NVARCHAR(4000). "
|
|
97
|
+
"When False (default), preserves legacy mappings: "
|
|
98
|
+
"STRING and NVARCHAR -> VARCHAR(8000), NCHAR -> CHAR(1). "
|
|
99
|
+
"The new behaviour is intended to become the default in a future release."
|
|
100
|
+
),
|
|
101
|
+
},
|
|
74
102
|
]
|
|
75
103
|
|
|
76
104
|
@available.parse(lambda *a, **k: [])
|
|
@@ -97,3 +97,20 @@ class SQLServerColumn(Column):
|
|
|
97
97
|
if not self.is_string() or not other_column.is_string():
|
|
98
98
|
return False
|
|
99
99
|
return other_column.string_size() > self.string_size()
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
class SQLServerColumnNative(SQLServerColumn):
|
|
103
|
+
"""STRING maps to VARCHAR(MAX) (matches dbt convention) and NCHAR / NVARCHAR
|
|
104
|
+
map to their unicode SQL Server types — fixing the legacy default where
|
|
105
|
+
they were silently aliased to non-unicode CHAR(1) / VARCHAR(8000).
|
|
106
|
+
NVARCHAR uses the maximum fixed-length form (4000 — the cap for fixed
|
|
107
|
+
NVARCHAR since unicode is two bytes per character), parallel to VARCHAR(8000).
|
|
108
|
+
Opt-in via the `dbt_sqlserver_use_native_string_types` behaviour flag;
|
|
109
|
+
intended to become the default in a future release."""
|
|
110
|
+
|
|
111
|
+
TYPE_LABELS: ClassVar[Dict[str, str]] = {
|
|
112
|
+
**SQLServerColumn.TYPE_LABELS,
|
|
113
|
+
"STRING": "VARCHAR(MAX)",
|
|
114
|
+
"NCHAR": "NCHAR(1)",
|
|
115
|
+
"NVARCHAR": "NVARCHAR(4000)",
|
|
116
|
+
}
|
{dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/adapters/sqlserver/sqlserver_relation.py
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from dataclasses import dataclass, field
|
|
2
|
-
from typing import Optional, Type
|
|
2
|
+
from typing import ClassVar, Optional, Type
|
|
3
3
|
|
|
4
4
|
from dbt_common.exceptions import DbtRuntimeError
|
|
5
5
|
|
|
@@ -20,19 +20,26 @@ class SQLServerRelation(BaseRelation):
|
|
|
20
20
|
default_factory=lambda: SQLServerIncludePolicy()
|
|
21
21
|
)
|
|
22
22
|
quote_policy: SQLServerQuotePolicy = field(default_factory=lambda: SQLServerQuotePolicy())
|
|
23
|
+
disable_empty_relation_aliases: ClassVar[bool] = True
|
|
23
24
|
|
|
24
25
|
@classproperty
|
|
25
26
|
def get_relation_type(cls) -> Type[SQLServerRelationType]:
|
|
26
27
|
return SQLServerRelationType
|
|
27
28
|
|
|
29
|
+
def _render_limited_alias(self) -> str:
|
|
30
|
+
if self.disable_empty_relation_aliases:
|
|
31
|
+
return ""
|
|
32
|
+
|
|
33
|
+
return super()._render_limited_alias()
|
|
34
|
+
|
|
28
35
|
def render_limited(self) -> str:
|
|
29
36
|
rendered = self.render()
|
|
30
37
|
if self.limit is None:
|
|
31
38
|
return rendered
|
|
32
39
|
elif self.limit == 0:
|
|
33
|
-
return f"(select * from {rendered} where 1=0)
|
|
40
|
+
return f"(select * from {rendered} where 1=0){self._render_limited_alias()}"
|
|
34
41
|
else:
|
|
35
|
-
return f"(select TOP {self.limit} * from {rendered})
|
|
42
|
+
return f"(select TOP {self.limit} * from {rendered}){self._render_limited_alias()}"
|
|
36
43
|
|
|
37
44
|
def __post_init__(self):
|
|
38
45
|
# Check for length of Redshift table/view names.
|
|
@@ -58,19 +65,19 @@ class SQLServerRelation(BaseRelation):
|
|
|
58
65
|
if event_time_filter.start and event_time_filter.end:
|
|
59
66
|
filter = (
|
|
60
67
|
f"{event_time_filter.field_name} >="
|
|
61
|
-
f" cast('{event_time_filter.start}' as
|
|
68
|
+
f" cast('{event_time_filter.start}' as datetime2)"
|
|
62
69
|
f" and {event_time_filter.field_name} <"
|
|
63
|
-
f" cast('{event_time_filter.end}' as
|
|
70
|
+
f" cast('{event_time_filter.end}' as datetime2)"
|
|
64
71
|
)
|
|
65
72
|
elif event_time_filter.start:
|
|
66
73
|
filter = (
|
|
67
74
|
f"{event_time_filter.field_name} >="
|
|
68
|
-
f" cast('{event_time_filter.start}' as
|
|
75
|
+
f" cast('{event_time_filter.start}' as datetime2)"
|
|
69
76
|
)
|
|
70
77
|
elif event_time_filter.end:
|
|
71
78
|
filter = (
|
|
72
79
|
f"{event_time_filter.field_name} <"
|
|
73
|
-
f" cast('{event_time_filter.end}' as
|
|
80
|
+
f" cast('{event_time_filter.end}' as datetime2)"
|
|
74
81
|
)
|
|
75
82
|
|
|
76
83
|
return filter
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
{% macro sqlserver__get_catalog(information_schemas, schemas) -%}
|
|
2
|
+
{% set query_label = get_query_options() %}
|
|
3
|
+
{%- call statement('catalog', fetch_result=True) -%}
|
|
4
|
+
{{ get_use_database_sql(information_schemas.database) }}
|
|
5
|
+
with
|
|
6
|
+
principals as (
|
|
7
|
+
select
|
|
8
|
+
name as principal_name,
|
|
9
|
+
principal_id as principal_id
|
|
10
|
+
from
|
|
11
|
+
sys.database_principals {{ information_schema_hints() }}
|
|
12
|
+
),
|
|
13
|
+
|
|
14
|
+
schemas as (
|
|
15
|
+
select
|
|
16
|
+
name as schema_name,
|
|
17
|
+
schema_id as schema_id,
|
|
18
|
+
principal_id as principal_id
|
|
19
|
+
from
|
|
20
|
+
sys.schemas {{ information_schema_hints() }}
|
|
21
|
+
),
|
|
22
|
+
|
|
23
|
+
tables as (
|
|
24
|
+
select
|
|
25
|
+
object_id,
|
|
26
|
+
name as table_name,
|
|
27
|
+
schema_id as schema_id,
|
|
28
|
+
principal_id as principal_id,
|
|
29
|
+
'BASE TABLE' as table_type
|
|
30
|
+
from
|
|
31
|
+
sys.tables {{ information_schema_hints() }}
|
|
32
|
+
),
|
|
33
|
+
|
|
34
|
+
tables_with_metadata as (
|
|
35
|
+
select
|
|
36
|
+
object_id,
|
|
37
|
+
table_name,
|
|
38
|
+
schema_name,
|
|
39
|
+
coalesce(tables.principal_id, schemas.principal_id) as owner_principal_id,
|
|
40
|
+
table_type
|
|
41
|
+
from
|
|
42
|
+
tables
|
|
43
|
+
join schemas on tables.schema_id = schemas.schema_id
|
|
44
|
+
),
|
|
45
|
+
|
|
46
|
+
views as (
|
|
47
|
+
select
|
|
48
|
+
object_id,
|
|
49
|
+
name as table_name,
|
|
50
|
+
schema_id as schema_id,
|
|
51
|
+
principal_id as principal_id,
|
|
52
|
+
'VIEW' as table_type
|
|
53
|
+
from
|
|
54
|
+
sys.views {{ information_schema_hints() }}
|
|
55
|
+
),
|
|
56
|
+
|
|
57
|
+
views_with_metadata as (
|
|
58
|
+
select
|
|
59
|
+
object_id,
|
|
60
|
+
table_name,
|
|
61
|
+
schema_name,
|
|
62
|
+
coalesce(views.principal_id, schemas.principal_id) as owner_principal_id,
|
|
63
|
+
table_type
|
|
64
|
+
from
|
|
65
|
+
views
|
|
66
|
+
join schemas on views.schema_id = schemas.schema_id
|
|
67
|
+
),
|
|
68
|
+
|
|
69
|
+
tables_and_views as (
|
|
70
|
+
select
|
|
71
|
+
object_id,
|
|
72
|
+
table_name,
|
|
73
|
+
schema_name,
|
|
74
|
+
principal_name,
|
|
75
|
+
table_type
|
|
76
|
+
from
|
|
77
|
+
tables_with_metadata
|
|
78
|
+
join principals on tables_with_metadata.owner_principal_id = principals.principal_id
|
|
79
|
+
union all
|
|
80
|
+
select
|
|
81
|
+
object_id,
|
|
82
|
+
table_name,
|
|
83
|
+
schema_name,
|
|
84
|
+
principal_name,
|
|
85
|
+
table_type
|
|
86
|
+
from
|
|
87
|
+
views_with_metadata
|
|
88
|
+
join principals on views_with_metadata.owner_principal_id = principals.principal_id
|
|
89
|
+
),
|
|
90
|
+
|
|
91
|
+
cols as (
|
|
92
|
+
|
|
93
|
+
select
|
|
94
|
+
c.object_id,
|
|
95
|
+
c.name as column_name,
|
|
96
|
+
c.column_id as column_index,
|
|
97
|
+
t.name as column_type
|
|
98
|
+
from sys.columns as c {{ information_schema_hints() }}
|
|
99
|
+
left join sys.types as t {{ information_schema_hints() }} on c.system_type_id = t.system_type_id
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
select
|
|
103
|
+
DB_NAME() as table_database,
|
|
104
|
+
tv.schema_name as table_schema,
|
|
105
|
+
tv.table_name,
|
|
106
|
+
tv.table_type,
|
|
107
|
+
null as table_comment,
|
|
108
|
+
tv.principal_name as table_owner,
|
|
109
|
+
cols.column_name,
|
|
110
|
+
cols.column_index,
|
|
111
|
+
cols.column_type,
|
|
112
|
+
null as column_comment
|
|
113
|
+
from tables_and_views tv
|
|
114
|
+
join cols on tv.object_id = cols.object_id
|
|
115
|
+
where ({%- for schema in schemas -%}
|
|
116
|
+
upper(tv.schema_name) = upper('{{ schema }}'){%- if not loop.last %} or {% endif -%}
|
|
117
|
+
{%- endfor -%})
|
|
118
|
+
|
|
119
|
+
order by column_index
|
|
120
|
+
{{ query_label }}
|
|
121
|
+
|
|
122
|
+
{%- endcall -%}
|
|
123
|
+
|
|
124
|
+
{{ return(load_result('catalog').table) }}
|
|
125
|
+
|
|
126
|
+
{%- endmacro %}
|
|
127
|
+
|
|
128
|
+
{% macro sqlserver__get_catalog_relations(information_schema, relations) -%}
|
|
129
|
+
{% set query_label = get_query_options() %}
|
|
130
|
+
{%- set distinct_databases = relations | map(attribute='database') | unique | list -%}
|
|
131
|
+
|
|
132
|
+
{%- if distinct_databases | length == 1 -%}
|
|
133
|
+
{%- call statement('catalog', fetch_result=True) -%}
|
|
134
|
+
{{ get_use_database_sql(distinct_databases[0]) }}
|
|
135
|
+
with
|
|
136
|
+
principals as (
|
|
137
|
+
select
|
|
138
|
+
name as principal_name,
|
|
139
|
+
principal_id as principal_id
|
|
140
|
+
from
|
|
141
|
+
sys.database_principals {{ information_schema_hints() }}
|
|
142
|
+
),
|
|
143
|
+
|
|
144
|
+
schemas as (
|
|
145
|
+
select
|
|
146
|
+
name as schema_name,
|
|
147
|
+
schema_id as schema_id,
|
|
148
|
+
principal_id as principal_id
|
|
149
|
+
from
|
|
150
|
+
sys.schemas {{ information_schema_hints() }}
|
|
151
|
+
),
|
|
152
|
+
|
|
153
|
+
tables as (
|
|
154
|
+
select
|
|
155
|
+
object_id,
|
|
156
|
+
name as table_name,
|
|
157
|
+
schema_id as schema_id,
|
|
158
|
+
principal_id as principal_id,
|
|
159
|
+
'BASE TABLE' as table_type
|
|
160
|
+
from
|
|
161
|
+
sys.tables {{ information_schema_hints() }}
|
|
162
|
+
),
|
|
163
|
+
|
|
164
|
+
tables_with_metadata as (
|
|
165
|
+
select
|
|
166
|
+
object_id,
|
|
167
|
+
table_name,
|
|
168
|
+
schema_name,
|
|
169
|
+
coalesce(tables.principal_id, schemas.principal_id) as owner_principal_id,
|
|
170
|
+
table_type
|
|
171
|
+
from
|
|
172
|
+
tables
|
|
173
|
+
join schemas on tables.schema_id = schemas.schema_id
|
|
174
|
+
),
|
|
175
|
+
|
|
176
|
+
views as (
|
|
177
|
+
select
|
|
178
|
+
object_id,
|
|
179
|
+
name as table_name,
|
|
180
|
+
schema_id as schema_id,
|
|
181
|
+
principal_id as principal_id,
|
|
182
|
+
'VIEW' as table_type
|
|
183
|
+
from
|
|
184
|
+
sys.views {{ information_schema_hints() }}
|
|
185
|
+
),
|
|
186
|
+
|
|
187
|
+
views_with_metadata as (
|
|
188
|
+
select
|
|
189
|
+
object_id,
|
|
190
|
+
table_name,
|
|
191
|
+
schema_name,
|
|
192
|
+
coalesce(views.principal_id, schemas.principal_id) as owner_principal_id,
|
|
193
|
+
table_type
|
|
194
|
+
from
|
|
195
|
+
views
|
|
196
|
+
join schemas on views.schema_id = schemas.schema_id
|
|
197
|
+
),
|
|
198
|
+
|
|
199
|
+
tables_and_views as (
|
|
200
|
+
select
|
|
201
|
+
object_id,
|
|
202
|
+
table_name,
|
|
203
|
+
schema_name,
|
|
204
|
+
principal_name,
|
|
205
|
+
table_type
|
|
206
|
+
from
|
|
207
|
+
tables_with_metadata
|
|
208
|
+
join principals on tables_with_metadata.owner_principal_id = principals.principal_id
|
|
209
|
+
union all
|
|
210
|
+
select
|
|
211
|
+
object_id,
|
|
212
|
+
table_name,
|
|
213
|
+
schema_name,
|
|
214
|
+
principal_name,
|
|
215
|
+
table_type
|
|
216
|
+
from
|
|
217
|
+
views_with_metadata
|
|
218
|
+
join principals on views_with_metadata.owner_principal_id = principals.principal_id
|
|
219
|
+
),
|
|
220
|
+
|
|
221
|
+
cols as (
|
|
222
|
+
|
|
223
|
+
select
|
|
224
|
+
c.object_id,
|
|
225
|
+
c.name as column_name,
|
|
226
|
+
c.column_id as column_index,
|
|
227
|
+
t.name as column_type
|
|
228
|
+
from sys.columns as c {{ information_schema_hints() }}
|
|
229
|
+
left join sys.types as t on c.system_type_id = t.system_type_id
|
|
230
|
+
)
|
|
231
|
+
|
|
232
|
+
select
|
|
233
|
+
DB_NAME() as table_database,
|
|
234
|
+
tv.schema_name as table_schema,
|
|
235
|
+
tv.table_name,
|
|
236
|
+
tv.table_type,
|
|
237
|
+
null as table_comment,
|
|
238
|
+
tv.principal_name as table_owner,
|
|
239
|
+
cols.column_name,
|
|
240
|
+
cols.column_index,
|
|
241
|
+
cols.column_type,
|
|
242
|
+
null as column_comment
|
|
243
|
+
from tables_and_views tv
|
|
244
|
+
join cols on tv.object_id = cols.object_id
|
|
245
|
+
where (
|
|
246
|
+
{%- for relation in relations -%}
|
|
247
|
+
{% if relation.schema and relation.identifier %}
|
|
248
|
+
(
|
|
249
|
+
upper(tv.schema_name) = upper('{{ relation.schema }}')
|
|
250
|
+
and upper(tv.table_name) = upper('{{ relation.identifier }}')
|
|
251
|
+
)
|
|
252
|
+
{% elif relation.schema %}
|
|
253
|
+
(
|
|
254
|
+
upper(tv.schema_name) = upper('{{ relation.schema }}')
|
|
255
|
+
)
|
|
256
|
+
{% else %}
|
|
257
|
+
{% do exceptions.raise_compiler_error(
|
|
258
|
+
'`get_catalog_relations` requires a list of relations, each with a schema'
|
|
259
|
+
) %}
|
|
260
|
+
{% endif %}
|
|
261
|
+
|
|
262
|
+
{%- if not loop.last %} or {% endif -%}
|
|
263
|
+
{%- endfor -%}
|
|
264
|
+
)
|
|
265
|
+
|
|
266
|
+
order by column_index
|
|
267
|
+
{{ query_label }}
|
|
268
|
+
|
|
269
|
+
{%- endcall -%}
|
|
270
|
+
{{ return(load_result('catalog').table) }}
|
|
271
|
+
{% else %}
|
|
272
|
+
{% do exceptions.raise_compiler_error(
|
|
273
|
+
'`get_catalog_relations` can catalog one database at a time'
|
|
274
|
+
) %}
|
|
275
|
+
{% endif %}
|
|
276
|
+
|
|
277
|
+
{%- endmacro %}
|
{dbt_sqlserver-1.9.2 → dbt_sqlserver-1.10.0rc1}/dbt/include/sqlserver/macros/adapters/columns.sql
RENAMED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
{% macro sqlserver__get_empty_subquery_sql(select_sql, select_sql_header=none) %}
|
|
2
|
-
{
|
|
2
|
+
{%- set select_sql_stripped = modules.re.sub('(?s)/\\*.*?\\*/|--[^\n]*\n', '', select_sql) -%}
|
|
3
|
+
{% if select_sql_stripped.strip().lower().startswith('with') %}
|
|
3
4
|
{{ select_sql }}
|
|
4
5
|
{% else -%}
|
|
5
6
|
select * from (
|
|
@@ -11,7 +12,7 @@
|
|
|
11
12
|
{% endmacro %}
|
|
12
13
|
|
|
13
14
|
{% macro sqlserver__get_columns_in_query(select_sql) %}
|
|
14
|
-
{% set query_label =
|
|
15
|
+
{% set query_label = get_query_options() %}
|
|
15
16
|
{% call statement('get_columns_in_query', fetch_result=True, auto_begin=False) -%}
|
|
16
17
|
select TOP 0 * from (
|
|
17
18
|
{{ select_sql }}
|
|
@@ -65,34 +66,23 @@
|
|
|
65
66
|
{% endmacro %}
|
|
66
67
|
|
|
67
68
|
{% macro sqlserver__get_columns_in_relation(relation) -%}
|
|
68
|
-
{% set query_label =
|
|
69
|
+
{% set query_label = get_query_options() %}
|
|
69
70
|
{% call statement('get_columns_in_relation', fetch_result=True) %}
|
|
70
71
|
{{ get_use_database_sql(relation.database) }}
|
|
71
|
-
with mapping as (
|
|
72
|
-
select
|
|
73
|
-
row_number() over (partition by object_name(c.object_id) order by c.column_id) as ordinal_position,
|
|
74
|
-
c.name collate database_default as column_name,
|
|
75
|
-
t.name as data_type,
|
|
76
|
-
case
|
|
77
|
-
when (t.name in ('nchar', 'nvarchar', 'sysname') and c.max_length <> -1) then c.max_length / 2
|
|
78
|
-
else c.max_length
|
|
79
|
-
end as character_maximum_length,
|
|
80
|
-
c.precision as numeric_precision,
|
|
81
|
-
c.scale as numeric_scale
|
|
82
|
-
from sys.columns c {{ information_schema_hints() }}
|
|
83
|
-
inner join sys.types t {{ information_schema_hints() }}
|
|
84
|
-
on c.user_type_id = t.user_type_id
|
|
85
|
-
where c.object_id = object_id('{{ 'tempdb..' ~ relation.include(database=false, schema=false) if '#' in relation.identifier else relation }}')
|
|
86
|
-
)
|
|
87
|
-
|
|
88
72
|
select
|
|
89
|
-
column_name,
|
|
90
|
-
data_type,
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
73
|
+
c.name collate database_default as column_name,
|
|
74
|
+
t.name as data_type,
|
|
75
|
+
case
|
|
76
|
+
when (t.name in ('nchar', 'nvarchar', 'sysname') and c.max_length <> -1) then c.max_length / 2
|
|
77
|
+
else c.max_length
|
|
78
|
+
end as character_maximum_length,
|
|
79
|
+
c.precision as numeric_precision,
|
|
80
|
+
c.scale as numeric_scale
|
|
81
|
+
from sys.columns c {{ information_schema_hints() }}
|
|
82
|
+
inner join sys.types t {{ information_schema_hints() }}
|
|
83
|
+
on c.user_type_id = t.user_type_id
|
|
84
|
+
where c.object_id = object_id('{{ 'tempdb..' ~ relation.include(database=false, schema=false) if '#' in relation.identifier else relation }}')
|
|
85
|
+
order by c.column_id
|
|
96
86
|
{{ query_label }}
|
|
97
87
|
|
|
98
88
|
{% endcall %}
|