Slurp result proxy in one go so the query doesn’t remain open. Fixes #15.

This commit is contained in:
Friedrich Lindenberg 2015-05-21 17:17:14 +02:00
parent 9361c8ef9d
commit e9aec72bac
2 changed files with 16 additions and 13 deletions

View File

@ -36,29 +36,27 @@ class ResultIter(object):
result_proxies = iter((result_proxies, )) result_proxies = iter((result_proxies, ))
self.result_proxies = result_proxies self.result_proxies = result_proxies
self.count = 0 self.count = 0
self.rp = None self._iter = None
def _next_rp(self): def _next_rp(self):
try: try:
self.rp = next(self.result_proxies) rp = next(self.result_proxies)
self.count += self.rp.rowcount self.count += rp.rowcount
self.keys = list(self.rp.keys()) self.keys = list(rp.keys())
self._iter = iter(rp.fetchall())
return True return True
except StopIteration: except StopIteration:
return False return False
def __next__(self): def __next__(self):
if self.rp is None: if self._iter is None:
if not self._next_rp(): if not self._next_rp():
raise StopIteration raise StopIteration
row = self.rp.fetchone() try:
if row is None: return convert_row(next(self._iter))
if self._next_rp(): except StopIteration:
return next(self) self._iter = None
else: return self.__next__()
# stop here
raise StopIteration
return convert_row(row)
next = __next__ next = __next__

View File

@ -187,6 +187,11 @@ class TableTestCase(unittest.TestCase):
['date', 'temperature', 'place'] ['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): def test_delete(self):
self.tbl.insert({ self.tbl.insert({
'date': datetime(2011, 1, 2), 'date': datetime(2011, 1, 2),