Browse Source

Reduced unique constraint eligibility code duplication.

Simon Charette 1 năm trước cách đây
mục cha
commit
98cfb90182
1 tập tin đã thay đổi với 34 bổ sung23 xóa
  1. 34 23
      django/db/backends/base/schema.py

+ 34 - 23
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: