mariadb 用户定义聚合函数
mariadb user defined aggregate function
我正在使用 mariadb 10.3.9,并创建了一个用户定义的聚合函数 (UDAF) 并放置在 common_schema 中。此模式包含我的实用程序函数,供同一服务器上的其他 schema/databases 使用。
问题是在使用任何其他模式的同时调用 UDAF 时,它总是 return NULL!
以下为问题演示:
CREATE SCHEMA IF NOT EXISTS common_schema;
DELIMITER $$
DROP FUNCTION IF EXISTS common_schema.add_ints $$
CREATE FUNCTION common_schema.add_ints(int_1 INT, int_2 INT) RETURNS INT NO SQL
BEGIN
RETURN int_1 + int_2;
END $$
DROP FUNCTION IF EXISTS common_schema.sum_ints $$
CREATE AGGREGATE FUNCTION common_schema.sum_ints(int_val INT) RETURNS INT
BEGIN
DECLARE result INT DEFAULT 0;
DECLARE CONTINUE HANDLER FOR NOT FOUND RETURN result;
LOOP FETCH GROUP NEXT ROW;
SET result = common_schema.add_ints(result, int_val);
END LOOP;
END $$
DELIMITER ;
现在,这样调用,return结果如预期:
USE common_schema;
SELECT common_schema.sum_ints(seq)
FROM (SELECT 1 seq UNION ALL SELECT 2) t;
-- result: 3
使用任何其他模式调用它,它 returns NULL:
USE other_schema;
SELECT common_schema.sum_ints(seq)
FROM (SELECT 1 seq UNION ALL SELECT 2) t;
-- result: null
我是不是漏掉了什么?是否缺少任何配置?
感谢您的帮助。
已报告为错误 https://jira.mariadb.org/browse/MDEV-18100。
作为解决方法,在每个架构中创建 UDAF。
我正在使用 mariadb 10.3.9,并创建了一个用户定义的聚合函数 (UDAF) 并放置在 common_schema 中。此模式包含我的实用程序函数,供同一服务器上的其他 schema/databases 使用。
问题是在使用任何其他模式的同时调用 UDAF 时,它总是 return NULL!
以下为问题演示:
CREATE SCHEMA IF NOT EXISTS common_schema;
DELIMITER $$
DROP FUNCTION IF EXISTS common_schema.add_ints $$
CREATE FUNCTION common_schema.add_ints(int_1 INT, int_2 INT) RETURNS INT NO SQL
BEGIN
RETURN int_1 + int_2;
END $$
DROP FUNCTION IF EXISTS common_schema.sum_ints $$
CREATE AGGREGATE FUNCTION common_schema.sum_ints(int_val INT) RETURNS INT
BEGIN
DECLARE result INT DEFAULT 0;
DECLARE CONTINUE HANDLER FOR NOT FOUND RETURN result;
LOOP FETCH GROUP NEXT ROW;
SET result = common_schema.add_ints(result, int_val);
END LOOP;
END $$
DELIMITER ;
现在,这样调用,return结果如预期:
USE common_schema;
SELECT common_schema.sum_ints(seq)
FROM (SELECT 1 seq UNION ALL SELECT 2) t;
-- result: 3
使用任何其他模式调用它,它 returns NULL:
USE other_schema;
SELECT common_schema.sum_ints(seq)
FROM (SELECT 1 seq UNION ALL SELECT 2) t;
-- result: null
我是不是漏掉了什么?是否缺少任何配置?
感谢您的帮助。
已报告为错误 https://jira.mariadb.org/browse/MDEV-18100。
作为解决方法,在每个架构中创建 UDAF。