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, ))
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__

View File

@ -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),