docs: def fetchall(self):
          """ returns the remainder of records from the query. This is 
  	 guaranteed by locking, so that no other thread can grab a few records 
  	 while the set is fetched. This has the side effect that other threads 
  	 may have to wait for an arbitrary long time until this query is done 
  	 before they can return (obviously with None).
          """
          self._cursorLock.acquire()
  
          recs = []
          while True:
              rec = self.fetchone()
              if rec is None:
                 break
              recs.append(rec)
  
          self._cursorLock.release()
          return recs