summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/db/backends/oracle/compiler.py2
-rw-r--r--django/db/models/sql/compiler.py3
-rw-r--r--tests/regressiontests/queries/tests.py12
3 files changed, 16 insertions, 1 deletions
diff --git a/django/db/backends/oracle/compiler.py b/django/db/backends/oracle/compiler.py
index cc1541ff3f..c7b10429c2 100644
--- a/django/db/backends/oracle/compiler.py
+++ b/django/db/backends/oracle/compiler.py
@@ -27,6 +27,8 @@ class SQLCompiler(compiler.SQLCompiler):
If 'with_limits' is False, any limit/offset information is not
included in the query.
"""
+ if with_limits and self.query.low_mark == self.query.high_mark:
+ return '', ()
# The `do_offset` flag indicates whether we need to construct
# the SQL needed to use limit/offset with Oracle.
diff --git a/django/db/models/sql/compiler.py b/django/db/models/sql/compiler.py
index eaf2cd2569..a11d556b38 100644
--- a/django/db/models/sql/compiler.py
+++ b/django/db/models/sql/compiler.py
@@ -52,6 +52,9 @@ class SQLCompiler(object):
If 'with_limits' is False, any limit/offset information is not included
in the query.
"""
+ if with_limits and self.query.low_mark == self.query.high_mark:
+ return '', ()
+
self.pre_sql_setup()
out_cols = self.get_columns(with_col_aliases)
ordering, ordering_group_by = self.get_ordering()
diff --git a/tests/regressiontests/queries/tests.py b/tests/regressiontests/queries/tests.py
index 7d393bc2aa..795725a992 100644
--- a/tests/regressiontests/queries/tests.py
+++ b/tests/regressiontests/queries/tests.py
@@ -86,8 +86,18 @@ class EmptyQuerySetTests(TestCase):
def test_emptyqueryset_values(self):
"#14366 -- calling .values() on an EmptyQuerySet and then cloning that should not cause an error"
self.assertEqual(list(Number.objects.none().values('num').order_by('num')), [])
-
+
def test_values_subquery(self):
self.assertQuerysetEqual(
Number.objects.filter(pk__in=Number.objects.none().values("pk")), []
)
+
+
+class WeirdQuerySetSlicing(TestCase):
+ def setUp(self):
+ Number.objects.create(num=1)
+ Number.objects.create(num=2)
+
+ def test_empty_resultset_sql(self):
+ # ticket #12192
+ self.assertNumQueries(0, lambda: list(Number.objects.all()[1:1]))