[Checkins] SVN: Products.ZCatalog/trunk/src/Products/ZCatalog/Catalog.py bring back optimization for single sort index in all cases

Hano Schlichting cvs-admin at zope.org
Sat Apr 7 18:47:58 UTC 2012


Log message for revision 125088:
  bring back optimization for single sort index in all cases
  

Changed:
  U   Products.ZCatalog/trunk/src/Products/ZCatalog/Catalog.py

-=-
Modified: Products.ZCatalog/trunk/src/Products/ZCatalog/Catalog.py
===================================================================
--- Products.ZCatalog/trunk/src/Products/ZCatalog/Catalog.py	2012-04-07 18:39:39 UTC (rev 125087)
+++ Products.ZCatalog/trunk/src/Products/ZCatalog/Catalog.py	2012-04-07 18:47:55 UTC (rev 125088)
@@ -797,8 +797,7 @@
                 for did in rs:
                     try:
                         key = index_key_map[did]
-                        key2 = (index2_key_map is not None and
-                            index2_key_map.get(did) or None)
+                        key2 = index2_key_map.get(did)
                     except KeyError:
                         # This document is not in the sort key index, skip it.
                         pass
@@ -824,29 +823,45 @@
             keys = []
             n = 0
             worst = None
-            for did in rs:
-                try:
-                    key = index_key_map[did]
-                    key2 = (index2_key_map is not None and
-                        index2_key_map.get(did) or None)
-                except KeyError:
-                    # This document is not in the sort key index, skip it.
-                    pass
-                else:
-                    if n >= limit and key <= worst:
-                        continue
-                    i = bisect(keys, key)
-                    keys.insert(i, key)
-                    result.insert(i, ((key, key2), did, _self__getitem__))
-                    if n == limit:
-                        del keys[0], result[0]
+            if sort_index_length == 1:
+                for did in rs:
+                    try:
+                        key = index_key_map[did]
+                    except KeyError:
+                        # This document is not in the sort key index, skip it.
+                        pass
                     else:
-                        n += 1
-                    worst = keys[0]
-            if index2 is not None:
+                        if n >= limit and key <= worst:
+                            continue
+                        i = bisect(keys, key)
+                        keys.insert(i, key)
+                        result.insert(i, (key, did, _self__getitem__))
+                        if n == limit:
+                            del keys[0], result[0]
+                        else:
+                            n += 1
+                        worst = keys[0]
+                result.reverse()
+            else:
+                for did in rs:
+                    try:
+                        key = index_key_map[did]
+                        key2 = index2_key_map.get(did)
+                    except KeyError:
+                        # This document is not in the sort key index, skip it.
+                        pass
+                    else:
+                        if n >= limit and key <= worst:
+                            continue
+                        i = bisect(keys, key)
+                        keys.insert(i, key)
+                        result.insert(i, ((key, key2), did, _self__getitem__))
+                        if n == limit:
+                            del keys[0], result[0]
+                        else:
+                            n += 1
+                        worst = keys[0]
                 result = multisort(result, sort_spec)
-            else:
-                result.reverse()
             if merge:
                 sequence, _ = self._limit_sequence(result, 0, b_start, b_size,
                     switched_reverse)
@@ -861,26 +876,43 @@
             keys = []
             n = 0
             best = None
-            for did in rs:
-                try:
-                    key = index_key_map[did]
-                    key2 = (index2_key_map is not None and
-                        index2_key_map.get(did) or None)
-                except KeyError:
-                    # This document is not in the sort key index, skip it.
-                    pass
-                else:
-                    if n >= limit and key >= best:
-                        continue
-                    i = bisect(keys, key)
-                    keys.insert(i, key)
-                    result.insert(i, ((key, key2), did, _self__getitem__))
-                    if n == limit:
-                        del keys[-1], result[-1]
+            if sort_index_length == 1:
+                for did in rs:
+                    try:
+                        key = index_key_map[did]
+                    except KeyError:
+                        # This document is not in the sort key index, skip it.
+                        pass
                     else:
-                        n += 1
-                    best = keys[-1]
-            if index2 is not None:
+                        if n >= limit and key >= best:
+                            continue
+                        i = bisect(keys, key)
+                        keys.insert(i, key)
+                        result.insert(i, (key, did, _self__getitem__))
+                        if n == limit:
+                            del keys[-1], result[-1]
+                        else:
+                            n += 1
+                        best = keys[-1]
+            else:
+                for did in rs:
+                    try:
+                        key = index_key_map[did]
+                        key2 = index2_key_map.get(did)
+                    except KeyError:
+                        # This document is not in the sort key index, skip it.
+                        pass
+                    else:
+                        if n >= limit and key >= best:
+                            continue
+                        i = bisect(keys, key)
+                        keys.insert(i, key)
+                        result.insert(i, ((key, key2), did, _self__getitem__))
+                        if n == limit:
+                            del keys[-1], result[-1]
+                        else:
+                            n += 1
+                        best = keys[-1]
                 result = multisort(result, sort_spec)
             if merge:
                 sequence, _ = self._limit_sequence(result, 0, b_start, b_size,



More information about the checkins mailing list