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

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
数组 列表
映射 字典

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