From e9aec72bac2ac0bf43484578d408d1ad0ef30f61 Mon Sep 17 00:00:00 2001 From: Friedrich Lindenberg Date: Thu, 21 May 2015 17:17:14 +0200 Subject: [PATCH] =?UTF-8?q?Slurp=20result=20proxy=20in=20one=20go=20so=20t?= =?UTF-8?q?he=20query=20doesn=E2=80=99t=20remain=20open.=20Fixes=20#15.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dataset/persistence/util.py | 24 +++++++++++------------- test/test_persistence.py | 5 +++++ 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/dataset/persistence/util.py b/dataset/persistence/util.py index c82b4e2..02478a9 100644 --- a/dataset/persistence/util.py +++ b/dataset/persistence/util.py @@ -36,29 +36,27 @@ class ResultIter(object): result_proxies = iter((result_proxies, )) self.result_proxies = result_proxies self.count = 0 - self.rp = None + self._iter = None def _next_rp(self): try: - self.rp = next(self.result_proxies) - self.count += self.rp.rowcount - self.keys = list(self.rp.keys()) + rp = next(self.result_proxies) + self.count += rp.rowcount + self.keys = list(rp.keys()) + self._iter = iter(rp.fetchall()) return True except StopIteration: return False def __next__(self): - if self.rp is None: + if self._iter is None: if not self._next_rp(): raise StopIteration - row = self.rp.fetchone() - if row is None: - if self._next_rp(): - return next(self) - else: - # stop here - raise StopIteration - return convert_row(row) + try: + return convert_row(next(self._iter)) + except StopIteration: + self._iter = None + return self.__next__() next = __next__ diff --git a/test/test_persistence.py b/test/test_persistence.py index 601ac26..3e0ea3c 100644 --- a/test/test_persistence.py +++ b/test/test_persistence.py @@ -187,6 +187,11 @@ class TableTestCase(unittest.TestCase): ['date', 'temperature', 'place'] ) + def test_update_while_iter(self): + for row in self.tbl: + row['foo'] = 'bar' + self.tbl.update(row, ['place', 'date']) + def test_delete(self): self.tbl.insert({ 'date': datetime(2011, 1, 2),