本节提供有关 NdbTransaction
类的信息。
- 父类
无
- 子类
无
- 描述
事务在 NDB API 中由一个
NdbTransaction
对象表示,该对象属于一个Ndb
对象,并使用Ndb::startTransaction()
创建。事务包含一个操作列表,由NdbOperation
类或其子类之一表示——NdbScanOperation
、NdbIndexOperation
或NdbIndexScanOperation
。每个操作访问恰好一个表。- 方法
-
下表列出了此类的公共方法以及每个方法的目的或用途
表 2.66 NdbTransaction 类方法及其描述
方法
readTuple()
、insertTuple()
、updateTuple()
、writeTuple()
、deleteTuple()
、scanTable()
和scanIndex()
需要使用NdbRecord
. - 类型
-
NdbTransaction
定义了 2 种公共类型,如下表所示
使用事务。 获取到 NdbTransaction
对象后,使用方法如下
-
使用以下任一方法将操作分配给事务
getNdbOperation()
getNdbScanOperation()
getNdbIndexOperation()
getNdbIndexScanOperation()
调用这些方法之一定义操作。可以在同一个
NdbTransaction
对象上定义多个操作,在这种情况下它们将并行执行。当所有操作都已定义时,execute()
方法将它们发送到NDB
内核以执行。 -
execute()
方法在NDB
内核完成先前定义的所有操作的执行后返回。所有分配的操作都应该在调用
execute()
方法之前正确定义。 -
execute()
以以下三种模式之一运行NdbTransaction::NoCommit
:执行操作而不提交它们。NdbTransaction::Commit
:执行所有剩余的操作,然后提交整个事务。NdbTransaction::Rollback
:回滚整个事务。
execute()
还配备了一个额外的错误处理参数,它提供了以下两个选项NdbOperation::AbortOnError
: 任何错误都会导致事务中止。这是默认行为。NdbOperation::AO_IgnoreError
: 即使事务中定义的一个或多个操作失败,事务也会继续执行。
- 描述
-
此方法关闭事务。它等效于调用
Ndb::closeTransaction()
.如果事务尚未提交,则调用此方法时会中止该事务。请参见 Ndb::startTransaction().
- 签名
void close ( void )
- 参数
无.
- 返回值
无.
- 描述
此方法获取事务的提交状态。
- 签名
CommitStatusType commitStatus ( void )
- 参数
无.
- 返回值
事务的提交状态,一个
CommitStatusType
类型的值。
- 描述
使用
NdbRecord
删除元组。- 签名
const NdbOperation* deleteTuple ( const NdbRecord* key_rec, const char* key_row, const NdbRecord* result_rec, char* result_row, const unsigned char* result_mask = 0, const NdbOperation::OperationOptions* opts = 0, Uint32 sizeOfOptions = 0 )
- 参数
-
此方法采用以下参数
key_rec
是指向NdbRecord
的指针,用于表格或索引。如果在表格上,则删除操作使用主键;如果在索引上,则操作使用唯一键。在这两种情况下,key_rec
必须包含键的所有列。传递给此方法的
key_row
定义要删除的元组的主键或唯一键,并且必须在调用execute()
之前保持有效。result_rec
是要使用的NdbRecord
。如果不需要返回任何属性,则
result_row
可以为NULL
。如果
result_mask
不为NULL
,则它定义要读取并返回给客户端的属性子集。该掩码将被复制,因此在调用此方法返回后不需要保持有效。OperationOptions
(opts
) 可用于提供对操作定义的更细粒度控制。使用标志传递OperationOptions
结构,这些标志指示存在哪些操作定义选项。并非所有操作类型都支持所有操作选项;有关每种操作类型支持的选项,请参见 NdbTransaction::readTuple().可选的
sizeOfOptions
参数提供了此接口与OperationOptions
结构先前定义的向后兼容性。如果接口实现检测到异常大小,则可以使用此参数确定如何解释传递的OperationOptions
结构。要启用此功能,调用者应为此参数传递sizeof(NdbOperation::OperationOptions)
的值。
- 返回值
指向表示此写入操作的
NdbOperation
的const
指针。如果需要,可以检查操作是否有错误。
本节提供有关 ExecType
数据类型的更多信息。
- 描述
此类型设置事务的执行类型;也就是说,它应该执行、执行并提交,还是中止。它用作
execute()
方法的参数。(请参见 NdbTransaction::execute()。)- 枚举值
-
以下表格列出了可能的值及其描述
- 描述
此方法用于执行事务。
- 签名
int execute ( ExecType execType, NdbOperation::AbortOption abortOption = NdbOperation::DefaultAbortOption, int force = 0 )
- 参数
-
execute()
方法采用以下三个参数执行类型 (
ExecType
值);有关更多信息和可能的值,请参见 NdbTransaction::ExecType.-
中止选项 (
NdbOperation::AbortOption
值)。此方法引发的错误可以通过
NdbOperation::getNdbError()
而不是NdbTransaction::getNdbError()
找到。 -
一个
force
参数,它决定何时应将操作发送到NDB
内核。它采用以下列出的值之一0
: 非强制;由自适应发送算法检测。1
: 强制;由自适应发送算法检测。2
: 非强制;不由自适应发送算法检测。
有关更多信息,请参见 第 1.4.4 节,“自适应发送算法”.
- 返回值
成功时返回
0
,失败时返回-1
。事务没有中止并不一定意味着每个操作都成功;您必须分别检查每个操作是否有错误。
此方法仅在事务中止时报告错误。在这种情况下,事务的错误信息将设置为反映实际错误代码和类别。
如果 NoDataFound 错误有可能发生,则必须明确检查它,如以下示例所示
Ndb_cluster_connection myConnection;
if( myConnection.connect(4, 5, 1) )
{
cout << "Unable to connect to cluster within 30 secs." << endl;
exit(-1);
}
Ndb myNdb(&myConnection, "test");
// define operations...
myTransaction = myNdb->startTransaction();
if(myTransaction->getNdbError().classification == NdbError:NoDataFound)
{
cout << "No records found." << endl;
// ...
}
myNdb->closeTransaction(myTransaction);
您应该知道,成功的 execute()
调用仅保证扫描请求已成功组装并发送到事务协调器,没有任何错误;它不会等待从数据节点发送任何信号以作为回复返回。
- 描述
此方法使用
ExecType
等于NoCommit
执行事务,如果仍然存在尚未执行的给定类型的 blob 部分操作。- 签名
int executePendingBlobOps ( Uint8 flags = 0xFF )
- 参数
flags
参数是按位OR
的结果,等于1 <<
,其中optype
optype
是一个NdbOperation::Type
。默认值对应于NdbOperation::Type::PrimaryKeyAccess
。- 返回值
成功时返回
0
,失败时返回-1
。事务没有中止并不一定意味着每个操作都成功;您必须分别检查每个操作是否有错误。
- 描述
-
此方法检索事务的全局检查点 ID (GCI)。
每个已提交的事务都属于一个 GCI。当发生全局检查点时,已提交事务的日志会保存在磁盘上。
通过将事务的 GCI 与在重新启动的 NDB 集群中恢复的最新 GCI 的值进行比较,您可以确定事务是否已恢复。
此方法无法确定具有此 GCI 的全局检查点是否已保存在磁盘上。
扫描事务的 GCI 未定义,因为扫描事务不会执行任何更新。
在使用
ExecType::Commit
调用execute()
之前,无法获得 GCI。 - 签名
int getGCI ( void )
- 参数
无.
- 返回值
事务的 GCI,如果不可用,则为
-1
。
- 描述
获取 blob 读取操作的当前批次大小(以字节为单位)。当给定事务中要读取的 blob 数据量超过此数量时,将执行该事务的所有挂起的 blob 读取操作。
- 签名
Uint32 getMaxPendingBlobReadBytes ( void ) const
- 参数
无.
- 返回值
当前 blob 读取批次大小(以字节为单位)。有关更多信息,请参见 NdbTransaction::setMaxPendingBlobReadBytes().
- 描述
获取 blob 写入操作的当前批次大小(以字节为单位)。当给定事务中要写入的 blob 数据量超过此数量时,将执行该事务的所有挂起的 blob 写入操作。
- 签名
Uint32 getMaxPendingBlobWriteBytes ( void ) const
- 参数
无.
- 返回值
当前 blob 写入批次大小(以字节为单位)。有关更多信息,请参见 NdbTransaction::setMaxPendingBlobWriteBytes().
- 描述
此方法返回发生最新错误的行号。
- 签名
int getNdbErrorLine ( void )
- 参数
无.
- 返回值
最新错误的行号。
有关在事务中处理错误的更多信息,请参见 第 1.4.2.3.6 节,“错误处理”.
- 描述
-
此方法检索导致错误的操作。
要获取有关实际错误的更多信息,请使用
NdbOperation::getNdbError()
方法(该方法由getNdbErrorOperation()
返回的NdbOperation
对象)。 - 签名
NdbOperation* getNdbErrorOperation ( void )
- 参数
无.
- 返回值
指向
NdbOperation
的指针。
有关在事务中处理错误的更多信息,请参见 第 1.4.2.3.6 节,“错误处理”.
- 描述
-
此方法用于创建与给定表格关联的
NdbIndexOperation
。同一事务中的所有索引操作都必须使用此方法初始化。必须在执行操作之前定义操作。
- 签名
NdbIndexOperation* getNdbIndexOperation ( const NdbDictionary::Index* index )
- 参数
要执行操作的
Index
对象。- 返回值
指向新
NdbIndexOperation
的指针。
- 描述
-
此方法用于创建与给定表格关联的
NdbIndexScanOperation
。同一事务中的所有索引扫描操作都必须使用此方法初始化。必须在执行操作之前定义操作。
- 签名
NdbIndexScanOperation* getNdbIndexScanOperation ( const NdbDictionary::Index* index )
- 参数
要执行操作的
Index
对象。- 返回值
指向新
NdbIndexScanOperation
的指针。
- 描述
-
此方法用于创建与给定表关联的
NdbOperation
。同一事务中的所有操作都必须使用此方法初始化。操作必须在执行之前定义。
- 签名
NdbOperation* getNdbOperation ( const NdbDictionary::Table* table )
- 参数
将要执行操作的
Table
对象。- 返回值
指向新的
NdbOperation
的指针。
- 描述
-
此方法用于创建与给定表关联的
NdbScanOperation
。同一事务中的所有扫描操作都必须使用此方法初始化。操作必须在执行之前定义。
- 签名
NdbScanOperation* getNdbScanOperation ( const NdbDictionary::Table* table )
- 参数
将要执行操作的
Table
对象。- 返回值
指向新的
NdbScanOperation
的指针。
- 描述
-
此方法用于检索事务的已完成操作。通常用于获取属于给定事务的所有操作以检查错误。
NdbTransaction::getNextCompletedOperation(NULL)
返回事务的第一个NdbOperation
对象;NdbTransaction::getNextCompletedOperation(
返回在myOp
)NdbOperation
myOp
之后定义的NdbOperation
对象。此方法只能在事务执行后但事务关闭之前使用。
- 签名
const NdbOperation* getNextCompletedOperation ( const NdbOperation* op ) const
- 参数
此方法需要一个参数
op
,它是一个操作(NdbOperation
对象),或者NULL
。- 返回值
跟随
op
的操作,或如果getNextCompletedOperation()
使用NULL
调用,则为事务定义的第一个操作。
- 描述
使用
NdbRecord
插入元组。- 签名
-
const NdbOperation* insertTuple ( const NdbRecord* key_rec, const char* key_row, const NdbRecord* attr_rec, const char* attr_row, const unsigned char* mask = 0, const NdbOperation::OperationOptions* opts = 0, Uint32 sizeOfOptions = 0 )
const NdbOperation* insertTuple ( const NdbRecord* combined_rec, const char* combined_row, const unsigned char* mask = 0, const NdbOperation::OperationOptions* opts = 0, Uint32 sizeOfOptions = 0 )
- 参数
-
insertTuple()
接受以下参数-
指向
NdbRecord
的指针,表示要插入的记录 (key_rec
)。此方法也可以使用单个
NdbRecord
指针和单个char
指针 (combined_rec
,combined_row
) 调用,其中单个NdbRecord
表示记录、属性和数据。 要插入的数据行 (
key_row
)。指向
NdbRecord
的指针,表示要插入的属性 (attr_rec
)。要作为属性插入的数据行 (
attr_row
)。一个
mask
,可用于过滤要插入的列。OperationOptions
(opts
) 可用于提供对操作定义的更细粒度控制。使用标志传递OperationOptions
结构,这些标志指示存在哪些操作定义选项。并非所有操作类型都支持所有操作选项;有关每种操作类型支持的选项,请参见 NdbTransaction::readTuple().可选的
sizeOfOptions
参数用于保持此接口与之前定义的OperationOptions
结构的向后兼容性。如果接口实现检测到异常大小,它可以使用此参数来确定如何解释传递的OperationOptions
结构。要启用此功能,调用方应为此参数传递sizeof(NdbOperation::OperationOptions)
。
-
- 返回值
指向表示此插入操作的
NdbOperation
的const
指针。
- 描述
此方法使用
NdbRecord
对象读取元组。- 签名
const NdbOperation* readTuple ( const NdbRecord* key_rec, const char* key_row, const NdbRecord* result_rec, char* result_row, NdbOperation::LockMode lock_mode = NdbOperation::LM_Read, const unsigned char* result_mask = 0, const NdbOperation::OperationOptions* opts = 0, Uint32 sizeOfOptions = 0 )
- 参数
-
此方法采用以下参数
key_rec
是指向表或索引的NdbRecord
的指针。如果在表上,则操作使用主键;如果在索引上,则操作使用唯一键。在这两种情况下,key_rec
必须包含键的所有列。-
传递给此方法的
key_row
定义了受影响元组的主键或唯一键,并且必须在调用execute()
之前保持有效。如果掩码不为
NULL
,则它定义要读取、更新或插入的属性子集。只有当(mask[
设置时,列才会受到影响。掩码由方法复制,因此在调用返回后不需要保持有效。attrId
>> 3] & (1<<(attrId
& 7))) result_rec
是指向用作保存结果的NdbRecord
的指针result_row
定义了结果数据的缓冲区。lock_mode
指定对操作有效的锁定模式。请参阅 NdbOperation::LockMode,以了解允许的值和其他信息。result_mask
定义要读取的属性子集。只有当mask[attrId >> 3] & (1<<(attrId & 7))
设置时,列才会受到影响。掩码被复制,因此在方法调用返回后不需要保持有效。-
OperationOptions
(opts
) 可用于提供对操作定义的更细粒度的控制。使用带有指示哪些操作定义选项存在的标志的OperationOptions
结构进行传递。并非所有操作类型都支持所有操作选项;每种操作类型支持的选项在以下表格中显示表 2.70 NdbTransaction::readTuple() OperationOptions (opts) 参数的操作类型,以及每种类型支持的操作选项
操作类型(方法) OperationOptions
支持的标志readTuple()
OO_ABORTOPTION
,OO_GETVALUE
,OO_PARTITION_ID
,OO_INTERPRETED
insertTuple()
OO_ABORTOPTION
,OO_SETVALUE
,OO_PARTITION_ID
,OO_ANYVALUE
updateTuple()
OO_ABORTOPTION
,OO_SETVALUE
,OO_PARTITION_ID
,OO_INTERPRETED
,OO_ANYVALUE
writeTuple()
OO_ABORTOPTION
,OO_SETVALUE
,OO_PARTITION_ID
,OO_ANYVALUE
deleteTuple()
OO_ABORTOPTION
,OO_GETVALUE
,OO_PARTITION_ID
,OO_INTERPRETED
,OO_ANYVALUE
可选的
sizeOfOptions
参数用于保持此接口与之前定义的OperationOptions
结构的向后兼容性。如果接口实现检测到异常大小,它可以使用此参数来确定如何解释传递的OperationOptions
结构。要启用此功能,调用方应为此参数传递sizeof(NdbOperation::OperationOptions)
。
- 返回值
指向表示此读取操作的
NdbOperation
的指针(这可用于检查错误)。
- 描述
-
此方法更新事务的超时计数器,从而避免因事务超时而中止。
不建议对记录进行锁定并长时间保持锁定,因为这会影响其他事务。
- 签名
int refresh ( void )
- 参数
无.
- 返回值
成功返回
0
,失败返回-1
。
- 描述
-
此方法用于释放锁定句柄(请参阅 NdbOperation::getLockHandle),当不再需要该句柄时。对于
NdbRecord
主键读取操作,这不能在关联的读取操作执行之前调用。当事务关闭时,与给定事务关联的所有锁定句柄都会被释放。
- 签名
int releaseLockHandle ( const NdbLockHandle* lockHandle )
- 参数
要释放的
NdbLockHandle
对象。- 返回值
成功返回 0。
- 描述
执行表的索引范围扫描,并可选地进行排序。
- 签名
NdbIndexScanOperation* scanIndex ( const NdbRecord* key_record, const NdbRecord* result_record, NdbOperation::LockMode lock_mode = NdbOperation::LM_Read, const unsigned char* result_mask = 0, const NdbIndexScanOperation::IndexBound* bound = 0, const NdbScanOperation::ScanOptions* options = 0, Uint32 sizeOfOptions = 0 )
- 参数
key_record
描述要扫描的索引。它必须是索引的键记录;也就是说,它必须至少指定索引的所有键列。key_record
必须从要扫描的索引(而不是从基础表)创建。-
result_record
描述要从扫描中返回的行。对于有序索引扫描,result_record
必须是索引的键记录;也就是说,它必须包含(至少)索引中的所有列(NDB API 需要完整的索引键来对从每个片段返回的有序行进行合并排序)。与
key_record
一样,result_record
必须从基础表创建,而不是从要扫描的索引创建。key_record
和result_record
NdbRecord
结构都必须保留到位,直到扫描操作关闭。 result_mask
指针是可选的。如果存在,则只检索result_mask
中对应位(按属性 ID 顺序)已设置的那些列。result_mask
在内部被复制,因此与result_record
相反,它在调用execute()
时不需要保持有效。-
可以在此调用中或在对
NdbIndexScanOperation::setBound()
的单独调用中指定单个IndexBound
。要执行多范围读取,ScanOptions
结构中的scan_flags
必须包含SF_MULTIRANGE
。可以使用对NdbIndexScanOperation::setBound()
的后续调用添加更多边界。要指定相等边界,请使用
low_key
和high_key
的相同行指针,并将低位和高位设置为包含位。对于多范围扫描,
low_key
和high_key
指针必须是唯一的。换句话说,不允许在单个扫描中为多个不同范围边界重复使用相同的行缓冲区。但是,允许将相同的行指针用作low_key
和high_key
,以便指定相等边界;还允许在scanIndex()
方法返回后重复使用这些行,也就是说,它们在execute()
时不需要保持有效(与NdbRecord
指针不同)。 要指定其他选项,请传递一个
ScanOptions
结构。存在
sizeOfOptions
用于启用此接口的向后兼容性。此参数指示客户端编译时ScanOptions
结构的大小,并允许检测使用旧式ScanOptions
结构。如果不需要此功能,可以将此参数保留为 0。
- 返回值
当前的
NdbIndexScanOperation
,可用于错误检查。
- 描述
此方法执行表扫描,使用
NdbRecord
对象读取列数据。- 签名
NdbScanOperation* scanTable ( const NdbRecord* result_record, NdbOperation::LockMode lock_mode = NdbOperation::LM_Read, const unsigned char* result_mask = 0, Uint32 scan_flags = 0, Uint32 parallel = 0, Uint32 batch = 0 )
- 参数
-
scanTable()
方法接受以下参数指向
NdbRecord
的指针,用于存储结果。此result_record
必须在execute()
调用完成之前保持有效。操作有效的
lock_mode
。有关允许的值和其他信息,请参阅 NdbOperation::LockMode。result_mask
指针是可选的。如果存在,则只检索result_mask
中对应位(按属性 ID 顺序)已设置的那些列。result_mask
在内部被复制,因此与result_record
相反,它在调用execute()
时不需要保持有效。scan_flags
可用于对扫描施加排序和排序条件。有关允许值的列表,请参阅 NdbScanOperation::ScanFlag。parallel
参数是所需的并行度,或0
表示最大并行度(从所有片段并行接收行),这是默认值。batch
决定是否使用批处理。默认值为 0(关闭)。
- 返回值
指向表示此扫描的
NdbScanOperation
的指针。如果需要,可以检查操作是否有错误。
- 描述
设置 blob 读取操作的字节批处理大小。当给定事务中要读取的 blob 数据量超过此大小时,将执行事务的所有挂起 blob 读取操作。
- 签名
void setMaxPendingBlobReadBytes ( Uint32 bytes )
- 参数
批处理大小,以
bytes
计。使用 0 将导致禁用 blob 读取批处理,这是默认行为(为了向后兼容)。- 返回值
无.
blob 读取批处理也可以在 mysql 客户端和其他 MySQL 客户端应用程序中使用 MySQL 服务器的 --ndb-blob-read-batch-bytes
选项及其关联的 MySQL 服务器系统变量进行控制。
- 描述
设置 blob 写入操作的字节批处理大小。当给定事务中要写入的 blob 数据量超过此大小时,将执行事务的所有挂起 blob 写入操作。
- 签名
void setMaxPendingBlobWriteBytes ( Uint32 bytes )
- 参数
批处理大小,以
bytes
计。使用 0 将导致禁用 blob 写入批处理,这是默认行为(为了向后兼容)。- 返回值
无.
在 NDB 8.0.30 及更高版本中,也可以在 mysql 客户端和其他 MySQL 客户端应用程序中通过将 MySQL 服务器的 ndb_replica_blob_write_batch_bytes
服务器系统变量设置为适当的值来控制 blob 写入批处理。请注意,当未设置 ndb_replica_blob_write_batch_bytes
时,有效的 blob 批处理大小(即 blob 列的挂起写入的最大字节数)由 ndb_replica_blob_write_batch_bytes
的默认值和为 --ndb-blob-write-batch-bytes
MySQL 服务器选项设置的值中的较大者决定。因此,您应该使用 ndb_replica_blob_write_batch_bytes
而不是 --ndb-blob-write-batch-bytes
。
在 NDB 8.0.30 之前,您必须使用 --ndb-blob-write-batch-bytes
选项或其关联的 MySQL 服务器系统变量之一,从 mysql 或其他 MySQL 客户端程序设置 blob 批处理大小。
- 描述
-
当使用多个
Ndb_cluster_connection
对象时,启用或禁用架构对象所有权检查。当此检查启用时,将检查此事务使用的对象以确保它们属于此连接拥有的NdbDictionary
。这是通过从连接中获取相同名称的架构对象并将它们与传递给事务的架构对象进行比较来完成的。如果它们不匹配,则会返回错误。此方法可用于调试目的。(Bug #19875977)请注意,启用此检查会带来性能损失,因此您应该避免在生产环境中这样做。
- 签名
void setSchemaObjOwnerChecks ( bool runChecks )
- 参数
单个参数
runChecks
。使用true
启用所有权检查,使用false
禁用它们。- 返回值
无.
- 描述
此方法在当前事务上创建一个解锁操作;执行后,解锁操作将删除由传递给方法的
NdbLockHandle
(参见 NdbOperation::getLockHandle)引用的锁。- 签名
const NdbOperation* unlock ( const NdbLockHandle* lockHandle, NdbOperation::AbortOption ao = NdbOperation::DefaultAbortOption )
- 参数
-
指向锁句柄的指针;此外,还可以选择一个
AbortOption
值ao
。如果解锁操作失败(例如,由于行已解锁),则
AbortOption
指定如何处理此问题,默认情况下,错误会导致事务中止。 - 返回值
指向
NdbOperation
(创建的解锁操作)的指针。
- 描述
使用
NdbRecord
对象更新元组。- 签名
const NdbOperation* updateTuple ( const NdbRecord* key_rec, const char* key_row, const NdbRecord* attr_rec, const char* attr_row, const unsigned char* mask = 0, const NdbOperation::OperationOptions* opts = 0, Uint32 sizeOfOptions = 0 )
- 参数
-
updateTuple()
接受以下参数key_rec
是指向表或索引的NdbRecord
的指针。如果在表上,则操作使用主键;如果在索引上,则操作使用唯一键。在这两种情况下,key_rec
必须包含键的所有列。传递给此方法的
key_row
定义了受影响元组的主键或唯一键,并且必须在调用execute()
之前保持有效。-
attr_rec
是一个NdbRecord
,引用要更新的属性。注意对于唯一索引操作,
attr_rec
必须引用索引的底层表,而不是索引本身。 attr_row
是一个包含更新新数据的缓冲区。如果
mask
不为NULL
,则它定义要更新的属性子集。该掩码被复制,因此在调用此方法返回后不需要保持有效。OperationOptions
(opts
) 可用于提供对操作定义的更细粒度控制。使用标志传递OperationOptions
结构,这些标志指示存在哪些操作定义选项。并非所有操作类型都支持所有操作选项;有关每种操作类型支持的选项,请参见 NdbTransaction::readTuple().可选的
sizeOfOptions
参数用于保持此接口与之前定义的OperationOptions
结构的向后兼容性。如果接口实现检测到异常大小,它可以使用此参数来确定如何解释传递的OperationOptions
结构。要启用此功能,调用方应为此参数传递sizeof(NdbOperation::OperationOptions)
。
- 返回值
表示此操作的
NdbOperation
(可用于检查错误)。
- 描述
此方法与
NdbRecord
一起使用来写入数据元组。- 签名
const NdbOperation* writeTuple ( const NdbRecord* key_rec, const char* key_row, const NdbRecord* attr_rec, const char* attr_row, const unsigned char* mask = 0, const NdbOperation::OperationOptions* opts = 0, Uint32 sizeOfOptions = 0 )
- 参数
-
此方法采用以下参数
key_rec
是指向表或索引的NdbRecord
的指针。如果在表上,则操作使用主键;如果在索引上,则操作使用唯一键。在这两种情况下,key_rec
必须包含键的所有列。传递给此方法的
key_row
定义要写入的元组的主键或唯一键,并且必须在调用execute()
之前保持有效。-
attr_rec
是一个NdbRecord
,引用要写入的属性。对于唯一索引操作,
attr_rec
必须引用索引的底层表,而不是索引本身。 attr_row
是一个包含新数据的缓冲区。如果
mask
不为NULL
,则它定义要写入的属性子集。该掩码被复制,因此在调用此方法返回后不需要保持有效。OperationOptions
(opts
) 可用于提供对操作定义的更细粒度控制。使用标志传递OperationOptions
结构,这些标志指示存在哪些操作定义选项。并非所有操作类型都支持所有操作选项;有关每种操作类型支持的选项,请参见 NdbTransaction::readTuple().可选的
sizeOfOptions
参数用于提供此接口与OperationOptions
结构的先前定义之间的向后兼容性。如果接口实现检测到不寻常的大小,则可以使用它来确定如何解释传递的OperationOptions
结构。要启用此功能,调用者应为该参数的值传递sizeof(NdbOperation::OperationOptions)
。
- 返回值
指向表示此写入操作的
NdbOperation
的const
指针。如果需要,可以检查操作是否有错误。