本节提供有关
NdbOperation
该类的信息。
从 NDB 8.0.30 开始,NdbOperation
支持类似于
NdbInterpretedCode
. 有关详细信息,请参阅
NdbOperation 解释代码 API。
- 家长班
没有任何
- 儿童班
- 描述
NdbOperation
表示 “通用”数据操作。它的子类代表更具体的操作类型。有关操作类型及其相应子类的列表, 请参阅 NdbOperation::TypeNdbOperation
。- 方法
-
下表列出了该类的公共方法以及每个方法的用途或用途:
表 2.48 NdbOperation 类方法和说明
此类没有公共构造函数。要创建 的实例
NdbOperation
,您必须使用NdbTransaction::getNdbOperation()
。 - 类型
-
该类
NdbOperation
定义了三种公共类型,如下表所示:
有关使用 的更多信息
NdbOperation
,请参阅
第 1.4.2.3.2 节,“单行操作”。
NdbOperation
在 NDB 8.0.30 及更高版本中支持类似于与
NdbInterpretedCode
.
首先,使用 、 或 之一
updateTuple()
将
writeTuple()
操作
deleteTuple()
定义为给定类型的操作(更新、写入或删除)。这是由解释程序执行的操作;解释程序本身由各种寄存器、比较和分支指令组装而成。
被解释的程序不是一个单独的
NdbInterpretedCode
对象,尽管它的行为很像一个对象。指令分配给NdbOperation
实例(例如,
myNdbOp->branch_col_lt(col1id, val1, col2id,
val2)
)。要运行解释后的程序,请调用
NdbTransaction::execute()
.
NdbOperation
解释代码 API 实现与 支持的 API 实现
之间的另一个区别NdbInterpretedCode
是类似方法的参数顺序不一定相同。此处列出了一对这样的方法:
-
在 中,比较是这样进行的,使用传递给方法的第二个和第一个参数,顺序如下:
NdbOperation::branch_col_lt(
ColId
,val
,len
,bool
,Label
)if(val < ColId_value) branch_to Label
-
NdbInterpretedCode::branch_col_lt(
, 将传递的第一个参数与第三个参数进行比较,如下所示:*val
, Uint32,attrId
,Label
)if(val < attrId_value) branch_to Label
分支列方法比较。
分支列方法,例如
branch_col_le()
将提供的值与列的值进行比较。这些方法从右到左作用于前两个参数,因此,例如,branch_col_le(myColId, myValue, 8,
true, myLabel)
如下面的伪代码所示:
if(myValue <= value(myColId))
goto myLabel;
按位逻辑比较。 这些比较类型仅支持位域类型,可用于根据位模式测试位域列。传入的值是一个位掩码,它与列数据进行按位与运算。位字段作为 32 位字传入和传出 NDB API,位设置为从最低有效位 (LSB) 到最高有效位 (MSB)。平台的字节序控制哪个字节包含 LSB:对于 x86,这是第一个(第 0)字节;对于 SPARC 和 PPC 平台,它是最后一个(第 3 个)字节。
您可以像这样
n
从掩码中将位掩码的位设置为 1 :Uint32*
mask[n >> 5] |= (1 << (n & 31))
此处列出的方法支持四种不同类型的按位比较分支:
branch_col_and_mask_eq_mask()
:分支如果column value AND mask == mask
(所有屏蔽位设置值)。branch_col_and_mask_ne_mask()
column value AND mask != mask
:如果(并非所有屏蔽位都设置为值) 分支。branch_col_and_mask_eq_zero()
column value AND mask == 0
:如果(值中没有设置屏蔽位)则 分支。branch_col_and_mask_ne_zero()
:分支如果column value AND mask != 0
(一些屏蔽位设置值)。
有关详细信息,请参阅各个方法的说明。
本节提供有关
AbortOption
数据类型的信息。
- 描述
此类型用于确定失败的操作是否应强制中止事务。它用作该
execute()
方法的参数——有关更多信息,请参阅 NdbTransaction::execute()。- 枚举值
-
下表显示了可能的值以及说明:
表 2.50 NdbOperation::AbortOption 类型值和描述
姓名 描述 AbortOnError
失败的操作会导致事务中止。 AO_IgnoreOnError
失败的操作被忽略;事务继续执行。 DefaultAbortOption
该 AbortOption
值根据操作类型设置:读取操作:
AO_IgnoreOnError
扫描接管或 DML 操作:
AbortOnError
有关更多信息,请参阅NdbTransaction::execute()。
- 描述
添加两个寄存器的内容;将结果存储在第三个寄存器中。
- 签名
int add_reg ( Uint32 RegSource1, Uint32 RegSource2, Uint32 RegDest )
- 参数
-
RegSource1
包含要添加的第一个值的寄存器。
-
RegSource2
包含要添加的第二个值的寄存器。
-
RegDest
注册用于存储结果。
-
- 返回值
0 成功,否则 -1。
- 描述
如果指定的列是 ,则分支到解释程序中的标签
NULL
。- 签名
int branch_col_eq_null ( Uint32 ColId, Uint32 Label )
- 参数
-
ColId
要检查的列的 ID。
-
参数
Label
_ 如果列是 则跳转到的标签
NULL
。
-
- 返回值
0 成功,否则 -1。
- 描述
如果指定的列不是 ,则分支到解释程序中的标签
NULL
。- 签名
int branch_col_ne_null ( Uint32 ColId, Uint32 Label )
- 参数
-
ColId
要检查的列的 ID。
-
参数
Label
_ 如果列不是 则跳转到的标签
NULL
。
-
- 返回值
没有任何
- 描述
-
如果给定值等于指定列的值,则分支到解释程序中的标签。
笔记与其他
NdbOperation::branch_col_*()
方法 一样branch_col_eg()
,按顺序将其第二个参数与第一个参数进行比较。 - 签名
int branch_col_eq ( Uint32 ColId, const void* val, Uint32 len, bool, Uint32 Label )
- 参数
-
ColId
要比较的列的 ID。
-
val
要比较的值。
-
len
的长度
val
。-
-
布尔值
true
或false
由于遗留原因需要,但不再使用。-
Label
val
如果等于列值 ,则跳转到的标签。
-
- 返回值
0 成功,-1 否则。
- 描述
-
如果给定值不等于指定列的值,则分支到解释程序中的标签。
笔记与其他
NdbOperation::branch_col_*()
方法 一样branch_col_ne()
,按顺序将其第二个参数与第一个参数进行比较。 - 签名
int branch_col_ne ( Uint32 ColId, const void* val, Uint32 len, bool, Uint32 Label )
- 参数
-
ColId
要比较的列的 ID。
-
val
要比较的值。
-
len
的长度
val
。-
-
布尔值
true
或false
由于遗留原因需要,但不再使用。-
Label
如果列值不等于 则跳转到的标签
val
。
-
- 返回值
0 成功,否则 -1。
- 描述
-
如果给定值小于列值,则分支到解释程序中的标签。
笔记与其他
NdbOperation::branch_col_*()
方法 一样branch_col_lt()
,按顺序将其第二个参数与第一个参数进行比较。 - 签名
int branch_col_lt ( Uint32 ColId, const void* val, Uint32 len, bool, Uint32 Label )
- 参数
-
ColId
要比较的列的 ID。
-
val
要比较的值。
-
len
的长度
val
。-
-
布尔值
true
或false
由于遗留原因需要,但不再使用。-
Label
val
如果小于列值 ,则跳转到的标签。
-
- 返回值
0 成功,否则 -1。
- 描述
-
如果给定值小于或等于列值,则分支到解释程序中的标签。
笔记与其他
NdbOperation::branch_col_*()
方法 一样branch_col_le()
,按顺序将其第二个参数与第一个参数进行比较。 - 签名
int branch_col_le ( Uint32 ColId, const void* val, Uint32 len, bool, Uint32 Label )
- 参数
-
ColId
要比较的列的 ID。
-
val
要比较的值。
-
len
的长度
val
。-
-
布尔值
true
或false
由于遗留原因需要,但不再使用。-
Label
val
如果小于或等于列值 ,则跳转到的标签。
-
- 返回值
成功时,0;否则,-1。
- 描述
-
如果给定值大于列值,则分支到解释程序中的标签。
笔记与其他
NdbOperation::branch_col_*()
方法 一样branch_col_gt()
,按顺序将其第二个参数与第一个参数进行比较。 - 签名
int branch_col_gt ( Uint32 ColId, const void* val, Uint32 len, bool, Uint32 Label )
- 参数
-
ColId
要比较的列的 ID。
-
val
要比较的值。
-
len
的长度
val
。-
-
布尔值
true
或false
由于遗留原因需要,但不再使用。-
Label
val
如果大于列值 ,则跳转到的标签。
-
- 返回值
0 成功,-1 否则。
- 描述
-
如果给定值大于或等于列值,则分支到解释程序中的标签。
笔记与其他
NdbOperation::branch_col_*()
方法 一样branch_col_ge()
,按顺序将其第二个参数与第一个参数进行比较。 - 签名
int branch_col_ge ( Uint32 ColId, const void* val, Uint32 len, bool, Uint32 Label )
- 参数
-
ColId
要比较的列的 ID。
-
val
要比较的值。
-
len
的长度
val
。-
-
布尔值
true
或false
由于遗留原因需要,但不再使用。-
Label
val
如果大于或等于列值 ,则跳转到的标签。
-
- 返回值
0 如果成功,否则 -1。
- 描述
-
如果列值与通配符模式匹配,则分支。此方法和
branch_col_notlike()
每个方法都支持 MySQLLIKE
运算符使用的通配符:%
用于 0 个或多个字符的任何字符串,以及_
任何单个字符。 - 签名
int branch_col_like ( Uint32 ColId, const void* val, Uint32 len, bool, Uint32 Label )
- 参数
-
ColId
要比较其值的列的 ID。
-
val
要匹配的模式。
-
len
模式值的长度。
-
-
布尔值
true
或false
由于遗留原因需要,但不再使用。-
Label
如果列值与模式匹配则跳转到的标签。
-
- 返回值
0 成功,否则 -1。
- 描述
-
如果列值与给定的通配符模式不匹配,则分支。此方法和 每个方法都支持与 MySQL运算符
branch_col_like()
相同的通配符%
(0 个或多个字符)和(任何一个字符) 。_
LIKE
- 签名
int branch_col_notlike ( Uint32 ColId, const void* val, Uint32 len, bool, Uint32 Label )
- 参数
-
ColId
要比较其值的列的 ID。
-
val
要匹配的模式。
-
len
模式值的长度。
-
-
布尔值
true
或false
由于遗留原因需要,但不再使用。-
Label
如果列值与模式不匹配则跳转到的标签。
-
- 返回值
0 成功,-1 否则。
- 描述
-
如果具有位掩码的逻辑按
AND
位列的值等于位掩码,则分支。另请参阅 按位逻辑比较。
- 签名
int branch_col_and_mask_eq_mask ( Uint32 ColId, const void* mask, Uint32 len, bool, Uint32 Label )
- 参数
-
ColId
使用具有此 ID 的列的值。
-
mask
与列值进行比较的位掩码。
-
len
的长度
mask
。-
-
布尔值
true
或false
由于遗留原因需要,但不再使用。-
Label
AND
如果操作结果与掩码相同,则 跳转到的分支 。
-
- 返回值
0 成功,-1 否则。
- 描述
-
如果具有位掩码的逻辑按
AND
位列的值不等于位掩码,则分支。另请参阅 按位逻辑比较。
- 签名
int branch_col_and_mask_ne_mask ( Uint32 ColId, const void* mask, Uint32 len, bool, Uint32 Label )
- 参数
-
ColId
使用具有此 ID 的列的值。
-
mask
与列值进行比较的位掩码。
-
len
的长度
mask
。-
-
布尔值
true
或false
由于遗留原因需要,但不再使用。-
Label
AND
如果操作结果不等于掩码 ,则跳转到的分支 。
-
- 返回值
成功 0,否则 -1。
- 描述
-
如果具有位掩码的逻辑按
AND
位列的值等于 0,则分支。另请参阅 按位逻辑比较。
- 签名
int branch_col_and_mask_eq_zero ( Uint32 ColId, const void* mask, Uint32 len, bool, Uint32 Label )
- 参数
-
ColId
使用具有此 ID 的列的值。
-
mask
与列值进行比较的位掩码。
-
len
的长度
mask
。-
-
布尔值
true
或false
由于遗留原因需要,但不再使用。-
Label
AND
如果运算结果等于 0 ,则跳转到的分支 。
-
- 返回值
0 成功,-1 否则。
- 描述
-
如果具有位掩码的逻辑按
AND
位列的值不等于 0,则分支。另请参阅 按位逻辑比较。
- 签名
int branch_col_and_mask_ne_zero ( Uint32 ColId, const void* mask, Uint32 len, bool, Uint32 Label )
- 参数
-
ColId
使用具有此 ID 的列的值。
-
mask
与列值进行比较的位掩码。
-
len
的长度
mask
。-
-
布尔值
true
或false
由于遗留原因需要,但不再使用。-
Label
AND
如果操作的结果不等于 0 ,则跳转到的分支 。
-
- 返回值
成功返回 0,否则返回 -1。
- 描述
-
在解释程序中定义搜索条件。将右侧寄存器值与左侧进行比较;如果 RH 值大于或等于 LH 值,则分支到标签。
笔记该方法与比较方法的其他
NdbOperation
分支一样,从右到左比较两个寄存器值。 - 签名
int branch_ge ( Uint32 RegLvalue, Uint32 RegRvalue, Uint32 Label )
- 参数
-
RegLvalue
寄存器值与
RegRvalue
.-
RegRvalue
将该寄存器的值与
RegLvalue
; 如果此值大于或等于 ,则分支到标签RegLvalue
。-
Label
RegRvalue
如果大于或等于 则分支到的标签RegLvalue
。
-
- 返回值
0 成功,-1 否则。
- 描述
-
在解释程序中定义搜索条件。将右侧寄存器值与左侧进行比较;如果 RH 值大于 LH 值,则分支到标签。
笔记该方法与比较方法的其他
NdbOperation
分支一样,从右到左比较两个寄存器值。 - 签名
int branch_gt ( Uint32 RegLvalue, Uint32 RegRvalue, Uint32 Label )
- 参数
-
RegLvalue
寄存器值与
RegRvalue
.-
RegRvalue
将该寄存器的值与
RegLvalue
; 如果此值大于 ,则分支到标签RegLvalue
。-
Label
RegRvalue
如果大于 则分支到的标签RegLvalue
。
-
- 返回值
0 成功,-1 否则。
- 描述
-
在解释程序中定义搜索条件。将右侧寄存器值与左侧进行比较;如果 RH 值小于 LH 值,则分支到标签。
笔记该方法与比较方法的其他
NdbOperation
分支一样,从右到左比较两个寄存器值。 - 签名
int branch_le ( Uint32 RegLvalue, Uint32 RegRvalue, Uint32 Label )
- 参数
-
RegLvalue
寄存器值与
RegRvalue
.-
RegRvalue
将该寄存器的值与
RegLvalue
; 如果此值小于 ,则分支到标签RegLvalue
。-
Label
RegRvalue
如果小于 则分支到的标签RegLvalue
。
-
- 返回值
0 成功,-1 否则。
- 描述
-
在解释程序中定义搜索条件。将右侧寄存器值与左侧进行比较;如果 RH 值小于或等于 LH 值,则分支到标签。
笔记该方法与比较方法的其他
NdbOperation
分支一样,从右到左比较两个寄存器值。 - 签名
int branch_lt ( Uint32 RegLvalue, Uint32 RegRvalue, Uint32 Label )
- 参数
-
RegLvalue
寄存器值与
RegRvalue
.-
RegRvalue
将该寄存器的值与
RegLvalue
; 如果此值小于或等于 ,则分支到标签RegLvalue
。-
Label
RegRvalue
如果小于或等于, 则分支到的标签RegLvalue
。
-
- 返回值
0 成功,-1 否则。
- 描述
当两个寄存器值相等时,分支到解释程序中的标签。
- 签名
int branch_eq ( Uint32 RegLvalue, Uint32 RegRvalue, Uint32 Label )
- 参数
-
RegLvalue
要比较的两个寄存器值之一。
-
RegRvalue
要比较的另一个寄存器值。
-
Label
如果寄存器值相等,则分支到该标签。
-
- 返回值
0 成功,-1 否则。
- 描述
当两个寄存器值不相等时,在解释程序中分支到标签。
- 签名
int branch_eq ( Uint32 RegLvalue, Uint32 RegRvalue, Uint32 Label )
- 参数
-
RegLvalue
要比较的两个寄存器值之一。
-
RegRvalue
要比较的另一个寄存器值。
-
Label
如果寄存器值不相等,则分支到该标签。
-
- 返回值
0 成功,否则 -1。
- 描述
如果寄存器值不是 ,则分支到已插入程序中的标签
NULL
。- 签名
int branch_ne_null ( Uint32 RegLvalue, Uint32 Label )
- 参数
-
RegLvalue
注册以进行测试。
-
Label
RegLvalue
如果不是 ,则分支到此标签NULL
。
-
- 返回值
成功返回0;否则,返回 -1。
- 描述
如果寄存器值为 ,则分支到插入程序中的标签
NULL
。- 签名
int branch_ne_null ( Uint32 RegLvalue, Uint32 Label )
- 参数
-
RegLvalue
注册以进行测试。
-
Label
RegLvalue
如果是 , 分支到这个标签NULL
。
-
- 返回值
成功时,0;否则,-1。
- 描述
在一个被解释的程序中调用一个子程序。
- 签名
int call_sub ( Uint32 Subroutine )
- 参数
-
Subroutine
子程序编号。
-
- 返回值
成功则返回0;否则,返回 -1。
- 描述
在解释操作中定义跳转标签。标签自动从 0 开始编号。
- 签名
int def_label ( int labelNumber )
- 参数
-
labelNumber
标签编号。为了更容易调试,这应该与 执行的自动编号相匹配
NDB
。
-
- 返回值
labelNumber
成功,-1 否则。
- 描述
在解释程序中定义一个子程序。
- 签名
int def_subroutine ( int SubroutineNumber )
- 参数
-
SubroutineNumber
子程序编号。
-
- 返回值
0 成功,-1 否则。
- 描述
此方法将 定义
NdbOperation
为一个DELETE
操作。NdbTransaction::execute()
调用 该方法时 ,该操作会从表中删除一个元组。- 签名
virtual int deleteTuple ( void )
- 参数
没有。
- 返回值
0
成功 返回,-1
失败返回。
- 描述
-
此方法定义具有相等性的搜索条件。如果属性具有给定值,则条件为真。要在多个属性上设置搜索条件,请多次调用
equal()
; 在这种情况下,必须满足所有这些条件才能选择元组。如果属性是固定大小,则其值必须包括所有字节。特别是一个
Char
值必须是原生空间填充的。如果该属性的大小可变,则其值必须以 1 或 2 个小端长度字节开头(如果其类型为 ,则为 2Long*
)。使用 时
insertTuple()
,您还可以使用 定义搜索键setValue()
。请参阅NdbOperation::setValue()。 - 签名
-
有 10 个版本
equal()
,每个版本的参数略有不同。所有这些都显示在这里:int equal ( const char* name, const char* value ) int equal ( const char* name, Int32 value ) int equal ( const char* name, Uint32 value ) int equal ( const char* name, Int64 value ) int equal ( const char* name, Uint64 value ) int equal ( Uint32 id, const char* value ) int equal ( Uint32 id, Int32 value ) int equal ( Uint32 id, Uint32 value ) int equal ( Uint32 id, Int64 value ) int equal ( Uint32 id, Uint64 value )
- 参数
-
该方法需要两个参数:
-
第一个参数可以是以下之一:
name
属性的(字符串 )属性的
id
(无符号 32 位整数)
-
第二个参数是
value
要测试的属性。该值可以是以下5种类型中的任意一种:细绳
32 位整数
无符号 32 位整数
64 位整数
无符号 64 位整数
-
- 返回值
-1
发生错误时 返回。
- 描述
此方法用于代替
getValue()
或setValue()
用于 blob 属性。它创建一个 blob 句柄(NdbBlob
对象)。使用相同参数的第二次调用返回先前创建的句柄。手柄与操作联动,自动维护。- 签名
-
此方法有两种形式,具体取决于它是使用 blob 属性的名称还是 ID 调用的:
virtual NdbBlob* getBlobHandle ( const char* name )
或者
virtual NdbBlob* getBlobHandle ( Uint32 id )
- 参数
-
此方法采用单个参数,该参数可以是以下之一:
name
属性 的id
属性 的
- 返回值
无论使用何种参数类型,此方法都会返回一个指向 的实例的指针
NdbBlob
。
- 描述
返回指向当前操作的锁句柄的指针。与 一起使用时
NdbRecord
,必须首先使用OO_LOCKHANDLE
操作选项请求锁定句柄。对于其他操作,可以单独使用此方法。在任何情况下,NdbLockHandle
该方法返回的对象在操作执行之前都不能使用。- 签名
-
const NdbLockHandle* getLockHandle ( void ) const
或者
const NdbLockHandle* getLockHandle ( void )
- 参数
没有。
- 返回值
指向 方法 和
NdbLockHandle
可以使用的 的指针。NdbTransaction
unlock()
releaseLockHandle()
使用锁句柄方法。
事务中读取操作获取的共享锁或独占锁通常会一直持有,直到事务提交或中止。通过在定义读取操作时请求锁句柄,可以在事务提交或中止之前释放此类锁。执行读取操作后,
NdbLockHandle
可以使用 an 创建新的解锁操作(使用
NdbTransaction::unlock()
)。当执行解锁操作时,释放读操作放置的行锁。
此处列出了释放这些锁所需的步骤:
LockMode
使用set toLM_Read
或 以正常方式定义主键读取操作LM_Exclusive
。NdbOperation::getLockHandle()
在操作定义期间 调用 ,或者,对于Ndbrecord
,在调用 时设置OO_LOCKHANDLE
操作选项NdbTransaction::readTuple()
。打电话
NdbTransaction::execute()
;从这一点开始,该行现在像往常一样被锁定。(使用数据,可能调用
NdbTransaction::execute()
。)调用
NdbTransaction::unlock()
,传入const NdbLockHandle
之前获得的以创建解锁操作。打电话
NdbTransaction::execute()
;这将解锁该行。
笔记:
- 描述
此方法获取操作的锁定模式。
- 签名
LockMode getLockMode ( void ) const
- 参数
没有。
- 返回值
一个
LockMode
值。请参阅 NdbOperation::LockMode。
- 描述
此方法用于检索与操作关联的表对象。
- 签名
const NdbDictionary::Table* getTable ( void ) const
- 参数
没有。
- 返回值
指向 的实例的指针
Table
。
- 描述
获取
NdbTransaction
此操作的对象。- 签名
virtual NdbTransaction* getNdbTransaction ( void ) const
- 参数
没有。
- 返回值
指向
NdbTransaction
对象的指针。
- 描述
-
此方法准备检索属性值。
NdbRecAttr
NDB API为稍后用于获取属性值的对象分配内存 。这可以通过使用许多NdbRecAttr
访问器方法中的一种来完成,要使用的确切方法取决于属性的数据类型。(这包括通用NdbRecAttr::aRef()
方法,它将数据检索为char*
,而不管其实际类型如何。您应该知道这不是类型安全的,需要用户进行显式转换。)该方法不从数据库中获取属性值;此方法返回的
NdbRecAttr
对象在调用 之前不可读或不可打印NdbTransaction::execute()
。如果特定属性未更改,则相应
NdbRecAttr
的具有 stateUNDEFINED
。这可以通过使用来检查NdbRecAttr::isNULL()
,在这种情况下返回-1
。 - 签名
-
此方法有三个版本,每个版本都有不同的参数:
NdbRecAttr* getValue ( const char* name, char* value = 0 ) NdbRecAttr* getValue ( Uint32 id, char* value = 0 ) NdbRecAttr* getValue ( const NdbDictionary::Column* col, char* value = 0 )
- 参数
-
此方法的所有三种形式都有两个参数,第二个参数是可选的(默认为
0
)。它们仅在第一个参数的类型方面有所不同,可以是以下任何一个:属性
name
属性
id
column
定义属性 的表
在所有这三种情况下,第二个参数都是一个字符缓冲区,其中
NULL
返回一个非属性值。如果属性是NULL
,它是否仅存储在NdbRecAttr
此方法返回的对象中。如果
value
在getValue()
方法调用中未指定 no,或者如果将 0 作为值传递,则该NdbRecAttr
对象提供内存管理以存储接收到的数据。如果接收到的数据的最大大小大于一个小的固定大小,malloc()
则用于存储它:对于小的大小,提供一个小的、固定的内部缓冲区(范围为 32 字节)。该存储由NdbRecAttr
实例管理;它在操作被释放时被释放,例如在事务关闭时;在释放内存之前,您希望保留的任何写入此处的数据都应复制到其他地方。如果为 传递一个非零指针
value
,则假定 this 指向足以容纳列最大值的内存部分;任何返回的数据都写入该位置。指针应至少对齐 32 位。使用此方法不能使用索引列代替表列。在表列不可用的情况下,您可以使用通过 获得的属性名称
getName()
来代替。 - 返回值
指向
NdbRecAttr
保存属性值的对象的NULL
指针,或指示错误的指针。
检索整数。 value
可以从作为此方法的第二个参数传递的缓冲区和
NdbRecAttr
对象本身
检索整数值
。另一方面,
NdbRecAttr
如果没有缓冲区被传递到getValue()
(参见
NdbRecAttr::aRef()),字符数据是可用的。但是,仅当提供一个字符数据时才会将字符数据写入缓冲区,在这种情况下无法从
NdbRecAttr
返回的对象中检索到。在后一种情况下,
NdbRecAttr::aRef()
返回一个指向空字符串的缓冲区。
访问位值。
以下示例显示如何检查
value
缓冲区中的给定位。这里,
op
是一个操作(NdbOperation
对象),
name
是从中获取位值的列的名称,并且trans
是一个
NdbTransaction
对象:
Uint32 buf[];
op->getValue(name, buf); /* bit column */
trans->execute();
if(buf[X/32] & 1 << (X & 31)) /* check bit X */
{
/* bit X set */
}
本节提供有关
GetValueSpec
数据结构的信息。
- 家长班
- 描述
此结构用于指定要作为操作的一部分获取的额外值
NdbRecord
。- 成员
-
构成该结构的元素如下表所示:
表 2.51 GetValueSpec 结构成员名称、类型和说明
姓名 类型 描述 column
const
Column
*要指定要读取的额外值,调用者必须提供 this 以及(可选 NULL
)appStorage
指针。appStorage
void*
如果此指针为空,则接收到的值存储在 NdbRecAttr
对象管理的内存中。否则,接收到的值存储在指向的位置(并且仍然可以使用该NdbRecAttr
对象访问)。重要的调用者有责任确保满足以下条件:
appStorage
指向足够的空间来存储任何返回的数据。在调用返回
appStorage
之前,不会重用或释放 指向的内存 。execute()
recAttr
NdbRecAttr
*定义操作后, recAttr
包含一个指向NdbRecAttr
用于接收数据的对象的指针。无法使用 指定 Blob 读取
GetValueSpec
。
有关详细信息,请参阅第 2.3.22 节,“NdbRecord 接口”。
- 描述
-
向属性添加值的解释程序指令。属性可以按名称或 ID 指定。因此,此方法有四个版本,参数略有不同,如 Signature下所示。
该指令使用寄存器 6 和 7,并在其操作过程中覆盖这些寄存器。
对于扫描和
NdbRecord
操作,请改用NdbInterpretedCode
界面。 - 签名
-
int incValue ( const char* anAttrName, Uint32 aValue )
int incValue ( const char* anAttrName, Uint64 aValue )
int incValue ( Uint32 anAttrId, Uint32 aValue )
int incValue ( Uint32 anAttrId, Uint64 aValue )
- 参数
-
anAttrName
属性的名称。
-
anAttrId
属性标识。
-
aValue
要增加的价值;这可以是 32 位或 64 位整数。
-
- 返回值
0 成功,-1 否则。
- 描述
此方法将 定义
NdbOperation
为一个INSERT
操作。调用该NdbTransaction::execute()
方法时,此操作会向表中添加一个新元组。- 签名
virtual int insertTuple ( void )
- 参数
没有。
- 返回值
0
成功 返回,-1
失败返回。
- 描述
退出带有状态
NOT OK
和可选错误代码的解释程序(请参阅 第 2.4.2 节,“NDB 错误代码:按类型”)。- 签名
int interpret_exit_nok ( Uint32 ErrorCode ) int interpret_exit_nok ( void )
- 参数
- 返回值
0 成功,-1 否则。
- 描述
将 32 位常量值加载到寄存器中。
- 签名
int load_const_u32 ( Uint32 RegDest, Uint32 Constant )
- 参数
-
RegDest
目的地登记。
-
Constant
要加载到寄存器中的值。
-
- 返回值
0 成功,-1 否则。
- 描述
将 64 位常量值加载到寄存器中。
- 签名
int load_const_u64 ( Uint64 RegDest, Uint64 Constant )
- 参数
-
RegDest
目的地登记。
-
Constant
要加载到寄存器中的值。
-
- 返回值
0 成功,否则 -1。
本节提供有关
OperationOptions
数据结构的信息。
- 家长班
- 描述
-
这些选项被传递给 和 类
NdbRecord
中定义的基于主键和扫描的接管操作方法 。NdbTransaction
NdbScanOperation
大多数
NdbTransaction::*Tuple()
方法(请参阅第 2.3.25 节,“NdbTransaction 类”)采用补充sizeOfOptions
参数。这是可选的,旨在允许接口实现与旧的未重新编译的客户端保持向后兼容,这些客户端可能会传递旧(较小)版本的OperationOptions
结构。这个效果是通过传入sizeof(OperationOptions)
这个参数来实现的。通过在 中设置相应的位来将每个选项类型标记为存在
optionsPresent
。(只有标记为optionsPresent
需要的选项类型具有敏感数据。)所有数据都OperationOptions
在操作定义时从结构(和任何对向结构)中复制出来。如果不需要任何选项,则NULL
可以改为传递。 - 成员
-
构成该结构的元素如下表所示:
表 2.53 NdbOperation::OperationOptions 结构成员名称、类型和描述
姓名 类型 描述 optionsPresent
Uint64
存在哪些标志。 [...] Flags
:接受的名称和值显示在以下列表中:
OO_ABORTOPTION
:0x01
OO_GETVALUE
:0x02
OO_SETVALUE
:0x04
OO_PARTITION_ID
:0x08
OO_INTERPRETED
:0x10
OO_ANYVALUE
:0x20
OO_CUSTOMDATA
:0x40
OO_LOCKHANDLE
:0x80
-
OO_QUEUABLE
0x100
-
OO_NOT_QUEUABLE
0x200
-
OO_DEFERRED_CONSTAINTS
0x400
-
OO_DISABLE_FK
0x800
-
OO_NOWAIT
0x1000
标志类型。 abortOption
AbortOption
特定于操作的中止选项;仅当默认的中止行为不令人满意时才需要。 extraGetValues
GetValueSpec
要读取的额外列值。 numExtraGetValues
Uint32
要读取的额外列值的数量。 extraSetValues
SetValueSpec
要设置的额外列值。 numExtraSetValues
Uint32
要设置的额外列值的数量。 partitionId
Uint32
将扫描限制在具有此 ID 的分区;或者,您可以在 PartitionSpec
此处提供。对于索引扫描,可以为每个范围提供分区信息。interpretedCode
NdbInterpretedCode
作为扫描的一部分执行的解释代码。 anyValue
Uint32
anyValue
用于此操作的。NDB Cluster Replication 使用它来存储 SQL 节点的服务器 ID。通过将--server-id-bits
选项(这会导致只有一些 的server_id
位用于唯一标识它)设置为小于 32 来启动 SQL 节点,剩余的位可用于存储用户数据。customData
void*
与此操作关联的数据指针。 partitionInfo
PartitionSpec
用于限制此扫描的分区信息。 sizeOfPartInfo
Uint32
边界分区信息的大小。
有关详细信息,请参阅第 2.3.22 节,“NdbRecord 接口”。
- 描述
将由名称或 ID 标识的属性读入寄存器。
- 签名
int read_attr ( const char* anAttrName, Uint32 RegDest ) int read_attr ( Uint32 anAttrId, Uint32 RegDest )
- 参数
-
anAttrName
属性名称。使用此 ID 或属性 ID。
-
anAttrId
属性标识。使用这个或属性的名称。
-
RegDest
目的地登记。
-
- 返回值
成功时,0;否则,-1。
- 描述
此方法将 定义
NdbOperation
为一个READ
操作。NdbTransaction::execute()
调用 该方法时 ,该操作会读取一个元组。- 签名
virtual int readTuple ( LockMode mode )
- 参数
mode
指定读操作使用的锁定模式。有关可能的值,请参阅 NdbOperation::LockMode。- 返回值
0
成功 返回,-1
失败返回。
- 描述
-
此方法定义要设置或更新的属性。
有许多
NdbOperation::setValue()
方法将某种类型作为输入(按值传递而不是传递指针)。应用程序员有责任使用正确的类型。NDB API 会检查应用程序是否按照长度参数中给定的长度向接口发送了正确的长度。值
char*
可以包含任何数据类型或任何类型的数组。如果未提供长度,或者将其设置为零,则 API 会假定指针是正确的,并且不会对其进行检查。要设置一个
NULL
值,请使用以下构造:setValue("ATTR_NAME", (char*)NULL);
当您使用
insertTuple()
时,NDB API 会自动检测到应该使用它equal()
。此外,在使用时没有必要 在其他属性之前
insertTuple()
使用setValue()
关键属性。 - 签名
-
有 14 个版本
NdbOperation::setValue()
,每个版本的参数略有不同,如下所列:int setValue ( const char* name, const char* value ) int setValue ( const char* name, Int32 value ) int setValue ( const char* name, Uint32 value ) int setValue ( const char* name, Int64 value ) int setValue ( const char* name, Uint64 value ) int setValue ( const char* name, float value ) int setValue ( const char* name, double value ) int setValue ( Uint32 id, const char* value ) int setValue ( Uint32 id, Int32 value ) int setValue ( Uint32 id, Uint32 value ) int setValue ( Uint32 id, Int64 value ) int setValue ( Uint32 id, Uint64 value ) int setValue ( Uint32 id, float value ) int setValue ( Uint32 id, double value )
- 参数
-
该方法需要以下两个参数:
-
第一个参数标识要设置的属性,可以是以下之一:
属性
name
(字符串)属性
id
(无符号 32 位整数)
-
第二个参数是
value
要设置的属性;它的类型可以是以下7种类型中的任意一种:字符串 (
const char*
)32 位整数
无符号 32 位整数
64 位整数
无符号 64 位整数
双倍的
漂浮
有关值的格式和长度的重要信息, 请参阅NdbOperation::equal() 。
-
- 返回值
-1
失败时 返回。
本节提供有关
SetValueSpec
数据结构的信息。
无法使用 设置 Blob 值SetValueSpec
。
有关详细信息,请参阅第 2.3.22 节,“NdbRecord 接口”。
- 描述
将两个寄存器值的差值存储在第三个寄存器中。
- 签名
int sub_reg ( Uint32 RegSource1, Uint32 RegSource2, Uint32 RegDest )
- 参数
- 参数
-
RegSource1
包含要减去的值的寄存器。
-
RegSource2
包含要减去的值的寄存器。
-
RegDest
注册用于存储结果。
-
- 返回值
0 成功,否则 -1。
- 描述
-
解释性程序指令,它在解释性操作中从属性中减去一个值。属性可以按名称或 ID 指定。因此,此方法有四个版本,参数略有不同,如Signature下所示。
与 一样
incValue()
,该指令使用寄存器 6 和 7,并在其操作过程中覆盖这些寄存器。对于扫描和
NdbRecord
操作,请改用NdbInterpretedCode
界面。 - 签名
-
int subValue ( const char* anAttrName, Uint32 aValue )
int subValue ( const char* anAttrName, Uint64 aValue )
int subValue ( Uint32 anAttrId, Uint32 aValue )
int subValue ( Uint32 anAttrId, Uint64 aValue )
- 参数
-
anAttrName
属性名称
-
anAttrId
属性标识
-
aValue
要减去的值;这可以是 32 位或 64 位整数。
-
- 返回值
0 成功,-1 否则。
本节提供有关
Type
数据类型的信息。
- 描述
Type
用于描述操作访问类型。每种访问类型都NdbOperation
由其子类之一支持,如下表所示:- 枚举值
-
下表显示了可能的值以及说明:
表 2.55 NdbOperation::Type 数据类型值和描述
姓名 描述 适用班级 PrimaryKeyAccess
使用表的主键的读取、插入、更新或删除操作 NdbOperation
UniqueIndexAccess
使用唯一索引的读取、更新或删除操作 NdbIndexOperation
TableScan
全表扫描 NdbScanOperation
OrderedIndexScan
有序索引扫描 NdbIndexScanOperation
- 描述
此方法将 定义
NdbOperation
为一个UPDATE
操作。NdbTransaction::execute()
调用 该方法时 ,该操作会更新在表中找到的元组。- 签名
virtual int updateTuple ( void )
- 参数
没有。
- 返回值
0
成功 返回,-1
失败返回。
- 描述
从寄存器写入属性值。要写入的属性可以通过名称或 ID 指定。
- 签名
int write_attr ( const char* anAttrName, Uint32 RegSource ) int write_attr ( Uint32 anAttrId, Uint32 RegSource )
- 参数
-
anAttrName
属性名称。使用此 ID 或属性 ID。
-
anAttrId
属性标识。使用这个或属性的名称。
-
RegSource
源寄存器。
-
- 返回值
成功返回0;否则,返回 -1。
- 描述
此方法将 定义
NdbOperation
为一个WRITE
操作。调用该NdbTransaction::execute()
方法时,操作会将一个元组写入表中。如果元组已经存在,则更新;否则插入发生。- 签名
virtual int writeTuple ( void )
- 参数
没有。
- 返回值
0
成功 返回,-1
失败返回。