Skip to content

Commit a204adb

Browse files
committed
Updated to 1.8 and rebuilt test suite
1 parent 05fbcee commit a204adb

File tree

91 files changed

+3648
-2086
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

91 files changed

+3648
-2086
lines changed

.devcontainer/devcontainer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"ghcr.io/devcontainers/features/docker-in-docker:2": {}
66
},
77
"forwardPorts": [1433],
8-
"postStartCommand": "sudo bash .devcontainer/setup_odbc.sh && bash .devcontainer/install_pyenv.sh && bash .devcontainer/setup_env.sh",
8+
"postStartCommand": "/bin/bash ./.devcontainer/setup_odbc.sh & /bin/bash ./.devcontainer/setup_env.sh",
99
"containerEnv": {
1010
"SQLSERVER_TEST_DRIVER": "ODBC Driver 18 for SQL Server",
1111
"SQLSERVER_TEST_HOST": "127.0.0.1",

.devcontainer/setup_env.sh

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
cp test.env.sample test.env
22

3-
pyenv install 3.10.7
4-
pyenv virtualenv 3.10.7 dbt-sqlserver
5-
pyenv activate dbt-sqlserver
3+
docker compose build
4+
docker compose up -d
65

7-
make dev
8-
make server
6+
pip install -e .
7+
8+
pip install -r dev_requirements.txt

dbt/adapters/sqlserver/__init__.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
from dbt.adapters.base import AdapterPlugin
22

3-
from dbt.adapters.sqlserver.sql_server_adapter import SQLServerAdapter
4-
from dbt.adapters.sqlserver.sql_server_column import SQLServerColumn
5-
from dbt.adapters.sqlserver.sql_server_configs import SQLServerConfigs
6-
from dbt.adapters.sqlserver.sql_server_connection_manager import SQLServerConnectionManager
7-
from dbt.adapters.sqlserver.sql_server_credentials import SQLServerCredentials
3+
from dbt.adapters.sqlserver.sqlserver_adapter import SQLServerAdapter
4+
from dbt.adapters.sqlserver.sqlserver_column import SQLServerColumn
5+
from dbt.adapters.sqlserver.sqlserver_configs import SQLServerConfigs
6+
from dbt.adapters.sqlserver.sqlserver_connections import SQLServerConnectionManager # noqa
7+
from dbt.adapters.sqlserver.sqlserver_credentials import SQLServerCredentials
88
from dbt.include import sqlserver
99

1010
Plugin = AdapterPlugin(

dbt/adapters/sqlserver/__version__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
version = "1.7.4"
1+
version = "1.8.0"
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from dbt.adapters.sqlserver.relation_configs.policies import (
2+
MAX_CHARACTERS_IN_IDENTIFIER,
3+
SQLServerIncludePolicy,
4+
SQLServerQuotePolicy,
5+
SQLServerRelationType,
6+
)
7+
8+
__all__ = [
9+
"MAX_CHARACTERS_IN_IDENTIFIER",
10+
"SQLServerIncludePolicy",
11+
"SQLServerQuotePolicy",
12+
"SQLServerRelationType",
13+
]
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
from dataclasses import dataclass
2+
3+
from dbt.adapters.contracts.relation import Policy
4+
from dbt_common.dataclass_schema import StrEnum
5+
6+
MAX_CHARACTERS_IN_IDENTIFIER = 127
7+
8+
9+
class SQLServerRelationType(StrEnum):
10+
Table = "table"
11+
View = "view"
12+
CTE = "cte"
13+
14+
15+
class SQLServerIncludePolicy(Policy):
16+
database: bool = True
17+
schema: bool = True
18+
identifier: bool = True
19+
20+
21+
@dataclass
22+
class SQLServerQuotePolicy(Policy):
23+
database: bool = True
24+
schema: bool = True
25+
identifier: bool = True

dbt/adapters/sqlserver/sql_server_adapter.py

Lines changed: 0 additions & 86 deletions
This file was deleted.

dbt/adapters/sqlserver/sql_server_column.py

Lines changed: 0 additions & 5 deletions
This file was deleted.
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
from typing import Optional
2+
3+
import dbt.exceptions
4+
from dbt.adapters.base.impl import ConstraintSupport
5+
from dbt.adapters.fabric import FabricAdapter
6+
from dbt.contracts.graph.nodes import ConstraintType
7+
8+
from dbt.adapters.sqlserver.sqlserver_column import SQLServerColumn
9+
from dbt.adapters.sqlserver.sqlserver_connections import SQLServerConnectionManager
10+
from dbt.adapters.sqlserver.sqlserver_relation import SQLServerRelation
11+
12+
13+
class SQLServerAdapter(FabricAdapter):
14+
"""
15+
Controls actual implmentation of adapter, and ability to override certain methods.
16+
"""
17+
18+
ConnectionManager = SQLServerConnectionManager
19+
Column = SQLServerColumn
20+
Relation = SQLServerRelation
21+
22+
CONSTRAINT_SUPPORT = {
23+
ConstraintType.check: ConstraintSupport.ENFORCED,
24+
ConstraintType.not_null: ConstraintSupport.ENFORCED,
25+
ConstraintType.unique: ConstraintSupport.ENFORCED,
26+
ConstraintType.primary_key: ConstraintSupport.ENFORCED,
27+
ConstraintType.foreign_key: ConstraintSupport.ENFORCED,
28+
}
29+
30+
@classmethod
31+
def render_model_constraint(cls, constraint) -> Optional[str]:
32+
constraint_prefix = "add constraint "
33+
column_list = ", ".join(constraint.columns)
34+
35+
if constraint.name is None:
36+
raise dbt.exceptions.DbtDatabaseError(
37+
"Constraint name cannot be empty. Provide constraint name - column "
38+
+ column_list
39+
+ " and run the project again."
40+
)
41+
42+
if constraint.type == ConstraintType.unique:
43+
return constraint_prefix + f"{constraint.name} unique nonclustered({column_list})"
44+
elif constraint.type == ConstraintType.primary_key:
45+
return constraint_prefix + f"{constraint.name} primary key nonclustered({column_list})"
46+
elif constraint.type == ConstraintType.foreign_key and constraint.expression:
47+
return (
48+
constraint_prefix
49+
+ f"{constraint.name} foreign key({column_list}) references "
50+
+ constraint.expression
51+
)
52+
elif constraint.type == ConstraintType.check and constraint.expression:
53+
return f"{constraint_prefix} {constraint.name} check ({constraint.expression})"
54+
elif constraint.type == ConstraintType.custom and constraint.expression:
55+
return f"{constraint_prefix} {constraint.name} {constraint.expression}"
56+
else:
57+
return None
58+
59+
@classmethod
60+
def date_function(cls):
61+
return "getdate()"
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from dbt.adapters.fabric import FabricColumn
2+
3+
4+
class SQLServerColumn(FabricColumn):
5+
def is_integer(self) -> bool:
6+
return self.dtype.lower() in [
7+
# real types
8+
"smallint",
9+
"integer",
10+
"bigint",
11+
"smallserial",
12+
"serial",
13+
"bigserial",
14+
# aliases
15+
"int2",
16+
"int4",
17+
"int8",
18+
"serial2",
19+
"serial4",
20+
"serial8",
21+
"int",
22+
]

0 commit comments

Comments
 (0)