Descriptions
Вызывается клиентом. Поколение изменений в таблице MASTER. [in]A_CLIENT_ID - ID БД клиента. [in]A_SERV_GEN - поколение изменений на сервере, которое запросил клиент. Возвращает набор записей. [out]LOG_ACTION - действие которое должен выполнить клиент(I - вставить U - обновить D - удалить), Остальные выходные параметры - поля записи. В случае удаления все поля, кроме LOG_GID установлены в NULL
 
Input Parameters
Parameter | Type |
---|---|
A_CLIENT_ID |
INTEGER |
A_SERV_GEN |
INTEGER |
 
Output Parameters
Parameter | Type |
---|---|
LOG_GID |
NUMERIC (18, 0) |
LOG_OWN_GEN |
INTEGER |
LOG_ACTION |
CHAR (1) |
DATA |
VARCHAR (255) |
 
Definition
CREATE PROCEDURE MASTER_GEN (
A_CLIENT_ID INTEGER,
A_SERV_GEN INTEGER)
RETURNS (
LOG_GID NUMERIC (18, 0),
LOG_OWN_GEN INTEGER,
LOG_ACTION CHAR (1),
DATA VARCHAR (255))
AS
DECLARE VARIABLE LOG_UPD_GEN INTEGER;
DECLARE VARIABLE LOG_INS_GEN INTEGER;
DECLARE VARIABLE LOG_IS_DELETED INTEGER;
BEGIN
/*
Вызывается клиентом. Возвращает поколение изменений в таблице MASTER.
[in]A_CLIENT_ID - ID БД клиента.
[in]A_SERV_GEN - поколение изменений на сервере, которое запросил клиент.
Возвращает набор записей.
[out]LOG_ACTION - действие которое должен выполнить клиент(I - вставить U - обновить D - удалить).
Остальные выходные параметры - поля записи.
В слу÷ае удаления все поля, кроме LOG_GID установлены в NULL
Возвращаются измен¸нные записи с установленными поколениями.
(поколения устанавливает процедура SET_NEW_GEN, запущенная из фонового процесса,
записи поме÷аются как измен¸нные (поколение устанавливается в NULL) с помощью триггеров).
Записи клиента не возвращаются (только ÷ужие, но не обязательно принадлежащие серверу).
В зависимости от A_SERV_GEN(клиент знает все изменения до A_SERV_GEN-1 вклю÷ительно)
определяется характер изменения (запись была вставлена изменена, удалена).
Для разных клиентов это изменения могуть быть разными.
Если запись была вставлена и удалена до репликации то она не переда¸тся.
*/
FOR
SELECT
LOG_GID,
LOG_UPD_GEN,
LOG_INS_GEN,
LOG_IS_DELETED,
LOG_OWN_GEN,
/*-------TABLE SPECIFIC--------*/
DATA
FROM
LOG_MASTER LEFT JOIN MASTER ON LOG_GID = GID
WHERE
LOG_UPD_GEN IS NOT NULL/*С установленным поколением(если LOG_INS_GEN не установлено, то LOG_UPD_GEN тоже не установлено)*/
AND LOG_DB_ID <> :A_CLIENT_ID/*Только ÷ужие*/
INTO
:LOG_GID,
:LOG_UPD_GEN,
:LOG_INS_GEN,
:LOG_IS_DELETED,
:LOG_OWN_GEN,
/*-------TABLE SPECIFIC--------*/
:DATA
DO
BEGIN
IF( LOG_INS_GEN = A_SERV_GEN )THEN
BEGIN
LOG_ACTION = 'I';/*Клиент должен вставить или обновить запись, если она ещ¸ не удалена*/
IF( LOG_IS_DELETED = 0 )THEN SUSPEND;/*Если запись не была удалена в том же поколении в кот. вставлена*/
END
ELSE IF( LOG_UPD_GEN = A_SERV_GEN )THEN
BEGIN
IF( LOG_IS_DELETED <> 0 ) THEN LOG_ACTION = 'D';/*Клиент должен удалить запись, если она ещ¸ не удалена*/
ELSE LOG_ACTION = 'U';/*Клиент должен обновить запись, если она ещ¸ не удалена*/
SUSPEND;
END
END
END
This file was generated with EMS InterBase/FireBird Manager (www.ibmanager.com) at 11/13/2006 10:51 PM |
![]() ![]() ![]() |