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


2.3.19 NdbInterpretedCode 類別

本節提供有關 NdbInterpretedCode 類別的資訊,該類別可用於準備和執行 NDB API 解譯程式。

NdbInterpretedCode 類別概觀

父類別

.

子類別

.

說明

NdbInterpretedCode 代表一個解譯程式,用於使用 NdbRecord 建立的操作,或使用舊版 API 建立的掃描。 NdbScanFilter 類別也可使用此類別產生 NDB 解譯程式。

若要建立 NdbInterpretedCode 物件,請叫用建構函式,選擇性地提供程式要操作的資料表,以及用於程式儲存和最終化的緩衝區。如果未提供資料表,則只能使用不存取資料表屬性的指令。在 NDB 8.0 中,可以使用 Ndbrecord 的執行個體來取代 Table

每個 NDB API 操作都適用於一個資料表,任何附加至該操作的 NdbInterpretedCode 程式也是如此。

如果未提供緩衝區,則會動態配置內部緩衝區,並在必要時延伸。建立 NdbInterpretedCode 物件後,您可以透過呼叫本節稍後描述的適當方法,將指令和標籤新增至其中。程式完成後,請呼叫 finalise() 方法將其最終化,這會解析任何剩餘的內部分支,並呼叫標籤和副程式偏移。

單一最終化的 NdbInterpretedCode 程式可以由多個操作使用。它不需要為後續操作重新準備。

若要將程式與 NdbRecord 操作和掃描搭配使用,請在使用 OperationOptionsScanOptions 參數定義操作時傳遞它。當不再需要程式時,可以刪除 NdbInterpretedCode 物件,以及任何使用者提供的緩衝區。

如需其他資訊和範例,請參閱第 1.6 節, 「使用 NdbInterpretedCode」

此介面仍在開發中,因此可能會在未經通知的情況下變更。 NdbScanFilter API 是用於定義掃描和篩選程式的更穩定 API。

方法

下表列出此類別的公用方法,以及每個方法的用途或用法

表 2.48 NdbInterpretedCode 類別方法與說明

名稱 說明
NdbInterpretedCode() 類別建構函式
add_reg() 新增兩個暫存器值,並將結果儲存到第三個暫存器中
add_val() 將值新增至資料表資料行值
branch_col_and_mask_eq_mask() 如果資料行值與位元遮罩執行 AND 運算後等於位元遮罩,則跳轉
branch_col_and_mask_eq_zero() 如果資料行值與位元遮罩執行 AND 運算後等於 0,則跳轉
branch_col_and_mask_ne_mask() 如果資料行值與位元遮罩執行 AND 運算後不等於位元遮罩,則跳轉
branch_col_and_mask_ne_zero() 如果資料行值與位元遮罩執行 AND 運算後不等於 0,則跳轉
branch_col_eq() 如果資料行值等於另一個資料行值,則跳轉
branch_col_eq_param() 如果資料行值等於提供的參數,則跳轉
branch_col_eq_null() 如果資料行值為 NULL,則跳轉
branch_col_ge() 如果資料行值大於或等於另一個資料行值,則跳轉
branch_col_ge_param() 如果資料行值大於或等於提供的參數,則跳轉
branch_col_gt() 如果資料行值大於另一個資料行值,則跳轉
branch_col_gt_param() 如果資料行值大於提供的參數,則跳轉
branch_col_le() 如果資料行值小於或等於另一個資料行值,則跳轉
branch_col_like() 如果資料行值符合模式,則跳轉
branch_col_lt() 如果資料行值小於另一個資料行值,則跳轉
branch_col_ne() 如果資料行值不等於另一個資料行值,則跳轉
branch_col_ne_null() 如果資料行值不是 NULL,則跳轉
branch_col_ne_param() 如果資料行值不等於提供的參數,則跳轉
branch_col_notlike() 如果資料行值不符合模式,則跳轉
branch_eq() 如果一個暫存器值等於另一個暫存器值,則跳轉
branch_eq_null() 如果暫存器值為 NULL,則跳轉
branch_ge() 如果一個暫存器值大於或等於另一個暫存器值,則跳轉
branch_gt() 如果一個暫存器值大於另一個暫存器值,則跳轉
branch_label() 無條件跳轉到標籤
branch_le() 如果一個暫存器值小於或等於另一個暫存器值,則跳轉
branch_col_le_param() 如果資料行值大於或等於提供的參數,則跳轉
branch_lt() 如果一個暫存器值小於另一個暫存器值,則跳轉
branch_col_lt_param() 如果欄位值小於提供的參數,則跳轉
branch_ne() 如果一個暫存器值不等於另一個暫存器值,則跳轉
branch_ne_null() 如果暫存器值不是 NULL,則跳轉
call_sub() 呼叫副程式
copy() 建立 NdbInterpretedCode 物件的深層複製
def_label() 建立在直譯程式中使用的標籤
def_sub() 定義副程式
finalise() 完成直譯程式並準備使用
getNdbError() 取得與此 NdbInterpretedCode 物件相關聯的最新錯誤
getTable() 取得定義程式的資料表
getWordsUsed() 取得緩衝區中使用的字組數
interpret_exit_last_row() 傳回列作為結果的一部分,且不再檢查此片段中的其他列
interpret_exit_nok() 不傳回列作為結果的一部分
interpret_exit_ok() 傳回列作為結果的一部分
load_const_null() NULL 值載入到暫存器中
load_const_u16() 將 16 位元數值載入到暫存器中
load_const_u32() 將 32 位元數值載入到暫存器中
load_const_u64() 將 64 位元數值載入到暫存器中
read_attr() 將資料表欄位值讀取到暫存器中
reset() 捨棄程式
ret_sub() 從副程式傳回
sub_reg() 減去兩個暫存器值並將結果儲存在第三個暫存器中
sub_val() 從資料表欄位值中減去一個值
write_attr() 將暫存器值寫入資料表欄位中

為了效率考量,此類別的方法會提供最少的錯誤檢查。

另請參閱 第 1.6 節「使用 NdbInterpretedCode」

類型

此類別未定義任何公開類型。

NdbInterpretedCode 建構函式

說明

這是 NdbInterpretedCode 類別建構函式。

簽章
NdbInterpretedCode
    (
      const NdbDictionary::Table* table = 0,
      Uint32* buffer = 0,
      Uint32 buffer_word_size = 0
    )
替代建構函式 (NDB 8.0)
NdbInterpretedCode
    (
      const NdbRecord&,
      Uint32* buffer = 0,
      Uint32 buffer_word_size = 0);
參數

NdbInterpretedCode 建構函式採用三個參數,如下所述

  • 執行此程式所依據的 table。在 NDB 8.0 之前,如果程式是資料表專屬的 (也就是說,如果它從資料表中的欄位讀取或寫入),則必須提供此參數。在 NDB 8.0 中,建構函式接受 NdbRecord 來取代 Table

  • 用於儲存程式的 32 位元字組 buffer 的指標。

  • buffer_word_size 是傳入緩衝區的長度。如果程式超過此長度,則新增新指令將會失敗,並顯示錯誤 4518 直譯程式中的指令過多

    或者,如果未傳遞任何緩衝區,則會在內部動態配置緩衝區,並擴充以處理新增的指令。

傳回值

NdbInterpretedCode 的執行個體。

NdbInterpretedCode::add_reg()

說明

此方法會加總任何兩個指定暫存器中儲存的值,並將結果儲存在第三個暫存器中。

簽章
int add_reg
    (
      Uint32 RegDest,
      Uint32 RegSource1,
      Uint32 RegSource2
    )
參數

此方法採用三個參數。第一個參數是儲存結果的暫存器 (RegDest)。第二個和第三個參數 (RegSource1RegSource2) 是要加總其值的暫存器。

為了儲存結果,可以重複使用加總其值的其中一個暫存器;也就是說,RegDest 可以與 RegSource1RegSource2 相同。

傳回值

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

NdbInterpretedCode::add_val()

說明

此方法會將指定的值新增至指定資料表欄位的值,並將原始和修改後的欄位值放在暫存器 6 和 7 中。這相當於下列系列的 NdbInterpretedCode 方法呼叫,其中 attrId 是資料表欄位的屬性 ID,而 aValue 是要新增的值

read_attr(6, attrId);
load_const_u32(7, aValue);
add_reg(7,6,7);
write_attr(attrId, 7);

aValue 可以是 32 位元或 64 位元整數。

簽章

此方法可以使用兩種方式之一來叫用,具體取決於 aValue 是 32 位元還是 64 位元。

32 位元 aValue

int add_val
    (
      Uint32 attrId,
      Uint32 aValue
    )

64 位元 aValue

int add_val
    (
      Uint32 attrId,
      Uint64 aValue
    )
參數

資料表欄位屬性 ID 以及要新增至此欄位值的 32 位元或 64 位元整數值。

傳回值

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

NdbInterpretedCode::branch_col_and_mask_eq_mask()

說明

此方法用於將 BIT 欄位值與位元遮罩進行比較;如果欄位值與位元遮罩進行 AND 運算後等於位元遮罩,則執行會跳轉到方法呼叫中指定的指定標籤。

簽章
int branch_col_and_mask_eq_mask
    (
      const void* mask,
      Uint32 unused,
      Uint32 attrId,
      Uint32 label
    )
參數

此方法可以接受四個參數,其中實際使用三個。這些參數在以下清單中說明

  • 要與欄位值比較的常數 mask 的指標

  • 目前為 unusedUint32 值。

  • 要比較的欄位的 attrId

  • 如果條件為 true,則跳轉到的程式 label

    在 NDB 8.0.30 之前,此引數對於非零值處理不正確。(錯誤 #33888962)

傳回值

此方法成功時傳回 0,失敗時傳回 -1

NdbInterpretedCode::branch_col_and_mask_eq_zero()

說明

此方法用於將 BIT 欄位值與位元遮罩進行比較;如果欄位值與位元遮罩進行 AND 運算後等於 0,則執行會跳轉到方法呼叫中指定的指定標籤。

簽章
int branch_col_and_mask_eq_zero
    (
      const void* mask,
      Uint32 unused,
      Uint32 attrId,
      Uint32 label
    )
參數

此方法可以接受下列四個參數,其中實際使用三個

  • 要與欄位值比較的常數 mask 的指標。

  • 目前為 unusedUint32 值。

  • 要比較的欄位的 attrId

  • 如果條件為 true,則跳轉到的程式 label

    在 NDB 8.0.30 之前,此引數對於非零值處理不正確。(錯誤 #33888962)

傳回值

此方法成功時傳回 0,失敗時傳回 -1

NdbInterpretedCode::branch_col_and_mask_ne_mask()

說明

此方法用於將 BIT 欄位值與位元遮罩進行比較;如果欄位值與位元遮罩進行 AND 運算後不等於位元遮罩,則執行會跳轉到方法呼叫中指定的指定標籤。

簽章
int branch_col_and_mask_ne_mask
    (
      const void* mask,
      Uint32 unused,
      Uint32 attrId,
      Uint32 label
    )
參數

此方法接受四個參數,其中實際使用三個。這些參數在以下清單中說明

  • 要與欄位值比較的常數 mask 的指標。

  • 目前為 unusedUint32 值。

  • 要比較的欄位的 attrId

  • 如果條件為 true,則跳轉到的程式 label

    在 NDB 8.0.30 之前,此引數對於非零值處理不正確。(錯誤 #33888962)

傳回值

此方法成功時傳回 0,失敗時傳回 -1

NdbInterpretedCode::branch_col_and_mask_ne_zero()

說明

此方法用於將 BIT 欄位值與位元遮罩進行比較;如果欄位值與位元遮罩進行 AND 運算後不等於 0,則執行會跳轉到方法呼叫中指定的指定標籤。

簽章
int branch_col_and_mask_ne_zero
    (
      const void* mask,
      Uint32 unused,
      Uint32 attrId,
      Uint32 label
    )
參數

此方法接受下列四個參數,其中實際使用三個

  • 要與欄位值比較的常數 mask 的指標。

  • 目前為 unusedUint32 值。

  • 要比較的欄位的 attrId

  • 如果條件為 true,則跳轉到的程式 label

    在 NDB 8.0.30 之前,此引數對於非零值處理不正確。(錯誤 #33888962)

傳回值

此方法成功時傳回 0,失敗時傳回 -1

NdbInterpretedCode::branch_col_eq()

說明

此方法會將資料表欄位值與任意常數進行比較,如果值相等,則跳轉到指定的程式標籤。在 NDB 8.0 中,它也可以用於比較兩個欄位是否相等。

簽章

比較欄位與值

int branch_col_eq
    (
      const void* val,
      Uint32 len,
      Uint32 attrId,
      Uint32 Label
    )

比較兩個欄位

int branch_col_eq
    (
      Uint32 attrId1,
      Uint32 attrId2,
      Uint32 label
    )
參數

比較欄位和值時,此方法採用下列四個參數

  • 常數值 (val)

  • 值的長度 (以位元組為單位)

  • 要與 val 比較其值的資料表欄位的屬性 ID

  • 如果比較的值相等,則跳轉到的 Label (先前使用 def_label() 定義)

比較兩個資料表欄位值時,所需的參數會顯示在此處

  • AttrId1:要比較其值的第一個資料表欄位的屬性 ID

  • AttrId2:第二個資料表欄位的屬性 ID

  • label:如果比較的欄位相同,則跳轉到的位置。必須已使用 def_label() 定義

使用此方法比較兩個欄位時,這些欄位必須完全屬於相同的類型。

傳回值

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

NdbInterpretedCode::branch_col_eq_null()

說明

此方法會測試資料表欄位的值,如果欄位值為 NULL,則跳轉到指示的程式標籤。

簽章
int branch_col_eq_null
    (
      Uint32 attrId,
      Uint32 Label
    )
參數

此方法需要下列兩個參數

  • 資料表欄位的屬性 ID

  • 如果欄位值為 NULL,則跳轉到的程式標籤

傳回值

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

NdbInterpretedCode::branch_col_eq_param()

說明

比較資料表屬性與參數 (每個都由 ID 指定),如果相等,則分支到指定的標籤。在 NDB 8.0.27 中新增。

參數可以是 NULL,並根據生效的 NULL 處理模式進行比較;預設值是將 NULL 視為小於任何其他值,以及 NULL 等於 NULL。您可以覆寫此行為,並強制執行符合 SQL 標準的 NULL 處理,方法是叫用 setSqlCmpSemantics()

簽章
int branch_col_eq_param
    (
      Uint32 attrId, 
      Uint32 paramId, 
      Uint32 label
    )
參數
attrId

資料表屬性的 ID。

paramId

參數 ID。

label

若引數相等,則跳躍至此標籤。

傳回值

成功時為 0。

NdbInterpretedCode::branch_col_ge()

說明

此方法會將資料表欄位值與任意常數進行比較,如果常數值大於或等於欄位值,則跳躍至指定的程式標籤。在 NDB 8.0 中,它也可以用於比較兩個欄位,並且在第一個欄位的值大於或等於第二個欄位的值時執行跳躍。

簽章

將值與欄位比較

int branch_col_ge
    (
      const void* val,
      Uint32 len,
      Uint32 attrId,
      Uint32 label
    )

比較兩個欄位的值

int branch_col_ge
    (
      Uint32 attrId1,
      Uint32 attrId2,
      Uint32 label
    )
參數

當用於將值與欄位比較時,此方法會採用此處列出的四個參數

  • 常數值 (val)

  • 值的長度 (以位元組為單位)

  • 要與 val 比較其值的資料表欄位的屬性 ID

  • 若常數值大於或等於欄位值,則跳躍至此 label (先前使用 def_label() 定義)。

當用於比較兩個欄位時,此方法會採用此處列出的參數

  • AttrId1:要比較其值的第一個資料表欄位的屬性 ID

  • AttrId2:第二個資料表欄位的屬性 ID

  • label:若第一個欄位的值大於或等於第二個欄位的值,則跳躍至此。

當比較兩個欄位時,欄位的類型在所有方面都必須完全相同。

傳回值

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

NdbInterpretedCode::branch_col_ge_param()

說明

將資料表屬性與參數(各自由 ID 指定)進行比較,如果屬性值大於或等於參數值,則分支至指定的標籤。在 NDB 8.0.27 中新增。

參數可以是 NULL,並根據生效的 NULL 處理模式進行比較;預設值是將 NULL 視為小於任何其他值,以及 NULL 等於 NULL。您可以覆寫此行為,並強制執行符合 SQL 標準的 NULL 處理,方法是叫用 setSqlCmpSemantics()

簽章
int branch_col_ge_param
    (
      Uint32 attrId, 
      Uint32 paramId, 
      Uint32 label
    )
參數
attrId

資料表屬性的 ID。

paramId

參數 ID。

label

如果欄位值不小於參數值,則跳躍至此標籤。

傳回值

成功時為 0。

NdbInterpretedCode::branch_col_gt()

說明

此方法會將資料表欄位值與任意常數進行比較,如果常數大於欄位值,則跳躍至指定的程式標籤。在 NDB 8.0 中,此方法已多載,使其可用於比較兩個欄位值,並且在第一個欄位值大於第二個欄位值時執行跳躍。

簽章

將值與欄位比較

int branch_col_ge
    (
      const void* val,
      Uint32 len,
      Uint32 attrId,
      Uint32 label
    )

比較兩個欄位的值

int branch_col_ge
    (
      Uint32 attrId1,
      Uint32 attrId2,
      Uint32 label
    )
參數

當用於將值與資料表欄位比較時,此方法會採用下列四個參數

  • 常數值 (val)

  • 值的長度 (以位元組為單位)

  • 要與 val 比較其值的資料表欄位的屬性 ID

  • 若常數值大於欄位值,則跳躍至此 Label (先前使用 def_label() 定義)。

當用於比較兩個欄位時,此方法會採用此處列出的三個參數

  • AttrId1:要比較其值的第一個資料表欄位的屬性 ID

  • AttrId2:第二個資料表欄位的屬性 ID

  • label:若第一個欄位的值大於或等於第二個欄位的值,則跳躍至此。

當比較兩個欄位時,欄位的類型在所有方面都必須完全相同。

傳回值

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

NdbInterpretedCode::branch_col_gt_param()

說明

將資料表屬性與參數(各自由 ID 指定)進行比較,如果屬性值大於參數值,則分支至指定的標籤。在 NDB 8.0.27 中新增。

參數可以是 NULL,並根據生效的 NULL 處理模式進行比較;預設值是將 NULL 視為小於任何其他值,以及 NULL 等於 NULL。您可以覆寫此行為,並強制執行符合 SQL 標準的 NULL 處理,方法是叫用 setSqlCmpSemantics()

簽章
int branch_col_gt_param
    (
      Uint32 attrId, 
      Uint32 paramId, 
      Uint32 label
    )
參數
attrId

資料表屬性的 ID。

paramId

參數 ID。

label

如果欄位值大於參數值,則跳躍至此標籤。

傳回值

成功時為 0。

NdbInterpretedCode::branch_col_le()

說明

此方法會將資料表欄位值與任意常數進行比較,如果常數小於或等於欄位值,則跳躍至指定的程式標籤。在 NDB 8.0 中,它也可以用於以這種方式比較兩個資料表欄位值。

簽章

將資料表欄位值與常數比較

int branch_col_le
    (
      const void* val,
      Uint32 len,
      Uint32 attrId,
      Uint32 Label
    )

比較兩個資料表欄位的值

int branch_col_ge
    (
      Uint32 attrId1,
      Uint32 attrId2,
      Uint32 label
    )
參數

當將資料表欄位值與常數比較時,此方法會採用此處列出的四個參數

  • 常數值 (val)

  • 值的長度 (以位元組為單位)

  • 要與 val 比較其值的資料表欄位的屬性 ID

  • 若常數值小於或等於欄位值,則跳躍至此 Label (先前使用 def_label() 定義)。

當用於比較兩個資料表欄位值時,此方法會採用此處列出的三個參數

  • AttrId1:要比較其值的第一個資料表欄位的屬性 ID

  • AttrId2:第二個資料表欄位的屬性 ID

  • label:若第一個欄位的值小於或等於第二個欄位的值,則跳躍至此。

當比較兩個資料表欄位值時,欄位值的類型在所有方面都必須完全相同。

傳回值

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

NdbInterpretedCode::branch_col_le_param()

說明

將資料表屬性與參數(各自由 ID 指定)進行比較,如果屬性值小於或等於參數值,則分支至指定的標籤。在 NDB 8.0.27 中新增。

參數可以是 NULL,並根據生效的 NULL 處理模式進行比較;預設值是將 NULL 視為小於任何其他值,以及 NULL 等於 NULL。您可以覆寫此行為,並強制執行符合 SQL 標準的 NULL 處理,方法是叫用 setSqlCmpSemantics()

簽章
int branch_col_le_param
    (
      Uint32 attrId, 
      Uint32 paramId, 
      Uint32 label
    )
參數
attrId

資料表屬性的 ID。

paramId

參數 ID。

label

如果欄位值不大於參數值,則跳躍至此標籤。

傳回值

成功時為 0。

NdbInterpretedCode::branch_col_like()

說明

此方法會根據規則運算式模式測試資料表欄位值,如果它們符合,則跳躍至指示的程式標籤。

簽章
int branch_col_like
    (
      const void* val,
      Uint32 len,
      Uint32 attrId,
      Uint32 Label
    )
參數

此方法會採用四個參數,這些參數在此處列出

  • 規則運算式模式 ( val );請參閱Pattern-Based NdbInterpretedCode Branch Operations,以取得支援的語法

  • 模式的長度(以位元組為單位)

  • 要測試的資料表欄位的屬性 ID

  • 如果資料表欄位值符合模式,則跳躍至的程式標籤

傳回值

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

NdbInterpretedCode::branch_col_lt()

說明

此方法會將資料表欄位值與任意常數進行比較,如果常數小於欄位值,則跳躍至指定的程式標籤。在 NDB 8.0 中,可以改為比較兩個資料表欄位值。

簽章

將資料表欄位值與常數比較

int branch_col_lt
    (
      const void* val,
      Uint32 len,
      Uint32 attrId,
      Uint32 Label
    )

比較兩個資料表欄位值

int branch_col_lt
    (
      Uint32 attrId1,
      Uint32 attrId2,
      Uint32 label
    )
參數

當將資料表欄位值與常數比較時,此方法會採用下列四個參數

  • 常數值 (val)

  • 值的長度 (以位元組為單位)

  • 要與 val 比較其值的資料表欄位的屬性 ID

  • 若常數值小於欄位值,則跳躍至此 Label (先前使用 def_label() 定義)。

當用於比較兩個資料表欄位值時,branch_col_lt() 會採用下列三個參數

  • AttrId1:要比較其值的第一個資料表欄位的屬性 ID

  • AttrId2:第二個資料表欄位的屬性 ID

  • label:若第一個欄位值小於第二個欄位值,則跳躍至此。

當比較兩個資料表欄位值時,資料表欄位值的類型必須完全相同。這表示它們必須具有相同的長度、精確度和刻度。

傳回值

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

NdbInterpretedCode::branch_col_lt_param()

說明

將資料表屬性與參數(各自由 ID 指定)進行比較,如果屬性值小於參數值,則分支至指定的標籤。在 NDB 8.0.27 中新增。

參數可以是 NULL,並根據生效的 NULL 處理模式進行比較;預設值是將 NULL 視為小於任何其他值,以及 NULL 等於 NULL。您可以覆寫此行為,並強制執行符合 SQL 標準的 NULL 處理,方法是叫用 setSqlCmpSemantics()

簽章
int branch_col_lt_param
    (
      Uint32 attrId, 
      Uint32 paramId, 
      Uint32 label
    )
參數
attrId

資料表屬性的 ID。

paramId

參數 ID。

label

如果欄位值小於參數值,則跳躍至此標籤。

傳回值

成功時為 0。

NdbInterpretedCode::branch_col_ne()

說明

此方法會將資料表欄位值與任意常數進行比較,如果這兩個值不相等,則跳躍至指定的程式標籤。在 NDB 8.0 中,它也可以改為用於比較資料表欄位值與另一個資料表欄位值。

簽章

將資料表欄位值與常數比較

int branch_col_ne
    (
      const void* val,
      Uint32 len,
      Uint32 attrId,
      Uint32 Label
    )

比較兩個資料表欄位值

int branch_col_ne
    (
      Uint32 attrId1,
      Uint32 attrId2,
      Uint32 label
    )
參數

當將資料表欄位值與常數比較時,此方法會採用此處列出的四個參數

  • 常數值 (val)

  • 值的長度 (以位元組為單位)

  • 要與 val 比較其值的資料表欄位的屬性 ID

  • 若比較的值不相等,則跳躍至此 Label (先前使用 def_label() 定義)。

比較兩個資料表欄位值時,所需的參數會顯示在此處

  • AttrId1:要比較其值的第一個資料表欄位的屬性 ID

  • AttrId2:第二個資料表欄位的屬性 ID

  • label:若比較的欄位不相同,則跳躍至此位置。必須已使用def_label()定義。

當使用此方法比較兩個資料表欄位值時,欄位的類型必須完全相同。

傳回值

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

NdbInterpretedCode::branch_col_ne_null()

說明

此方法會測試資料表欄位的值,如果欄位值不是 NULL,則跳躍至指示的程式標籤。

簽章
int branch_col_ne_null
    (
      Uint32 attrId,
      Uint32 Label
    )
參數

此方法需要下列兩個參數

  • 資料表欄位的屬性 ID

  • 如果欄位值不是 NULL,則跳躍至的程式標籤。必須先前使用def_label()定義此標籤。

傳回值

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

NdbInterpretedCode::branch_col_ne_param()

說明

將資料表屬性與參數(各自由 ID 指定)進行比較,如果它們不相等,則分支至指定的標籤。

參數可以是 NULL,並根據生效的 NULL 處理模式進行比較;預設值是將 NULL 視為小於任何其他值,以及 NULL 等於 NULL。您可以覆寫此行為,並強制執行符合 SQL 標準的 NULL 處理,方法是叫用 setSqlCmpSemantics()

簽章
int branch_col_ne_param
    (
      Uint32 attrId, 
      Uint32 paramId, 
      Uint32 label
    )
參數
attrId

資料表屬性的 ID。

paramId

參數 ID。

label

若引數不相等,則跳躍至此標籤。

傳回值

成功時為 0。

NdbInterpretedCode::branch_col_notlike()

說明

此方法與 branch_col_like() 類似,因為它會根據規則運算式模式測試資料表欄位值;但是,僅當模式和欄位值符合時,它才會跳躍至指示的程式標籤。

簽章
int branch_col_notlike
    (
      const void* val,
      Uint32 len,
      Uint32 attrId,
      Uint32 Label
    )
參數

此方法會採用下列四個參數

  • 規則運算式模式 ( val );請參閱Pattern-Based NdbInterpretedCode Branch Operations,以取得支援的語法

  • 模式的長度(以位元組為單位)

  • 要測試的資料表欄位的屬性 ID

  • 如果資料表欄位值與模式不符,則跳躍至的程式標籤。Label 必須先前使用def_label()定義。

傳回值

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

NdbInterpretedCode::branch_eq()

說明

此方法會比較兩個暫存器值;如果它們相等,則解譯的程式會跳躍至指定的標籤。

簽章
int branch_eq
    (
      Uint32 RegLvalue,
      Uint32 RegRvalue,
      Uint32 Label
    )
參數

此方法會採用三個參數,即要比較的暫存器值 — RegLvalueRegRvalue — 以及如果它們相等,則跳躍至的程式 LabelLabel 必須先前使用def_label()定義。

傳回值

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

NdbInterpretedCode::branch_eq_null()

說明

此方法會將暫存器值與 NULL 比較;如果暫存器值為 null,則解譯的程式會跳躍至指定的標籤。

簽章
int branch_eq_null
    (
      Uint32 RegLvalue,
      Uint32 Label
    )
參數

此方法會採用兩個參數,即要與 NULL 比較值的暫存器 (RegLvalue) 以及如果 RegLvalue 為 null,則跳躍至的程式 LabelLabel 必須先前使用def_label()定義。

傳回值

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

NdbInterpretedCode::branch_ge()

說明

此方法會比較兩個暫存器值;如果第一個值大於或等於第二個值,則解譯的程式會跳躍至指定的標籤。

簽章
int branch_ge
    (
      Uint32 RegLvalue,
      Uint32 RegRvalue,
      Uint32 Label
    )
參數

此方法會採用三個參數,即要比較的暫存器值 — RegLvalueRegRvalue — 以及如果 RegLvalue 大於或等於 RegRvalue,則跳躍至的程式 LabelLabel 必須先前使用def_label()定義。

傳回值

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

NdbInterpretedCode::branch_gt()

說明

此方法會比較兩個暫存器值;如果第一個值大於第二個值,則解譯的程式會跳躍至指定的標籤。

簽章
int branch_gt
    (
      Uint32 RegLvalue,
      Uint32 RegRvalue,
      Uint32 Label
    )
參數

此方法會採用三個參數,即要比較的暫存器值 — RegLvalueRegRvalue — 以及如果 RegLvalue 大於 RegRvalue,則跳躍至的程式 LabelLabel 必須先前使用def_label()定義。

傳回值

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

NdbInterpretedCode::branch_label()

說明

此方法會執行無條件跳躍至解譯的程式標籤 (請參閱 NdbInterpretedCode::def_label())。

簽章
int branch_label
    (
      Uint32 Label
    )
參數

此方法會採用單一參數,即使用 def_label() 定義的解譯程式 Label

傳回值

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

NdbInterpretedCode::branch_le()

說明

此方法比較兩個暫存器值;如果第一個值小於或等於第二個值,則解釋程式會跳轉到指定的標籤。

簽章
int branch_le
    (
      Uint32 RegLvalue,
      Uint32 RegRvalue,
      Uint32 Label
    )
參數

此方法接受三個參數,要比較的暫存器值 — RegLvalueRegRvalue — 以及如果 RegLvalue 小於或等於 RegRvalue 時要跳轉到的程式 LabelLabel 必須先前使用 def_label() 定義。

傳回值

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

NdbInterpretedCode::branch_lt()

說明

此方法比較兩個暫存器值;如果第一個值小於第二個值,則解釋程式會跳轉到指定的標籤。

簽章
int branch_lt
    (
      Uint32 RegLvalue,
      Uint32 RegRvalue,
      Uint32 Label
    )
參數

此方法接受三個參數,要比較的暫存器值 — RegLvalueRegRvalue — 以及如果 RegLvalue 小於 RegRvalue 時要跳轉到的程式 LabelLabel 必須先前使用 def_label() 定義。

傳回值

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

NdbInterpretedCode::branch_ne()

說明

此方法比較兩個暫存器值;如果它們不相等,則解釋程式會跳轉到指定的標籤。

簽章
int branch_ne
    (
      Uint32 RegLvalue,
      Uint32 RegRvalue,
      Uint32 Label
    )
參數

此方法接受三個參數,要比較的暫存器值 (RegLvalueRegRvalue) 以及如果它們不相等時要跳轉到的程式標籤。Label 必須先前使用 def_label() 定義。

傳回值

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

NdbInterpretedCode::branch_ne_null()

說明

此方法將暫存器值與 NULL 比較;如果值不為 null,則解釋程式會跳轉到指定的標籤。

簽章
int branch_ne_null
    (
      Uint32 RegLvalue,
      Uint32 Label
    )
參數

此方法接受兩個參數,要與 NULL 比較的暫存器值 (RegLvalue) 以及如果 RegLvalue 不為 null 時要跳轉到的程式 LabelLabel 必須先前使用 def_label() 定義。

傳回值

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

NdbInterpretedCode::call_sub()

說明

此方法用於呼叫副程式。

簽章
int call_sub
    (
      Uint32 SubroutineNumber
    )
參數

此方法接受單一參數,用於識別要呼叫的副程式的編號。

傳回值

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

NdbInterpretedCode::copy()

說明

建立 NdbInterpretedCode 物件的深層副本。

簽章
int copy
    (
      const NdbInterpretedCode& src
    )
參數

副本的參考。

傳回值

成功時為 0,或錯誤代碼。

NdbInterpretedCode::def_label()

說明

此方法定義一個標籤,用作解釋程式中一個或多個跳轉的目標。

def_label() 使用 2 個字的緩衝區,不需要請求訊息的空間。

簽章
int def_label
    (
      int LabelNum
    )
參數

此方法接受單一參數 LabelNum,這是一個整數,其值在解釋程式中用於標籤的所有值中必須是唯一的。

傳回值

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

NdbInterpretedCode::def_sub()

說明

此方法用於標記副程式的開始。有關更多資訊,請參閱 使用 NdbInterpretedCode 的副程式

簽章
int def_sub
    (
      Uint32 SubroutineNumber
    )
參數

單一參數,用於識別副程式的編號。

傳回值

成功時傳回 0,否則傳回 -1

NdbInterpretedCode::finalise()

說明

此方法會準備解釋程式,包括它可能擁有的任何副程式,方法是解析所有分支指令和對副程式的呼叫。它必須在使用程式之前呼叫,並且對於任何給定的 NdbInterpretedCode 物件只能呼叫一次。

如果沒有定義任何指令,此方法會嘗試在最終化之前插入單一 interpret_exit_ok() 方法呼叫。

簽章
int finalise
    (
      void
    )
參數

.

傳回值

成功時傳回 0,否則傳回 -1

NdbInterpretedCode::getNdbError()

說明

此方法傳回與此 NdbInterpretedCode 物件相關聯的最近錯誤。

簽章
const class NdbError& getNdbError
    (
      void
    ) const
參數

.

傳回值

NdbError 物件的參考。

NdbInterpretedCode::getTable()

說明

此方法可用於取得對定義 NdbInterpretedCode 物件的資料表的參考。

簽章
const NdbDictionary::Table* getTable
    (
      void
    ) const
參數

.

傳回值

指向 Table 物件的指標。如果在實例化 NdbInterpretedCode 時沒有提供資料表物件,則傳回 NULL

NdbInterpretedCode::getWordsUsed()

說明

此方法傳回已使用的緩衝區字數,無論緩衝區是使用者提供的還是內部提供的緩衝區。

簽章
Uint32 getWordsUsed
    (
      void
    ) const
參數

.

傳回值

緩衝區中使用的 32 位元字數。

NdbInterpretedCode::interpret_exit_last_row()

說明

對於掃描操作,呼叫此方法表示此列應作為掃描的一部分傳回,並且不應掃描此片段中的其他列。對於其他類型的操作,此方法會導致操作中止。

簽章
int interpret_exit_last_row
    (
      void
    )
參數

.

傳回值

如果成功,則傳回 0,否則傳回 -1

NdbInterpretedCode::interpret_exit_nok()

說明

對於掃描操作,此方法用於指示不應將目前列作為掃描的一部分傳回,並導致程式移至下一列。它會導致中止其他類型的操作。

簽章
int interpret_exit_nok
    (
      Uint32 ErrorCode = 626 //  HA_ERR_KEY_NOT_FOUND
    )
參數

此方法接受單一 (選用) 參數 ErrorCode。(如需 NDB 錯誤代碼的完整清單,請參閱 第 2.4.2 節,「NDB 錯誤代碼:依類型」。)如果未提供,則預設為 626 (HA_ERR_KEY_NOT_FOUNDTuple did not exist)。應用程式應使用錯誤代碼 626 或範圍在 6000 到 6999 (含) 之間的另一個代碼。

對於此處提及以外的任何值,此方法的行為未定義,並且隨時可能變更,恕不另行通知。

傳回值

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

NdbInterpretedCode::interpret_exit_ok()

說明

對於掃描操作,此方法表示應將目前列作為掃描結果的一部分傳回,並且程式應移至下一列。對於其他操作,呼叫此方法會導致解釋程式結束。

簽章
int interpret_exit_ok
    (
      void
    )
參數

.

傳回值

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

NdbInterpretedCode::load_const_null()

說明

此方法用於將 NULL 值載入暫存器。

簽章
int load_const_null
    (
      Uint32 RegDest
    )
參數

此方法接受單一參數,即要將 NULL 放入的暫存器。

傳回值

成功時傳回 0,否則傳回 -1

NdbInterpretedCode::load_const_u16()

說明

此方法將 16 位元值載入指定的解釋器暫存器。

簽章
int load_const_u16
    (
      Uint32 RegDest,
      Uint32 Constant
    )
參數

此方法接受以下兩個參數

  • RegDest:應載入值的暫存器。

  • 要載入的 Constant

傳回值

成功時傳回 0,否則傳回 -1

NdbInterpretedCode::load_const_u32()

說明

此方法將 32 位元值載入指定的解釋器暫存器。

簽章
int load_const_u32
    (
      Uint32 RegDest,
      Uint32 Constant
    )
參數

此方法接受以下兩個參數

  • RegDest:應載入值的暫存器。

  • 要載入的 Constant

傳回值

成功時傳回 0,否則傳回 -1

NdbInterpretedCode::load_const_u64()

說明

此方法將 64 位元值載入指定的解釋器暫存器。

簽章
int load_const_u64
    (
      Uint32 RegDest,
      Uint64 Constant
    )
參數

此方法接受以下兩個參數

  • RegDest:應載入值的暫存器。

  • 要載入的 Constant

傳回值

成功時傳回 0,否則傳回 -1

NdbInterpretedCode::read_attr()

說明

read_attr() 方法用於將資料表欄值讀入程式暫存器。可以透過使用其屬性 ID 或作為指向 Column 物件的指標來指定欄。

簽章

此方法可以透過兩種方式呼叫。第一個方式是透過參考其屬性 ID 來參考欄,如此處所示

int read_attr
    (
      Uint32 RegDest,
      Uint32 attrId
    )

或者,您可以參考作為 Column 物件的欄,如此處所示

int read_attr
    (
      Uint32 RegDest,
      const NdbDictionary::Column* column
    )
參數

此方法接受兩個參數,如此處所述

  • 要將欄值複製到的暫存器 (RegDest)。

  • 以下任一資料表欄的參考,其值要複製

    • 資料表欄的屬性 ID (attrId)

    • 指向 column 的指標 — 也就是說,指向參考資料表欄的 Column 物件的指標

傳回值

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

NdbInterpretedCode::reset()

說明

此方法會清除 NdbInterpretedCode 物件中的任何現有程式,然後可用於建構新程式。

簽章
int ret_sub
    (
      void
    )
參數

.

傳回值

.

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

NdbInterpretedCode::ret_sub()

說明

此方法標記目前副程式的結尾。

簽章
int ret_sub
    (
      void
    )
參數

.

傳回值

成功時傳回 0,否則傳回 -1

NdbInterpretedCode::sub_reg()

說明

此方法會取得儲存在任何兩個給定暫存器中的值之間的差值,並將結果儲存在第三個暫存器中。

簽章
int sub_reg
    (
      Uint32 RegDest,
      Uint32 RegSource1,
      Uint32 RegSource2
    )
參數

這個方法接受三個參數。第一個參數是結果將被儲存的暫存器(RegDest)。第二個和第三個參數(RegSource1RegSource2)是要相減的數值所在的暫存器。換句話說,暫存器RegDest的值是按照此處顯示的運算式計算的。

(value in register RegSource1) − (value in register RegSource2)

可以重複使用其中一個要相減的數值所在的暫存器來儲存結果;也就是說,RegDest可以與RegSource1RegSource2相同。

傳回值

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

NdbInterpretedCode::sub_val()

說明

這個方法會從給定表格欄位的值中減去指定的值,並將原始和修改後的欄位值放入暫存器 6 和 7 中。它等同於以下一系列的 NdbInterpretedCode 方法呼叫,其中 attrId 是表格欄位的屬性 ID,而 aValue 是要減去的值。

read_attr(6, attrId);
load_const_u32(7, aValue);
sub_reg(7,6,7);
write_attr(attrId, 7);

aValue 可以是 32 位元或 64 位元整數。

簽章

此方法可以使用兩種方式之一來叫用,具體取決於 aValue 是 32 位元還是 64 位元。

32 位元 aValue

int sub_val
    (
      Uint32 attrId,
      Uint32 aValue
    )

64 位元 aValue

int sub_val
    (
      Uint32 attrId,
      Uint64 aValue
    )
參數

一個表格欄位屬性 ID 和一個 32 位元或 64 位元的整數值,將會從此欄位值中減去。

傳回值

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

NdbInterpretedCode::write_attr()

說明

這個方法用於將暫存器的值複製到表格欄位。可以使用其屬性 ID 或作為指向 Column 物件的指標來指定欄位。

簽章

這個方法可以透過兩種方式之一來調用。第一種方式需要通過其屬性 ID 來引用欄位,如下所示:

int read_attr
    (
      Uint32 attrId,
      Uint32 RegSource
    )

您也可以像這樣,將欄位引用為 Column 物件:

int read_attr
    (
      const NdbDictionary::Column* column,
      Uint32 RegSource
    )
參數

這個方法接受以下兩個參數:

  • 要將暫存器值複製到的表格欄位的參考。可以是下列其中之一:

    • 資料表欄的屬性 ID (attrId)

    • 指向 column 的指標 — 也就是說,指向參考資料表欄的 Column 物件的指標

  • 要複製其值的暫存器(RegSource)。

傳回值

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