Возможно ли изменить RDB$SYSTEM_FLAG в RDB$TRIGGERS?

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
_SRG_
Сообщения: 17
Зарегистрирован: 22 окт 2007, 09:36

Возможно ли изменить RDB$SYSTEM_FLAG в RDB$TRIGGERS?

Сообщение _SRG_ » 11 дек 2008, 20:42

Здравствуйте.

Имеется триггер TEST_TRIGGER в БД под FB2.0.

UPDATE RDB$TRIGGERS SET RDB$SYSTEM_FLAG = 1 WHERE RDB$TRIGGER_NAME = 'TEST_TRIGGER';

COMMIT;

Возможно ли после такой манипуляции вернуть SYSTEM_FLAG = NULL или 0???

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Возможно ли изменить RDB$SYSTEM_FLAG в RDB$TRIGGERS?

Сообщение kdv » 12 дек 2008, 10:33

сделай b/r базе и пересоздай триггер, если он исчезнет. Вообще нефиг было "эксперименты" проводить. Спросил бы сначала...

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Re: Возможно ли изменить RDB$SYSTEM_FLAG в RDB$TRIGGERS?

Сообщение WildSery » 12 дек 2008, 11:18

kdv писал(а):сделай b/r базе и пересоздай триггер, если он исчезнет.
Эээ. А почему "если"? Я думал, по-любому исчезнет.

_SRG_
Сообщения: 17
Зарегистрирован: 22 окт 2007, 09:36

Re: Возможно ли изменить RDB$SYSTEM_FLAG в RDB$TRIGGERS?

Сообщение _SRG_ » 12 дек 2008, 12:48

kdv писал(а):сделай b/r базе и пересоздай триггер, если он исчезнет. Вообще нефиг было "эксперименты" проводить. Спросил бы сначала...
Спасибо за совет, но потребность в таких экспериментах действительно была. Опишу ситуацию более подробно:

Имеется UDF библиотека, которая содержит функцию для извлечения BLOB поля и сохранение этого содержимого в файл. На таблицу RDB$PROCEDURES вешаем триггер AFTER INSERT/UPDATE/DELETE который вызывает UDF функцию и передает ей RDB$PROCEDURE_SOURCE (соответсвенно для извлечения тела процедуры в файл). В IBExpert создаем новую процедуру - на сервере появляется файл с телом процедуры, модифицируем процедуру - на сервере файл с телом процедуры обновляется, т.е. все происходит как и хотелось. Ок.

Далее - создаем sql скрипт который создает новую процедуру и накатываем его на БД с помощью ibescript - на сервере ничего не выгрузилось, хотя процедура в БД появилась (процедуру удалили).

А вот теперь и начались эксперименты: установливаем RDB$SYSTEM_FLAG = 1 для триггера который выгружает тело процедуры. Накатываем скрипт создания процедуры с помощью ibescript и на стороне сервера появляется файл с телом процедуры...

Как можно объяснить это? Как именно накатывает ibescript sql скрипты?

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Re: Возможно ли изменить RDB$SYSTEM_FLAG в RDB$TRIGGERS?

Сообщение dimitr » 12 дек 2008, 13:23

а кто вообще сказал, что триггеры на системных таблицах должны работать?

_SRG_
Сообщения: 17
Зарегистрирован: 22 окт 2007, 09:36

Re: Возможно ли изменить RDB$SYSTEM_FLAG в RDB$TRIGGERS?

Сообщение _SRG_ » 12 дек 2008, 13:29

dimitr писал(а):а кто вообще сказал, что триггеры на системных таблицах должны работать?
Об этом никто не говорил, но факты говорят об обратном и описанная мною ситуация имеет место быть. Триггер с флагом RDB$SYSTEM_FLAG = 1 действительно выполняется на системной таблице RDB$PROCEDURES в процессе накатывания скрипта с помощью ibescript.

Linux Classic Server FB 2.0.1.

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Re: Возможно ли изменить RDB$SYSTEM_FLAG в RDB$TRIGGERS?

Сообщение dimitr » 12 дек 2008, 14:44

продолжай работать с фактами. Когда и они перестанут работать, вспомнишь меня.

_SRG_
Сообщения: 17
Зарегистрирован: 22 окт 2007, 09:36

Re: Возможно ли изменить RDB$SYSTEM_FLAG в RDB$TRIGGERS?

Сообщение _SRG_ » 12 дек 2008, 15:14

dimitr писал(а):продолжай работать с фактами. Когда и они перестанут работать, вспомнишь меня.
Фразы такого рода от Вас действительно звучат угрожающе :D

Мне просто интересно почему триггер с RDB$SYSTEM_FLAG = 1 при накатке скрипта (создающем процедуру) c помощью ibescript вызывается по событию UPDATING, а в процессе создания процедуры из IBExpert вызывается и по событию INSERTING и UPDATING.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Re: Возможно ли изменить RDB$SYSTEM_FLAG в RDB$TRIGGERS?

Сообщение Dimitry Sibiryakov » 12 дек 2008, 16:52

Если ты посмотришь на скрипт, который эксперт предусмотрительно показывает, то увидишь, что он сначала создаёт процедуру с пустым телом, а затем её альтерит.

_SRG_
Сообщения: 17
Зарегистрирован: 22 окт 2007, 09:36

Re: Возможно ли изменить RDB$SYSTEM_FLAG в RDB$TRIGGERS?

Сообщение _SRG_ » 15 дек 2008, 22:39

_SRG_ писал(а):
dimitr писал(а):а кто вообще сказал, что триггеры на системных таблицах должны работать?
Об этом никто не говорил, но факты говорят об обратном и описанная мною ситуация имеет место быть. Триггер с флагом RDB$SYSTEM_FLAG = 1 действительно выполняется на системной таблице RDB$PROCEDURES в процессе накатывания скрипта с помощью ibescript.

Linux Classic Server FB 2.0.1.
Эх... вот бы CREATE TRIGGER ACTIVE ON METADATA <INSERT | UPDATE | DELETE> :)

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Re: Возможно ли изменить RDB$SYSTEM_FLAG в RDB$TRIGGERS?

Сообщение dimitr » 16 дек 2008, 07:58

_SRG_ писал(а):Эх... вот бы CREATE TRIGGER ACTIVE ON METADATA <INSERT | UPDATE | DELETE>
в 3.0 ожидаются триггеры для DDL

Ответить