Fixed #30986 -- Fixed queryset crash when filtering against boolean RawSQL expressions on Oracle.
This commit is contained in:
parent
22a7a406c9
commit
8685e764ef
|
@ -5,7 +5,7 @@ from functools import lru_cache
|
|||
from django.conf import settings
|
||||
from django.db.backends.base.operations import BaseDatabaseOperations
|
||||
from django.db.backends.utils import strip_quotes, truncate_name
|
||||
from django.db.models.expressions import Exists, ExpressionWrapper
|
||||
from django.db.models.expressions import Exists, ExpressionWrapper, RawSQL
|
||||
from django.db.models.query_utils import Q
|
||||
from django.db.utils import DatabaseError
|
||||
from django.utils import timezone
|
||||
|
@ -636,4 +636,6 @@ END;
|
|||
return True
|
||||
if isinstance(expression, ExpressionWrapper) and isinstance(expression.expression, Q):
|
||||
return True
|
||||
if isinstance(expression, RawSQL) and expression.conditional:
|
||||
return True
|
||||
return False
|
||||
|
|
|
@ -92,6 +92,14 @@ class BasicExpressionsTests(TestCase):
|
|||
2,
|
||||
)
|
||||
|
||||
def test_filtering_on_rawsql_that_is_boolean(self):
|
||||
self.assertEqual(
|
||||
Company.objects.filter(
|
||||
RawSQL('num_employees > %s', (3,), output_field=models.BooleanField()),
|
||||
).count(),
|
||||
2,
|
||||
)
|
||||
|
||||
def test_filter_inter_attribute(self):
|
||||
# We can filter on attribute relationships on same model obj, e.g.
|
||||
# find companies where the number of employees is greater
|
||||
|
|
Loading…
Reference in New Issue