Log message for revision 115351: Simplify key handling Changed: U Zope/trunk/src/Products/ZCatalog/plan.py
-=- Modified: Zope/trunk/src/Products/ZCatalog/plan.py =================================================================== --- Zope/trunk/src/Products/ZCatalog/plan.py 2010-08-01 20:36:07 UTC (rev 115350) +++ Zope/trunk/src/Products/ZCatalog/plan.py 2010-08-01 20:42:39 UTC (rev 115351) @@ -77,6 +77,9 @@ def make_key(catalog, query): + if not query: + return None + indexes = catalog.indexes valueindexes = determine_value_indexes(indexes) key = keys = query.keys() @@ -108,10 +111,10 @@ """ def __init__(self, catalog, query=None, threshold=0.1): - self.init() + self.init_timer() self.catalog = catalog self.query = query - self._key = None + self.key = make_key(catalog, query) self.threshold = threshold parent = aq_parent(catalog) @@ -122,7 +125,7 @@ path = tuple(parent.getPhysicalPath()) self.cid = path - def init(self): + def init_timer(self): self.res = [] self.start_time = None self.interim = {} @@ -138,7 +141,7 @@ def benchmark(self): # holds the benchmark of each index - return self.prioritymap().get(self.key(), None) + return self.prioritymap().get(self.key, None) def plan(self): benchmark = self.benchmark() @@ -151,11 +154,11 @@ return [i[1] for i in ranking] def start(self): - self.init() + self.init_timer() self.start_time = time.time() benchmark = self.benchmark() if benchmark is None: - self.prioritymap()[self.key()] = {} + self.prioritymap()[self.key] = {} def start_split(self, label, result=None): self.interim[label] = (time.time(), None) @@ -189,7 +192,7 @@ self.end_time = time.time() self.duration = self.end_time - self.start_time - key = self.key() + key = self.key benchmark = self.benchmark() prioritymap = self.prioritymap() prioritymap[key] = benchmark @@ -213,22 +216,13 @@ def result(self): return (self.duration, tuple(self.res)) - def key(self): - if not self._key: - self._key = make_key(self.catalog, self.query) - return self._key - def log(self): # result of stopwatch res = self.result() if res[0] < self.threshold: return - # The key calculation takes a bit itself, we want to avoid that for - # any fast queries. This does mean that slow queries get the key - # calculation overhead added to their runtime. - key = self.key() - + key = self.key reports_lock.acquire() try: if self.cid not in reports: _______________________________________________ Zope-Checkins maillist - Zope-Checkins@zope.org https://mail.zope.org/mailman/listinfo/zope-checkins