Descriptions
There is no desription for trigger BU_MASTER
 
Definition
CREATE TRIGGER BU_MASTER FOR MASTER ACTIVE
BEFORE UPDATE POSITION 32767
AS
DECLARE VARIABLE CURR_DB_ID INTEGER;
DECLARE VARIABLE REPL_COUNT INTEGER;
DECLARE VARIABLE CURR_GEN INTEGER;
BEGIN
/*Описание.
Если не в режиме репликации: генерирует собственное поколение записи (LOG_OWN_GEN),
при попытке редактирования ÷ужих записей (созданных другой БД),
возбуждает исклю÷ение E_ACCESS_ERROR.
Всегда устнавливает поколение изменения/удаления
в соответствующей записи таблицы LOG_XXXX в NULL
(поколение записи с÷итается неустановленным, поколение установит процедура SET_NEW_GEN).
*/
SELECT DB_ID FROM CURR_DB_ID INTO :CURR_DB_ID;/*Полу÷ить ID текущей БД*/
SELECT GEN FROM CURR_GEN INTO :CURR_GEN;/*Полу÷ить текущее зна÷ение с÷¸т÷ика поколений*/
/**/
/*Полу÷ить кол-во серверов с которыми происходит репликация (в текущей транзакции)*/
SELECT COUNT( DB_ID ) FROM CURR_SERV INTO :REPL_COUNT;
/*Если REPL_COUNT = 0, зна÷ит транзакция не в состоянии репликации. Можно редактировать только записи принадлежащие текущей БД.
Генерируется LOG_OWN_GEN (собственное поколение записи).
Если REPL_COUNT = 1, зна÷ит транзакция в состоянии репликации. Предполагается, ÷то изменение производит процедура репликации. LOG_OWN_GEN не генерируется.
Если REPL_COUNT > 1, зна÷ит произошла внутрення ошибка (напр. таблица CURR_SERV не была о÷ищена после предыдущей репликации)
*/
IF( REPL_COUNT=0 AND OLD.DB_ID<>CURR_DB_ID )THEN EXCEPTION E_ACCESS_ERROR;/*Попытка редактирования ÷ужой записи (÷ужие записи редактируются только в состоянии репликации)*/
/**/
IF( REPL_COUNT = 0 )THEN NEW.LOG_OWN_GEN = CURR_GEN + 1;/*Если не в состоянии репликации, то в LOG_OWN_GEN заносится следующее зна÷ение с÷¸т÷ика поколений(которое будет в LOG_UPD_GEN)*/
ELSE
IF( REPL_COUNT <> 1 )THEN EXCEPTION EINTERNAL_MULTIPLE_REPL;/*ASSERT(DEBUG)*/
/*
В таблице регистрации пометить запись как измен¸нную*/
UPDATE LOG_MASTER
SET LOG_UPD_GEN = NULL
WHERE
LOG_GID = NEW.GID
AND LOG_UPD_GEN IS NOT NULL;/*Доп. условие, ÷то бы избежать конфликта блокировок с процедурой SET_NEW_GEN*/
END
| This file was generated with EMS InterBase/FireBird Manager (www.ibmanager.com) at 11/13/2006 10:51 PM |
|