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:
parent
6c6dc8fd71
commit
28c9044ee1
@ -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):
|
||||||
|
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user