MySQL UDF работает только в предложении WHERE, если заключено в IF - PullRequest
0 голосов
/ 23 января 2019

У меня есть такая функция:

create function foo(<args>)
returns varchar(40)
begin
return sha1(concat_ws('-', <args>));
end

Когда я использую его в таком предложении where, я не получаю результатов:

where fooCol = foo(<args>)

Но это прекрасно работает:

where if(fooCol = foo(<args>), true, false)

Я полностью озадачен этим. Это должно быть какое-то поведение функций, о которых я не знаю, но я не смог понять, почему это так.

ОБНОВЛЕНО

Вот более подробный пример. Все используемые столбцы varchar(40).

delimiter $$

create function fn($fk varchar(40))
returns varchar(40)
begin
    return sha1(concat_ws('-',
        -- Real function takes more arguments but I was able
        -- to reproduce with a simplified version like this.
        coalesce($fk, 'None')
    ));
end

$$

select
    *
from
    foo
    left join bar on bar.id = foo.bar_id
where
    foo.fooKey = fn(bar.barKey)
    -- This will return rows!
    -- if(foo.fooKey = fn(bar.barKey), true, false);

ОБНОВЛЕНИЕ 2

Вышеуказанное ТОЛЬКО не работает, если barKey равно нулю. Если я просто передам null вместо использования поля в качестве аргумента, это сработает.

1 Ответ

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

Моя проблема вызвана этой ошибкой:

https://bugs.mysql.com/bug.php?id=86922

Время обновить MySQL!

...