пользовательская агрегатная функция mariadb - PullRequest
0 голосов
/ 01 октября 2018

Я использую 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

Я что-то здесь упускаю?Есть какая-то конфигурация, которая отсутствует?

Благодарим Вас за помощь.

1 Ответ

0 голосов
/ 10 января 2019

Сообщено как об ошибке https://jira.mariadb.org/browse/MDEV-18100.

В качестве обходного пути создайте UDAF в каждой схеме.

...