summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorMariusz Felisiak <felisiak.mariusz@gmail.com>2021-04-23 16:32:53 +0200
committerGitHub <noreply@github.com>2021-04-23 16:32:53 +0200
commit0aacbdcf27b258387643b033352e99e6103abda8 (patch)
tree706ee1a51977144e76b9d29e859e31a6056c2678 /django
parent170b006ce82b0ecf26dc088f832538b747ca0115 (diff)
Refs #32673 -- Fixed lookups crash when comparing against lookups on Oracle.
Follow up to 170b006ce82b0ecf26dc088f832538b747ca0115.
Diffstat (limited to 'django')
-rw-r--r--django/db/backends/oracle/features.py4
-rw-r--r--django/db/models/lookups.py8
2 files changed, 4 insertions, 8 deletions
diff --git a/django/db/backends/oracle/features.py b/django/db/backends/oracle/features.py
index 712c56de01..07f16eee71 100644
--- a/django/db/backends/oracle/features.py
+++ b/django/db/backends/oracle/features.py
@@ -87,10 +87,6 @@ class DatabaseFeatures(BaseDatabaseFeatures):
'Raises ORA-00600: internal error code.': {
'model_fields.test_jsonfield.TestQuerying.test_usage_in_subquery',
},
- "Oracle doesn't allow filters to be compared to another expression in "
- "the WHERE clause.": {
- 'lookup.tests.LookupTests.test_lookup_rhs',
- },
}
django_test_expected_failures = {
# A bug in Django/cx_Oracle with respect to string handling (#23843).
diff --git a/django/db/models/lookups.py b/django/db/models/lookups.py
index c55208598c..5089737034 100644
--- a/django/db/models/lookups.py
+++ b/django/db/models/lookups.py
@@ -3,7 +3,7 @@ import math
from copy import copy
from django.core.exceptions import EmptyResultSet
-from django.db.models.expressions import Case, Exists, Func, Value, When
+from django.db.models.expressions import Case, Func, Value, When
from django.db.models.fields import (
CharField, DateTimeField, Field, IntegerField, UUIDField,
)
@@ -124,12 +124,12 @@ class Lookup:
raise NotImplementedError
def as_oracle(self, compiler, connection):
- # Oracle doesn't allow EXISTS() to be compared to another expression
- # unless it's wrapped in a CASE WHEN.
+ # Oracle doesn't allow EXISTS() and filters to be compared to another
+ # expression unless they're wrapped in a CASE WHEN.
wrapped = False
exprs = []
for expr in (self.lhs, self.rhs):
- if isinstance(expr, Exists):
+ if connection.ops.conditional_expression_supported_in_where_clause(expr):
expr = Case(When(expr, then=True), default=False)
wrapped = True
exprs.append(expr)