summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMariusz Felisiak <felisiak.mariusz@gmail.com>2019-11-15 10:25:39 +0100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2019-11-18 08:50:09 +0100
commit8685e764efd2957085762d9249e07794d9a58dcb (patch)
tree4a86216811328fb8a2a2d275fbb4cc524f94d272
parent22a7a406c99f5340e05860fee95df9629cb516a9 (diff)
Fixed #30986 -- Fixed queryset crash when filtering against boolean RawSQL expressions on Oracle.
-rw-r--r--django/db/backends/oracle/operations.py4
-rw-r--r--tests/expressions/tests.py8
2 files changed, 11 insertions, 1 deletions
diff --git a/django/db/backends/oracle/operations.py b/django/db/backends/oracle/operations.py
index 59f55dccd5..3d093792b8 100644
--- a/django/db/backends/oracle/operations.py
+++ b/django/db/backends/oracle/operations.py
@@ -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
diff --git a/tests/expressions/tests.py b/tests/expressions/tests.py
index 1dba3d083a..ee8b246966 100644
--- a/tests/expressions/tests.py
+++ b/tests/expressions/tests.py
@@ -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