本节提供有关 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”。
此接口仍在开发中,因此可能会在未经通知的情况下发生更改。
NdbScanFilter
API 是一个更稳定的 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 位
aValue
int add_val ( Uint32 attrId, Uint32 aValue )
64 位
aValue
int 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 位
aValue
int sub_val ( Uint32 attrId, Uint32 aValue )
64 位
aValue
int 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
。