[Zope-Checkins] SVN: Zope/trunk/src/Products/ZCatalog/ Move index restriction to _sorted_search_indexes method
Hanno Schlichting
hannosch at hannosch.eu
Sun Aug 1 12:51:14 EDT 2010
Log message for revision 115340:
Move index restriction to _sorted_search_indexes method
Changed:
U Zope/trunk/src/Products/ZCatalog/Catalog.py
U Zope/trunk/src/Products/ZCatalog/tests/test_catalog.py
-=-
Modified: Zope/trunk/src/Products/ZCatalog/Catalog.py
===================================================================
--- Zope/trunk/src/Products/ZCatalog/Catalog.py 2010-08-01 16:36:39 UTC (rev 115339)
+++ Zope/trunk/src/Products/ZCatalog/Catalog.py 2010-08-01 16:51:14 UTC (rev 115340)
@@ -470,7 +470,8 @@
def _sorted_search_indexes(self, query):
# Simple implementation doing no ordering.
- return self.indexes.keys()
+ query_keys = query.keys()
+ return [i for i in self.indexes.keys() if i in query_keys]
def search(self, query, sort_index=None, reverse=0, limit=None, merge=1):
"""Iterate through the indexes, applying the query to each one. If
@@ -500,11 +501,6 @@
cr.start()
for i in self._sorted_search_indexes(query):
- if i not in query_keys:
- # Do not ask indexes to restrict the result, which aren't
- # part of the query
- continue
-
index = self.getIndex(i)
_apply_index = getattr(index, "_apply_index", None)
if _apply_index is None:
Modified: Zope/trunk/src/Products/ZCatalog/tests/test_catalog.py
===================================================================
--- Zope/trunk/src/Products/ZCatalog/tests/test_catalog.py 2010-08-01 16:36:39 UTC (rev 115339)
+++ Zope/trunk/src/Products/ZCatalog/tests/test_catalog.py 2010-08-01 16:51:14 UTC (rev 115340)
@@ -199,7 +199,6 @@
att3 = KeywordIndex('att3')
num = FieldIndex('num')
-
self._catalog.addIndex('att1', att1)
self._catalog.addIndex('att2', att2)
self._catalog.addIndex('att3', att3)
@@ -285,6 +284,20 @@
# getIndexDataForRID
# make_query
# _sorted_search_indexes
+
+ def test_sorted_search_indexes_empty(self):
+ result = self._catalog._sorted_search_indexes({})
+ self.assertEquals(len(result), 0)
+
+ def test_sorted_search_indexes_one(self):
+ result = self._catalog._sorted_search_indexes({'att1': 'a'})
+ self.assertEquals(result, ['att1'])
+
+ def test_sorted_search_indexes_many(self):
+ query = {'att1': 'a', 'att2': 'b', 'num': 1}
+ result = self._catalog._sorted_search_indexes(query)
+ self.assertEquals(set(result), set(['att1', 'att2', 'num']))
+
# search
# sortResults
# _get_sort_attr
More information about the Zope-Checkins
mailing list