diff options
Diffstat (limited to 'django/db/backends/mysql/operations.py')
-rw-r--r-- | django/db/backends/mysql/operations.py | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/django/db/backends/mysql/operations.py b/django/db/backends/mysql/operations.py index 89730cee29..d5cd374cc5 100644 --- a/django/db/backends/mysql/operations.py +++ b/django/db/backends/mysql/operations.py @@ -2,6 +2,7 @@ import uuid from django.conf import settings from django.db.backends.base.operations import BaseDatabaseOperations +from django.db.models import Exists, ExpressionWrapper, Lookup from django.utils import timezone from django.utils.encoding import force_str @@ -378,3 +379,14 @@ class DatabaseOperations(BaseDatabaseOperations): ): lookup = 'JSON_UNQUOTE(%s)' return lookup + + def conditional_expression_supported_in_where_clause(self, expression): + # MySQL ignores indexes with boolean fields unless they're compared + # directly to a boolean value. + if isinstance(expression, (Exists, Lookup)): + return True + if isinstance(expression, ExpressionWrapper) and expression.conditional: + return self.conditional_expression_supported_in_where_clause(expression.expression) + if getattr(expression, 'conditional', False): + return False + return super().conditional_expression_supported_in_where_clause(expression) |