Refs #32673 -- Fixed lookups crash when comparing against lookups on Oracle.
Follow up to 170b006ce8
.
This commit is contained in:
parent
170b006ce8
commit
0aacbdcf27
|
@ -87,10 +87,6 @@ class DatabaseFeatures(BaseDatabaseFeatures):
|
||||||
'Raises ORA-00600: internal error code.': {
|
'Raises ORA-00600: internal error code.': {
|
||||||
'model_fields.test_jsonfield.TestQuerying.test_usage_in_subquery',
|
'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 = {
|
django_test_expected_failures = {
|
||||||
# A bug in Django/cx_Oracle with respect to string handling (#23843).
|
# A bug in Django/cx_Oracle with respect to string handling (#23843).
|
||||||
|
|
|
@ -3,7 +3,7 @@ import math
|
||||||
from copy import copy
|
from copy import copy
|
||||||
|
|
||||||
from django.core.exceptions import EmptyResultSet
|
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 (
|
from django.db.models.fields import (
|
||||||
CharField, DateTimeField, Field, IntegerField, UUIDField,
|
CharField, DateTimeField, Field, IntegerField, UUIDField,
|
||||||
)
|
)
|
||||||
|
@ -124,12 +124,12 @@ class Lookup:
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
def as_oracle(self, compiler, connection):
|
def as_oracle(self, compiler, connection):
|
||||||
# Oracle doesn't allow EXISTS() to be compared to another expression
|
# Oracle doesn't allow EXISTS() and filters to be compared to another
|
||||||
# unless it's wrapped in a CASE WHEN.
|
# expression unless they're wrapped in a CASE WHEN.
|
||||||
wrapped = False
|
wrapped = False
|
||||||
exprs = []
|
exprs = []
|
||||||
for expr in (self.lhs, self.rhs):
|
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)
|
expr = Case(When(expr, then=True), default=False)
|
||||||
wrapped = True
|
wrapped = True
|
||||||
exprs.append(expr)
|
exprs.append(expr)
|
||||||
|
|
Loading…
Reference in New Issue