文件首頁
MySQL NDB Cluster API 開發人員指南
相關文件 下載本手冊
PDF (US Ltr) - 3.6Mb
PDF (A4) - 3.6Mb


2.3.23 NdbScanFilter 類別

本節提供關於 NdbScanFilter 類別的資訊。

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:邏輯分組運算子,例如 ANDOR

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);
}

NdbScanFilter::begin()

描述

此方法用於啟動複合條件,並指定用於分組構成複合條件的條件的邏輯運算子。預設值為 AND

簽章
int begin
    (
      Group group = AND
    )
參數

Group 值:ANDORNANDNOR 中的一個。如需其他資訊,請參閱 NdbScanFilter::Group

傳回值

成功時為 0,失敗時為 -1

NdbScanFilter::BinaryCondition

本節提供關於 BinaryCondition 資料類型的資訊。

描述

此類型表示基於將欄位值與某些任意值進行比較的條件,也就是邊界條件。此類型的值會作為 cmp() 方法的第一個引數。

當與 COND_EQCOND_NECOND_LTCOND_LECOND_GTCOND_GE 進行比較時,固定長度的字元和二進位欄位值必須以欄位大小作為前綴,並且必須填充至指定長度。當這些值用於 COND_LIKECOND_NOTLIKECOL_AND_MASK_EQ_MASKCOL_AND_MASK_NE_MASKCOL_AND_MASK_EQ_ZEROCOL_AND_MASK_NE_ZERO 比較時,則不需要這樣做。

使用 COND_LIKECOND_NOTLIKE 比較的字串可以使用模式中繼字元 %_。如需更多資訊,請參閱 NdbScanFilter::cmp()

BIT 比較運算子為 COL_AND_MASK_EQ_MASKCOL_AND_MASK_NE_MASKCOL_AND_MASK_EQ_ZEROCOL_AND_MASK_NE_ZERONdbInterpretedCodeNdbOperation 類別提供了相對應的方法;如需這些方法的更多資訊,請參閱 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

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_LIKECOND_NOTLIKE 比較條件時,value 會被視為字串模式。此字串不能填補或使用前綴。value 字串可以包含模式中繼字元或 萬用字元 %_,其含義如下所示

    表 2.60:與 COND_LIKE 和 COND_NOTLIKE 比較搭配使用的模式中繼字元

    中繼字元 描述
    % 符合零個或多個字元
    _ 完全符合一個字元

    若要符合字面上的 %_ 字元,請使用反斜線 (\) 作為跳脫字元。若要符合字面上的 \ 字元,請使用 \\

    這些與 SQL LIKENOT LIKE 運算子支援的萬用字元相同,並且以相同方式解譯。如需更多資訊,請參閱 字串比較函數和運算子

  • length:要比較的值的長度。預設值為 0。使用 length0 與比較 NULL 的效果相同,也就是使用 isnull() 方法。

當用於比較兩個欄位時,cmp() 會採用下列參數

  • condition:比較欄位時要測試的條件。此條件可以是任何一個 BinaryCondition 值:EQNELTLEGTGE。不接受其他值。

  • 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
    )
參數

此方法採用兩個參數,在此列出

  • 要測試值的欄位的 ID (ColId)

  • 要與欄位值比較的整數;此整數可以是 32 位元或 64 位元,並且在任何情況下都是不帶正負號。

傳回值

成功時傳回 0,失敗時傳回 -1

NdbScanFilter::isfalse()

描述

將目前群組的術語定義為 FALSE

簽章
int isfalse
    (
      void
    )
參數

.

傳回值

成功時傳回 0,失敗時傳回 -1

NdbScanFilter::isnotnull()

描述

此方法用於檢查欄位值是否不是 NULL

簽章
int isnotnull
    (
      int ColId
    )
參數

要測試值的欄位的 ID。

傳回值

如果欄位值不是 NULL,則傳回 0

NdbScanFilter::isnull()

描述

此方法用於檢查欄位值是否為 NULL

簽章
int isnull
    (
      int ColId
    )
參數

要測試值的欄位的 ID。

傳回值

如果欄位值為 NULL,則傳回 0

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 方法相同,此方法會採用兩個參數

  • 要測試值的欄位的 ID (ColId)

  • 要與欄位值比較的整數;此整數可以是 32 位元或 64 位元,並且在任何情況下都是不帶正負號。

傳回值

成功時傳回 0;失敗時傳回 -1

NdbScanFilter::getNdbError()

描述

由於建立 NdbScanFilter 時遇到的錯誤不會傳播到任何相關的 NdbOperation 物件,因此必須使用此方法來存取錯誤資訊。

簽章
const NdbError& getNdbError
    (
      void
    )
參數

.

傳回值

NdbError 的參考。

NdbScanFilter::getNdbOperation()

描述

如果 NdbScanFilter 是以 NdbOperation 建構的,則可以使用此方法來取得指向該 NdbOperation 物件的指標。

簽章
NdbOperation* getNdbOperation
    (
      void
    )
參數

.

傳回值

指向與此 NdbScanFilter 相關聯的 NdbOperation 的指標 (如果有的話)。否則為 NULL

NdbScanFilter::Group

此章節提供有關 Group 資料類型的資訊。

描述

此類型用於描述邏輯 (分組) 運算子,並與 begin() 方法搭配使用。(請參閱 NdbScanFilter::begin()。)

列舉值

下表顯示可能的值及其描述

表 2.61: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 方法一樣,此方法採用兩個參數。

  • 要測試值的欄位的 ID (ColId)

  • 要與欄位值比較的整數;此整數可以是 32 位元或 64 位元,並且在任何情況下都是不帶正負號。

傳回值

成功時傳回 0;失敗時傳回 -1

NdbScanFilter::le()

描述

此方法用於對欄位值和整數執行小於或等於測試。

簽章

此方法有兩個變體,以支援 32 位元和 64 位元的值。

int le
    (
      int    ColId,
      Uint32 value
    )


int le
    (
      int    ColId,
      Uint64 value
    )
參數

與此類型的其他 NdbScanFilter 方法一樣,此方法採用兩個參數。

  • 要測試值的欄位的 ID (ColId)

  • 要與欄位值比較的整數;此整數可以是 32 位元或 64 位元,並且在任何情況下都是不帶正負號。

傳回值

成功時傳回 0,失敗時傳回 -1

NdbScanFilter::lt()

描述

此方法用於對欄位值和整數執行小於(嚴格下限)測試。

簽章

此方法具有 32 位元和 64 位元變體,如下所示

int lt
    (
      int    ColId,
      Uint32 value
    )

int lt
    (
      int    ColId,
      Uint64 value
    )
參數

eq()ne() 以及此類型的其他 NdbScanFilter 方法一樣,此方法採用兩個參數,在此列出。

  • 要測試值的欄位的 ID (ColId)

  • 要與欄位值比較的整數;此整數可以是 32 位元或 64 位元,並且在任何情況下都是不帶正負號。

傳回值

成功時傳回 0,失敗時傳回 -1

NdbScanFilter::ne()

描述

此方法用於對欄位值和整數執行不等式測試。

簽章

此方法具有 32 位元和 64 位元變體,如下所示

int ne
    (
      int    ColId,
      Uint32 value
    )

int ne
    (
      int    ColId,
      Uint64 value
    )
參數

eq() 以及此類型的其他 NdbScanFilter 方法一樣,此方法採用兩個參數。

  • 要測試值的欄位的 ID (ColId)

  • 要與欄位值比較的整數;此整數可以是 32 位元或 64 位元,並且在任何情況下都是不帶正負號。

傳回值

成功時傳回 0,失敗時傳回 -1

NdbScanFilter::reset()

描述

此方法會重設 NdbScanFilter 物件,捨棄任何先前的篩選條件定義和錯誤狀態。

簽章
void reset
    (
      void
    )
參數

.

傳回值

.

reset()setSqlCmpSemantics() 設定的 SQL 相容 NULL 比較模式沒有影響。

此方法是在 NDB 8.0 中新增的。

NdbScanFilter::setSqlCmpSemantics()

描述

傳統上,在進行涉及 NULL 的比較時,NdbScanFilterNULL 視為等於 NULL(因此認為 NULL == NULLTRUE)。這與 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 中新增的。