本節提供關於 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()。BIT
比較運算子為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 中新增的。