Slurp result proxy in one go so the query doesn’t remain open. Fixes #15.
This commit is contained in:
parent
9361c8ef9d
commit
e9aec72bac
@ -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__
|
||||||
|
|
||||||
|
|||||||
@ -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),
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user