Le 6/8/12 2:05 PM, Garbage a écrit :
Am 08.06.2012 um 13:58 schrieb Emmanuel Lécharny<[email protected]>:
Le 6/8/12 1:49 PM, Garbage a écrit :
I learned a lot about the implementation of custom partitions and see the
changes in the API from search and lookup returning an Entry in 1.5.x and an
EntryFilteringCursor later on.
I even was able to change an existing partition (shame on me: based on the
1.5.5 example, but I will switch to 2.0 soon) in a way that lets it return a
fake group object that was created in my custom POJO.
But I am only able to return ONE entry, I didn't find or understand the concept
how MULTIPLE entries can be returned. Can someone show me the right direction ?
The idea is to use a Cursor that maps around the partition and fetch the
entries one by one.
The way the server works is that based on your filter, you select the right
index to use to fetch the entries. There are may possibilities here :
- first, you may have to do a full scan (the filter is not selective enough,
for instance). In this case, you don't use any index, you just use the
MasterTable to get the entries. Now, for each entry you fetch, you'll have to
filter them to see if it's a valid entry - or not.
- or you can select an index. You will fetch the index elements, and for each
of them, fetch the associated entry. Once done, you can check against the
filter if the entry is valid - or not
In any case, the cursor is your friend here : it maps the next() operation on
top of your index.
Now, if your Partition is a Btree, it's easier, as the AbstractBTreePartition
class already handles everyting for you. If you don't inherit from this
Abstract class, then it's way more complicated. I'll suggest you have a look at
the AbstractBTreePartition to get a clue about how we process a search over a
BTree based partition.
--
Regards,
Cordialement,
Emmanuel Lécharny
www.iktek.com
Thanks, I will investigate this. What a pity, I am able to map searches to
string arrays containing the name of groups I want to return. But I understand
why you don't support arrays directly, I will somehow manage to map to the Bree
example. And if not I will show up here again ;-)
If you already have an array, you just have to create your own cursor
wraping it, maintaining the current index, and the next() call will
simply fetch the next entry in the arry, incrementing the pointer. This
is pretty simple to implement, I think.
--
Regards,
Cordialement,
Emmanuel Lécharny
www.iktek.com