COMMUTATOR 修饰符

COMMUTATOR 修饰符允许您指定 SPL 函数为您正在创建的 SPL 函数的转换函数。转换函数接受相同的参数作为您正在创建的 SPL 函数,但以相反的顺序,并返回相同值。对于 SQL 优化器的执行,转换函数的成本效益比更高。

例如,如果 a 小于 b,则函数 lessthan(a,b) 返回 TRUE, 而如果 b 大于或等于 a,则 greaterthan(b,a) 返回 TRUE, 二者是转换函数。 下图使用 WITH 子句来定义转换函数。

图: 定义转换函数。

CREATE FUNCTION lessthan( a dtype1, b dtype2 )
          RETURNING BOOLEAN
          WITH ( COMMUTATOR = greaterthan );
          . . .
          END FUNCTION;

如果 greaterthan(b,a) 的执行成本低于 lessthan(a,b),则优化器可能使用 greaterthan(b,a)。要指定转换函数,您必须同时拥有该转换函数和您正在编写的 SPL 函数。您还必须将两个函数的 Execute 权限授予您的 SPL 函数的用户。

要了解授予权限的详细描述,请参阅 GBase 8s SQL 指南:语法 中的 GRANT 语句的描述。