1
0
mirror of https://github.com/django/django.git synced 2025-07-04 09:49:12 +00:00

[soc2010/query-refactor] Implemented slicing, also found a bug in MongoDB/PyMongo.

git-svn-id: http://code.djangoproject.com/svn/django/branches/soc2010/query-refactor@13371 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Alex Gaynor 2010-06-21 19:14:13 +00:00
parent 6c6dc8fd71
commit 28c9044ee1
2 changed files with 32 additions and 2 deletions

View File

@ -63,7 +63,6 @@ class SQLCompiler(object):
assert not self.query.distinct assert not self.query.distinct
assert not self.query.extra assert not self.query.extra
assert not self.query.having assert not self.query.having
assert self.query.high_mark is None
filters = self.get_filters(self.query.where) filters = self.get_filters(self.query.where)
cursor = self.connection.db[self.query.model._meta.db_table].find(filters) cursor = self.connection.db[self.query.model._meta.db_table].find(filters)
@ -72,6 +71,10 @@ class SQLCompiler(object):
(ordering.lstrip("-"), DESCENDING if ordering.startswith("-") else ASCENDING) (ordering.lstrip("-"), DESCENDING if ordering.startswith("-") else ASCENDING)
for ordering in self.query.order_by for ordering in self.query.order_by
]) ])
if self.query.low_mark:
cursor = cursor.skip(self.query.low_mark)
if self.query.high_mark is not None:
cursor = cursor.limit(self.query.high_mark - self.query.low_mark)
return cursor return cursor
def results_iter(self): def results_iter(self):

View File

@ -85,8 +85,35 @@ class MongoTestCase(TestCase):
], ],
lambda g: g.name, lambda g: g.name,
) )
def test_slicing(self):
artists = [
Artist.objects.create(name="Huey Lewis"),
Artist.objects.create(name="John Hiatt"),
Artist.objects.create(name="Jackson Browne"),
Artist.objects.create(name="Rick Springfield"),
]
for i in xrange(5):
# TODO: should be i, but Mongo falls over with limit(0)
for j in xrange(i+1, 5):
self.assertQuerysetEqual(
Artist.objects.all()[i:j],
artists[i:j],
lambda a: a,
)
self.assertQuerysetEqual(
Artist.objects.all()[:3],
artists[:3],
lambda a: a,
)
self.assertQuerysetEqual(
Artist.objects.all()[2:],
artists[2:],
lambda a: a,
)
def test_not_equals(self): def test_not_equals(self):
q = Group.objects.create(name="Queen", year_formed=1971) q = Group.objects.create(name="Queen", year_formed=1971)
e = Group.objects.create(name="The E Street Band", year_formed=1972) e = Group.objects.create(name="The E Street Band", year_formed=1972)