VastbaseE100

基于开源技术的HTAP数据库管理系统。性能优异,稳定可靠,提供诸多专属领域特性。

Menu

CREATE OPERATOR

CREATE OPERATOR - 定义一个新的运算符

语法格式

CREATE OPERATOR name (
    {FUNCTION|PROCEDURE} = function_name
    [, LEFTARG = left_type ] [, RIGHTARG = right_type ]
    [, COMMUTATOR = com_op ] [, NEGATOR = neg_op ]
    [, RESTRICT = res_proc ] [, JOIN = join_proc ]
    [, HASHES ] [, MERGES ]
)

说明

CREATE OPERATOR 定义了一个新运算符 name。定义运营商的用户成为其所有者。如果给出了模式名称,则在指定的模式中创建运算符。否则,它将在当前架构中创建。

运算符名称是以下列表中最多为 NAMEDATALEN -1(默认为63)字符的序列:

/ <> =〜! @#%^&| `?

您选择的名称有一些限制:

  • – 和 /*不能出现在运营商名称中的任何位置,因为它们将被视为评论的开头。
  • 多字符运算符名称不能以 + 或 - 结尾,除非该名称还包含以下至少一个字符: 〜! @#%^&| `? 例如, @- 是允许的运算符名称,但 *- 不是。此限制允许Vastbase E100解析符合SQL的命令,而不需要令牌之间的空格。

  • 不推荐使用 => 作为运营商名称。在将来的版本中可能完全不允许这样做。

运算符 != 在输入时映射到 <> ,因此这两个名称始终是等效的。

必须至少定义 LEFTARG 和 RIGHTARG中的一个。对于二元运算符,必须定义它们。对于右一元运算符,只应定义LEFTARG ,而对于左一元运算符,只应定义 RIGHTARG 。

function_name 函数必须先前已使用 CREATE FUNCTION定义,并且必须定义为接受所指示类型的正确数量的参数说明(一个或两个)。

在 CREATE OPERATOR 的语法中,关键字 FUNCTION 和 PROCEDURE是等价的,但引用的函数在任何情况下都必须是函数,而不是过程。此处使用关键字PROCEDURE 是历史数据并已弃用。

其他子句指定可选的运算符优化子句。

为了能够创建运算符,您必须对参数说明类型和返回类型具有 USAGE特权,并且对基础函数具有 EXECUTE特权。如果指定了换向器或负极运算符,则必须拥有这些运算符。

参数说明

  • name

    要定义的操作符的名称。允许使用的字符请见上文。名称可以被模式 限定,例如CREATE OPERATOR myschema.+ (…)。如果 没有被模式限定,该操作符将被创建在当前模式中。如果两个同一模式 中的操作符在不同的数据类型上操作,它们可以具有相同的名称。这 被称为重载。

  • function_name

    用来实现这个操作符的函数。

  • left_type

    这个操作符的左操作数(如果有)的数据类型。忽略这个选项 可以表示一个左一元操作符。

  • right_type

    这个操作符的右操作数(如果有)的数据类型。忽略这个选项 可以表示一个右一元操作符。

  • com_op

    这个操作符的交换子。

  • neg_op

    这个操作符的求反器。

  • res_proc

    用于这个操作符的限制选择度估计函数。

  • join_proc

    用于这个操作符的连接选择度估算函数。

  • HASHES

    表示这个操作符可以支持哈希连接。

  • MERGES

    表示这个操作符可以支持归并连接。

要在com_op 或者其他可选参数中给出一个模式限定的操作符名称, 请使用OPERATOR()语法,例如:

COMMUTATOR = OPERATOR(myschema.===) ,

注意事项

在 CREATE OPERATOR中无法指定运算符的词法优先级,因为解析器的优先级行为是硬连线的。

过时的选项 SORT1 , SORT2 , LTCMP 和 GTCMP以前用于指定与可合并连接运算符关联的排序运算符的名称。这不再是必要的,因为通过查看B树操作符系列可以找到关于相关运算符的信息。如果给出了其中一个选项,则忽略它,除非隐式设置MERGES true。

使用 [DROP OPERATOR从数据库中删除用户定义的运算符。使用 ALTER OPERATOR修改数据库中的运算符。

示例

以下命令为数据类型 box 定义新运算符area-equality:

CREATE OPERATOR === (
    LEFTARG = box,
    RIGHTARG = box,
    FUNCTION = area_equal_function,
    COMMUTATOR = ===,
    NEGATOR = !==,
    RESTRICT = area_restriction_function,
    JOIN = area_join_function,
    HASHES, MERGES
);