本節提供關於 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()。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_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:AORBORC反及閘 (NAND)邏輯 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 中新增的。