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


2.3.23 NdbScanFilter 类

本节提供有关 NdbScanFilter 类的信息。

NdbScanFilter 类概述

父类

子类

描述

NdbScanFilter 提供了一种替代方法来指定扫描操作的过滤器。

由于此接口的开发仍在进行中,因此 NdbScanFilter 类的特性可能会在将来的版本中发生变化。

方法

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

表 2.58 NdbScanFilter 类方法和描述

名称 描述
NdbScanFilter() 构造函数方法
~NdbScanFilter() 析构函数方法
begin() 开始一个复合条件(条件集)
cmp() 将列值与任意值进行比较
cmp_param() 将列值与提供的参数的值进行比较
end() 结束一个复合条件
eq() 测试相等性
ge() 测试大于或等于条件
getNdbError() 提供对错误信息的访问
getNdbOperation() 获取关联的 NdbOperation
gt() 测试大于条件
isfalse() 将复合条件中的一个项定义为 FALSE
isnotnull() 测试列值是否不为 NULL
isnull() 测试列值是否为 NULL
istrue() 将复合条件中的一个项定义为 TRUE
le() 测试小于或等于条件
lt() 测试小于条件
ne() 测试不相等
reset() 重置此 NdbScanFilter 对象
setSqlCmpSemantics() 强制使用符合 SQL 的 NULL 比较处理

类型

NdbScanFilter 类定义了两个公共类型

  • BinaryCondition: 条件类型,例如下限或上限。

  • Group: 逻辑分组运算符,例如 ANDOR

NdbScanFilter 整数比较方法.  NdbScanFilter 提供了几种方便的方法,当要比较的任意值为整数时,可以使用这些方法来代替 cmp() 方法:eq()ge()gt()le()lt()ne()

每个方法本质上都是 cmp() 的包装器,它包含该方法的 condition 参数的适当 BinaryCondition 值;例如,NdbScanFilter::eq() 的定义如下

int eq(int columnId, Uint32 value)
{
  return cmp(BinaryCondition::COND_EQ, columnId, &value, 4);
}

NdbScanFilter::begin()

描述

此方法用于启动复合条件,并指定用于对构成复合条件的条件进行分组的逻辑运算符。默认值为 AND

签名
int begin
    (
      Group group = AND
    )
参数

Group 值:ANDORNANDNOR 之一。有关更多信息,请参阅 NdbScanFilter::Group

返回值

成功时为 0,失败时为 -1

NdbScanFilter::BinaryCondition

本节提供有关 BinaryCondition 数据类型的相关信息。

描述

此类型表示基于将列值与某个任意值进行比较的条件,即边界条件。此类型的值为 cmp() 方法的第一个参数。

当与 COND_EQCOND_NECOND_LTCOND_LECOND_GTCOND_GE 进行比较时,固定长度字符和二进制列值必须以列大小为前缀,并且必须填充到长度。对于在 COND_LIKECOND_NOTLIKECOL_AND_MASK_EQ_MASKCOL_AND_MASK_NE_MASKCOL_AND_MASK_EQ_ZEROCOL_AND_MASK_NE_ZERO 比较中使用的此类值,则不需要这样做。

使用 COND_LIKECOND_NOTLIKE 比较的字符串可以使用模式元字符 %_。有关更多信息,请参阅 NdbScanFilter::cmp()

位运算比较运算符为 COL_AND_MASK_EQ_MASKCOL_AND_MASK_NE_MASKCOL_AND_MASK_EQ_ZEROCOL_AND_MASK_NE_ZERONdbInterpretedCodeNdbOperation 提供了相应的方法;有关这些方法的更多信息,请参阅 NdbInterpretedCode 位运算比较操作

枚举值

下表显示了可能的取值以及描述

表 2.59 NdbScanFilter 数据类型值和描述

名称 描述 比较的列类型
COND_EQ 相等 (=) 任何
COND_NE 不相等 (<>!=) 任何
COND_LE 下限 (<=) 任何
COND_LT 严格下限 (<) 任何
COND_GE 上限 (>=) 任何
COND_GT 严格上限 (>) 任何
COND_LIKE LIKE 条件 字符串或二进制
COND_NOTLIKE NOT LIKE 条件 字符串或二进制
COL_AND_MASK_EQ_MASK 列值 AND 位掩码等于位掩码 BIT
COL_AND_MASK_NE_MASK 列值与位掩码进行AND运算的结果不等于位掩码。 BIT
COL_AND_MASK_EQ_ZERO 列值与位掩码进行AND运算的结果等于零。 BIT
COL_AND_MASK_NE_ZERO 列值与位掩码进行AND运算的结果不等于零。 BIT

NdbScanFilter::cmp()

描述

此方法用于定义给定值与列值的比较。在 NDB 8.0 中,它也可以用于比较两个列。(此方法实际上并不执行比较,比较将在稍后执行扫描时完成,该扫描定义了此NdbScanFilter。)

在许多情况下,如果要比较的值是整数,则可以使用 NdbScanFilter 提供的几种便利方法来实现此目的。请参阅NdbScanFilter 整数比较方法

签名
int cmp
    (
      BinaryCondition condition,
      int columnId,
      const void* value,
      Uint32 length = 0
    )

此外,在 NDB 8.0 中

int cmp
    (
      BinaryCondition condition,
      int ColumnId1,
      int ColumnId2
    )
参数

当用于将值与列进行比较时,此方法接受以下参数

  • condition:它表示要测试的条件,该条件将具有列 ID columnID 的列值与某个任意值进行比较。 condition 是一个 BinaryCondition 值;有关允许的值及其表示的关系,请参阅NdbScanFilter::BinaryCondition

    conditionCOND_LIKECOND_NOTLIKE 用于将列值与字符串模式进行比较。

  • columnId:这是列的标识符,可以使用 Column::getColumnNo() 方法获得。

  • value:要比较的值,表示为指向 void 的指针。

    当使用 COND_LIKECOND_NOTLIKE 比较条件时, value 被视为字符串模式。此字符串不得填充或使用前缀。字符串 value 可以包含模式元字符或通配符字符 %_,它们的含义如下所示

    表 2.60 与 COND_LIKE 和 COND_NOTLIKE 比较一起使用的模式元字符

    元字符 描述
    % 匹配零个或多个字符
    _ 精确匹配一个字符

    要匹配文字%_字符,请使用反斜杠 (\) 作为转义字符。要匹配文字\字符,请使用 \\

    这些是 SQL LIKENOT LIKE 运算符支持的相同通配符字符,并且以相同的方式解释。有关更多信息,请参阅字符串比较函数和运算符

  • length:要比较的值的长度。默认值为 0。对 length 使用 0 与比较 NULL 的效果相同,即使用 isnull() 方法。

当用于比较两个列时, cmp() 接受以下参数

  • condition:比较列时要测试的条件。条件可以是 BinaryCondition 值中的任意一个,包括 EQNELTLEGTGE。其他值不被接受。

  • columnID1:要比较的两个列中的第一个列的 ID。

  • columnID1:第二个列的 ID。

使用此方法比较的列必须完全相同类型。这包括长度、精度、比例以及所有其他细节。

返回值

此方法返回一个整数:成功时返回 0,失败时返回 -1

NdbScanFilter::cmp_param()

描述

此方法用于定义列值与具有指定 ID 的参数值的比较。比较实际上是在执行定义此 NdbScanFilter 的扫描时完成的。

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

签名
int cmp_param()
    (
      BinaryCondition condition,
      int colId,
      int paramId
    )
参数

当用于将值与列进行比较时,此方法接受以下参数

  • condition:它表示要测试的条件,该条件将具有列 ID columnID 的列值与某个任意值进行比较。 condition 是一个 BinaryCondition 值;有关允许的值及其表示的关系,请参阅NdbScanFilter::BinaryCondition

    conditionCOND_LIKECOND_NOTLIKE 用于将列值与字符串模式进行比较。

  • colId:这是列的标识符,可以使用 Column::getColumnNo() 方法获得。

  • paramId:要比较其值的参数的 ID。

使用此方法比较的值必须完全相同类型。这包括长度、精度、比例以及所有其他细节。

返回值

此方法返回一个整数:成功时返回 0,失败时返回 -1

NdbScanFilter 构造函数

描述

这是 NdbScanFilter 的构造函数,它创建一个该类的新的实例。

签名
NdbScanFilter
    (
      class NdbOperation* op
    )
参数

此方法接受一个参数,指向该过滤器适用的 NdbOperation 的指针。

返回值

NdbScanFilter 的新实例。

析构函数

析构函数不接受任何参数,也不返回值。应调用它以在不再需要 NdbScanFilter 对象时将其删除。

NdbScanFilter::end()

描述

此方法完成一个复合运算,表示没有更多条件要添加到其中。

签名
int end
    (
      void
    )
参数

.

返回值

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

NdbScanFilter::eq()

描述

此方法用于对列值和整数执行相等性测试。

签名
int eq
    (
      int    ColId,
      Uint32 value
    )

或者

int eq
    (
      int    ColId,
      Uint64 value
    )
参数

此方法接受两个参数,如下所示

  • 要测试其值的列的 ID (ColId)

  • 一个要与列值比较的整数;该整数可以是 32 位或 64 位,并且在任一情况下均为无符号数。

返回值

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

NdbScanFilter::isfalse()

描述

将当前组的项定义为 FALSE

签名
int isfalse
    (
      void
    )
参数

.

返回值

0 表示成功,-1 表示失败。

NdbScanFilter::isnotnull()

描述

此方法用于检查列值是否不为 NULL

签名
int isnotnull
    (
      int ColId
    )
参数

要测试其值的列的 ID。

返回值

如果列值不为 NULL,则返回 0

NdbScanFilter::isnull()

描述

此方法用于检查列值是否为 NULL

签名
int isnull
    (
      int ColId
    )
参数

要测试其值的列的 ID。

返回值

如果列值为 NULL,则返回 0

NdbScanFilter::istrue()

描述

将当前组的项定义为 TRUE

签名
int istrue
    (
      void
    )
参数

.

返回值

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

NdbScanFilter::ge()

描述

此方法用于对列值和整数执行大于或等于测试。

签名

此方法接受 32 位和 64 位值,如下所示

int ge
    (
      int    ColId,
      Uint32 value
    )


int ge
    (
      int    ColId,
      Uint64 value
    )
参数

eq()lt()le() 以及此类型其他 NdbScanFilter 方法类似,此方法接受两个参数

  • 要测试其值的列的 ID (ColId)

  • 一个要与列值比较的整数;该整数可以是 32 位或 64 位,并且在任一情况下均为无符号数。

返回值

0 表示成功;-1 表示失败。

NdbScanFilter::getNdbError()

描述

由于在构建 NdbScanFilter 时遇到的错误不会传播到任何相关的 NdbOperation 对象,因此有必要使用此方法来访问错误信息。

签名
const NdbError& getNdbError
    (
      void
    )
参数

.

返回值

指向 NdbError 的引用。

NdbScanFilter::getNdbOperation()

描述

如果 NdbScanFilter 是使用 NdbOperation 构造的,则可以使用此方法获取指向该 NdbOperation 对象的指针。

签名
NdbOperation* getNdbOperation
    (
      void
    )
参数

.

返回值

指向与此 NdbScanFilter 关联的 NdbOperation 的指针,如果有的话。否则,NULL

NdbScanFilter::Group

本节提供有关 Group 数据类型的信息。

描述

此类型用于描述逻辑(分组)运算符,并与 begin() 方法一起使用。(请参阅NdbScanFilter::begin()。)

枚举值

下表显示了可能的取值以及描述

表 2.61 NdbScanFilter::Group 数据类型值和说明

描述
AND 逻辑 ANDA AND B AND C
OR 逻辑 ORA OR B OR C
NAND 逻辑 NOT ANDNOT (A AND B AND C)
NOR 逻辑 NOT ORNOT (A OR B OR C)

NdbScanFilter::gt()

描述

此方法用于对列值和整数执行大于(严格上界)测试。

签名

此方法适用于 32 位和 64 位值

int gt
    (
      int    ColId,
      Uint32 value
    )


int gt
    (
      int    ColId,
      Uint64 value
    )
参数

与此类型其他 NdbScanFilter 方法类似,此方法接受两个参数

  • 要测试其值的列的 ID (ColId)

  • 一个要与列值比较的整数;该整数可以是 32 位或 64 位,并且在任一情况下均为无符号数。

返回值

0 表示成功;-1 表示失败。

NdbScanFilter::le()

描述

此方法用于对列值和整数执行小于或等于测试。

签名

此方法有两个变体,用于适应 32 位和 64 位值

int le
    (
      int    ColId,
      Uint32 value
    )


int le
    (
      int    ColId,
      Uint64 value
    )
参数

与此类型其他 NdbScanFilter 方法类似,此方法接受两个参数

  • 要测试其值的列的 ID (ColId)

  • 一个要与列值比较的整数;该整数可以是 32 位或 64 位,并且在任一情况下均为无符号数。

返回值

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

NdbScanFilter::lt()

描述

此方法用于对列值和整数执行小于(严格下界)测试。

签名

此方法有 32 位和 64 位变体,如下所示

int lt
    (
      int    ColId,
      Uint32 value
    )

int lt
    (
      int    ColId,
      Uint64 value
    )
参数

eq()ne() 以及此类型其他 NdbScanFilter 方法类似,此方法接受两个参数,如下所示

  • 要测试其值的列的 ID (ColId)

  • 一个要与列值比较的整数;该整数可以是 32 位或 64 位,并且在任一情况下均为无符号数。

返回值

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

NdbScanFilter::ne()

描述

此方法用于对列值和整数执行不相等性测试。

签名

此方法有 32 位和 64 位变体,如下所示

int ne
    (
      int    ColId,
      Uint32 value
    )

int ne
    (
      int    ColId,
      Uint64 value
    )
参数

eq() 以及此类型其他 NdbScanFilter 方法类似,此方法接受两个参数

  • 要测试其值的列的 ID (ColId)

  • 一个要与列值比较的整数;该整数可以是 32 位或 64 位,并且在任一情况下均为无符号数。

返回值

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

NdbScanFilter::reset()

描述

此方法重置 NdbScanFilter 对象,丢弃所有以前的过滤器定义和错误状态。

签名
void reset
    (
      void
    )
参数

.

返回值

.

reset() 对由 setSqlCmpSemantics() 设置的符合 SQL 标准的 NULL 比较模式没有影响。

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

NdbScanFilter::setSqlCmpSemantics()

描述

传统上,在进行涉及 NULL 的比较时,NdbScanFilterNULL 视为等于 NULL(因此认为 NULL == NULLTRUE)。这与 SQL 标准的规定不同,SQL 标准要求任何与 NULL 的比较都返回 NULL,包括 NULL == NULL

从 NDB 8.0.26 开始,可以通过调用此方法来覆盖此行为,此方法不带任何参数。这样做会导致创建的下一个 NdbScanFilter 对象在其整个生命周期内对所有操作采用符合 SQL 标准的 NULL 比较。一旦调用了 setSqlCmpSemantics(),就无法取消设置;调用 reset() 在这方面没有效果。此方法的效果仅限于要创建的下一个 NdbScanFilter 实例;除非事先调用 setSqlCmpSemantics(),否则任何后续实例都将使用传统的比较模式。

此方法对 NULL 排序没有影响;NdbScanFilter 始终认为 NULL 小于任何其他值。

签名
void setSqlCmpSemantics
    (
      void
    )
参数

返回值

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