1.94. storelisten_int( integer, integer, integer )

関数特性

言語: PLPGSQL

戻り値: integer

FUNCTION storeListen_int (li_origin, li_provider, li_receiver) レシーバノード li_receiver がノード li_origin から届くメッセージを取得するため、ノード li_provider を監視する事を示す STORE_LISTEN 事象を処理します。

declare
	p_li_origin		alias for $1;
	p_li_provider		alias for $2;
	p_li_receiver		alias for $3;
	v_exists		int4;
begin
	-- ----
	-- 中枢構成のロックを取得
	-- ----
	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
		-- ----
		-- これに関連したノードに付いて知る以前に STORE_LISTEN 事象を
		-- 受け取る場合、これらのノードを未決定なものとして
		-- 生成します。
		-- ----
		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;