mirror of
https://github.com/django/django.git
synced 2025-07-04 17:59:13 +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:
parent
6c6dc8fd71
commit
28c9044ee1
@ -63,7 +63,6 @@ class SQLCompiler(object):
|
||||
assert not self.query.distinct
|
||||
assert not self.query.extra
|
||||
assert not self.query.having
|
||||
assert self.query.high_mark is None
|
||||
|
||||
filters = self.get_filters(self.query.where)
|
||||
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)
|
||||
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
|
||||
|
||||
def results_iter(self):
|
||||
|
@ -86,6 +86,33 @@ class MongoTestCase(TestCase):
|
||||
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):
|
||||
q = Group.objects.create(name="Queen", year_formed=1971)
|
||||
|
Loading…
x
Reference in New Issue
Block a user