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]))