本节提供有关 NdbInterpretedCode 类的信息,该类可用于准备和执行 NDB API 解释程序。
- 父类
无.
- 子类
无.
- 描述
-
NdbInterpretedCode表示一个解释程序,用于在使用NdbRecord创建的操作中使用,或者使用旧 API 创建的扫描中使用。NdbScanFilter类也可以使用此类生成 NDB 解释程序。要创建
NdbInterpretedCode对象,请调用构造函数,可以选择性地提供程序要操作的表,以及用于程序存储和最终化的缓冲区。如果未提供表,则只能使用不访问表属性的指令。在 NDB 8.0 中,可以将Ndbrecord的实例用于此目的,以代替Table。每个 NDB API 操作都应用于一个表,因此任何与该操作关联的
NdbInterpretedCode程序也是如此。如果未提供缓冲区,则会动态分配内部缓冲区并根据需要进行扩展。创建
NdbInterpretedCode对象后,可以通过调用本节后面介绍的适当方法,向其添加指令和标签。程序完成后,通过调用finalise()方法对其进行最终化,这将解析任何剩余的内部分支以及对标签和子程序偏移量的调用。单个已最终化的
NdbInterpretedCode程序可以被多个操作使用。它不需要为后续操作重新准备。要在
NdbRecord操作和扫描中使用程序,请在操作定义时使用OperationOptions或ScanOptions参数传递它。当不再需要程序时,可以删除NdbInterpretedCode对象以及任何用户提供的缓冲区。有关更多信息和示例,请参见 第 1.6 节,“使用 NdbInterpretedCode”。
此接口仍在开发中,因此可能会在未经通知的情况下发生更改。
NdbScanFilterAPI 是一个更稳定的 API,用于定义扫描和过滤程序。 - 方法
-
下表列出了此类的公共方法以及每个方法的目的或用途
表 2.48 NdbInterpretedCode 类方法和描述
名称 描述 NdbInterpretedCode()类构造函数 add_reg()将两个寄存器值相加并将结果存储到第三个寄存器中 add_val()将一个值添加到表列值 branch_col_and_mask_eq_mask()如果列值 AND位掩码等于位掩码,则跳转branch_col_and_mask_eq_zero()如果列值 AND位掩码等于0,则跳转branch_col_and_mask_ne_mask()如果列值 AND位掩码不等于位掩码,则跳转branch_col_and_mask_ne_zero()如果列值 AND位掩码不等于0,则跳转branch_col_eq()如果列值等于另一个值,则跳转 branch_col_eq_param()如果列值等于提供的参数,则跳转 branch_col_eq_null()如果列值为 NULL,则跳转branch_col_ge()如果列值大于或等于另一个值,则跳转 branch_col_ge_param()如果列值大于或等于提供的参数,则跳转 branch_col_gt()如果列值大于另一个值,则跳转 branch_col_gt_param()如果列值大于提供的参数,则跳转 branch_col_le()如果列值小于或等于另一个值,则跳转 branch_col_like()如果列值与模式匹配,则跳转 branch_col_lt()如果列值小于另一个值,则跳转 branch_col_ne()如果列值不等于另一个值,则跳转 branch_col_ne_null()如果列值不为 NULL,则跳转branch_col_ne_param()如果列值不等于提供的参数,则跳转 branch_col_notlike()如果列值与模式不匹配,则跳转 branch_eq()如果一个寄存器值等于另一个值,则跳转 branch_eq_null()如果寄存器值为 NULL,则跳转branch_ge()如果一个寄存器值大于或等于另一个值,则跳转 branch_gt()如果一个寄存器值大于另一个值,则跳转 branch_label()无条件跳转到标签 branch_le()如果一个寄存器值小于或等于另一个值,则跳转 branch_col_le_param()如果列值大于或等于提供的参数,则跳转 branch_lt()如果一个寄存器值小于另一个值,则跳转 branch_col_lt_param()如果列值小于提供的参数,则跳转 branch_ne()如果一个寄存器值不等于另一个值,则跳转 branch_ne_null()如果寄存器值不为 NULL,则跳转call_sub()调用子程序 copy()对 NdbInterpretedCode对象进行深拷贝def_label()创建用于解释程序的标签 def_sub()定义子程序 finalise()完成解释程序并将其准备使用 getNdbError()获取与 NdbInterpretedCode对象相关联的最新错误getTable()获取定义程序的表 getWordsUsed()获取缓冲区中使用的单词数量 interpret_exit_last_row()返回结果中的行,并且不在此片段中检查更多行 interpret_exit_nok()不返回结果中的行 interpret_exit_ok()返回结果中的行 load_const_null()将 NULL值加载到寄存器中load_const_u16()将 16 位数值加载到寄存器中 load_const_u32()将 32 位数值加载到寄存器中 load_const_u64()将 64 位数值加载到寄存器中 read_attr()将表列值读入寄存器 reset()丢弃程序 ret_sub()从子程序返回 sub_reg()减去两个寄存器值并将结果存储在第三个寄存器中 sub_val()从表列值中减去一个值 write_attr()将寄存器值写入表列 出于效率原因,此类的函数提供了最少的错误检查。
- 类型
此类未定义任何公共类型。
- 描述
这是
NdbInterpretedCode类的构造函数。- 签名
NdbInterpretedCode ( const NdbDictionary::Table* table = 0, Uint32* buffer = 0, Uint32 buffer_word_size = 0 )- 备选构造函数(NDB 8.0)
NdbInterpretedCode ( const NdbRecord&, Uint32* buffer = 0, Uint32 buffer_word_size = 0);- 参数
-
NdbInterpretedCode构造函数接受三个参数,如下所述 - 返回值
NdbInterpretedCode的实例。
- 描述
此函数对任何两个给定寄存器中存储的值求和,并将结果存储在第三个寄存器中。
- 签名
int add_reg ( Uint32 RegDest, Uint32 RegSource1, Uint32 RegSource2 )- 参数
-
此函数接受三个参数。第一个参数是存储结果的寄存器 (
RegDest)。第二个和第三个参数 (RegSource1和RegSource2) 是要相加的值的寄存器。为了存储结果,可以使用要相加的值的寄存器之一;也就是说,
RegDest可以与RegSource1或RegSource2相同。 - 返回值
成功返回
0,失败返回-1。
- 描述
-
此函数将指定的值添加到给定表列的值,并将原始列值和修改后的列值分别放置在寄存器 6 和 7 中。它相当于以下一系列
NdbInterpretedCode函数调用,其中attrId是表列的属性 ID,aValue是要添加的值read_attr(6, attrId); load_const_u32(7, aValue); add_reg(7,6,7); write_attr(attrId, 7);aValue可以是 32 位或 64 位整数。 - 签名
-
根据
aValue是 32 位还是 64 位,此函数可以以两种方式中的任何一种方式调用。32 位
aValueint add_val ( Uint32 attrId, Uint32 aValue )64 位
aValueint add_val ( Uint32 attrId, Uint64 aValue ) - 参数
表列属性 ID 和一个要添加到此列值的 32 位或 64 位整数值。
- 返回值
成功返回
0,失败返回-1。
- 描述
此函数用于将
BIT列值与位掩码进行比较;如果列值AND与位掩码一起等于位掩码,则执行跳转到函数调用中指定的指定标签。- 签名
int branch_col_and_mask_eq_mask ( const void* mask, Uint32 unused, Uint32 attrId, Uint32 label )- 参数
-
此函数可以接受四个参数,其中三个实际上被使用。这些在以下列表中描述
指向要与列值进行比较的常量
mask的指针一个
Uint32值,目前unused。要比较的列的
attrId。-
如果条件为真,则跳转到的程序
label。在 NDB 8.0.30 之前,此参数对于非零值没有正确处理。(错误 #33888962)
- 返回值
此函数在成功时返回
0,在失败时返回-1。
- 描述
此函数用于将
BIT列值与位掩码进行比较;如果列值AND与位掩码一起等于0,则执行跳转到函数调用中指定的指定标签。- 签名
int branch_col_and_mask_eq_zero ( const void* mask, Uint32 unused, Uint32 attrId, Uint32 label )- 参数
-
此函数可以接受以下四个参数,其中三个实际上被使用
指向要与列值进行比较的常量
mask的指针。一个
Uint32值,目前unused。要比较的列的
attrId。-
如果条件为真,则跳转到的程序
label。在 NDB 8.0.30 之前,此参数对于非零值没有正确处理。(错误 #33888962)
- 返回值
此函数在成功时返回
0,在失败时返回-1。
- 描述
此函数用于将
BIT列值与位掩码进行比较;如果列值AND与位掩码一起不等于位掩码,则执行跳转到函数调用中指定的指定标签。- 签名
int branch_col_and_mask_ne_mask ( const void* mask, Uint32 unused, Uint32 attrId, Uint32 label )- 参数
-
此函数接受四个参数,其中三个实际上被使用。这些在以下列表中描述
指向要与列值进行比较的常量
mask的指针。一个
Uint32值,目前unused。要比较的列的
attrId。-
如果条件为真,则跳转到的程序
label。在 NDB 8.0.30 之前,此参数对于非零值没有正确处理。(错误 #33888962)
- 返回值
此函数在成功时返回
0,在失败时返回-1。
- 描述
此函数用于将
BIT列值与位掩码进行比较;如果列值AND与位掩码一起不等于0,则执行跳转到函数调用中指定的指定标签。- 签名
int branch_col_and_mask_ne_zero ( const void* mask, Uint32 unused, Uint32 attrId, Uint32 label )- 参数
-
此函数接受以下四个参数,其中三个实际上被使用
指向要与列值进行比较的常量
mask的指针。一个
Uint32值,目前unused。要比较的列的
attrId。-
如果条件为真,则跳转到的程序
label。在 NDB 8.0.30 之前,此参数对于非零值没有正确处理。(错误 #33888962)
- 返回值
此函数在成功时返回
0,在失败时返回-1。
- 描述
此函数将表列值与任意常量进行比较,如果值相等,则跳转到指定的程序标签。在 NDB 8.0 中,它也可以用于比较两个列是否相等。
- 签名
-
将列与值进行比较
int branch_col_eq ( const void* val, Uint32 len, Uint32 attrId, Uint32 Label )比较两个列
int branch_col_eq ( Uint32 attrId1, Uint32 attrId2, Uint32 label ) - 参数
-
在比较列和值时,此函数接受以下四个参数
一个常量值 (
val)值的长度(以字节为单位)
要与
val进行比较的表列的属性 ID一个
Label(之前使用def_label()定义)在比较的值相等时跳转到的标签
在比较两个表列值时,所需的参数如下所示
AttrId1:要比较的第一个表列的属性 IDAttrId2:要比较的第二个表列的属性 IDlabel:如果比较的列相同,则跳转到的位置。必须使用def_label()预先定义。
使用此函数比较两个列时,列必须在类型上完全相同。
- 返回值
成功返回
0,失败返回-1。
- 描述
此函数测试表列的值,如果列值为
NULL,则跳转到指示的程序标签。- 签名
int branch_col_eq_null ( Uint32 attrId, Uint32 Label )- 参数
-
此函数需要以下两个参数
表列的属性 ID
如果列值为
NULL,则跳转到的程序标签
- 返回值
成功返回
0,失败返回-1。
- 描述
-
比较由 ID 指定的表属性和参数,如果它们相等,则分支到指定的标签。在 NDB 8.0.27 中添加。
参数可以是
NULL,并且根据生效的NULL处理模式进行比较;默认情况下,将NULL视为小于任何其他值,并将NULL视为等于NULL。你可以覆盖此行为,并强制NULL处理符合 SQL 标准,方法是调用setSqlCmpSemantics()。 - 签名
int branch_col_eq_param ( Uint32 attrId, Uint32 paramId, Uint32 label )- 参数
- attrId
表属性的 ID。
- paramId
参数 ID。
- label
如果参数相等,则跳转到的标签。
- 返回值
成功返回 0。
- 描述
此函数将表列值与任意常量进行比较,如果常量列值,则跳转到指定的程序标签。在 NDB 8.0 中,它也可以用于比较两个列,如果第一个列的值大于或等于第二个列的值,则执行跳转。
- 签名
-
将值与列进行比较
int branch_col_ge ( const void* val, Uint32 len, Uint32 attrId, Uint32 label )比较两个列的值
int branch_col_ge ( Uint32 attrId1, Uint32 attrId2, Uint32 label ) - 参数
-
在用于将值与列进行比较时,此函数接受此处列出的四个参数
一个常量值 (
val)值的长度(以字节为单位)
要与
val进行比较的表列的属性 ID一个
label(之前使用def_label()定义)在常量值大于或等于列值时跳转到的标签
在用于比较两个列时,该函数接受此处列出的参数
AttrId1:要比较的第一个表列的属性 IDAttrId2:要比较的第二个表列的属性 IDlabel:如果第一个列值大于或等于第二个列值,则跳转到此位置
在比较两个列时,列的类型必须在所有方面都完全相同。
- 返回值
成功返回
0,失败返回-1。
- 描述
-
比较由 ID 指定的表属性和参数,如果属性值大于或等于参数值,则分支到指定的标签。在 NDB 8.0.27 中添加。
参数可以是
NULL,并且根据生效的NULL处理模式进行比较;默认情况下,将NULL视为小于任何其他值,并将NULL视为等于NULL。你可以覆盖此行为,并强制NULL处理符合 SQL 标准,方法是调用setSqlCmpSemantics()。 - 签名
int branch_col_ge_param ( Uint32 attrId, Uint32 paramId, Uint32 label )- 参数
- attrId
表属性的 ID。
- paramId
参数 ID。
- label
如果列值不小于参数值,则跳转到的标签。
- 返回值
成功返回 0。
- 描述
此函数将表列值与任意常量进行比较,如果常量大于列值,则跳转到指定的程序标签。在 NDB 8.0 中,此函数被重载,因此它可以用于比较两个列值,并在第一个列值大于第二个列值时执行跳转。
- 签名
-
将值与列进行比较
int branch_col_ge ( const void* val, Uint32 len, Uint32 attrId, Uint32 label )比较两个列的值
int branch_col_ge ( Uint32 attrId1, Uint32 attrId2, Uint32 label ) - 参数
-
在用于将值与表列进行比较时,此函数接受以下四个参数
一个常量值 (
val)值的长度(以字节为单位)
要与
val进行比较的表列的属性 ID一个
Label(之前使用def_label()定义)在常量值大于列值时跳转到的标签
在用于比较两个列时,该函数接受此处列出的三个参数
AttrId1:要比较的第一个表列的属性 IDAttrId2:要比较的第二个表列的属性 IDlabel:如果第一个列值大于或等于第二个列值,则跳转到此位置
在比较两个列时,列的类型必须在所有方面都完全相同。
- 返回值
成功返回
0,失败返回-1。
- 描述
-
将表属性与参数进行比较,每个属性和参数都由 ID 指定,如果属性值大于参数值,则跳转到指定的标签。在 NDB 8.0.27 中添加。
参数可以是
NULL,并且根据生效的NULL处理模式进行比较;默认情况下,将NULL视为小于任何其他值,并将NULL视为等于NULL。你可以覆盖此行为,并强制NULL处理符合 SQL 标准,方法是调用setSqlCmpSemantics()。 - 签名
int branch_col_gt_param ( Uint32 attrId, Uint32 paramId, Uint32 label )- 参数
- attrId
表属性的 ID。
- paramId
参数 ID。
- label
如果列值大于参数值,则跳转到的标签。
- 返回值
成功返回 0。
- 描述
此方法将表列值与任意常量进行比较,如果常量小于或等于列值,则跳转到指定的程序标签。在 NDB 8.0 中,它也可以用来以这种方式比较两个表列值。
- 签名
-
将表列值与常量进行比较
int branch_col_le ( const void* val, Uint32 len, Uint32 attrId, Uint32 Label )比较两个表列的值
int branch_col_ge ( Uint32 attrId1, Uint32 attrId2, Uint32 label ) - 参数
-
在将表列值与常量进行比较时,此方法将使用此处列出的四个参数
一个常量值 (
val)值的长度(以字节为单位)
要与
val进行比较的表列的属性 ID一个
标签(之前使用def_label()定义),如果常量值小于或等于列值,则跳转到该标签。
当用于比较两个表列值时,此方法将使用此处列出的三个参数。
AttrId1:要比较的第一个表列的属性 IDAttrId2:要比较的第二个表列的属性 ID标签:如果第一个列值小于或等于第二个列值,则跳转到此标签。
在比较两个表列值时,列值的类型必须在所有方面完全相同。
- 返回值
成功返回
0,失败返回-1。
- 描述
-
将表属性与参数进行比较,每个属性和参数都由 ID 指定,如果属性值小于或等于参数值,则跳转到指定的标签。在 NDB 8.0.27 中添加。
参数可以是
NULL,并且根据生效的NULL处理模式进行比较;默认情况下,将NULL视为小于任何其他值,并将NULL视为等于NULL。你可以覆盖此行为,并强制NULL处理符合 SQL 标准,方法是调用setSqlCmpSemantics()。 - 签名
int branch_col_le_param ( Uint32 attrId, Uint32 paramId, Uint32 label )- 参数
- attrId
表属性的 ID。
- paramId
参数 ID。
- label
如果列值不大于参数值,则跳转到的标签。
- 返回值
成功返回 0。
- 描述
此方法将表列值与正则表达式模式进行测试,如果匹配,则跳转到指定的程序标签。
- 签名
int branch_col_like ( const void* val, Uint32 len, Uint32 attrId, Uint32 Label )- 参数
-
此方法将使用此处列出的四个参数
一个正则表达式模式 (
val);有关支持的语法,请参见 基于模式的 NdbInterpretedCode 分支操作模式的长度(以字节为单位)
要测试的表列的属性 ID
如果表列值与模式匹配,则要跳转到的程序标签
- 返回值
成功返回
0,失败返回-1
- 描述
此方法将表列值与任意常量进行比较,如果常量小于列值,则跳转到指定的程序标签。在 NDB 8.0 中,可以改为比较两个表列值。
- 签名
-
将表列值与常量进行比较
int branch_col_lt ( const void* val, Uint32 len, Uint32 attrId, Uint32 Label )比较两个表列值
int branch_col_lt ( Uint32 attrId1, Uint32 attrId2, Uint32 label ) - 参数
-
在将表列值与常量进行比较时,此方法将使用以下四个参数
一个常量值 (
val)值的长度(以字节为单位)
要与
val进行比较的表列的属性 ID一个
标签(之前使用def_label()定义),如果常量值小于列值,则跳转到该标签。
当用于比较两个表列值时,
branch_col_lt()将使用以下三个参数AttrId1:要比较的第一个表列的属性 IDAttrId2:要比较的第二个表列的属性 ID标签:如果第一个列值小于第二个列值,则跳转到此标签。
在比较两个表列值时,表列值的类型必须完全相同。这意味着它们必须具有相同的长度、精度和比例。
- 返回值
成功返回
0,失败返回-1。
- 描述
-
将表属性与参数进行比较,每个属性和参数都由 ID 指定,如果属性值小于参数值,则跳转到指定的标签。在 NDB 8.0.27 中添加。
参数可以是
NULL,并且根据生效的NULL处理模式进行比较;默认情况下,将NULL视为小于任何其他值,并将NULL视为等于NULL。你可以覆盖此行为,并强制NULL处理符合 SQL 标准,方法是调用setSqlCmpSemantics()。 - 签名
int branch_col_lt_param ( Uint32 attrId, Uint32 paramId, Uint32 label )- 参数
- attrId
表属性的 ID。
- paramId
参数 ID。
- label
如果列值小于参数值,则跳转到的标签。
- 返回值
成功返回 0。
- 描述
此方法将表列值与任意常量进行比较,如果两个值不相等,则跳转到指定的程序标签。在 NDB 8.0 中,它也可以用来将表列值与另一个表列值进行比较。
- 签名
-
将表列值与常量进行比较
int branch_col_ne ( const void* val, Uint32 len, Uint32 attrId, Uint32 Label )比较两个表列值
int branch_col_ne ( Uint32 attrId1, Uint32 attrId2, Uint32 label ) - 参数
-
在将表列值与常量进行比较时,此方法将使用此处列出的四个参数
一个常量值 (
val)值的长度(以字节为单位)
要与
val进行比较的表列的属性 ID一个
标签(之前使用def_label()定义),如果比较的值不相等,则跳转到该标签。
在比较两个表列值时,所需的参数如下所示
AttrId1:要比较的第一个表列的属性 IDAttrId2:要比较的第二个表列的属性 ID标签:如果比较的列不相同,则跳转到的位置。必须已经使用def_label()定义。
在使用此方法比较两个表列值时,列必须完全相同。
- 返回值
成功返回
0,失败返回-1。
- 描述
此方法测试表列的值,如果列值不是
NULL,则跳转到指定的程序标签。- 签名
int branch_col_ne_null ( Uint32 attrId, Uint32 Label )- 参数
-
此函数需要以下两个参数
表列的属性 ID
如果列值不是
NULL,则要跳转到的程序标签。标签必须已经使用def_label()定义。
- 返回值
成功返回
0,失败返回-1。
- 描述
-
将表属性与参数进行比较,每个属性和参数都由 ID 指定,如果它们不相等,则跳转到指定的标签。
参数可以是
NULL,并且根据生效的NULL处理模式进行比较;默认情况下,将NULL视为小于任何其他值,并将NULL视为等于NULL。你可以覆盖此行为,并强制NULL处理符合 SQL 标准,方法是调用setSqlCmpSemantics()。 - 签名
int branch_col_ne_param ( Uint32 attrId, Uint32 paramId, Uint32 label )- 参数
- attrId
表属性的 ID。
- paramId
参数 ID。
- label
如果参数不相等,则跳转到的标签。
- 返回值
成功返回 0。
- 描述
此方法类似于
branch_col_like(),因为它将表列值与正则表达式模式进行测试;但是,它仅在模式和列值不匹配时才跳转到指定的程序标签。- 签名
int branch_col_notlike ( const void* val, Uint32 len, Uint32 attrId, Uint32 Label )- 参数
-
此方法将使用以下四个参数
一个正则表达式模式 (
val);有关支持的语法,请参见 基于模式的 NdbInterpretedCode 分支操作模式的长度(以字节为单位)
要测试的表列的属性 ID
如果表列值与模式不匹配,则要跳转到的程序标签。
标签必须已经使用def_label()定义。
- 返回值
成功返回
0,失败返回-1
- 描述
此方法比较两个寄存器值;如果它们相等,则解释程序跳转到指定的标签。
- 签名
int branch_eq ( Uint32 RegLvalue, Uint32 RegRvalue, Uint32 Label )- 参数
此方法将使用三个参数,即要比较其值的寄存器 (
RegLvalue和RegRvalue) 以及如果它们相等则要跳转到的程序标签。标签必须已经使用def_label()定义。- 返回值
成功返回
0,失败返回-1。
- 描述
此方法将寄存器值与
NULL进行比较;如果寄存器值为 null,则解释程序跳转到指定的标签。- 签名
int branch_eq_null ( Uint32 RegLvalue, Uint32 Label )- 参数
此方法将使用两个参数,即要与
NULL进行比较的寄存器 (RegLvalue) 以及如果RegLvalue为 null 则要跳转到的程序标签。标签必须已经使用def_label()定义。- 返回值
成功返回
0,失败返回-1。
- 描述
此方法比较两个寄存器值;如果第一个大于或等于第二个,则解释程序跳转到指定的标签。
- 签名
int branch_ge ( Uint32 RegLvalue, Uint32 RegRvalue, Uint32 Label )- 参数
此方法将使用三个参数,即要比较其值的寄存器 (
RegLvalue和RegRvalue) 以及如果RegLvalue大于或等于RegRvalue则要跳转到的程序标签。标签必须已经使用def_label()定义。- 返回值
成功返回
0,失败返回-1。
- 描述
此方法比较两个寄存器值;如果第一个大于第二个,则解释程序跳转到指定的标签。
- 签名
int branch_gt ( Uint32 RegLvalue, Uint32 RegRvalue, Uint32 Label )- 参数
此方法将使用三个参数,即要比较其值的寄存器 (
RegLvalue和RegRvalue) 以及如果RegLvalue大于RegRvalue则要跳转到的程序标签。标签必须已经使用def_label()定义。- 返回值
成功返回
0,失败返回-1。
- 描述
此方法执行无条件跳转到解释程序标签(请参见 NdbInterpretedCode::def_label())。
- 签名
int branch_label ( Uint32 Label )- 参数
此方法将使用一个参数,即使用
def_label()定义的解释程序标签。- 返回值
成功返回
0,失败返回-1。
- 描述
此方法比较两个寄存器值;如果第一个小于或等于第二个,则解释程序跳转到指定的标签。
- 签名
int branch_le ( Uint32 RegLvalue, Uint32 RegRvalue, Uint32 Label )- 参数
此方法将使用三个参数,即要比较其值的寄存器 (
RegLvalue和RegRvalue) 以及如果RegLvalue小于或等于RegRvalue则要跳转到的程序标签。标签必须已经使用def_label()定义。- 返回值
成功返回
0,失败返回-1。
- 描述
此方法比较两个寄存器值;如果第一个小于第二个,则解释程序跳转到指定的标签。
- 签名
int branch_lt ( Uint32 RegLvalue, Uint32 RegRvalue, Uint32 Label )- 参数
此方法将使用三个参数,即要比较其值的寄存器 (
RegLvalue和RegRvalue) 以及如果RegLvalue小于RegRvalue则要跳转到的程序标签。标签必须已经使用def_label()定义。- 返回值
成功返回
0,失败返回-1。
- 描述
此方法比较两个寄存器值;如果它们不相等,则解释程序跳转到指定的标签。
- 签名
int branch_ne ( Uint32 RegLvalue, Uint32 RegRvalue, Uint32 Label )- 参数
此方法将使用三个参数,即要比较其值的寄存器 (
RegLvalue和RegRvalue) 以及如果它们不相等则要跳转到的程序标签。标签必须已经使用def_label()定义。- 返回值
成功返回
0,失败返回-1。
- 描述
此方法将寄存器值与
NULL进行比较;如果值不为 null,则解释程序跳转到指定的标签。- 签名
int branch_ne_null ( Uint32 RegLvalue, Uint32 Label )- 参数
此方法将使用两个参数,即要与
NULL进行比较的寄存器 (RegLvalue) 以及如果RegLvalue不为 null 则要跳转到的程序标签。标签必须已经使用def_label()定义。- 返回值
成功返回
0,失败返回-1。
- 描述
此方法用于调用子程序。
- 签名
int call_sub ( Uint32 SubroutineNumber )- 参数
此方法将使用一个参数,即标识要调用的子程序的编号。
- 返回值
成功返回
0,失败返回-1。
- 描述
对
NdbInterpretedCode对象进行深层复制。- 签名
int copy ( const NdbInterpretedCode& src )- 参数
对副本的引用。
- 返回值
成功返回 0,或返回错误代码。
- 描述
此方法定义一个标签,用作解释程序中的一个或多个跳转的目标。
def_label() 使用一个 2 字节缓冲区,不需要任何空间来存放请求消息。
- 签名
int def_label ( int LabelNum )- 参数
此方法将使用一个参数
LabelNum,一个整数,其值在解释程序中的所有标签值中必须是唯一的。- 返回值
0成功;-1失败。
- 描述
此方法用于标记子例程的开始。有关更多信息,请参见 使用 NdbInterpretedCode 的子例程。
- 签名
int def_sub ( Uint32 SubroutineNumber )- 参数
单个参数,用于标识子例程的数字。
- 返回值
成功返回
0,否则返回-1。
- 描述
-
此方法通过解析所有分支指令和对子例程的调用来准备解释程序(包括它可能具有的任何子例程)。必须在使用程序之前调用它,并且只能针对任何给定的
NdbInterpretedCode对象调用一次。如果没有定义任何指令,此方法尝试在最终化之前插入一个单一的
interpret_exit_ok()方法调用。 - 签名
int finalise ( void )- 参数
无.
- 返回值
成功返回
0,否则返回-1。
- 描述
此方法返回与该
NdbInterpretedCode对象相关的最新错误。- 签名
const class NdbError& getNdbError ( void ) const- 参数
无.
- 返回值
对
NdbError对象的引用。
- 描述
此方法可用于获取对定义
NdbInterpretedCode对象的表的引用。- 签名
const NdbDictionary::Table* getTable ( void ) const- 参数
无.
- 返回值
指向
Table对象的指针。如果在实例化NdbInterpretedCode时没有提供任何表对象,则返回NULL。
- 描述
此方法返回已使用缓冲区的字数,无论缓冲区是用户提供的还是内部提供的缓冲区。
- 签名
Uint32 getWordsUsed ( void ) const- 参数
无.
- 返回值
从缓冲区使用的 32 位字数。
- 描述
对于扫描操作,调用此方法表示应将此行作为扫描的一部分返回,并且不应扫描此片段中的更多行。对于其他类型的操作,此方法会导致操作中止。
- 签名
int interpret_exit_last_row ( void )- 参数
无.
- 返回值
成功返回
0,否则返回-1。
- 描述
对于扫描操作,此方法用于指示不应将当前行作为扫描的一部分返回,并导致程序移至下一行。它会导致其他类型的操作中止。
- 签名
int interpret_exit_nok ( Uint32 ErrorCode = 626 // HA_ERR_KEY_NOT_FOUND )- 参数
-
此方法接受一个(可选)参数
ErrorCode。(有关 NDB 错误代码的完整列表,请参见 第 2.4.2 节,“NDB 错误代码:按类型”。)如果未提供,则默认为 626 (HA_ERR_KEY_NOT_FOUND,元组不存在。应用程序应使用错误代码 626 或 6000 到 6999(含)范围内的其他代码。对于此处未提及的任何值,此方法的行为未定义,并且可能会随时更改,恕不另行通知。
- 返回值
成功返回
0,失败返回-1。
- 描述
对于扫描操作,此方法表示应将当前行作为扫描结果的一部分返回,并且程序应移至下一行。对于其他操作,调用此方法会导致解释程序退出。
- 签名
int interpret_exit_ok ( void )- 参数
无.
- 返回值
成功返回
0,失败返回-1。
- 描述
此方法用于将
NULL值加载到寄存器中。- 签名
int load_const_null ( Uint32 RegDest )- 参数
此方法接受一个参数,即要放置
NULL的寄存器。- 返回值
成功返回
0,否则返回-1。
- 描述
此方法将 16 位值加载到指定的解释器寄存器中。
- 签名
int load_const_u16 ( Uint32 RegDest, Uint32 Constant )- 参数
-
此方法接受以下两个参数
RegDest:要加载值的寄存器。要加载的
Constant值
- 返回值
成功返回
0,否则返回-1。
- 描述
此方法将 32 位值加载到指定的解释器寄存器中。
- 签名
int load_const_u32 ( Uint32 RegDest, Uint32 Constant )- 参数
-
此方法接受以下两个参数
RegDest:要加载值的寄存器。要加载的
Constant值
- 返回值
成功返回
0,否则返回-1。
- 描述
此方法将 64 位值加载到指定的解释器寄存器中。
- 签名
int load_const_u64 ( Uint32 RegDest, Uint64 Constant )- 参数
-
此方法接受以下两个参数
RegDest:要加载值的寄存器。要加载的
Constant值
- 返回值
成功返回
0,否则返回-1。
- 描述
read_attr()方法用于将表列值读入程序寄存器。可以通过使用其属性 ID 或作为指向Column对象的指针来指定列。- 签名
-
此方法可以通过两种方式之一调用。第一种方法是通过引用其属性 ID 来引用列,如下所示
int read_attr ( Uint32 RegDest, Uint32 attrId )或者,您可以将列引用为
Column对象,如下所示int read_attr ( Uint32 RegDest, const NdbDictionary::Column* column ) - 参数
-
此方法接受两个参数,如下所述
要将列值复制到的寄存器 (
RegDest)。-
以下对要复制其值的表列的引用中的任一者
表列的属性 ID (
attrId)指向
column的指针,即指向引用表列的Column对象的指针
- 返回值
成功返回
0,失败返回-1。
- 描述
此方法清除
NdbInterpretedCode对象中的任何现有程序,然后可以将其用于构建新程序。- 签名
int ret_sub ( void )- 参数
无.
- 返回值
无.
此方法是在 NDB 8.0 中添加的。
- 描述
此方法获取存储在任何两个给定寄存器中的值之间的差值,并将结果存储在第三个寄存器中。
- 签名
int sub_reg ( Uint32 RegDest, Uint32 RegSource1, Uint32 RegSource2 )- 参数
-
此方法接受三个参数。第一个是将结果存储到的寄存器 (
RegDest)。第二个和第三个参数 (RegSource1和RegSource2) 是要减去其值的寄存器。换句话说,寄存器RegDest的值是通过计算此处显示的表达式的值来计算的(value in register RegSource1) − (value in register RegSource2)可以使用要减去其值的寄存器之一来存储结果;也就是说,
RegDest可以与RegSource1或RegSource2相同。 - 返回值
0成功;-1失败。
- 描述
-
此方法从给定表列的值中减去指定的值,并将原始和修改后的列值分别放置在寄存器 6 和 7 中。它等效于以下一系列
NdbInterpretedCode方法调用,其中attrId是表列的属性 ID,aValue是要减去的值read_attr(6, attrId); load_const_u32(7, aValue); sub_reg(7,6,7); write_attr(attrId, 7);aValue可以是 32 位或 64 位整数。 - 签名
-
根据
aValue是 32 位还是 64 位,此函数可以以两种方式中的任何一种方式调用。32 位
aValueint sub_val ( Uint32 attrId, Uint32 aValue )64 位
aValueint sub_val ( Uint32 attrId, Uint64 aValue ) - 参数
表列属性 ID 和一个 32 位或 64 位整数,要从该列值中减去。
- 返回值
成功返回
0,失败返回-1。
- 描述
此方法用于将寄存器值复制到表列。可以通过使用其属性 ID 或作为指向
Column对象的指针来指定列。- 签名
-
可以通过两种方式之一调用此方法。第一种方法需要通过引用其属性 ID 来引用列,如下所示
int read_attr ( Uint32 attrId, Uint32 RegSource )您还可以将列引用为
Column对象,如下所示int read_attr ( const NdbDictionary::Column* column, Uint32 RegSource ) - 参数
-
此方法接受两个参数,如下所示
-
对要将寄存器值复制到的表列的引用。这可以是以下任一者
表列的属性 ID (
attrId)指向
column的指针,即指向引用表列的Column对象的指针
要复制其值的寄存器 (
RegSource)。
-
- 返回值
成功返回
0;失败返回-1。