MySQL Shell 9.0  /  ...  /  创建扩展对象

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
布尔值 布尔值
字符串 字符串
整数 长整数
数字 浮点数
空值
数组 列表
映射 字典

扩展对象在两种语言中实际上是同一个对象。