Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
 Пустое вычисляемое поле  [new]
CyberMax
Member

Откуда: Хабаровск
Сообщений: 1379
FB 3.0.5.33220. Предыстория. Уже давно уже выдача сообщения при удалении выдает пустой текст для вычисляемого поля. Сегодня занялся этим вопросом. В итоге проблема воспроизводится, но только на боевой таблице. На аналогичной не воспроизводится.

Исходные данные:
Таблица:
CREATE TABLE REG$ABONENT$EQUIPMEN2 (
    ID     D_KEY NOT NULL,
    ABOUT  COMPUTED BY ('My ID is ' || ID),
    NAME   COMPUTED BY ((SELECT FIRST 1 'NAME' FROM DIR$EQUIPMENT$KIND))
);

ALTER TABLE REG$ABONENT$EQUIPMEN2 ADD CONSTRAINT PK_REG$ABONENT$EQUIPMEN2 PRIMARY KEY (ID);

SET TERM ^ ;

CREATE OR ALTER TRIGGER REG$ABONENT$EQUIPMEN2_BU0 FOR REG$ABONENT$EQUIPMEN2
ACTIVE BEFORE UPDATE POSITION 0
AS
BEGIN
    EXECUTE PROCEDURE PKG$EXCEPTION.FOR_EQUIPMENT(NEW.ID, 'update');
END^

SET TERM ; ^

В ней одна строка.

В PKG$EXCEPTION процедура
    PROCEDURE FOR_EQUIPMENT(ID_EQUIPMENT DOM$KEY NOT NULL, TEXT DOM$TEXT_EXCEPTION NOT NULL)
    AS
    BEGIN
        EXCEPTION EXC$ERROR COALESCE((SELECT ABOUT FROM REG$ABONENT$EQUIPMEN2 WHERE ID = :ID_EQUIPMENT), '<Название пусто> (ID = ' || :ID_EQUIPMENT || ')') || '.' || :TEXT || '.';
    END


Делаю обновление таблицы (можно удаление, то же самое):
UPDATE REG$ABONENT$EQUIPMEN2 SET ID = ID

EXC$ERROR.
<Название пусто> (ID = 500).update.
At procedure 'PKG$EXCEPTION.FOR_EQUIPMENT' line: 20, col: 9
At trigger 'REG$ABONENT$EQUIPMEN2_BU0' line: 5, col: 5.

После перекомпиляции PKG$EXCEPTION получается вот так:
EXC$ERROR.
My ID is 500.update.
At procedure 'PKG$EXCEPTION.FOR_EQUIPMENT' line: 20, col: 9
At trigger 'REG$ABONENT$EQUIPMEN2_BU0' line: 5, col: 5.

Если удалить поле NAME из таблицы или закомментировать использование DIR$EQUIPMENT$KIND, то текст получается правильный: My ID is 500.update.
Сделал второй пакет PKG$EXCEP и стал вызывать исключение из него. Проблема не воспроизводится.
Если вместо вычисляемого поля взять реальное, то проблема так же не воспроизводится.

Насколько я понял в итоге, всё дело в каких-то дальних зависимостях, но как их определить - не представляю. Если покажете, что еще покопать - буду признателен.
19 июн 20, 10:35    [22153458]     Ответить | Цитировать Сообщить модератору
 Re: Пустое вычисляемое поле  [new]
CyberMax
Member

Откуда: Хабаровск
Сообщений: 1379
hvlad, отправил вам на почту воспроизводимый тест-кейс.
26 июн 20, 14:23    [22157822]     Ответить | Цитировать Сообщить модератору
 Re: Пустое вычисляемое поле  [new]
hvlad
Member

Откуда:
Сообщений: 10961
CyberMax,

http://tracker.firebirdsql.org/browse/CORE-6351

пока ещё не исправил, но главное что проблему выяснил.
2 июл 20, 14:54    [22160954]     Ответить | Цитировать Сообщить модератору
Все форумы / Firebird, InterBase Ответить