Менеджер свойств объектов в исходном тексте

Рассмотрим часть API ядра Ultima-S. В частности менеджер свойств объектов.

Когда клиент БД желает узнать, какие свойства имеются у объекта, он делает вызов процедуры GetProperties, упрощенный исходный текст которой приведен ниже.

Обратите внимание на вызов процессора событий и на то, что менеджер свойств объектов в соответствии с секретностью пользователя удаляет свойства, на которые у него нет привилегий.

 

create procedure GetProperties

@UDN int

as

declare @Class varchar(24), @ret int, @Prc varchar(32), @Usr int, @Flg smallint, @No smallint

 

select @Class=Class from Docs where UDN=@UDN

begin transaction

-- чистим таблицу свойств в начале

delete from Properties where u=@@spid

-- рассылаем событие getp

exec EvProcess 'getp',@Class,'',0,1, @UDN,0,0

-- проверка привилегий (убираются свойства документа, на которые у пользователя нет привилегий)

exec SysStaff @Usr output

declare Prv cursor for select ProcName,Flag,No from Properties where u=@@spid and Flag<3

open Prv

fetch next from Prv into @Prc,@Flg,@No

while @@FETCH_STATUS <> -1 begin

if @@FETCH_STATUS <> -2 begin

select @Class=Class from PropertyClass where No=@No

if @Flg>0 select @Prc=@Prc+'_'+@Class

exec CheckPrivilege @Usr,@Prc,@ret output

if @ret=0 update Properties set Flag=-1 where current of Prv

end

fetch next from Prv into @Prc,@Flg,@No

end

deallocate Prv

delete from Properties where Flag<0

commit transaction

GO