*** empty log message ***

svn path=/trunk/boinc/; revision=2372
This commit is contained in:
Karl Chen 2003-09-28 09:08:01 +00:00
parent 44eea07ec8
commit a1669921eb
1 changed files with 39 additions and 0 deletions

View File

@ -30,6 +30,7 @@ for user in database.Users.find():
''' '''
from __future__ import generators
import boinc_path_config import boinc_path_config
from Boinc import configxml from Boinc import configxml
from Boinc.util import * from Boinc.util import *
@ -159,6 +160,13 @@ def _select_object_fetchall(*args, **kwargs):
cursor.close() cursor.close()
return results return results
def _select_object_iterate(*args, **kwargs):
cursor = apply(_select_object, args, kwargs)
while True:
result = cursor.fetchone()
if not result: return
yield result
def _select_count_objects(*args, **kwargs): def _select_count_objects(*args, **kwargs):
kwargs['select_what'] = 'count(*)' kwargs['select_what'] = 'count(*)'
cursor = apply(_select_object, args, kwargs) cursor = apply(_select_object, args, kwargs)
@ -223,6 +231,13 @@ class DatabaseTable:
"""Return the number of database objects matching keywords. """Return the number of database objects matching keywords.
Arguments are the same format as find().""" Arguments are the same format as find()."""
if kwargs.keys() == ['id']:
# looking up by ID only, look in cache first:
id = kwargs['id']
if not id:
return 0
if id in self.objects:
return 1
kwargs = self.dict2database_fields(kwargs) kwargs = self.dict2database_fields(kwargs)
return _select_count_objects(self.table, kwargs, return _select_count_objects(self.table, kwargs,
extra_args=self.select_args) extra_args=self.select_args)
@ -254,6 +269,30 @@ class DatabaseTable:
if self.sort_results: if self.sort_results:
objects.sort() objects.sort()
return objects return objects
def iterate(self, **kwargs):
"""Same as find(), but using generators.
No sorting."""
if kwargs.keys() == ['id']:
# looking up by ID only, look in cache first:
id = kwargs['id']
if not id:
return
try:
yield self.objects[id]
return
except KeyError:
pass
limbo_object = self.object_class(id=None) # prevent possible id recursion
limbo_object.in_limbo = 1
self.objects[id] = limbo_object
self._cache(limbo_object)
kwargs = self.dict2database_fields(kwargs)
for result in _select_object_iterate(self.table, kwargs,
extra_args=self.select_args):
yield self._create_object_from_sql_result(result)
return
def _create_object_from_sql_result(self, result): def _create_object_from_sql_result(self, result):
id = result['id'] id = result['id']
try: try: