2.3.19 NdbInterpretedCode 类

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

NdbInterpretedCode 类概述

家长班

没有

儿童班

没有

描述

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

要创建一个NdbInterpretedCode对象,调用构造函数,可选地为程序提供一个表来操作,以及一个用于程序存储和完成的缓冲区。如果没有提供表,则只能使用不访问表属性的指令。Ndbrecord在 NDB 8.0 中,可以使用 一个实例 来代替Table.

NdbInterpretedCode每个 NDB API 操作适用于一个表,附加到该操作的 任何程序也是如此 。

如果未提供缓冲区,则根据需要动态分配和扩展内部缓冲区。创建 NdbInterpretedCode对象后,您可以通过调用适当的方法向其添加说明和标签,如本节后面所述。当程序完成时,通过调用 finalise()方法来完成它,该方法解决任何剩余的内部分支和对标签和子程序偏移量的调用。

一个完成的NdbInterpretedCode 程序可以被多个操作使用。它不需要为后续操作重新准备。

要将程序与 NdbRecord操作和扫描一起使用,请在操作定义时使用 OperationOptionsScanOptions 参数传递它。当不再需要该程序时, NdbInterpretedCode可以删除该对象以及任何用户提供的缓冲区。

有关其他信息和示例,请参阅 第 1.6 节,“使用 NdbInterpretedCode”

此界面仍在开发中,如有更改,恕不另行通知。NdbScanFilterAPI是定义扫描和过滤程序的更稳定 的 API。

方法

下表列出了该类的公共方法以及每个方法的用途或用途:

表 2.47 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

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

  • buffer_word_size是传入缓冲区的长度。如果程序超过此长度,则添加新指令将失败并出现错误4518 Too many instructions in interpreted program

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

返回值

的实例 NdbInterpretedCode

NdbInterpretedCode::add_reg()

描述

此方法将存储在任意两个给定寄存器中的值相加,并将结果存储在第三个寄存器中。

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

该方法采用三个参数。其中第一个是要存储结果的寄存器 ( RegDest)。第二个和第三个参数(RegSource1RegSource2)是要求和的寄存器。

为了存储结果,可以重复使用其值相加的寄存器之一;也就是说, RegDest可以与 RegSource1或 相同RegSource2

返回值

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 指向要与列值进行比较的 常量的指针

  • 当前的Uint32unused

  • 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 指向要与列值进行比较的 常量的指针。

  • 当前的Uint32unused

  • 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 指向要与列值进行比较的 常量的指针。

  • 当前的Uint32unused

  • 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 指向要与列值进行比较的 常量的指针。

  • 当前的Uint32unused

  • 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)

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

  • 待比较值的表列的属性IDval

  • 如果比较值相等,则跳转到 A 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
    )
参数
属性

表属性的ID。

参数

参数标识。

标签

如果参数相等则跳转到的标签。

返回值

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)

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

  • 待比较值的表列的属性IDval

  • 如果常量值大于或等于列值,则跳转到 一个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
    )
参数
属性

表属性的ID。

参数

参数标识。

标签

如果列值不小于参数值,则跳转到的标签。

返回值

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)

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

  • 待比较值的表列的属性IDval

  • 如果常量值大于列值,则跳转至 A 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
    )
参数
属性

表属性的ID。

参数

参数标识。

标签

如果列值大于参数值,则跳转到的标签。

返回值

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)

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

  • 待比较值的表列的属性IDval

  • 如果常量值小于或等于列值,则跳转至 A Label(先前使用 定义)def_label()

当用于比较两个表列值时,该方法采用此处列出的三个参数:

  • AttrId1:要比较值的第一个表列的属性ID

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

  • label:如果第一列值小于或等于第二列,则跳转到此

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

返回值

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
    )
参数
属性

表属性的ID。

参数

参数标识。

标签

如果列值不大于参数值,则跳转到的标签。

返回值

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)

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

  • 待比较值的表列的属性IDval

  • 如果常量值小于列值,则跳转至 A Label(先前使用 定义)def_label()

用于比较两个表列值时, branch_col_lt()取以下三个参数:

  • AttrId1:要比较值的第一个表列的属性ID

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

  • label: 如果第一列值小于第二列则跳转到这里

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

返回值

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
    )
参数
属性

表属性的ID。

参数

参数标识。

标签

如果列值小于参数值,则跳转到的标签。

返回值

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)

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

  • 待比较值的表列的属性IDval

  • 如果比较值不相等,则跳转到 A Label(之前使用 定义)def_label()

比较两个表列值时,需要的参数如下所示:

  • AttrId1:要比较值的第一个表列的属性ID

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

  • label:如果比较的列不相同,则跳转到的位置。必须已经使用定义 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
    )
参数
属性

表属性的ID。

参数

参数标识。

标签

如果参数不相等则跳转到的标签。

返回值

0 成功。

NdbInterpretedCode::branch_col_notlike()

描述

此方法类似于根据 branch_col_like()正则表达式模式测试表列值;但是,仅当模式和列值 匹配时,它才会跳转到指定的程序标签。

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

该方法采用以下四个参数:

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

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

  • 正在测试的表列的属性 ID

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

返回值

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

NdbInterpretedCode::branch_eq()

描述

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

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

该方法采用三个参数,即要比较其值的寄存器——RegLvalue和 ——以及如果它们相等则跳转到RegRvalue的程序 。之前必须使用 . LabelLabeldef_label()

返回值

0关于成功,-1关于失败。

NdbInterpretedCode::branch_eq_null()

描述

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

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

该方法有两个参数,一个是要与NULL ( RegLvalue) 比较其值的寄存器,一个是如果为空 Label则跳转到 的程序。之前必须使用 . RegLvalueLabeldef_label()

返回值

0关于成功,-1关于失败。

NdbInterpretedCode::branch_ge()

描述

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

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

该方法采用三个参数,即要比较其值的寄存器——RegLvalue和 ——以及如果大于或等于则跳转到 RegRvalue的程序 。 之前必须使用 . LabelRegLvalueRegRvalueLabeldef_label()

返回值

0关于成功,-1关于失败。

NdbInterpretedCode::branch_gt()

描述

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

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

该方法采用三个参数,其值要进行比较的寄存器——RegLvalue和 ——以及如果大于 则跳转到 RegRvalue的程序 。 之前必须使用 . LabelRegLvalueRegRvalueLabeldef_label()

返回值

0关于成功,-1关于失败。

NdbInterpretedCode::branch_label()

描述

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

签名
int branch_label
    (
      Uint32 Label
    )
参数

此方法采用单个参数,即 Label使用 def_label().

返回值

0关于成功,-1关于失败。

NdbInterpretedCode::branch_le()

描述

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

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

该方法采用三个参数,即要比较其值的寄存器——RegLvalue和 ——以及如果小于或等于要跳转到 RegRvalue的程序 。 之前必须使用 . LabelRegLvalueRegRvalueLabeldef_label()

返回值

0关于成功,-1关于失败。

NdbInterpretedCode::branch_lt()

描述

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

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

该方法采用三个参数,其值要进行比较的寄存器——RegLvalue和 ——以及如果小于 则跳转到 RegRvalue的程序 。 之前必须使用 . LabelRegLvalueRegRvalueLabeldef_label()

返回值

0关于成功,-1关于失败。

NdbInterpretedCode::branch_ne()

描述

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

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

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

返回值

0关于成功,-1关于失败。

NdbInterpretedCode::branch_ne_null()

描述

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

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

该方法有两个参数,一个是要与NULL ( RegLvalue) 比较其值的寄存器,另一个是如果不为空 Label则跳转到 的程序。之前必须使用 . RegLvalueLabeldef_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 对象的指针。NULL如果在实例化时未提供表对象,则 返回NdbInterpretedCode

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)

    • 指向 a 的 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可以与 RegSource1或 相同RegSource2

返回值

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)

    • 指向 a 的 column指针——即指向 Column引用表列的对象 的指针

  • 要复制其值的寄存器 ( RegSource)。

返回值

成功回报0-1失败时。