Skip to content

Commit

Permalink
Slurp result proxy in one go so the query doesn’t remain open. Fixes p…
Browse files Browse the repository at this point in the history
  • Loading branch information
pudo committed May 21, 2015
1 parent 9361c8e commit e9aec72
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 13 deletions.
24 changes: 11 additions & 13 deletions dataset/persistence/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,29 +36,27 @@ def __init__(self, result_proxies):
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__

Expand Down
5 changes: 5 additions & 0 deletions test/test_persistence.py
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,11 @@ def test_upsert_all_key(self):
['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),
Expand Down

0 comments on commit e9aec72

Please sign in to comment.