This section provides information about the
NdbIndexScanOperation class.
- Parent class
- Child classes
None
- Description
-
The
NdbIndexScanOperationclass represents a scan operation using an ordered index. This class inherits fromNdbScanOperationandNdbOperation.NdbIndexScanOperationis for use with ordered indexes only; to work with unique hash indexes, useNdbIndexOperation.For more information about the use of
NdbIndexScanOperation, see Section 1.4.2.3.3, “Scan Operations”, and Section 1.4.2.3.4, “Using Scans to Update or Delete Rows”. - Methods
-
The following table lists the public methods of this class and the purpose or use of each method:
Table 2.45 NdbIndexScanOperation class methods and descriptions
Name Description end_of_bound()Marks the end of a bound get_range_no()Gets the range number for the current row getDescending()Checks whether the current scan is sorted getSorted()Checks whether the current scan is sorted readTuples()Reads tuples using an ordered index reset_bounds()Resets bounds, puts the operation in the send queue setBound()Defines a bound on the index key for a range scan
- Types
-
The
NdbIndexScanOperationclass defines one public typeBoundType.This class also defines an
IndexBounddata structure, for use with operations employingNdbRecord.
This section provides information abut the
BoundType data type.
- Description
This type is used to describe an ordered key bound.
- Enumeration values
-
Possible values are shown, along with descriptions, in the following table:
Table 2.46 NdbIndexScanOperation::BoundType values, numeric equivalents, and descriptions
Value Numeric Value Description BoundLE0Lower bound BoundLT1Strict lower bound BoundGE2Upper bound BoundGT3Strict upper bound BoundEQ4Equality The numeric values just shown are “safe”;that is, they are fixed in the API, and so can be calculated and used explicitly.
- Description
This method is used to mark the end of a bound; it is used when batching index reads (that is, when employing multiple ranges).
- Signature
int end_of_bound ( Uint32 range_no )- Parameters
The number of the range on which the bound occurs.
- Return value
0indicates success;-1indicates failure.
- Description
This method is used to check whether the scan is descending.
- Signature
bool getDescending ( void ) const- Parameters
None.
- Return value
This method returns
trueif the scan is sorted in descending order; otherwise, it returnsfalse.
- Description
This method returns the range number for the current row.
- Signature
int get_range_no ( void )- Parameters
None.
- Return value
The range number (an integer).
- Description
This method is used to check whether the scan is sorted.
- Signature
bool getSorted ( void ) const- Parameters
None.
- Return value
trueif the scan is sorted, otherwisefalse.
This section provides information about the
IndexBound data structure.
- Parent class
- Description
IndexBoundis a structure used to describe index scan bounds forNdbRecordscans.- Members
-
Member names, types, and descriptions are shown in the following table:
Table 2.47 IndexBound structure member names, types, and descriptions
Name Type Description low_keyconst char*Row containing lower bound for scan (or NULLfor scan from the start).low_key_countUint32Number of columns in lower bound (for bounding by partial prefix). low_inclusiveboolTrue for <=relation, false for<.high_keyconst char*Row containing upper bound for scan (or NULLfor scan to the end).high_key_countUint32Number of columns in upper bound (for bounding by partial prefix). high_inclusiveboolTrue for >=relation, false for>.range_noUint32Value to identify this bound; may be read using the get_range_no()method (see NdbIndexScanOperation::get_range_no()). This value must be less than 8192 (set to zero if it is not being used). For ordered scans,range_nomust be strictly increasing for each range, or else the result set will not be sorted correctly.
For more information, see Section 2.3.22, “The NdbRecord Interface”.
- Description
This method is used to read tuples, using an ordered index.
- Signature
virtual int readTuples ( LockMode mode = LM_Read, Uint32 flags = 0, Uint32 parallel = 0, Uint32 batch = 0 )- Parameters
-
The
readTuples()method takes the three parameters listed here:The lock
modeused for the scan. This is aLockModevalue; see NdbOperation::LockMode for more information, including permitted values.One or more scan flags; multiple
flagsareOR'ed together as they are when used withNdbScanOperation::readTuples(). See NdbScanOperation::ScanFlag for possible values.The number of fragments to scan in
parallel; use0to specify the maximum automatically.-
The
batchparameter specifies how many records will be returned to the client from the server by the nextNdbScanOperation::nextResult(true)method call. Use0to specify the maximum automatically.NoteThis parameter was ignored prior to MySQL 5.1.12, and the maximum was used.(Bug #20252)
- Return value
An integer:
0indicates success;-1indicates failure.
- Description
Resets the bounds, and puts the operation into the list sent on the next call to
NdbTransaction::execute().- Signature
int reset_bounds ( bool forceSend = false )- Parameters
Set
forceSendtotruein order to force the operation to be sent immediately.- Return value
Returns
0on success,-1on failure.
- Description
-
This method defines a bound on an index key used in a range scan, and sets bounds for index scans defined using
NdbRecord.As used with
NdbRecord, this method is called to add a range to an index scan operation which has been defined with a call toNdbTransaction::scanIndex(). To add more than one range, the index scan operation must have been defined with theSF_MultiRangeflag set. (See NdbScanOperation::ScanFlag.)Where multiple numbered ranges are defined with multiple calls to
setBound(), and the scan is ordered, the range number for each range must be larger than the range number for the previously defined range. - Signature
int setBound ( const NdbRecord* keyRecord, const IndexBound& bound )- Parameters
-
As used with
NdbRecord, this method takes 2 parameters, listed here:keyRecord: This is anNdbRecordstructure corresponding to the key on which the index is defined.The
boundto add (see NdbIndexScanOperation::IndexBound).
- Return value
Returns
0on success,-1on failure.
An additional version of this method can be used when the
application knows that rows in-range will be found only within a
particular partition. This is the same as that shown previously,
except for the addition of a
PartitionSpec. Doing so
limits the scan to a single partition, improving system
efficiency.
- Signature (when specifying a partition)
int setBound ( const NdbRecord* keyRecord, const IndexBound& bound, const Ndb::PartitionSpec* partInfo, Uint32 sizeOfPartInfo = 0 )- Parameters (when specifying a partition)
-
This method can also be invoked with the following four parameters:
keyRecord: This is anNdbRecordstructure corresponding to the key on which the index is defined.The
boundto be added to the scan (see NdbIndexScanOperation::IndexBound).partInfo: This is a pointer to aPartitionSpec, which provides extra information making it possible to scan a reduced set of partitions.sizeOfPartInfo: The length of the partition specification.
keyRecordandboundare defined and used in the same way as with the 2-parameter version of this method. - Return value
Returns
0on success,-1on failure.- “Old” API usage (prior to introduction of NdbRecord)
-
Each index key can have a lower bound, upper bound, or both. Setting the key equal to a value defines both upper and lower bounds. Bounds can be defined in any order. Conflicting definitions gives rise to an error.
Bounds must be set on initial sequences of index keys, and all but possibly the last bound must be nonstrict. This means, for example, that “a >= 2 AND b > 3” is permissible, but “a > 2 AND b >= 3” is not.
The scan may currently return tuples for which the bounds are not satisfied. For example, a
<= 2 && b <= 3not only scans the index up to(a=2, b=3), but also returns any(a=1, b=4)as well.When setting bounds based on equality, it is better to use
BoundEQinstead of the equivalent pairBoundLEandBoundGE. This is especially true when the table partition key is a prefix of the index key.NULLis considered less than any non-NULLvalue and equal to anotherNULLvalue. To perform comparisons withNULL, usesetBound()with a null pointer (0).An index also stores all-
NULLkeys as well, and performing an index scan with an empty bound set returns all tuples from the table. - Signature (“Old” API)
-
Using the “old” API, this method could be called in either of two ways. Both of these use the bound type and value; the first also uses the name of the bound, as shown here:
int setBound ( const char* name, int type, const void* value )The second way to invoke this method under the “old” API uses the bound's ID rather than the name, as shown here:
int setBound ( Uint32 id, int type, const void* value ) - Parameters (“Old” API)
-
This method takes 3 parameters:
Either the
nameor theidof the attribute on which the bound is to be set.The bound
type—see NdbIndexScanOperation::BoundType.A pointer to the bound
value(use0forNULL).
- Return value
Returns
0on success,-1on failure.