[Checkins] SVN: Products.ZCatalog/trunk/src/Products/ZCatalog/Catalog.py Use tuples, to construct full_key. tuples addition is faster for small number of items
Hano Schlichting
cvs-admin at zope.org
Sun Apr 8 13:59:09 UTC 2012
Log message for revision 125104:
Use tuples, to construct full_key. tuples addition is faster for small number of items
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-08 13:49:34 UTC (rev 125103)
+++ Products.ZCatalog/trunk/src/Products/ZCatalog/Catalog.py 2012-04-08 13:59:05 UTC (rev 125104)
@@ -732,6 +732,8 @@
if merge and (rlen > (len(sort_index) * (rlen / 100 + 1))):
# The result set is much larger than the sorted index,
# so iterate over the sorted index for speed.
+ # TODO: len(sort_index) isn't actually what we want for a keyword
+ # index, as it's only the unique values, not the documents.
length = 0
try:
intersection(rs, IISet(()))
@@ -769,13 +771,13 @@
# sort on secondary index
keysets = defaultdict(list)
for i in intset:
- full_key = [k]
+ full_key = (k, )
for km in second_indexes_key_map:
try:
- full_key.append(km[i])
+ full_key += (km[i], )
except KeyError:
pass
- keysets[tuple(full_key)].append(i)
+ keysets[full_key].append(i)
for k2, v2 in keysets.items():
append((k2, v2, _self__getitem__))
result = multisort(result, sort_spec)
@@ -804,14 +806,14 @@
else:
for did in rs:
try:
- full_key = [index_key_map[did]]
+ full_key = (index_key_map[did], )
for km in second_indexes_key_map:
- full_key.append(km[did])
+ full_key += (km[did], )
except KeyError:
# This document is not in the sort key index, skip it.
pass
else:
- append((tuple(full_key), did, _self__getitem__))
+ append((full_key, did, _self__getitem__))
if merge:
result = multisort(result, sort_spec)
if merge:
@@ -855,9 +857,9 @@
for did in rs:
try:
key = index_key_map[did]
- full_key = [key]
+ full_key = (key, )
for km in second_indexes_key_map:
- full_key.append(km[did])
+ full_key += (km[did], )
except KeyError:
# This document is not in the sort key index, skip it.
pass
@@ -866,8 +868,7 @@
continue
i = bisect(keys, key)
keys.insert(i, key)
- result.insert(i,
- (tuple(full_key), did, _self__getitem__))
+ result.insert(i, (full_key, did, _self__getitem__))
if n == limit:
del keys[0], result[0]
else:
@@ -910,9 +911,9 @@
for did in rs:
try:
key = index_key_map[did]
- full_key = [key]
+ full_key = (key, )
for km in second_indexes_key_map:
- full_key.append(km[did])
+ full_key += (km[did], )
except KeyError:
# This document is not in the sort key index, skip it.
pass
@@ -921,8 +922,7 @@
continue
i = bisect(keys, key)
keys.insert(i, key)
- result.insert(i,
- (tuple(full_key), did, _self__getitem__))
+ result.insert(i, (full_key, did, _self__getitem__))
if n == limit:
del keys[-1], result[-1]
else:
More information about the checkins
mailing list