本節提供有關 NdbInterpretedCode
類別的資訊,該類別可用於準備和執行 NDB API 解譯程式。
- 父類別
無.
- 子類別
無.
- 說明
-
NdbInterpretedCode
代表一個解譯程式,用於使用NdbRecord
建立的操作,或使用舊版 API 建立的掃描。NdbScanFilter
類別也可使用此類別產生 NDB 解譯程式。若要建立
NdbInterpretedCode
物件,請叫用建構函式,選擇性地提供程式要操作的資料表,以及用於程式儲存和最終化的緩衝區。如果未提供資料表,則只能使用不存取資料表屬性的指令。在 NDB 8.0 中,可以使用Ndbrecord
的執行個體來取代Table
。每個 NDB API 操作都適用於一個資料表,任何附加至該操作的
NdbInterpretedCode
程式也是如此。如果未提供緩衝區,則會動態配置內部緩衝區,並在必要時延伸。建立
NdbInterpretedCode
物件後,您可以透過呼叫本節稍後描述的適當方法,將指令和標籤新增至其中。程式完成後,請呼叫finalise()
方法將其最終化,這會解析任何剩餘的內部分支,並呼叫標籤和副程式偏移。單一最終化的
NdbInterpretedCode
程式可以由多個操作使用。它不需要為後續操作重新準備。若要將程式與
NdbRecord
操作和掃描搭配使用,請在使用OperationOptions
或ScanOptions
參數定義操作時傳遞它。當不再需要程式時,可以刪除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()
將暫存器值寫入資料表欄位中 為了效率考量,此類別的方法會提供最少的錯誤檢查。
- 類型
此類別未定義任何公開類型。
- 說明
這是
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
建構函式採用三個參數,如下所述 - 傳回值
NdbInterpretedCode
的執行個體。
- 說明
此方法會加總任何兩個指定暫存器中儲存的值,並將結果儲存在第三個暫存器中。
- 簽章
int add_reg ( Uint32 RegDest, Uint32 RegSource1, Uint32 RegSource2 )
- 參數
-
此方法採用三個參數。第一個參數是儲存結果的暫存器 (
RegDest
)。第二個和第三個參數 (RegSource1
和RegSource2
) 是要加總其值的暫存器。為了儲存結果,可以重複使用加總其值的其中一個暫存器;也就是說,
RegDest
可以與RegSource1
或RegSource2
相同。 - 傳回值
成功時傳回
0
,失敗時傳回-1
。
- 說明
-
此方法會將指定的值新增至指定資料表欄位的值,並將原始和修改後的欄位值放在暫存器 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
。
- 說明
此方法用於將
BIT
欄位值與位元遮罩進行比較;如果欄位值與位元遮罩進行AND
運算後等於位元遮罩,則執行會跳轉到方法呼叫中指定的指定標籤。- 簽章
int branch_col_and_mask_eq_mask ( const void* mask, Uint32 unused, Uint32 attrId, Uint32 label )
- 參數
-
此方法可以接受四個參數,其中實際使用三個。這些參數在以下清單中說明
要與欄位值比較的常數
mask
的指標目前為
unused
的Uint32
值。要比較的欄位的
attrId
。-
如果條件為 true,則跳轉到的程式
label
。在 NDB 8.0.30 之前,此引數對於非零值處理不正確。(錯誤 #33888962)
- 傳回值
此方法成功時傳回
0
,失敗時傳回-1
。
- 說明
此方法用於將
BIT
欄位值與位元遮罩進行比較;如果欄位值與位元遮罩進行AND
運算後等於0
,則執行會跳轉到方法呼叫中指定的指定標籤。- 簽章
int branch_col_and_mask_eq_zero ( const void* mask, Uint32 unused, Uint32 attrId, Uint32 label )
- 參數
-
此方法可以接受下列四個參數,其中實際使用三個
要與欄位值比較的常數
mask
的指標。目前為
unused
的Uint32
值。要比較的欄位的
attrId
。-
如果條件為 true,則跳轉到的程式
label
。在 NDB 8.0.30 之前,此引數對於非零值處理不正確。(錯誤 #33888962)
- 傳回值
此方法成功時傳回
0
,失敗時傳回-1
。
- 說明
此方法用於將
BIT
欄位值與位元遮罩進行比較;如果欄位值與位元遮罩進行AND
運算後不等於位元遮罩,則執行會跳轉到方法呼叫中指定的指定標籤。- 簽章
int branch_col_and_mask_ne_mask ( const void* mask, Uint32 unused, Uint32 attrId, Uint32 label )
- 參數
-
此方法接受四個參數,其中實際使用三個。這些參數在以下清單中說明
要與欄位值比較的常數
mask
的指標。目前為
unused
的Uint32
值。要比較的欄位的
attrId
。-
如果條件為 true,則跳轉到的程式
label
。在 NDB 8.0.30 之前,此引數對於非零值處理不正確。(錯誤 #33888962)
- 傳回值
此方法成功時傳回
0
,失敗時傳回-1
。
- 說明
此方法用於將
BIT
欄位值與位元遮罩進行比較;如果欄位值與位元遮罩進行AND
運算後不等於0
,則執行會跳轉到方法呼叫中指定的指定標籤。- 簽章
int branch_col_and_mask_ne_zero ( const void* mask, Uint32 unused, Uint32 attrId, Uint32 label )
- 參數
-
此方法接受下列四個參數,其中實際使用三個
要與欄位值比較的常數
mask
的指標。目前為
unused
的Uint32
值。要比較的欄位的
attrId
。-
如果條件為 true,則跳轉到的程式
label
。在 NDB 8.0.30 之前,此引數對於非零值處理不正確。(錯誤 #33888962)
- 傳回值
此方法成功時傳回
0
,失敗時傳回-1
。
- 說明
此方法會將資料表欄位值與任意常數進行比較,如果值相等,則跳轉到指定的程式標籤。在 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
:要比較其值的第一個資料表欄位的屬性 IDAttrId2
:第二個資料表欄位的屬性 IDlabel
:如果比較的欄位相同,則跳轉到的位置。必須已使用def_label()
定義
使用此方法比較兩個欄位時,這些欄位必須完全屬於相同的類型。
- 傳回值
成功時傳回
0
,失敗時傳回-1
。
- 說明
此方法會測試資料表欄位的值,如果欄位值為
NULL
,則跳轉到指示的程式標籤。- 簽章
int branch_col_eq_null ( Uint32 attrId, Uint32 Label )
- 參數
-
此方法需要下列兩個參數
資料表欄位的屬性 ID
如果欄位值為
NULL
,則跳轉到的程式標籤
- 傳回值
成功時傳回
0
,失敗時傳回-1
。
- 說明
-
比較資料表屬性與參數 (每個都由 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。
- 說明
此方法會將資料表欄位值與任意常數進行比較,如果常數值大於或等於欄位值,則跳躍至指定的程式標籤。在 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
:要比較其值的第一個資料表欄位的屬性 IDAttrId2
:第二個資料表欄位的屬性 IDlabel
:若第一個欄位的值大於或等於第二個欄位的值,則跳躍至此。
當比較兩個欄位時,欄位的類型在所有方面都必須完全相同。
- 傳回值
成功時傳回
0
,失敗時傳回-1
。
- 說明
-
將資料表屬性與參數(各自由 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。
- 說明
此方法會將資料表欄位值與任意常數進行比較,如果常數大於欄位值,則跳躍至指定的程式標籤。在 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
:要比較其值的第一個資料表欄位的屬性 IDAttrId2
:第二個資料表欄位的屬性 IDlabel
:若第一個欄位的值大於或等於第二個欄位的值,則跳躍至此。
當比較兩個欄位時,欄位的類型在所有方面都必須完全相同。
- 傳回值
成功時傳回
0
,失敗時傳回-1
。
- 說明
-
將資料表屬性與參數(各自由 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。
- 說明
此方法會將資料表欄位值與任意常數進行比較,如果常數小於或等於欄位值,則跳躍至指定的程式標籤。在 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
:要比較其值的第一個資料表欄位的屬性 IDAttrId2
:第二個資料表欄位的屬性 IDlabel
:若第一個欄位的值小於或等於第二個欄位的值,則跳躍至此。
當比較兩個資料表欄位值時,欄位值的類型在所有方面都必須完全相同。
- 傳回值
成功時傳回
0
,失敗時傳回-1
。
- 說明
-
將資料表屬性與參數(各自由 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。
- 說明
此方法會根據規則運算式模式測試資料表欄位值,如果它們符合,則跳躍至指示的程式標籤。
- 簽章
int branch_col_like ( const void* val, Uint32 len, Uint32 attrId, Uint32 Label )
- 參數
-
此方法會採用四個參數,這些參數在此處列出
規則運算式模式 (
val
);請參閱Pattern-Based NdbInterpretedCode Branch Operations,以取得支援的語法模式的長度(以位元組為單位)
要測試的資料表欄位的屬性 ID
如果資料表欄位值符合模式,則跳躍至的程式標籤
- 傳回值
成功時為
0
,失敗時為-1
- 說明
此方法會將資料表欄位值與任意常數進行比較,如果常數小於欄位值,則跳躍至指定的程式標籤。在 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
:要比較其值的第一個資料表欄位的屬性 IDAttrId2
:第二個資料表欄位的屬性 IDlabel
:若第一個欄位值小於第二個欄位值,則跳躍至此。
當比較兩個資料表欄位值時,資料表欄位值的類型必須完全相同。這表示它們必須具有相同的長度、精確度和刻度。
- 傳回值
成功時為
0
,失敗時為-1
。
- 說明
-
將資料表屬性與參數(各自由 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。
- 說明
此方法會將資料表欄位值與任意常數進行比較,如果這兩個值不相等,則跳躍至指定的程式標籤。在 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
:要比較其值的第一個資料表欄位的屬性 IDAttrId2
:第二個資料表欄位的屬性 IDlabel
:若比較的欄位不相同,則跳躍至此位置。必須已使用def_label()
定義。
當使用此方法比較兩個資料表欄位值時,欄位的類型必須完全相同。
- 傳回值
成功時傳回
0
,失敗時傳回-1
。
- 說明
此方法會測試資料表欄位的值,如果欄位值不是
NULL
,則跳躍至指示的程式標籤。- 簽章
int branch_col_ne_null ( Uint32 attrId, Uint32 Label )
- 參數
-
此方法需要下列兩個參數
資料表欄位的屬性 ID
如果欄位值不是
NULL
,則跳躍至的程式標籤。必須先前使用def_label()
定義此標籤。
- 傳回值
成功時傳回
0
,失敗時傳回-1
。
- 說明
-
將資料表屬性與參數(各自由 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。
- 說明
此方法與
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
- 說明
此方法會比較兩個暫存器值;如果它們相等,則解譯的程式會跳躍至指定的標籤。
- 簽章
int branch_eq ( Uint32 RegLvalue, Uint32 RegRvalue, Uint32 Label )
- 參數
此方法會採用三個參數,即要比較的暫存器值 —
RegLvalue
和RegRvalue
— 以及如果它們相等,則跳躍至的程式Label
。Label
必須先前使用def_label()
定義。- 傳回值
成功時為
0
,失敗時為-1
。
- 說明
此方法會將暫存器值與
NULL
比較;如果暫存器值為 null,則解譯的程式會跳躍至指定的標籤。- 簽章
int branch_eq_null ( Uint32 RegLvalue, Uint32 Label )
- 參數
此方法會採用兩個參數,即要與
NULL
比較值的暫存器 (RegLvalue
) 以及如果RegLvalue
為 null,則跳躍至的程式Label
。Label
必須先前使用def_label()
定義。- 傳回值
成功時為
0
,失敗時為-1
。
- 說明
此方法會比較兩個暫存器值;如果第一個值大於或等於第二個值,則解譯的程式會跳躍至指定的標籤。
- 簽章
int branch_ge ( Uint32 RegLvalue, Uint32 RegRvalue, Uint32 Label )
- 參數
此方法會採用三個參數,即要比較的暫存器值 —
RegLvalue
和RegRvalue
— 以及如果RegLvalue
大於或等於RegRvalue
,則跳躍至的程式Label
。Label
必須先前使用def_label()
定義。- 傳回值
成功時為
0
,失敗時為-1
。
- 說明
此方法會比較兩個暫存器值;如果第一個值大於第二個值,則解譯的程式會跳躍至指定的標籤。
- 簽章
int branch_gt ( Uint32 RegLvalue, Uint32 RegRvalue, Uint32 Label )
- 參數
此方法會採用三個參數,即要比較的暫存器值 —
RegLvalue
和RegRvalue
— 以及如果RegLvalue
大於RegRvalue
,則跳躍至的程式Label
。Label
必須先前使用def_label()
定義。- 傳回值
成功時為
0
,失敗時為-1
。
- 說明
此方法會執行無條件跳躍至解譯的程式標籤 (請參閱 NdbInterpretedCode::def_label())。
- 簽章
int branch_label ( Uint32 Label )
- 參數
此方法會採用單一參數,即使用
def_label()
定義的解譯程式Label
。- 傳回值
成功時為
0
,失敗時為-1
。
- 說明
此方法比較兩個暫存器值;如果第一個值小於或等於第二個值,則解釋程式會跳轉到指定的標籤。
- 簽章
int branch_le ( Uint32 RegLvalue, Uint32 RegRvalue, Uint32 Label )
- 參數
此方法接受三個參數,要比較的暫存器值 —
RegLvalue
和RegRvalue
— 以及如果RegLvalue
小於或等於RegRvalue
時要跳轉到的程式Label
。Label
必須先前使用def_label()
定義。- 傳回值
成功時為
0
,失敗時為-1
。
- 說明
此方法比較兩個暫存器值;如果第一個值小於第二個值,則解釋程式會跳轉到指定的標籤。
- 簽章
int branch_lt ( Uint32 RegLvalue, Uint32 RegRvalue, Uint32 Label )
- 參數
此方法接受三個參數,要比較的暫存器值 —
RegLvalue
和RegRvalue
— 以及如果RegLvalue
小於RegRvalue
時要跳轉到的程式Label
。Label
必須先前使用def_label()
定義。- 傳回值
成功時為
0
,失敗時為-1
。
- 說明
此方法比較兩個暫存器值;如果它們不相等,則解釋程式會跳轉到指定的標籤。
- 簽章
int branch_ne ( Uint32 RegLvalue, Uint32 RegRvalue, Uint32 Label )
- 參數
此方法接受三個參數,要比較的暫存器值 (
RegLvalue
和RegRvalue
) 以及如果它們不相等時要跳轉到的程式標籤。Label
必須先前使用def_label()
定義。- 傳回值
成功時為
0
,失敗時為-1
。
- 說明
此方法將暫存器值與
NULL
比較;如果值不為 null,則解釋程式會跳轉到指定的標籤。- 簽章
int branch_ne_null ( Uint32 RegLvalue, Uint32 Label )
- 參數
此方法接受兩個參數,要與
NULL
比較的暫存器值 (RegLvalue
) 以及如果RegLvalue
不為 null 時要跳轉到的程式Label
。Label
必須先前使用def_label()
定義。- 傳回值
成功時為
0
,失敗時為-1
。
- 說明
此方法用於呼叫副程式。
- 簽章
int call_sub ( Uint32 SubroutineNumber )
- 參數
此方法接受單一參數,用於識別要呼叫的副程式的編號。
- 傳回值
成功時傳回
0
,失敗時傳回-1
。
- 說明
建立
NdbInterpretedCode
物件的深層副本。- 簽章
int copy ( const NdbInterpretedCode& src )
- 參數
副本的參考。
- 傳回值
成功時為 0,或錯誤代碼。
- 說明
此方法定義一個標籤,用作解釋程式中一個或多個跳轉的目標。
def_label()
使用 2 個字的緩衝區,不需要請求訊息的空間。
- 簽章
int def_label ( int LabelNum )
- 參數
此方法接受單一參數
LabelNum
,這是一個整數,其值在解釋程式中用於標籤的所有值中必須是唯一的。- 傳回值
成功時為
0
;失敗時為-1
。
- 說明
此方法用於標記副程式的開始。有關更多資訊,請參閱 使用 NdbInterpretedCode 的副程式。
- 簽章
int def_sub ( Uint32 SubroutineNumber )
- 參數
單一參數,用於識別副程式的編號。
- 傳回值
成功時傳回
0
,否則傳回-1
。
- 說明
-
此方法會準備解釋程式,包括它可能擁有的任何副程式,方法是解析所有分支指令和對副程式的呼叫。它必須在使用程式之前呼叫,並且對於任何給定的
NdbInterpretedCode
物件只能呼叫一次。如果沒有定義任何指令,此方法會嘗試在最終化之前插入單一
interpret_exit_ok()
方法呼叫。 - 簽章
int finalise ( void )
- 參數
無.
- 傳回值
成功時傳回
0
,否則傳回-1
。
- 說明
此方法傳回與此
NdbInterpretedCode
物件相關聯的最近錯誤。- 簽章
const class NdbError& getNdbError ( void ) const
- 參數
無.
- 傳回值
對
NdbError
物件的參考。
- 說明
此方法可用於取得對定義
NdbInterpretedCode
物件的資料表的參考。- 簽章
const NdbDictionary::Table* getTable ( void ) const
- 參數
無.
- 傳回值
指向
Table
物件的指標。如果在實例化NdbInterpretedCode
時沒有提供資料表物件,則傳回NULL
。
- 說明
此方法傳回已使用的緩衝區字數,無論緩衝區是使用者提供的還是內部提供的緩衝區。
- 簽章
Uint32 getWordsUsed ( void ) const
- 參數
無.
- 傳回值
緩衝區中使用的 32 位元字數。
- 說明
對於掃描操作,呼叫此方法表示此列應作為掃描的一部分傳回,並且不應掃描此片段中的其他列。對於其他類型的操作,此方法會導致操作中止。
- 簽章
int interpret_exit_last_row ( void )
- 參數
無.
- 傳回值
如果成功,則傳回
0
,否則傳回-1
。
- 說明
對於掃描操作,此方法用於指示不應將目前列作為掃描的一部分傳回,並導致程式移至下一列。它會導致中止其他類型的操作。
- 簽章
int interpret_exit_nok ( Uint32 ErrorCode = 626 // HA_ERR_KEY_NOT_FOUND )
- 參數
-
此方法接受單一 (選用) 參數
ErrorCode
。(如需 NDB 錯誤代碼的完整清單,請參閱 第 2.4.2 節,「NDB 錯誤代碼:依類型」。)如果未提供,則預設為 626 (HA_ERR_KEY_NOT_FOUND,Tuple did not exist)。應用程式應使用錯誤代碼 626 或範圍在 6000 到 6999 (含) 之間的另一個代碼。對於此處提及以外的任何值,此方法的行為未定義,並且隨時可能變更,恕不另行通知。
- 傳回值
成功時傳回
0
,失敗時傳回-1
。
- 說明
對於掃描操作,此方法表示應將目前列作為掃描結果的一部分傳回,並且程式應移至下一列。對於其他操作,呼叫此方法會導致解釋程式結束。
- 簽章
int interpret_exit_ok ( void )
- 參數
無.
- 傳回值
成功時傳回
0
,失敗時傳回-1
。
- 說明
此方法用於將
NULL
值載入暫存器。- 簽章
int load_const_null ( Uint32 RegDest )
- 參數
此方法接受單一參數,即要將
NULL
放入的暫存器。- 傳回值
成功時傳回
0
,否則傳回-1
。
- 說明
此方法將 16 位元值載入指定的解釋器暫存器。
- 簽章
int load_const_u16 ( Uint32 RegDest, Uint32 Constant )
- 參數
-
此方法接受以下兩個參數
RegDest
:應載入值的暫存器。要載入的
Constant
值
- 傳回值
成功時傳回
0
,否則傳回-1
。
- 說明
此方法將 32 位元值載入指定的解釋器暫存器。
- 簽章
int load_const_u32 ( Uint32 RegDest, Uint32 Constant )
- 參數
-
此方法接受以下兩個參數
RegDest
:應載入值的暫存器。要載入的
Constant
值
- 傳回值
成功時傳回
0
,否則傳回-1
。
- 說明
此方法將 64 位元值載入指定的解釋器暫存器。
- 簽章
int load_const_u64 ( Uint32 RegDest, Uint64 Constant )
- 參數
-
此方法接受以下兩個參數
RegDest
:應載入值的暫存器。要載入的
Constant
值
- 傳回值
成功時傳回
0
,否則傳回-1
。
- 說明
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
物件中的任何現有程式,然後可用於建構新程式。- 簽章
int ret_sub ( void )
- 參數
無.
- 傳回值
無.
此方法是在 NDB 8.0 中新增的。
- 說明
此方法會取得儲存在任何兩個給定暫存器中的值之間的差值,並將結果儲存在第三個暫存器中。
- 簽章
int sub_reg ( Uint32 RegDest, Uint32 RegSource1, Uint32 RegSource2 )
- 參數
-
這個方法接受三個參數。第一個參數是結果將被儲存的暫存器(
RegDest
)。第二個和第三個參數(RegSource1
和RegSource2
)是要相減的數值所在的暫存器。換句話說,暫存器RegDest
的值是按照此處顯示的運算式計算的。(value in register RegSource1) − (value in register RegSource2)
可以重複使用其中一個要相減的數值所在的暫存器來儲存結果;也就是說,
RegDest
可以與RegSource1
或RegSource2
相同。 - 傳回值
成功時為
0
;失敗時為-1
。
- 說明
-
這個方法會從給定表格欄位的值中減去指定的值,並將原始和修改後的欄位值放入暫存器 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
。
- 說明
這個方法用於將暫存器的值複製到表格欄位。可以使用其屬性 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
。