From 3c7872c4cdd5d9ccefb202b9d1085720b53f25ee Mon Sep 17 00:00:00 2001 From: Yoshinori Okuji <yo@nexedi.com> Date: Fri, 23 Sep 2005 19:37:16 +0000 Subject: [PATCH] Implement an argument cache. This speeds up the indexing of movements 1.5 time faster. git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@3850 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/ZSQLCatalog/SQLCatalog.py | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/product/ZSQLCatalog/SQLCatalog.py b/product/ZSQLCatalog/SQLCatalog.py index b70a116cc1..6f0e7140ed 100755 --- a/product/ZSQLCatalog/SQLCatalog.py +++ b/product/ZSQLCatalog/SQLCatalog.py @@ -935,6 +935,8 @@ class Catalog(Folder, Persistent, Acquisition.Implicit, ExtensionClass.Base): methods = self.sql_catalog_object_list econtext_cache = {} + argument_cache = {} + for method_name in methods: kw = {} #LOG('catalogObjectList', 0, 'method_name = %s, self.isMethodFiltered(method_name) = %r, self.filter_dict.has_key(method_name) = %r' % (method_name, self.isMethodFiltered(method_name), self.filter_dict.has_key(method_name))) @@ -975,18 +977,17 @@ class Catalog(Folder, Persistent, Acquisition.Implicit, ExtensionClass.Base): value_list = [] append = value_list.append for object in catalogged_object_list: - #LOG('catalog_object_list: object.uid',0,getattr(object,'uid',None)) - #LOG('catalog_object_list: object.path',0,object.getPhysicalPath()) try: - value = getattr(object, arg, None) - if callable(value): - value = value() - #if arg == 'optimised_roles_and_users': - # LOG('catalogObjectList', 0, 'object = %r, arg = %r, value = %r' % (object, arg, value,)) - append(value) - except: - #LOG("SQLCatalog Warning: Callable value could not be called",0,str((path, arg, method_name))) - append(None) + value = argument_cache[(object.uid, arg)] + except KeyError: + try: + value = getattr(object, arg, None) + if callable(value): + value = value() + except: + value = None + argument_cache[(object.uid, arg)] = value + append(value) kw[arg] = value_list method = aq_base(method).__of__(self) # Use method in the context of portal_catalog -- 2.30.9