1
0
mirror of https://github.com/django/django.git synced 2025-03-09 17:02:43 +00:00

Reduced unique constraint eligibility code duplication.

This commit is contained in:
Simon Charette 2023-07-09 12:47:42 -04:00 committed by Mariusz Felisiak
parent 68912e4f6f
commit 98cfb90182

View File

@ -1675,6 +1675,25 @@ class BaseDatabaseSchemaEditor:
if deferrable == Deferrable.IMMEDIATE: if deferrable == Deferrable.IMMEDIATE:
return " DEFERRABLE INITIALLY IMMEDIATE" return " DEFERRABLE INITIALLY IMMEDIATE"
def _unique_supported(
self,
condition=None,
deferrable=None,
include=None,
expressions=None,
):
return (
(not condition or self.connection.features.supports_partial_indexes)
and (
not deferrable
or self.connection.features.supports_deferrable_unique_constraints
)
and (not include or self.connection.features.supports_covering_indexes)
and (
not expressions or self.connection.features.supports_expression_indexes
)
)
def _unique_sql( def _unique_sql(
self, self,
model, model,
@ -1686,9 +1705,11 @@ class BaseDatabaseSchemaEditor:
opclasses=None, opclasses=None,
expressions=None, expressions=None,
): ):
if ( if not self._unique_supported(
deferrable condition=condition,
and not self.connection.features.supports_deferrable_unique_constraints deferrable=deferrable,
include=include,
expressions=expressions,
): ):
return None return None
if condition or include or opclasses or expressions: if condition or include or opclasses or expressions:
@ -1726,16 +1747,11 @@ class BaseDatabaseSchemaEditor:
opclasses=None, opclasses=None,
expressions=None, expressions=None,
): ):
if ( if not self._unique_supported(
( condition=condition,
deferrable deferrable=deferrable,
and not self.connection.features.supports_deferrable_unique_constraints include=include,
) expressions=expressions,
or (condition and not self.connection.features.supports_partial_indexes)
or (include and not self.connection.features.supports_covering_indexes)
or (
expressions and not self.connection.features.supports_expression_indexes
)
): ):
return None return None
@ -1789,16 +1805,11 @@ class BaseDatabaseSchemaEditor:
opclasses=None, opclasses=None,
expressions=None, expressions=None,
): ):
if ( if not self._unique_supported(
( condition=condition,
deferrable deferrable=deferrable,
and not self.connection.features.supports_deferrable_unique_constraints include=include,
) expressions=expressions,
or (condition and not self.connection.features.supports_partial_indexes)
or (include and not self.connection.features.supports_covering_indexes)
or (
expressions and not self.connection.features.supports_expression_indexes
)
): ):
return None return None
if condition or include or opclasses or expressions: if condition or include or opclasses or expressions: