[+/-]
NdbScanOperation::readTuples()
NdbScanOperation::nextResult()
NdbScanOperation::close()
NdbScanOperation::lockCurrentTuple()
NdbScanOperation::updateCurrentTuple()
NdbScanOperation::deleteCurrentTuple()
NdbScanOperation::restart()
NdbScanOperation::getNdbTransaction()
NdbScanOperation::getPruned()
Abstract
This section lists and describes the public methods of the
NdbScanOperation
class.
This class has no public constructor. To create an instance of
NdbScanOperation
, it is necessary to use the
NdbTransaction::getNdbScanOperation()
method.
See Section 2.3.19.2.2, “NdbTransaction::getNdbScanOperation()
”.
Description. This method is used to perform a scan.
Signature.
virtual int readTuples ( LockModemode
= LM_Read, Uint32flags
= 0, Uint32parallel
= 0, Uint32batch
= 0 )
Parameters. This method takes four parameters, as shown here:
The lock mode
; this is a
LockMode
value as described in
Section 2.3.15.1.3, “The NdbOperation::LockMode
Type”.
When scanning with an exclusive lock, extra care must
be taken due to the fact that, if two threads perform
this scan simultaneously over the same range, then
there is a significant probability of causing a
deadlock. The likelihood of a deadlock is increased if
the scan is also ordered (that is, using
SF_OrderBy
or
SF_Descending
).
The
NdbIndexScanOperation::close()
method is also affected by this deadlock, since all
outstanding requests are serviced before the scan is
actually closed.
We are working to resolve this issue in a future release.
One or more ScanFlag
values. Multiple
values are OR
'ed together
The number of fragments to scan in
parallel
; use
0
to require that the maximum
possible number be used.
The batch
parameter specifies
how many records will be returned to the client from the
server by the next
NdbScanOperation::nextResult(true)
method call. Use 0
to specify the
maximum automatically.
This parameter was ignored prior to MySQL 5.1.12, and the maximum was used. (Bug#20252)
Return value.
0
on success, -1
on
failure.
Description.
This method is used to fetch the next tuple in a scan
transaction. Following each call to
nextResult()
, the buffers and
NdbRecAttr
objects defined in
NdbOperation::getValue()
are updated with
values from the scanned tuple.
Signature.
int nextResult ( boolfetchAllowed
= true, boolforceSend
= false )
Beginning with MySQL Cluster NDB 6.2.3, it is also possible to use this method as shown here:
int nextResult ( const char*&outRow
, boolfetchAllowed
= true, boolforceSend
= false )
Parameters. This method takes two parameters:
Normally, the NDB API contacts the
NDB
kernel for more tuples whenever
it is necessary; setting
fetchAllowed
to
false
keeps this from happening.
Disabling fetchAllowed
by
setting it to false
forces
NDB
to process any records it already
has in its caches. When there are no more cached records
it returns 2
. You must then call
nextResult()
with
fetchAllowed
equal to
true
in order to contact
NDB
for more records.
While nextResult(false)
returns
0
, you should transfer the record to
another transaction. When
nextResult(false)
returns
2
, you must execute and commit the
other transaction. This causes any locks to be
transferred to the other transaction, updates or deletes
to be made, and then, the locks to be released.
Following this, call nextResult(true)
— this fetches more records and caches them in the
NDB API.
If you do not transfer the records to another
transaction, the locks on those records will be
released the next time that the NDB
Kernel is contacted for more records.
Disabling fetchAllowed
can be
useful when you want to update or delete all of the
records obtained in a given transaction, as doing so
saves time and speeds up updates or deletes of scanned
records.
forceSend
defaults to
false
, and can normally be omitted.
However, setting this parameter to
true
means that transactions are sent
immediately. See
Section 1.3.4, “The Adaptive Send Algorithm”, for more
information.
Parameters. Beginning with MySQL Cluster NDB 6.2.3, this method can also be called with the following parameters:
Calling nextResult()
sets a pointer
to the next row in outRow
(if
returning 0). This pointer is valid (only) until the
next call to nextResult()
when
fetchAllowed
is true. The
NdbRecord
object defining the row
format must be specified beforehand using
NdbTransaction::scanTable()
(or
NdbTransaction::scanIndex()
.
When false, fetchAllowed
forces NDB
to process any records it
already has in its caches. See the description for this
parameter in the previous
Parameters subsection for more
details.
Setting forceSend
to
true
means that transactions are sent
immediately, as described in the previous
Parameters subsection, as well as
in Section 1.3.4, “The Adaptive Send Algorithm”.
Return value. This method returns one of the following 4 integer values:
-1
: Indicates that an error has
occurred.
0
: Another tuple has been received.
1
: There are no more tuples to scan.
2
: There are no more cached records
(invoke nextResult(true)
to fetch
more records).
Description. Calling this method closes a scan.
See Scans and exclusive locks for information about multiple threads attempting to perform the same scan with an exclusive lock and how this can affect closing the scans..
Signature.
void close ( boolforceSend
= false, boolreleaseOp
= false )
Parameters. This method takes two parameters:
forceSend
defaults to
false
; call
close()
with this parameter set to
true
in order to force transactions
to be sent.
releaseOp
also defaults to
false
; set to true
in order to release the operation.
Return value. None.
Description. This method locks the current tuple.
Signature.
NdbOperation* lockCurrentTuple ( void )
or
NdbOperation* lockCurrentTuple
(
NdbTransaction* lockTrans
)
Beginning with MySQL Cluster NDB 6.2.3, the following
signature is also supported for this method, when using
NdbRecord
:
NdbOperation *lockCurrentTuple ( NdbTransaction*takeOverTrans
, const NdbRecord*record
, char*row
= 0, const unsigned char*mask
= 0 )
Parameters. This method takes a single, optional parameter — the transaction that should perform the lock. If this is omitted, the transaction is the current one.
Parameters when using NdbRecord
.
When using the NdbRecord
interface (see
Section 2.3.25, “The NdbRecord
Interface”), this method takes these
parameters, as described in the following list:
The transaction
(takeOverTrans
) that should
perform the lock; when using
NdbRecord
with scans, this parameter
is not optional.
The NdbRecord
referenced by the scan.
This is required, even if no records are being read.
The row
from which to read.
Set this to NULL
if no read is to
occur.
The mask
pointer is optional.
If it is present, then only columns for which the
corresponding bit in the mask is set are retrieved by
the scan.
Calling an NdbRecord
scan lock takeover on
an NdbRecAttr
-style scan is not valid, nor
is calling an NdbRecAttr
-style scan lock
takeover on an NdbRecord
-style scan.
Return value.
This method returns a pointer to an
NdbOperation
object, or
NULL
. (See
Section 2.3.15, “The NdbOperation
Class”.)
Description. This method is used to update the current tuple.
Signature.
NdbOperation* updateCurrentTuple ( void )
or
NdbOperation* updateCurrentTuple
(
NdbTransaction* updateTrans
)
Beginning with MySQL Cluster NDB 6.2.3, it is also possible to
employ this method, when using NdbRecord
with scans, as shown here:
NdbOperation* updateCurrentTuple ( NdbTransaction* takeOverTrans, const NdbRecord* record, const char* row, const unsigned char* mask = 0 )
See Section 2.3.25, “The NdbRecord
Interface”, for more information.
Parameters. This method takes a single, optional parameter — the transaction that should perform the lock. If this is omitted, the transaction is the current one.
Parameters when using NdbRecord
.
When using the NdbRecord
interface
(beginning with MySQL Cluster NDB 6.2.3), this method takes
the following parameters, as described here:
The takeover transaction
(takeOverTrans
).
The record
(NdbRecord
object) referencing the
column used for the scan.
The row
to read from. If no
attributes are to be read, set this equal to
NULL
.
The mask
pointer is optional.
If it is present, then only columns for which the
corresponding bit in the mask is set are retrieved by
the scan.
Return value.
This method returns an NdbOperation
object
or NULL
. (See
Section 2.3.15, “The NdbOperation
Class”.)
Description. This method is used to delete the current tuple.
Signature.
int deleteCurrentTuple ( void )
or
int deleteCurrentTuple
(
NdbTransaction* takeOverTransaction
)
Beginning with MySQL Cluster NDB 6.2.3, this method's
signature when performing NdbRecord
-style
scans is shown here:
For more information, see Section 2.3.25, “The NdbRecord
Interface”.
Parameters. This method takes a single, optional parameter — the transaction that should perform the lock. If this is omitted, the transaction is the current one.
Parameters when using NdbRecord
.
When used with the NdbRecord
interface
(beginning with MySQL Cluster NDB 6.2.3), this method takes
two parameters, as shown here:
The takeover transaction
(takeOverTrans
, a pointer to
an NdbTransaction
object) to employ.
The record
(NdbRecord
object) referencing the
scan column.
Return value.
0
on success, -1
on
failure.
Description.
Use this method to restart a scan without changing any of its
getValue()
calls or search conditions.
Signature.
int restart
(
bool forceSend
= false
)
Parameters.
Call this method with forceSend
set
to true
in order to force the transaction
to be sent.
Return value.
0
on success, -1
on
failure.
Description.
Gets the NdbTransaction
object for this
scan. Available beginning with MySQL Cluster NDB 6.2.17 and
MySQL Cluster NDB 6.3.19.
Signature.
NdbTransaction* getNdbTransaction ( void ) const
Parameters. None.
Return value.
A pointer to an NdbTransaction
object. See
Section 2.3.19, “The NdbTransaction
Class”.
Description.
This method is used to determine whether or not a given scan
operation has been pruned to a single partition. For scans
defined using NdbRecord, this method can be called before or
after the scan is executed. For scans not defined using
NdbRecord
, getPruned()
is valid only after the scan has been executed.
Signature.
bool getPruned ( void ) const
Parameters. None.
Return value.
TRUE
, if the scan is pruned to a single
table partition.