From eff6925af91c03653d64ed7e75fdfa29c7b5e182 Mon Sep 17 00:00:00 2001 From: Stefan Wehrmeyer Date: Sat, 25 Jan 2014 21:20:18 +0100 Subject: [PATCH] Fix infinite loop in find method If a _limit is not given, the query limit should be given by eit --- dataset/persistence/table.py | 7 ++++--- test/test_persistence.py | 4 ++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/dataset/persistence/table.py b/dataset/persistence/table.py index 9b69d76..83cd4ee 100644 --- a/dataset/persistence/table.py +++ b/dataset/persistence/table.py @@ -337,6 +337,9 @@ class Table(object): rp = self.database.executable.execute(count_query) total_row_count = rp.fetchone()[0] + if _limit is None: + _limit = total_row_count + if _step is None or _step is False or _step == 0: _step = total_row_count @@ -348,9 +351,7 @@ class Table(object): for i in count(): qoffset = _offset + (_step * i) - qlimit = _step - if _limit is not None: - qlimit = min(_limit - (_step * i), _step) + qlimit = min(_limit - (_step * i), _step) if qlimit <= 0: break queries.append(self.table.select(whereclause=args, limit=qlimit, diff --git a/test/test_persistence.py b/test/test_persistence.py index 1207fb2..c8922a3 100644 --- a/test/test_persistence.py +++ b/test/test_persistence.py @@ -194,6 +194,10 @@ class TableTestCase(unittest.TestCase): assert len(ds) == 3, ds ds = list(self.tbl.find(place=TEST_CITY_1, _limit=2)) assert len(ds) == 2, ds + ds = list(self.tbl.find(place=TEST_CITY_1, _limit=2, _step=1)) + assert len(ds) == 2, ds + ds = list(self.tbl.find(place=TEST_CITY_1, _limit=1, _step=2)) + assert len(ds) == 1, ds def test_distinct(self): x = list(self.tbl.distinct('place'))