本节提供有关 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
: 逻辑分组运算符,例如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_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
- 描述
-
此方法用于定义给定值与列值的比较。在 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
:A
ANDB
ANDC
OR
逻辑 OR
:A
ORB
ORC
NAND
逻辑 NOT AND
:NOT (
A
ANDB
ANDC
)NOR
逻辑 NOT OR
:NOT (
A
ORB
ORC
)
- 描述
此方法用于对列值和整数执行大于(严格上界)测试。
- 签名
-
此方法适用于 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 中添加的。