summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Charette <charette.s@gmail.com>2023-07-09 12:47:42 -0400
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2023-07-19 13:33:34 +0200
commit98cfb90182a8baa806fc4e09e294b6cfc5d09eff (patch)
tree557d3094246e10ee766e79be3278c0dc8b814d47
parent68912e4f6f84f21322f92a2c7b6c77f68f91b9c9 (diff)
Reduced unique constraint eligibility code duplication.
-rw-r--r--django/db/backends/base/schema.py57
1 files changed, 34 insertions, 23 deletions
diff --git a/django/db/backends/base/schema.py b/django/db/backends/base/schema.py
index 2742748049..9329ee0971 100644
--- a/django/db/backends/base/schema.py
+++ b/django/db/backends/base/schema.py
@@ -1675,6 +1675,25 @@ class BaseDatabaseSchemaEditor:
if deferrable == Deferrable.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(
self,
model,
@@ -1686,9 +1705,11 @@ class BaseDatabaseSchemaEditor:
opclasses=None,
expressions=None,
):
- if (
- deferrable
- and not self.connection.features.supports_deferrable_unique_constraints
+ if not self._unique_supported(
+ condition=condition,
+ deferrable=deferrable,
+ include=include,
+ expressions=expressions,
):
return None
if condition or include or opclasses or expressions:
@@ -1726,16 +1747,11 @@ class BaseDatabaseSchemaEditor:
opclasses=None,
expressions=None,
):
- if (
- (
- deferrable
- and not self.connection.features.supports_deferrable_unique_constraints
- )
- 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
- )
+ if not self._unique_supported(
+ condition=condition,
+ deferrable=deferrable,
+ include=include,
+ expressions=expressions,
):
return None
@@ -1789,16 +1805,11 @@ class BaseDatabaseSchemaEditor:
opclasses=None,
expressions=None,
):
- if (
- (
- deferrable
- and not self.connection.features.supports_deferrable_unique_constraints
- )
- 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
- )
+ if not self._unique_supported(
+ condition=condition,
+ deferrable=deferrable,
+ include=include,
+ expressions=expressions,
):
return None
if condition or include or opclasses or expressions: