"D:\Replicator_1_beta\Client\TEMPLATE.GDB" Previous topic Chapter index Next topic

MASTER_GEN

 

 

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 Previous topic Chapter index Next topic

 

Хостинг от uCoz