From 01b1b5a6442ba0885c0d8301937f10a20d10ceaf Mon Sep 17 00:00:00 2001 From: helmutm Date: Sun, 4 May 2008 09:02:36 +0000 Subject: [PATCH] make sure keyword queries return an IFSet so that corresponding union and intersection functions may be used in complex queries git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@2573 fd906abe-77d9-0310-91a1-e0d9ade77398 --- catalog/query.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/catalog/query.py b/catalog/query.py index 8075c61..27601b7 100644 --- a/catalog/query.py +++ b/catalog/query.py @@ -26,7 +26,8 @@ $Id$ """ from BTrees.IFBTree import weightedIntersection, weightedUnion -from BTrees.IFBTree import difference, IFBTree, IFBucket +from BTrees.IFBTree import difference, IFBTree, IFBucket, IFSet +from BTrees.IIBTree import IISet, union from zope.app.intid.interfaces import IIntIds from zope.app.catalog.catalog import ResultSet from zope.app.catalog.field import IFieldIndex @@ -248,13 +249,17 @@ class KeywordTerm(IndexTerm): class AnyOf(KeywordTerm): def apply(self): - index = self.getIndex() - return index.search(self.values, 'or') + result = self.getIndex().search(self.values, 'or') + if isinstance(result, IFSet): + return result + return IFSet(result) class AllOf(KeywordTerm): def apply(self): - index = self.getIndex() - return index.search(self.values, 'and') + result = self.getIndex().search(self.values, 'and') + if isinstance(result, IFSet): + return result + return IFSet(result)