diff options
| author | Simon Charette <charette.s@gmail.com> | 2023-07-09 12:47:42 -0400 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2023-07-19 13:33:34 +0200 |
| commit | 98cfb90182a8baa806fc4e09e294b6cfc5d09eff (patch) | |
| tree | 557d3094246e10ee766e79be3278c0dc8b814d47 | |
| parent | 68912e4f6f84f21322f92a2c7b6c77f68f91b9c9 (diff) | |
Reduced unique constraint eligibility code duplication.
| -rw-r--r-- | django/db/backends/base/schema.py | 57 |
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: |
