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
陣列 清單
Map 字典

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