![]() |
Storage Engine API
|
Describes a query that can be compared against an IndexKeyEntry in a way that allows expressing exclusiveness on a prefix of the key. More...
#include <index_entry_comparison.h>
Describes a query that can be compared against an IndexKeyEntry in a way that allows expressing exclusiveness on a prefix of the key.
This is mostly used to express a location to seek to in an index that may not be representable as a valid key.
The "key" used for comparison is the concatenation of the first 'prefixLen' elements of 'keyPrefix' followed by the last 'keySuffix.size() - prefixLen' elements of 'keySuffix'.
The comparison is exclusive if either 'prefixExclusive' is true or if there are any false values in 'suffixInclusive' that are false at index >= 'prefixLen'.
Portions of the key following the first exclusive part may be ignored.
e.g.
Suppose that
keyPrefix = { "" : 1, "" : 2 }
prefixLen = 1
prefixExclusive = false
keySuffix = [ IGNORED, { "" : 5 } ]
suffixInclusive = [ IGNORED, false ]
==> key is { "" : 1, "" : 5 }
with the comparison being done exclusively
Suppose that
keyPrefix = { "" : 1, "" : 2 }
prefixLen = 1
prefixExclusive = true
keySuffix = IGNORED
suffixInclusive = IGNORED
==> represented key is { "" : 1 }
with the comparison being done exclusively
'prefixLen = 0' and 'prefixExclusive = true' are mutually incompatible.
Public Attributes | |
| BSONObj | keyPrefix |
| int | prefixLen = 0 |
| Use this many fields in 'keyPrefix'. More... | |
| bool | prefixExclusive = false |
| If true, compare exclusively on just the fields on keyPrefix and ignore the suffix. More... | |
| std::vector< const BSONElement * > | keySuffix |
| Elements starting at index 'prefixLen' are logically appended to the prefix. More... | |
| std::vector< bool > | suffixInclusive |
| If the ith element is false, ignore indexes > i in keySuffix and treat the concatenated key as exclusive. More... | |
| BSONObj mongo::IndexSeekPoint::keyPrefix |
| std::vector<const BSONElement*> mongo::IndexSeekPoint::keySuffix |
Elements starting at index 'prefixLen' are logically appended to the prefix.
The elements before index 'prefixLen' should be ignored.
| bool mongo::IndexSeekPoint::prefixExclusive = false |
If true, compare exclusively on just the fields on keyPrefix and ignore the suffix.
| int mongo::IndexSeekPoint::prefixLen = 0 |
Use this many fields in 'keyPrefix'.
| std::vector<bool> mongo::IndexSeekPoint::suffixInclusive |
If the ith element is false, ignore indexes > i in keySuffix and treat the concatenated key as exclusive.
The elements before index 'prefixLen' should be ignored.
Must have identical size as keySuffix.