Fixed #12192 -- Don't execute any DB query when the QS slicing being performed
will result in use of LIMIT 0. Thanks Suor for the report. git-svn-id: http://code.djangoproject.com/svn/django/trunk@14204 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
5f5a61e780
commit
08d14925c9
|
@ -27,6 +27,8 @@ class SQLCompiler(compiler.SQLCompiler):
|
||||||
If 'with_limits' is False, any limit/offset information is not
|
If 'with_limits' is False, any limit/offset information is not
|
||||||
included in the query.
|
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 `do_offset` flag indicates whether we need to construct
|
||||||
# the SQL needed to use limit/offset with Oracle.
|
# the SQL needed to use limit/offset with Oracle.
|
||||||
|
|
|
@ -52,6 +52,9 @@ class SQLCompiler(object):
|
||||||
If 'with_limits' is False, any limit/offset information is not included
|
If 'with_limits' is False, any limit/offset information is not included
|
||||||
in the query.
|
in the query.
|
||||||
"""
|
"""
|
||||||
|
if with_limits and self.query.low_mark == self.query.high_mark:
|
||||||
|
return '', ()
|
||||||
|
|
||||||
self.pre_sql_setup()
|
self.pre_sql_setup()
|
||||||
out_cols = self.get_columns(with_col_aliases)
|
out_cols = self.get_columns(with_col_aliases)
|
||||||
ordering, ordering_group_by = self.get_ordering()
|
ordering, ordering_group_by = self.get_ordering()
|
||||||
|
|
|
@ -86,8 +86,18 @@ class EmptyQuerySetTests(TestCase):
|
||||||
def test_emptyqueryset_values(self):
|
def test_emptyqueryset_values(self):
|
||||||
"#14366 -- calling .values() on an EmptyQuerySet and then cloning that should not cause an error"
|
"#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')), [])
|
self.assertEqual(list(Number.objects.none().values('num').order_by('num')), [])
|
||||||
|
|
||||||
def test_values_subquery(self):
|
def test_values_subquery(self):
|
||||||
self.assertQuerysetEqual(
|
self.assertQuerysetEqual(
|
||||||
Number.objects.filter(pk__in=Number.objects.none().values("pk")), []
|
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]))
|
||||||
|
|
Loading…
Reference in New Issue