Пользовательская агрегатная функция mariadb
Я использую mariadb 10.3.9, и создал пользовательскую статистическую функцию (UDAF) и помещен в common_schema. Эта схема содержит мои служебные функции, которые будут использоваться другими схемами / базами данных на том же сервере.
Проблема в том, что при вызове UDAF при использовании любой другой схемы он всегда возвращает 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 ;
Теперь, называя это так, возвращает результат, как и ожидалось:
USE common_schema;
SELECT common_schema.sum_ints(seq)
FROM (SELECT 1 seq UNION ALL SELECT 2) t;
-- result: 3
Вызывая его с использованием любой другой схемы, он возвращает NULL:
USE other_schema;
SELECT common_schema.sum_ints(seq)
FROM (SELECT 1 seq UNION ALL SELECT 2) t;
-- result: null
Я что-то здесь упускаю? Есть ли какая-либо конфигурация, которая отсутствует?
Ценю твою помощь.
0 ответов
Отмечено как ошибка https://jira.mariadb.org/browse/MDEV-18100.
В качестве обходного пути создайте UDAF в каждой схеме.