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

Reply via email to