Fix too early StopIteration on empty result sets

Fixes #77, thanks to @hfaran for report
This commit is contained in:
Stefan Wehrmeyer 2014-02-16 13:48:10 +01:00
parent 582af184de
commit ea31943e18
2 changed files with 9 additions and 3 deletions

View File

@ -24,10 +24,8 @@ class ResultIter(object):
if not isgenerator(result_proxies): if not isgenerator(result_proxies):
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
if not self._next_rp(): self.rp = None
raise StopIteration
def _next_rp(self): def _next_rp(self):
try: try:
@ -39,6 +37,9 @@ class ResultIter(object):
return False return False
def __next__(self): def __next__(self):
if self.rp is None:
if not self._next_rp():
raise StopIteration
row = self.rp.fetchone() row = self.rp.fetchone()
if row is None: if row is None:
if self._next_rp(): if self._next_rp():

View File

@ -275,3 +275,8 @@ class TableTestCase(unittest.TestCase):
keys = list(res.next().keys()) keys = list(res.next().keys())
assert keys[0] == 'temperature' assert keys[0] == 'temperature'
assert keys[1] == 'place' assert keys[1] == 'place'
def test_empty_query(self):
m = self.tbl.find(place='not in data')
l = list(m) # exhaust iterator
assert len(l) == 0