Commit e8e3d9ef authored by Jeffrey Shell's avatar Jeffrey Shell

Added range searching/indexing

parent 91f231a0
...@@ -10,13 +10,14 @@ ...@@ -10,13 +10,14 @@
__doc__='''Simple column indexes __doc__='''Simple column indexes
$Id: Index.py,v 1.9 1997/09/26 22:21:43 jim Exp $''' $Id: Index.py,v 1.10 1997/10/10 18:34:56 jeffrey Exp $'''
__version__='$Revision: 1.9 $'[11:-2] __version__='$Revision: 1.10 $'[11:-2]
from BTree import BTree from BTree import BTree
from intSet import intSet from intSet import intSet
import operator import operator
from Missing import MV from Missing import MV
import string
ListType=type([]) ListType=type([])
...@@ -127,7 +128,7 @@ class Index: ...@@ -127,7 +128,7 @@ class Index:
all data fields used. all data fields used.
""" """
id=self.id id=self.id #name of the column
try: keys=request["%s/%s" % (cid,id)] try: keys=request["%s/%s" % (cid,id)]
except: except:
...@@ -138,13 +139,37 @@ class Index: ...@@ -138,13 +139,37 @@ class Index:
index=self._index index=self._index
r=None r=None
anyTrue=0 anyTrue=0
for key in keys: opr=None
if key: anyTrue=1
if request.has_key(id+'_usage'):
# see if any usage params are sent to field
opr=string.split(string.lower(request[id+"_usage"]),':')
try:
opr, opr_args=opr[0], opr[1:]
except IndexError:
opr, opr_args=opr[0], []
if opr=="range":
if 'min' in opr_args: lo=min(keys)
else: lo=None
if 'max' in opr_args: hi=max(keys)
else: hi=None
anyTrue=1
try: try:
set=index[key] setlist=index.items(lo,hi)
if r is None: r=set for k,set in setlist:
else: r = r.union(set) if r is None: r=set
else: r=r.union(set)
except KeyError: pass except KeyError: pass
else: #not a range
for key in keys:
if key: anyTrue=1
try:
set=index[key]
if r is None: r=set
else: r = r.union(set)
except KeyError: pass
if r is None: if r is None:
if anyTrue: r=intSet() if anyTrue: r=intSet()
...@@ -156,6 +181,9 @@ class Index: ...@@ -156,6 +181,9 @@ class Index:
############################################################################## ##############################################################################
# #
# $Log: Index.py,v $ # $Log: Index.py,v $
# Revision 1.10 1997/10/10 18:34:56 jeffrey
# Added range searching/indexing
#
# Revision 1.9 1997/09/26 22:21:43 jim # Revision 1.9 1997/09/26 22:21:43 jim
# added protocol needed by searchable objects # added protocol needed by searchable objects
# #
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment