Loading django/db/models/sql/where.py +4 −0 Original line number Diff line number Diff line Loading @@ -204,6 +204,10 @@ class WhereNode(tree.Node): raise EmptyResultSet if extra: return ('%s IN %s' % (field_sql, extra), params) if not params: # Empty params would generate invalid sql in subquery raise EmptyResultSet max_in_list_size = connection.ops.max_in_list_size() if max_in_list_size and len(params) > max_in_list_size: # Break up the params list into an OR of manageable chunks. Loading tests/regressiontests/queries/tests.py +15 −0 Original line number Diff line number Diff line Loading @@ -2021,6 +2021,9 @@ class WeirdQuerysetSlicingTests(BaseQuerysetTest): Article.objects.create(name='three', created=datetime.datetime.now()) Article.objects.create(name='four', created=datetime.datetime.now()) food = Food.objects.create(name='spam') Eaten.objects.create(meal='spam with eggs', food=food) def test_tickets_7698_10202(self): # People like to slice with '0' as the high-water mark. self.assertQuerysetEqual(Article.objects.all()[0:0], []) Loading @@ -2036,6 +2039,18 @@ class WeirdQuerysetSlicingTests(BaseQuerysetTest): # ticket #12192 self.assertNumQueries(0, lambda: list(Number.objects.all()[1:1])) def test_empty_sliced_subquery(self): # ticket #19263 - testing subqueries self.assertEqual( Eaten.objects.filter(food__in=Food.objects.all()[0:0]).count(), 0) def test_empty_sliced_subquery_exclude(self): # ticket #19263 - testing subqueries self.assertEqual( Eaten.objects.exclude(food__in=Food.objects.all()[0:0]).count(), 1) class EscapingTests(TestCase): def test_ticket_7302(self): Loading Loading
django/db/models/sql/where.py +4 −0 Original line number Diff line number Diff line Loading @@ -204,6 +204,10 @@ class WhereNode(tree.Node): raise EmptyResultSet if extra: return ('%s IN %s' % (field_sql, extra), params) if not params: # Empty params would generate invalid sql in subquery raise EmptyResultSet max_in_list_size = connection.ops.max_in_list_size() if max_in_list_size and len(params) > max_in_list_size: # Break up the params list into an OR of manageable chunks. Loading
tests/regressiontests/queries/tests.py +15 −0 Original line number Diff line number Diff line Loading @@ -2021,6 +2021,9 @@ class WeirdQuerysetSlicingTests(BaseQuerysetTest): Article.objects.create(name='three', created=datetime.datetime.now()) Article.objects.create(name='four', created=datetime.datetime.now()) food = Food.objects.create(name='spam') Eaten.objects.create(meal='spam with eggs', food=food) def test_tickets_7698_10202(self): # People like to slice with '0' as the high-water mark. self.assertQuerysetEqual(Article.objects.all()[0:0], []) Loading @@ -2036,6 +2039,18 @@ class WeirdQuerysetSlicingTests(BaseQuerysetTest): # ticket #12192 self.assertNumQueries(0, lambda: list(Number.objects.all()[1:1])) def test_empty_sliced_subquery(self): # ticket #19263 - testing subqueries self.assertEqual( Eaten.objects.filter(food__in=Food.objects.all()[0:0]).count(), 0) def test_empty_sliced_subquery_exclude(self): # ticket #19263 - testing subqueries self.assertEqual( Eaten.objects.exclude(food__in=Food.objects.all()[0:0]).count(), 1) class EscapingTests(TestCase): def test_ticket_7302(self): Loading