文档首页
MySQL NDB Cluster API 开发人员指南
相关文档 下载本手册
PDF (US Ltr) - 3.6Mb
PDF (A4) - 3.6Mb


2.3.19 NdbInterpretedCode 类

本节提供有关 NdbInterpretedCode 类的信息,该类可用于准备和执行 NDB API 解释程序。

NdbInterpretedCode 类概述

父类

.

子类

.

描述

NdbInterpretedCode 表示一个解释程序,用于在使用 NdbRecord 创建的操作中使用,或者使用旧 API 创建的扫描中使用。 NdbScanFilter 类也可以使用此类生成 NDB 解释程序。

要创建 NdbInterpretedCode 对象,请调用构造函数,可以选择性地提供程序要操作的表,以及用于程序存储和最终化的缓冲区。如果未提供表,则只能使用不访问表属性的指令。在 NDB 8.0 中,可以将 Ndbrecord 的实例用于此目的,以代替 Table

每个 NDB API 操作都应用于一个表,因此任何与该操作关联的 NdbInterpretedCode 程序也是如此。

如果未提供缓冲区,则会动态分配内部缓冲区并根据需要进行扩展。创建 NdbInterpretedCode 对象后,可以通过调用本节后面介绍的适当方法,向其添加指令和标签。程序完成后,通过调用 finalise() 方法对其进行最终化,这将解析任何剩余的内部分支以及对标签和子程序偏移量的调用。

单个已最终化的 NdbInterpretedCode 程序可以被多个操作使用。它不需要为后续操作重新准备。

要在 NdbRecord 操作和扫描中使用程序,请在操作定义时使用 OperationOptionsScanOptions 参数传递它。当不再需要程序时,可以删除 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() 将寄存器值写入表列

出于效率原因,此类的函数提供了最少的错误检查。

另请参阅 第 1.6 节,“使用 NdbInterpretedCode”

类型

此类未定义任何公共类型。

NdbInterpretedCode 构造函数

描述

这是 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 构造函数接受三个参数,如下所述

  • 将要运行此程序的 table。在 NDB 8.0 之前,如果程序是特定于表的——也就是说,如果它从表中的列读取数据或写入表中的列,则必须提供此参数。在 NDB 8.0 中,构造函数接受 NdbRecord 来代替 Table

  • 指向用于存储程序的 32 位字 buffer 的指针。

  • buffer_word_size 是传递的缓冲区的长度。如果程序超过此长度,则添加新指令将失败,错误代码为 4518 解释程序中指令过多

    或者,如果没有传递缓冲区,则将在内部动态分配缓冲区,并在添加指令时进行扩展。

返回值

NdbInterpretedCode 的实例。

NdbInterpretedCode::add_reg()

描述

此函数对任何两个给定寄存器中存储的值求和,并将结果存储在第三个寄存器中。

签名
int add_reg
    (
      Uint32 RegDest,
      Uint32 RegSource1,
      Uint32 RegSource2
    )
参数

此函数接受三个参数。第一个参数是存储结果的寄存器 (RegDest)。第二个和第三个参数 (RegSource1RegSource2) 是要相加的值的寄存器。

为了存储结果,可以使用要相加的值的寄存器之一;也就是说,RegDest 可以与 RegSource1RegSource2 相同。

返回值

成功返回 0,失败返回 -1

NdbInterpretedCode::add_val()

描述

此函数将指定的值添加到给定表列的值,并将原始列值和修改后的列值分别放置在寄存器 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

NdbInterpretedCode::branch_col_and_mask_eq_mask()

描述

此函数用于将 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

NdbInterpretedCode::branch_col_and_mask_eq_zero()

描述

此函数用于将 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

NdbInterpretedCode::branch_col_and_mask_ne_mask()

描述

此函数用于将 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

NdbInterpretedCode::branch_col_and_mask_ne_zero()

描述

此函数用于将 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

NdbInterpretedCode::branch_col_eq()

描述

此函数将表列值与任意常量进行比较,如果值相等,则跳转到指定的程序标签。在 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:要比较的第一个表列的属性 ID

  • AttrId2:要比较的第二个表列的属性 ID

  • label:如果比较的列相同,则跳转到的位置。必须使用 def_label() 预先定义。

使用此函数比较两个列时,列必须在类型上完全相同。

返回值

成功返回 0,失败返回 -1

NdbInterpretedCode::branch_col_eq_null()

描述

此函数测试表列的值,如果列值为 NULL,则跳转到指示的程序标签。

签名
int branch_col_eq_null
    (
      Uint32 attrId,
      Uint32 Label
    )
参数

此函数需要以下两个参数

  • 表列的属性 ID

  • 如果列值为 NULL,则跳转到的程序标签

返回值

成功返回 0,失败返回 -1

NdbInterpretedCode::branch_col_eq_param()

描述

比较由 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。

NdbInterpretedCode::branch_col_ge()

描述

此函数将表列值与任意常量进行比较,如果常量列值,则跳转到指定的程序标签。在 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:要比较的第一个表列的属性 ID

  • AttrId2:要比较的第二个表列的属性 ID

  • label:如果第一个列值大于或等于第二个列值,则跳转到此位置

在比较两个列时,列的类型必须在所有方面都完全相同。

返回值

成功返回 0,失败返回 -1

NdbInterpretedCode::branch_col_ge_param()

描述

比较由 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。

NdbInterpretedCode::branch_col_gt()

描述

此函数将表列值与任意常量进行比较,如果常量大于列值,则跳转到指定的程序标签。在 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:要比较的第一个表列的属性 ID

  • AttrId2:要比较的第二个表列的属性 ID

  • label:如果第一个列值大于或等于第二个列值,则跳转到此位置

在比较两个列时,列的类型必须在所有方面都完全相同。

返回值

成功返回 0,失败返回 -1

NdbInterpretedCode::branch_col_gt_param()

描述

将表属性与参数进行比较,每个属性和参数都由 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。

NdbInterpretedCode::branch_col_le()

描述

此方法将表列值与任意常量进行比较,如果常量小于或等于列值,则跳转到指定的程序标签。在 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:要比较的第一个表列的属性 ID

  • AttrId2:要比较的第二个表列的属性 ID

  • 标签:如果第一个列值小于或等于第二个列值,则跳转到此标签。

在比较两个表列值时,列值的类型必须在所有方面完全相同。

返回值

成功返回 0,失败返回 -1

NdbInterpretedCode::branch_col_le_param()

描述

将表属性与参数进行比较,每个属性和参数都由 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。

NdbInterpretedCode::branch_col_like()

描述

此方法将表列值与正则表达式模式进行测试,如果匹配,则跳转到指定的程序标签。

签名
int branch_col_like
    (
      const void* val,
      Uint32 len,
      Uint32 attrId,
      Uint32 Label
    )
参数

此方法将使用此处列出的四个参数

  • 一个正则表达式模式 (val);有关支持的语法,请参见 基于模式的 NdbInterpretedCode 分支操作

  • 模式的长度(以字节为单位)

  • 要测试的表列的属性 ID

  • 如果表列值与模式匹配,则要跳转到的程序标签

返回值

成功返回 0,失败返回 -1

NdbInterpretedCode::branch_col_lt()

描述

此方法将表列值与任意常量进行比较,如果常量小于列值,则跳转到指定的程序标签。在 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:要比较的第一个表列的属性 ID

  • AttrId2:要比较的第二个表列的属性 ID

  • 标签:如果第一个列值小于第二个列值,则跳转到此标签。

在比较两个表列值时,表列值的类型必须完全相同。这意味着它们必须具有相同的长度、精度和比例。

返回值

成功返回 0,失败返回 -1

NdbInterpretedCode::branch_col_lt_param()

描述

将表属性与参数进行比较,每个属性和参数都由 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。

NdbInterpretedCode::branch_col_ne()

描述

此方法将表列值与任意常量进行比较,如果两个值不相等,则跳转到指定的程序标签。在 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:要比较的第一个表列的属性 ID

  • AttrId2:要比较的第二个表列的属性 ID

  • 标签:如果比较的列不相同,则跳转到的位置。必须已经使用 def_label() 定义。

在使用此方法比较两个表列值时,列必须完全相同。

返回值

成功返回 0,失败返回 -1

NdbInterpretedCode::branch_col_ne_null()

描述

此方法测试表列的值,如果列值不是 NULL,则跳转到指定的程序标签。

签名
int branch_col_ne_null
    (
      Uint32 attrId,
      Uint32 Label
    )
参数

此函数需要以下两个参数

  • 表列的属性 ID

  • 如果列值不是 NULL,则要跳转到的程序标签。标签必须已经使用 def_label() 定义。

返回值

成功返回 0,失败返回 -1

NdbInterpretedCode::branch_col_ne_param()

描述

将表属性与参数进行比较,每个属性和参数都由 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。

NdbInterpretedCode::branch_col_notlike()

描述

此方法类似于 branch_col_like(),因为它将表列值与正则表达式模式进行测试;但是,它仅在模式和列值匹配时才跳转到指定的程序标签。

签名
int branch_col_notlike
    (
      const void* val,
      Uint32 len,
      Uint32 attrId,
      Uint32 Label
    )
参数

此方法将使用以下四个参数

  • 一个正则表达式模式 (val);有关支持的语法,请参见 基于模式的 NdbInterpretedCode 分支操作

  • 模式的长度(以字节为单位)

  • 要测试的表列的属性 ID

  • 如果表列值与模式不匹配,则要跳转到的程序标签。标签必须已经使用 def_label() 定义。

返回值

成功返回 0,失败返回 -1

NdbInterpretedCode::branch_eq()

描述

此方法比较两个寄存器值;如果它们相等,则解释程序跳转到指定的标签。

签名
int branch_eq
    (
      Uint32 RegLvalue,
      Uint32 RegRvalue,
      Uint32 Label
    )
参数

此方法将使用三个参数,即要比较其值的寄存器 (RegLvalueRegRvalue) 以及如果它们相等则要跳转到的程序 标签标签必须已经使用 def_label() 定义。

返回值

成功返回 0,失败返回 -1

NdbInterpretedCode::branch_eq_null()

描述

此方法将寄存器值与 NULL 进行比较;如果寄存器值为 null,则解释程序跳转到指定的标签。

签名
int branch_eq_null
    (
      Uint32 RegLvalue,
      Uint32 Label
    )
参数

此方法将使用两个参数,即要与 NULL 进行比较的寄存器 (RegLvalue) 以及如果 RegLvalue 为 null 则要跳转到的程序 标签标签必须已经使用 def_label() 定义。

返回值

成功返回 0,失败返回 -1

NdbInterpretedCode::branch_ge()

描述

此方法比较两个寄存器值;如果第一个大于或等于第二个,则解释程序跳转到指定的标签。

签名
int branch_ge
    (
      Uint32 RegLvalue,
      Uint32 RegRvalue,
      Uint32 Label
    )
参数

此方法将使用三个参数,即要比较其值的寄存器 (RegLvalueRegRvalue) 以及如果 RegLvalue 大于或等于 RegRvalue 则要跳转到的程序 标签标签必须已经使用 def_label() 定义。

返回值

成功返回 0,失败返回 -1

NdbInterpretedCode::branch_gt()

描述

此方法比较两个寄存器值;如果第一个大于第二个,则解释程序跳转到指定的标签。

签名
int branch_gt
    (
      Uint32 RegLvalue,
      Uint32 RegRvalue,
      Uint32 Label
    )
参数

此方法将使用三个参数,即要比较其值的寄存器 (RegLvalueRegRvalue) 以及如果 RegLvalue 大于 RegRvalue 则要跳转到的程序 标签标签必须已经使用 def_label() 定义。

返回值

成功返回 0,失败返回 -1

NdbInterpretedCode::branch_label()

描述

此方法执行无条件跳转到解释程序标签(请参见 NdbInterpretedCode::def_label())。

签名
int branch_label
    (
      Uint32 Label
    )
参数

此方法将使用一个参数,即使用 def_label() 定义的解释程序 标签

返回值

成功返回 0,失败返回 -1

NdbInterpretedCode::branch_le()

描述

此方法比较两个寄存器值;如果第一个小于或等于第二个,则解释程序跳转到指定的标签。

签名
int branch_le
    (
      Uint32 RegLvalue,
      Uint32 RegRvalue,
      Uint32 Label
    )
参数

此方法将使用三个参数,即要比较其值的寄存器 (RegLvalueRegRvalue) 以及如果 RegLvalue 小于或等于 RegRvalue 则要跳转到的程序 标签标签必须已经使用 def_label() 定义。

返回值

成功返回 0,失败返回 -1

NdbInterpretedCode::branch_lt()

描述

此方法比较两个寄存器值;如果第一个小于第二个,则解释程序跳转到指定的标签。

签名
int branch_lt
    (
      Uint32 RegLvalue,
      Uint32 RegRvalue,
      Uint32 Label
    )
参数

此方法将使用三个参数,即要比较其值的寄存器 (RegLvalueRegRvalue) 以及如果 RegLvalue 小于 RegRvalue 则要跳转到的程序 标签标签必须已经使用 def_label() 定义。

返回值

成功返回 0,失败返回 -1

NdbInterpretedCode::branch_ne()

描述

此方法比较两个寄存器值;如果它们不相等,则解释程序跳转到指定的标签。

签名
int branch_ne
    (
      Uint32 RegLvalue,
      Uint32 RegRvalue,
      Uint32 Label
    )
参数

此方法将使用三个参数,即要比较其值的寄存器 (RegLvalueRegRvalue) 以及如果它们不相等则要跳转到的程序标签。标签必须已经使用 def_label() 定义。

返回值

成功返回 0,失败返回 -1

NdbInterpretedCode::branch_ne_null()

描述

此方法将寄存器值与 NULL 进行比较;如果值不为 null,则解释程序跳转到指定的标签。

签名
int branch_ne_null
    (
      Uint32 RegLvalue,
      Uint32 Label
    )
参数

此方法将使用两个参数,即要与 NULL 进行比较的寄存器 (RegLvalue) 以及如果 RegLvalue 不为 null 则要跳转到的程序 标签标签必须已经使用 def_label() 定义。

返回值

成功返回 0,失败返回 -1

NdbInterpretedCode::call_sub()

描述

此方法用于调用子程序。

签名
int call_sub
    (
      Uint32 SubroutineNumber
    )
参数

此方法将使用一个参数,即标识要调用的子程序的编号。

返回值

成功返回 0,失败返回 -1

NdbInterpretedCode::copy()

描述

NdbInterpretedCode 对象进行深层复制。

签名
int copy
    (
      const NdbInterpretedCode& src
    )
参数

对副本的引用。

返回值

成功返回 0,或返回错误代码。

NdbInterpretedCode::def_label()

描述

此方法定义一个标签,用作解释程序中的一个或多个跳转的目标。

def_label() 使用一个 2 字节缓冲区,不需要任何空间来存放请求消息。

签名
int def_label
    (
      int LabelNum
    )
参数

此方法将使用一个参数 LabelNum,一个整数,其值在解释程序中的所有标签值中必须是唯一的。

返回值

0 成功;-1 失败。

NdbInterpretedCode::def_sub()

描述

此方法用于标记子例程的开始。有关更多信息,请参见 使用 NdbInterpretedCode 的子例程

签名
int def_sub
    (
      Uint32 SubroutineNumber
    )
参数

单个参数,用于标识子例程的数字。

返回值

成功返回 0,否则返回 -1

NdbInterpretedCode::finalise()

描述

此方法通过解析所有分支指令和对子例程的调用来准备解释程序(包括它可能具有的任何子例程)。必须在使用程序之前调用它,并且只能针对任何给定的 NdbInterpretedCode 对象调用一次。

如果没有定义任何指令,此方法尝试在最终化之前插入一个单一的 interpret_exit_ok() 方法调用。

签名
int finalise
    (
      void
    )
参数

.

返回值

成功返回 0,否则返回 -1

NdbInterpretedCode::getNdbError()

描述

此方法返回与该 NdbInterpretedCode 对象相关的最新错误。

签名
const class NdbError& getNdbError
    (
      void
    ) const
参数

.

返回值

NdbError 对象的引用。

NdbInterpretedCode::getTable()

描述

此方法可用于获取对定义 NdbInterpretedCode 对象的表的引用。

签名
const NdbDictionary::Table* getTable
    (
      void
    ) const
参数

.

返回值

指向 Table 对象的指针。如果在实例化 NdbInterpretedCode 时没有提供任何表对象,则返回 NULL

NdbInterpretedCode::getWordsUsed()

描述

此方法返回已使用缓冲区的字数,无论缓冲区是用户提供的还是内部提供的缓冲区。

签名
Uint32 getWordsUsed
    (
      void
    ) const
参数

.

返回值

从缓冲区使用的 32 位字数。

NdbInterpretedCode::interpret_exit_last_row()

描述

对于扫描操作,调用此方法表示应将此行作为扫描的一部分返回,并且不应扫描此片段中的更多行。对于其他类型的操作,此方法会导致操作中止。

签名
int interpret_exit_last_row
    (
      void
    )
参数

.

返回值

成功返回 0,否则返回 -1

NdbInterpretedCode::interpret_exit_nok()

描述

对于扫描操作,此方法用于指示不应将当前行作为扫描的一部分返回,并导致程序移至下一行。它会导致其他类型的操作中止。

签名
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

NdbInterpretedCode::interpret_exit_ok()

描述

对于扫描操作,此方法表示应将当前行作为扫描结果的一部分返回,并且程序应移至下一行。对于其他操作,调用此方法会导致解释程序退出。

签名
int interpret_exit_ok
    (
      void
    )
参数

.

返回值

成功返回 0,失败返回 -1

NdbInterpretedCode::load_const_null()

描述

此方法用于将 NULL 值加载到寄存器中。

签名
int load_const_null
    (
      Uint32 RegDest
    )
参数

此方法接受一个参数,即要放置 NULL 的寄存器。

返回值

成功返回 0,否则返回 -1

NdbInterpretedCode::load_const_u16()

描述

此方法将 16 位值加载到指定的解释器寄存器中。

签名
int load_const_u16
    (
      Uint32 RegDest,
      Uint32 Constant
    )
参数

此方法接受以下两个参数

  • RegDest:要加载值的寄存器。

  • 要加载的 Constant

返回值

成功返回 0,否则返回 -1

NdbInterpretedCode::load_const_u32()

描述

此方法将 32 位值加载到指定的解释器寄存器中。

签名
int load_const_u32
    (
      Uint32 RegDest,
      Uint32 Constant
    )
参数

此方法接受以下两个参数

  • RegDest:要加载值的寄存器。

  • 要加载的 Constant

返回值

成功返回 0,否则返回 -1

NdbInterpretedCode::load_const_u64()

描述

此方法将 64 位值加载到指定的解释器寄存器中。

签名
int load_const_u64
    (
      Uint32 RegDest,
      Uint64 Constant
    )
参数

此方法接受以下两个参数

  • RegDest:要加载值的寄存器。

  • 要加载的 Constant

返回值

成功返回 0,否则返回 -1

NdbInterpretedCode::read_attr()

描述

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::reset()

描述

此方法清除 NdbInterpretedCode 对象中的任何现有程序,然后可以将其用于构建新程序。

签名
int ret_sub
    (
      void
    )
参数

.

返回值

.

此方法是在 NDB 8.0 中添加的。

NdbInterpretedCode::ret_sub()

描述

此方法标记当前子例程的结束。

签名
int ret_sub
    (
      void
    )
参数

.

返回值

成功返回 0,否则返回 -1

NdbInterpretedCode::sub_reg()

描述

此方法获取存储在任何两个给定寄存器中的值之间的差值,并将结果存储在第三个寄存器中。

签名
int sub_reg
    (
      Uint32 RegDest,
      Uint32 RegSource1,
      Uint32 RegSource2
    )
参数

此方法接受三个参数。第一个是将结果存储到的寄存器 (RegDest)。第二个和第三个参数 (RegSource1RegSource2) 是要减去其值的寄存器。换句话说,寄存器 RegDest 的值是通过计算此处显示的表达式的值来计算的

(value in register RegSource1) − (value in register RegSource2)

可以使用要减去其值的寄存器之一来存储结果;也就是说,RegDest 可以与 RegSource1RegSource2 相同。

返回值

0 成功;-1 失败。

NdbInterpretedCode::sub_val()

描述

此方法从给定表列的值中减去指定的值,并将原始和修改后的列值分别放置在寄存器 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

NdbInterpretedCode::write_attr()

描述

此方法用于将寄存器值复制到表列。可以通过使用其属性 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