本节提供有关 NdbScanFilter 类的信息。
- 父类
无
- 子类
无
- 描述
-
NdbScanFilter提供了一种替代方法来指定扫描操作的过滤器。由于此接口的开发仍在进行中,因此
NdbScanFilter类的特性可能会在将来的版本中发生变化。 - 方法
-
下表列出了此类的公共方法以及每个方法的目的或用途
表 2.58 NdbScanFilter 类方法和描述
名称 描述 NdbScanFilter()构造函数方法 ~NdbScanFilter()析构函数方法 begin()开始一个复合条件(条件集) cmp()将列值与任意值进行比较 cmp_param()将列值与提供的参数的值进行比较 end()结束一个复合条件 eq()测试相等性 ge()测试大于或等于条件 getNdbError()提供对错误信息的访问 getNdbOperation()获取关联的 NdbOperationgt()测试大于条件 isfalse()将复合条件中的一个项定义为 FALSEisnotnull()测试列值是否不为 NULLisnull()测试列值是否为 NULListrue()将复合条件中的一个项定义为 TRUEle()测试小于或等于条件 lt()测试小于条件 ne()测试不相等 reset()重置此 NdbScanFilter对象setSqlCmpSemantics()强制使用符合 SQL 的 NULL比较处理
- 类型
-
NdbScanFilter类定义了两个公共类型BinaryCondition: 条件类型,例如下限或上限。Group: 逻辑分组运算符,例如AND或OR。
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);
}
- 描述
此方法用于启动复合条件,并指定用于对构成复合条件的条件进行分组的逻辑运算符。默认值为
AND。- 签名
int begin ( Group group = AND )- 参数
Group值:AND、OR、NAND或NOR之一。有关更多信息,请参阅 NdbScanFilter::Group。- 返回值
成功时为
0,失败时为-1。
本节提供有关 BinaryCondition 数据类型的相关信息。
- 描述
-
此类型表示基于将列值与某个任意值进行比较的条件,即边界条件。此类型的值为
cmp()方法的第一个参数。当与
COND_EQ、COND_NE、COND_LT、COND_LE、COND_GT或COND_GE进行比较时,固定长度字符和二进制列值必须以列大小为前缀,并且必须填充到长度。对于在COND_LIKE、COND_NOTLIKE、COL_AND_MASK_EQ_MASK、COL_AND_MASK_NE_MASK、COL_AND_MASK_EQ_ZERO或COL_AND_MASK_NE_ZERO比较中使用的此类值,则不需要这样做。使用
COND_LIKE和COND_NOTLIKE比较的字符串可以使用模式元字符%和_。有关更多信息,请参阅 NdbScanFilter::cmp()。位运算比较运算符为
COL_AND_MASK_EQ_MASK、COL_AND_MASK_NE_MASK、COL_AND_MASK_EQ_ZERO和COL_AND_MASK_NE_ZERO。NdbInterpretedCode和NdbOperation提供了相应的方法;有关这些方法的更多信息,请参阅 NdbInterpretedCode 位运算比较操作。 - 枚举值
-
下表显示了可能的取值以及描述
表 2.59 NdbScanFilter 数据类型值和描述
名称 描述 比较的列类型 COND_EQ相等 ( =)任何 COND_NE不相等 ( <>或!=)任何 COND_LE下限 ( <=)任何 COND_LT严格下限 ( <)任何 COND_GE上限 ( >=)任何 COND_GT严格上限 (>) 任何 COND_LIKELIKE条件字符串或二进制 COND_NOTLIKENOT LIKE条件字符串或二进制 COL_AND_MASK_EQ_MASK列值 AND位掩码等于位掩码BITCOL_AND_MASK_NE_MASK列值与位掩码进行 AND运算的结果不等于位掩码。BITCOL_AND_MASK_EQ_ZERO列值与位掩码进行 AND运算的结果等于零。BITCOL_AND_MASK_NE_ZERO列值与位掩码进行 AND运算的结果不等于零。BIT
- 描述
-
此方法用于定义给定值与列值的比较。在 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:它表示要测试的条件,该条件将具有列 IDcolumnID的列值与某个任意值进行比较。condition是一个BinaryCondition值;有关允许的值及其表示的关系,请参阅NdbScanFilter::BinaryCondition。condition值COND_LIKE或COND_NOTLIKE用于将列值与字符串模式进行比较。 columnId:这是列的标识符,可以使用Column::getColumnNo()方法获得。-
value:要比较的值,表示为指向void的指针。当使用
COND_LIKE或COND_NOTLIKE比较条件时,value被视为字符串模式。此字符串不得填充或使用前缀。字符串value可以包含模式元字符或“通配符”字符%和_,它们的含义如下所示要匹配文字“%”或“_”字符,请使用反斜杠 (
\) 作为转义字符。要匹配文字“\”字符,请使用\\。这些是 SQL
LIKE和NOT LIKE运算符支持的相同通配符字符,并且以相同的方式解释。有关更多信息,请参阅字符串比较函数和运算符。 length:要比较的值的长度。默认值为0。对length使用0与比较NULL的效果相同,即使用isnull()方法。
当用于比较两个列时,
cmp()接受以下参数condition:比较列时要测试的条件。条件可以是BinaryCondition值中的任意一个,包括EQ、NE、LT、LE、GT或GE。其他值不被接受。columnID1:要比较的两个列中的第一个列的 ID。columnID1:第二个列的 ID。
使用此方法比较的列必须完全相同类型。这包括长度、精度、比例以及所有其他细节。
-
- 返回值
此方法返回一个整数:成功时返回
0,失败时返回-1。
- 描述
-
此方法用于定义列值与具有指定 ID 的参数值的比较。比较实际上是在执行定义此
NdbScanFilter的扫描时完成的。此方法是在 NDB 8.0.27 中添加的。
- 签名
int cmp_param() ( BinaryCondition condition, int colId, int paramId )- 参数
-
当用于将值与列进行比较时,此方法接受以下参数
-
condition:它表示要测试的条件,该条件将具有列 IDcolumnID的列值与某个任意值进行比较。condition是一个BinaryCondition值;有关允许的值及其表示的关系,请参阅NdbScanFilter::BinaryCondition。condition值COND_LIKE或COND_NOTLIKE用于将列值与字符串模式进行比较。 colId:这是列的标识符,可以使用Column::getColumnNo()方法获得。paramId:要比较其值的参数的 ID。
使用此方法比较的值必须完全相同类型。这包括长度、精度、比例以及所有其他细节。
-
- 返回值
此方法返回一个整数:成功时返回
0,失败时返回-1。
- 描述
这是
NdbScanFilter的构造函数,它创建一个该类的新的实例。- 签名
NdbScanFilter ( class NdbOperation* op )- 参数
此方法接受一个参数,指向该过滤器适用的
NdbOperation的指针。- 返回值
NdbScanFilter的新实例。- 析构函数
析构函数不接受任何参数,也不返回值。应调用它以在不再需要
NdbScanFilter对象时将其删除。
- 描述
此方法用于对列值和整数执行相等性测试。
- 签名
-
int eq ( int ColId, Uint32 value )或者
int eq ( int ColId, Uint64 value ) - 参数
-
此方法接受两个参数,如下所示
要测试其值的列的 ID (
ColId)一个要与列值比较的整数;该整数可以是 32 位或 64 位,并且在任一情况下均为无符号数。
- 返回值
成功时返回
0,失败时返回-1。
- 描述
此方法用于对列值和整数执行大于或等于测试。
- 签名
-
此方法接受 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时遇到的错误不会传播到任何相关的NdbOperation对象,因此有必要使用此方法来访问错误信息。- 签名
const NdbError& getNdbError ( void )- 参数
无.
- 返回值
指向
NdbError的引用。
- 描述
如果
NdbScanFilter是使用NdbOperation构造的,则可以使用此方法获取指向该NdbOperation对象的指针。- 签名
NdbOperation* getNdbOperation ( void )- 参数
无.
- 返回值
指向与此
NdbScanFilter关联的NdbOperation的指针,如果有的话。否则,NULL。
本节提供有关 Group 数据类型的信息。
- 描述
此类型用于描述逻辑(分组)运算符,并与
begin()方法一起使用。(请参阅NdbScanFilter::begin()。)- 枚举值
-
下表显示了可能的取值以及描述
表 2.61 NdbScanFilter::Group 数据类型值和说明
值 描述 AND逻辑 AND:AANDBANDCOR逻辑 OR:AORBORCNAND逻辑 NOT AND:NOT (AANDBANDC)NOR逻辑 NOT OR:NOT (AORBORC)
- 描述
此方法用于对列值和整数执行大于(严格上界)测试。
- 签名
-
此方法适用于 32 位和 64 位值
int gt ( int ColId, Uint32 value ) int gt ( int ColId, Uint64 value ) - 参数
-
与此类型其他
NdbScanFilter方法类似,此方法接受两个参数要测试其值的列的 ID (
ColId)一个要与列值比较的整数;该整数可以是 32 位或 64 位,并且在任一情况下均为无符号数。
- 返回值
0表示成功;-1表示失败。
- 描述
此方法用于对列值和整数执行小于或等于测试。
- 签名
此方法有两个变体,用于适应 32 位和 64 位值
int le
(
int ColId,
Uint32 value
)
int le
(
int ColId,
Uint64 value
)
- 参数
-
与此类型其他
NdbScanFilter方法类似,此方法接受两个参数要测试其值的列的 ID (
ColId)一个要与列值比较的整数;该整数可以是 32 位或 64 位,并且在任一情况下均为无符号数。
- 返回值
成功时返回
0,失败时返回-1。
- 描述
此方法用于对列值和整数执行不相等性测试。
- 签名
-
此方法有 32 位和 64 位变体,如下所示
int ne ( int ColId, Uint32 value ) int ne ( int ColId, Uint64 value ) - 参数
-
与
eq()以及此类型其他NdbScanFilter方法类似,此方法接受两个参数要测试其值的列的 ID (
ColId)一个要与列值比较的整数;该整数可以是 32 位或 64 位,并且在任一情况下均为无符号数。
- 返回值
成功时返回
0,失败时返回-1。
- 描述
此方法重置
NdbScanFilter对象,丢弃所有以前的过滤器定义和错误状态。- 签名
void reset ( void )- 参数
无.
- 返回值
无.
reset() 对由 setSqlCmpSemantics() 设置的符合 SQL 标准的 NULL 比较模式没有影响。
此方法是在 NDB 8.0 中添加的。
- 描述
-
传统上,在进行涉及
NULL的比较时,NdbScanFilter将NULL视为等于NULL(因此认为NULL == NULL为TRUE)。这与 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 中添加的。