1.113.  storelisten_int( integer, integer, integer )

Propriétés de la fonction
Langage: PLPGSQL
Type du code retour: integer

Traite l'événement STORE_LISTEN, indiquant que le nœud récepteur li_receiver écoute le nœud li_provider pour obtenir les messages provenant du nœud li_origin.

declare
        p_li_origin             alias for $1;
        p_li_provider   alias for $2;
        p_li_receiver   alias for $3;
        v_exists                int4;
begin
        -- ----
        -- Grab the central configuration lock
        -- ----
        lock table sl_config_lock;

        select 1 into v_exists
                        from sl_listen
                        where li_origin = p_li_origin
                        and li_provider = p_li_provider
                        and li_receiver = p_li_receiver;
        if not found then
                -- ----
                -- In case we receive STORE_LISTEN events before we know
                -- about the nodes involved in this, we generate those nodes
                -- as pending.
                -- ----
                if not exists (select 1 from sl_node
                                                where no_id = p_li_origin) then
                        perform storeNode_int (p_li_origin, '<event pending>', 'f');
                end if;
                if not exists (select 1 from sl_node
                                                where no_id = p_li_provider) then
                        perform storeNode_int (p_li_provider, '<event pending>', 'f');
                end if;
                if not exists (select 1 from sl_node
                                                where no_id = p_li_receiver) then
                        perform storeNode_int (p_li_receiver, '<event pending>', 'f');
                end if;

                insert into sl_listen
                                (li_origin, li_provider, li_receiver) values
                                (p_li_origin, p_li_provider, p_li_receiver);
        end if;

        return 0;
end;