2.3.23 NdbScanFilter类

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

NdbScanFilter 类概述

家长班

没有任何

儿童班

没有任何

描述

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

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

方法

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

表 2.57 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 OR

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

这些方法中的每一个本质上都是一个包装器, 其中包含该方法参数cmp()的适当值 ;例如, 定义如下: BinaryConditionconditionNdbScanFilter::eq()

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

NdbScanFilter::开始()

描述

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

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

GroupANDORNAND或之一NOR。有关其他信息,请参阅 NdbScanFilter::Group

返回值

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

NdbScanFilter::二进制条件

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

描述

此类型表示基于列值与某个任意值的比较的条件,即绑定条件。此类型的值用作该 cmp()方法的第一个参数。

当用于与COND_EQCOND_NECOND_LTCOND_LECOND_GT或 进行比较时COND_GE,固定长度字符和二进制列值必须以列大小为前缀,并且必须填充到长度。COND_LIKE在、 COND_NOTLIKECOL_AND_MASK_EQ_MASKCOL_AND_MASK_NE_MASKCOL_AND_MASK_EQ_ZEROCOL_AND_MASK_NE_ZERO比较 中使用此类值时,这不是必需的。

COND_LIKE使用and 比较的字符串COND_NOTLIKE可以使用模式元字符%and _。有关详细信息,请参阅 NdbScanFilter::cmp()

BIT比较运算符是 , COL_AND_MASK_EQ_MASK, COL_AND_MASK_NE_MASK, COL_AND_MASK_EQ_ZEROCOL_AND_MASK_NE_ZERO。相应的方法可用于 NdbInterpretedCodeNdbOperation; 有关这些方法的更多信息,请参阅 NdbInterpretedCode 按位比较操作

枚举值

下表显示了可能的值以及说明:

表 2.58 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_LIKEor COND_NOTLIKE比较条件时, thevalue被视为字符串模式。不得填充此字符串或使用前缀。该字符串value可以包含模式元字符或 通配符字符%_,其含义如下所示:

    表 2.59 用于 COND_LIKE 和 COND_NOTLIKE 比较的模式元字符

    元字符 描述
    % 匹配零个或多个字符
    _ 恰好匹配一个字符

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

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

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

当用于比较两列时,cmp() 采用以下参数:

  • condition:比较列时要测试的条件。条件可以是BinaryConditionEQNELTLEGT或中的任何一个GE。不接受其他值。

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

此方法有两个参数,列在此处:

  • ColId待测值列的 ID( )

  • 用于比较列值的整数;这个整数可以是 32 位或 64 位,并且在任何一种情况下都是无符号的。

返回值

返回0成功或 -1失败。

NdbScanFilter::isfalse()

描述

将当前组的一个术语定义为 FALSE

签名
int isfalse
    (
      void
    )
参数

没有

返回值

0成功或-1失败。

NdbScanFilter::isnotnull()

描述

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

签名
int isnotnull
    (
      int ColId
    )
参数

要测试其值的列的 ID。

返回值

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

NdbScanFilter::isnull()

描述

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

签名
int isnull
    (
      int ColId
    )
参数

要测试其值的列的 ID。

返回值

0如果列值为 ,则 返回NULL

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方法一样,此方法有两个参数:

  • ColId待测值列的 ID( )

  • 用于比较列值的整数;这个整数可以是 32 位或 64 位,并且在任何一种情况下都是无符号的。

返回值

0成功时;-1失败时。

NdbScanFilter::getNdbError() 函数

描述

因为构建时遇到的错误 NdbScanFilter不会传播到任何涉及 的NdbOperation对象,所以有必要使用此方法来访问错误信息。

签名
const NdbError& getNdbError
    (
      void
    )
参数

没有

返回值

NdbError.

NdbScanFilter::getNdbOperation()

描述

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

签名
NdbOperation* getNdbOperation
    (
      void
    )
参数

没有

返回值

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

NdbScanFilter::组

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

描述

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

枚举值

下表显示了可能的值以及说明:

表 2.60 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方法一样,此方法有两个参数:

  • ColId待测值列的 ID( )

  • 用于比较列值的整数;这个整数可以是 32 位或 64 位,并且在任何一种情况下都是无符号的。

返回值

0成功时;-1失败时。

NdbScanFilter::le()

描述

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

签名

此方法有两种变体,以适应 32 位和 64 位值:

int le
    (
      int    ColId,
      Uint32 value
    )


int le
    (
      int    ColId,
      Uint64 value
    )
参数

与该类型的其他NdbScanFilter方法一样,此方法有两个参数:

  • ColId待测值列的 ID( )

  • 用于比较列值的整数;这个整数可以是 32 位或 64 位,并且在任何一种情况下都是无符号的。

返回值

返回0成功或 -1失败。

NdbScanFilter::lt()

描述

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

签名

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

int lt
    (
      int    ColId,
      Uint32 value
    )

int lt
    (
      int    ColId,
      Uint64 value
    )
参数

eq()ne()和该类型的其他NdbScanFilter方法一样,该方法采用两个参数,如下所列:

  • ColId待测值列的 ID( )

  • 用于比较列值的整数;这个整数可以是 32 位或 64 位,并且在任何一种情况下都是无符号的。

返回值

返回0成功或 -1失败。

NdbScanFilter::ne()

描述

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

签名

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

int ne
    (
      int    ColId,
      Uint32 value
    )

int ne
    (
      int    ColId,
      Uint64 value
    )
参数

与此类型eq()的其他NdbScanFilter方法一样,此方法有两个参数:

  • ColId待测值列的 ID( )

  • 用于比较列值的整数;这个整数可以是 32 位或 64 位,并且在任何一种情况下都是无符号的。

返回值

返回0成功或 -1失败。

NdbScanFilter::重置()

描述

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

签名
void reset
    (
      void
    )
参数

没有

返回值

没有

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

NDB 8.0 中添加了此方法。

NdbScanFilter::setSqlCmpSemantics()

描述

传统上,在进行涉及 的比较时 NULLNdbScanFilterNULL视为等于NULL (因此认为NULL == NULLTRUE)。这与 SQL 标准指定的不同,后者要求与 NULLreturn进行任何比较NULL,包括NULL == NULL.

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

该方法对NULL 排序没有影响;NdbScanFilter总是被认为 NULL小于任何其他值。

签名
void setSqlCmpSemantics
    (
      void
    )
参数

没有任何

返回值

没有任何

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