10.2.2创建扩展对象

若要创建新的扩展对象以提供一个或多个函数、数据类型或进一步的扩展对象,请使用内置扩展对象shell.createExtensionObject ()函数,或shell.create_extension_object ()在Python中:

shell.createExtensionObject ()

若要向扩展对象添加成员,请使用内置的shell.addExtensionObjectMember ()函数,或shell.add_extension_object_member ()在Python中:

壳。addExtensionObjectMember(对象,名称,成员[,定义])

地点:

  • 对象要在其中添加新成员的扩展对象。

  • 的名字是新成员的名称。名称必须是有效的脚本标识符,因此第一个字符必须是字母或下划线字符,后面跟着任意数量的字母、数字或下划线字符。在已经添加到相同扩展对象的成员中,名称必须是唯一的,如果成员是函数,则名称不必与已定义函数的名称匹配。名称最好以驼峰格式指定,即使使用Python定义和添加成员也是如此。使用驼峰格式指定成员名可以使MySQL Shell自动执行命名约定。MySQL Shell在JavaScript模式下使用驼峰大小写,在Python模式下使用蛇形大小写。

  • 成员是新成员的值,可以是以下任意值:

    • 受支持的基本数据类型。支持的数据类型为没有一个保龄球数量(整数或浮点数),字符串数组,字典

    • JavaScript或Python函数。可以在作为成员添加到扩展对象的函数体中使用本机代码,前提是接口(参数和返回值)限于扩展对象中支持的数据类型表10.1,“扩展对象支持的数据类型对”.在接口中使用其他数据类型可能导致未定义的行为。

    • 另一个扩展对象。

  • 定义可选字典,可以包含成员的帮助信息,如果成员是函数,还可以包含函数接收的形参列表。帮助信息使用以下属性定义:

    • 短暂的是成员的简要描述。

    • 细节成员的详细描述,以字符串列表的形式提供。这是在使用MySQL Shell时提供的\帮助命令。

    函数的参数使用以下属性定义:

    • 参数描述函数接收的每个参数的字典列表。每个字典描述一个参数,可以包含以下键:

      • 的名字(string, required):参数的名称。

      • 类型(string, required):参数的数据类型,为之一字符串整数保龄球浮动数组字典,或对象.如果类型为对象,也可以使用Key。如果类型为字符串,也可以使用Key。如果类型为字典,选项也可以使用Key。

      • 字符串,可选,当数据类型为对象):定义允许作为参数的对象类型。

      • 字符串列表,可选,当数据类型为对象):定义了允许作为形参的对象类型的类列表。的支持对象类型而且那些是由MySQL Shell api公开的,例如会话ClassicSession表格,或集合.如果将对象类型传递给不在此列表中的函数,则会引发错误。

      • 字符串列表,可选,当数据类型为字符串):对参数有效的值列表。如果将值传递给不在此列表中的函数,则会引发错误。

      • 选项(选项列表,可选,当数据类型为字典):参数允许的选项列表。选项使用与参数相同的定义结构,除了if要求未为选项指定,则默认为.MySQL Shell验证最终用户指定的选项,如果将选项传递给不在此列表中的函数,将引发错误。在MySQL Shell 8.0.17 ~ 8.0.19中,当数据类型为字典,但从MySQL Shell 8.0.20是可选的。如果您创建了一个没有选项列表的字典,那么最终用户为字典指定的任何选项都将由MySQL Shell直接传递给函数,而不需要验证。

      • 要求(bool,可选):是否必须输入该参数。如果要求没有为参数指定,则默认为真正的

      • 短暂的(string,可选):作为帮助信息提供的参数的简短描述。

      • 细节(字符串列表,可选):作为帮助信息提供的参数的详细描述。

一个扩展对象在被注册为MySQL Shell全局对象或作为成员添加到另一个被注册为MySQL Shell全局对象的扩展对象之前都被认为是在构建中。如果您试图在MySQL Shell中使用尚未注册的扩展对象,则会返回错误。

跨语言注意事项

扩展对象可以混合包含Python中定义的成员和JavaScript中定义的成员。MySQL Shell管理数据从一种语言到另一种语言的参数和返回值的传输。表10.1,“扩展对象支持的数据类型对”显示MySQL Shell在语言之间传输数据时支持的数据类型,以及用作彼此表示的数据对:

表10.1扩展对象支持的数据类型对

JavaScript Python
布尔 布尔
字符串 字符串
整数
数量 浮动
没有一个
数组 列表
地图 字典

在这两种语言中,扩展对象实际上是相同的对象。