10.2.2 建立擴充物件

若要建立新的擴充物件以提供一或多個函式、資料類型或進一步的擴充物件,請在 JavaScript 中使用內建的 shell.createExtensionObject() 函式,或在 Python 中使用 shell.create_extension_object() 函式。

shell.createExtensionObject()

若要將成員新增至擴充物件,請在 JavaScript 中使用內建的 shell.addExtensionObjectMember() 函式,或在 Python 中使用 shell.add_extension_object_member() 函式。

shell.addExtensionObjectMember(object, name, member[, definition])

其中

  • object 是要新增新成員的擴充物件。

  • name 是新成員的名稱。名稱必須是有效的指令碼識別碼,因此第一個字元必須是字母或底線字元,後接任意數量的字母、數字或底線字元。在已新增至相同擴充物件的成員中,名稱必須是唯一的,並且如果成員是函式,則名稱不必與定義的函式名稱相符。即使您使用 Python 來定義和新增成員,最好以駝峰式大小寫指定名稱。以駝峰式大小寫指定成員名稱可讓 MySQL Shell 自動強制執行命名慣例。MySQL Shell 會使用駝峰式大小寫在 JavaScript 模式中提供成員,並使用蛇形大小寫在 Python 模式中提供成員。

  • member 是新成員的值,可以是下列任一項

    • 支援的基本資料類型。支援的資料類型為 nonenullboolnumber (整數或浮點數)、stringarraydictionary

    • JavaScript 或 Python 函式。您可以將原生程式碼用於新增為擴充物件成員的函式主體中,前提是介面 (參數和傳回值) 僅限於表格 10.1,「擴充物件支援的資料類型配對」中支援的資料類型。在介面中使用其他資料類型可能會導致未定義的行為。

    • 另一個擴充物件。

  • definition 是一個選用字典,可以包含成員的說明資訊,並且如果成員是函式,則可以包含函式接收的參數清單。說明資訊是使用下列屬性定義的

    • brief 是成員的簡短描述。

    • details 是成員的詳細描述,以字串清單的形式提供。當您使用 MySQL Shell \help 命令時,會提供此描述。

    函式的參數是使用下列屬性定義的

    • parameters 是描述函式接收之每個參數的字典清單。每個字典描述一個參數,並且可以包含下列索引鍵

      • name (字串,必要):參數的名稱。

      • type (字串,必要):參數的資料類型,可以是 stringintegerboolfloatarraydictionaryobject。如果類型為 object,也可以使用 classclasses 索引鍵。如果類型為 string,也可以使用 values 索引鍵。如果類型為 dictionary,也可以使用 options 索引鍵。

      • class (字串,選用,當資料類型為 object 時允許):定義允許作為參數的物件類型。

      • classes (字串清單,選用,當資料類型為 object 時允許):定義允許作為參數之物件類型的類別清單。classclasses 支援的物件類型是 MySQL Shell API 公開的物件類型,例如 SessionClassicSessionTableCollection。如果將不在這個清單中的物件類型傳遞給函式,則會引發錯誤。

      • values (字串清單,選用,當資料類型為 string 時允許):對參數有效的數值清單。如果將不在這個清單中的數值傳遞給函式,則會引發錯誤。

      • options (選項清單,選用,當資料類型為 dictionary 時允許):允許參數使用的選項清單。選項使用與參數相同的定義結構,但如果未指定選項的 required,則預設為 false。MySQL Shell 會驗證最終使用者指定的選項,並且如果將不在這個清單中的選項傳遞給函式,則會引發錯誤。如果您建立沒有選項清單的字典,則 MySQL Shell 會直接將最終使用者為字典指定的任何選項傳遞給函式,而不會進行驗證。

      • required (布林值,選用):是否需要參數。如果未指定參數的 required,則預設為 true

      • brief (字串,選用):參數的簡短描述,以說明資訊的形式提供。

      • details (字串清單,選用):參數的詳細描述,以說明資訊的形式提供。

在將擴充物件註冊為 MySQL Shell 全域物件,或將擴充物件新增為已註冊為 MySQL Shell 全域物件之另一個擴充物件的成員之前,都視為擴充物件正在建構中。如果您嘗試在尚未註冊時在 MySQL Shell 中使用擴充物件,則會傳回錯誤。

跨語言考量

擴充物件可以包含以 Python 定義的成員和以 JavaScript 定義的成員的組合。MySQL Shell 會管理參數和傳回值中,從一種語言到另一種語言的資料傳輸。表格 10.1,「擴充物件支援的資料類型配對」顯示 MySQL Shell 在語言之間傳輸資料時支援的資料類型,以及用作彼此表示的配對

表格 10.1 擴充物件支援的資料類型配對

JavaScript Python
布林值 布林值
字串 字串
整數 長整數
數字 浮點數
Null None
陣列 清單
對應 字典

擴充物件實際上在兩種語言中都是相同的物件。