Next: Multi-threaded Applications, Previous: BTree Indexing, Up: User Guide
Index cursors are just like BTree cursors except you can get the main
BTree value instead of the index value. There are also a parallel set
of operations such as cursor-pnext
instead of
cursor-next
which returns exists
, key
,
primary-btree-value
and index-value = primary-btree-key
.
Operations that have the same behavior, but return primary btree values and keys are:
BTree Cursor Function | Index Cursor Function
| |
---|---|---|
cursor-first
| => | cursor-pfirst
|
cursor-last
| => | cursor-plast
|
cursor-current
| => | cursor-pcurrent
|
cursor-next
| => | cursor-pnext
|
cursor-prev
| => | cursor-pprev
|
cursor-set
| => | cursor-pset
|
cursor-set-range
| => | cursor-set-prange
|
The big difference between btree cursors and index cursors is that indices can have duplicate key values. This means we have to choose between incrementing over elements, unique key-values or only within a duplicate segment. There are cursor operations for each:
cursor-pnext
and cursor-pprev
cursor-pnext-nodup
and cursor-pprev-nodup
cursor-pnext-dup
and cursor-pprev-dup
After incrementing through a set of duplicate items using a
xxx-dup
function, the last next operation returns nil
indicating there are no more duplicates. The consequence of this is
that the cursor is now uninitialized (cursor-initialized-p
) and
needs to be reset by a set or set both call.
See Index Cursor API for further details.