mirror of https://github.com/BOINC/boinc.git
*** empty log message ***
svn path=/trunk/boinc/; revision=2372
This commit is contained in:
parent
44eea07ec8
commit
a1669921eb
|
@ -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:
|
||||||
|
|
Loading…
Reference in New Issue