Skip to content

Commit 9b1aabd

Browse files
authored
Merge pull request #480 from ms32035/master
fix constraints support
2 parents 80300df + 9f8c592 commit 9b1aabd

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

dbt/adapters/sqlserver/sql_server_adapter.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# https://github.com/microsoft/dbt-fabric/blob/main/dbt/adapters/fabric/fabric_adapter.py
2+
from typing import Optional
3+
4+
import dbt.exceptions
25
from dbt.adapters.fabric import FabricAdapter
6+
from dbt.contracts.graph.nodes import ConstraintType, ModelLevelConstraint
37

48
from dbt.adapters.sqlserver.sql_server_column import SQLServerColumn
59
from dbt.adapters.sqlserver.sql_server_configs import SQLServerConfigs
@@ -50,6 +54,33 @@ class SQLServerAdapter(FabricAdapter):
5054
# return columns
5155
# endregion
5256

57+
@classmethod
58+
def render_model_constraint(cls, constraint: ModelLevelConstraint) -> Optional[str]:
59+
constraint_prefix = "add constraint "
60+
column_list = ", ".join(constraint.columns)
61+
62+
if constraint.name is None:
63+
raise dbt.exceptions.DbtDatabaseError(
64+
"Constraint name cannot be empty. Provide constraint name - column "
65+
+ column_list
66+
+ " and run the project again."
67+
)
68+
69+
if constraint.type == ConstraintType.unique:
70+
return constraint_prefix + f"{constraint.name} unique nonclustered({column_list})"
71+
elif constraint.type == ConstraintType.primary_key:
72+
return constraint_prefix + f"{constraint.name} primary key nonclustered({column_list})"
73+
elif constraint.type == ConstraintType.foreign_key and constraint.expression:
74+
return (
75+
constraint_prefix
76+
+ f"{constraint.name} foreign key({column_list}) references "
77+
+ constraint.expression
78+
)
79+
elif constraint.type == ConstraintType.custom and constraint.expression:
80+
return f"{constraint_prefix}{constraint.expression}"
81+
else:
82+
return None
83+
5384
@classmethod
5485
def date_function(cls):
5586
return "getdate()"

0 commit comments

Comments
 (0)