Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 11 additions & 3 deletions sql_server/pyodbc/schema.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import binascii
import datetime
import django

from django.db.backends.base.schema import (
BaseDatabaseSchemaEditor,
Expand Down Expand Up @@ -677,7 +678,10 @@ def add_field(self, model, field):
if self.connection.features.connection_persists_old_columns:
self.connection.close()

def _create_unique_sql(self, model, columns, name=None, condition=None):
def _create_unique_sql(self, model, columns, name=None, condition=None, deferrable=None):
if (deferrable and not getattr(self.connection.features, 'supports_deferrable_unique_constraints', False)):
return None

def create_unique_name(*args, **kwargs):
return self.quote_name(self._create_index_name(*args, **kwargs))

Expand All @@ -687,22 +691,26 @@ def create_unique_name(*args, **kwargs):
else:
name = self.quote_name(name)
columns = Columns(table, columns, self.quote_name)
statement_args = {
"deferrable": self._deferrable_constraint_sql(deferrable)
} if django.VERSION >= (3, 1) else {}

if condition:
return Statement(
self.sql_create_unique_index,
table=table,
name=name,
columns=columns,
condition=' WHERE ' + condition,
deferrable=''
**statement_args
) if self.connection.features.supports_partial_indexes else None
else:
return Statement(
self.sql_create_unique,
table=table,
name=name,
columns=columns,
deferrable=''
**statement_args
)

def _create_index_sql(self, model, fields, *, name=None, suffix='', using='',
Expand Down