USP_DATALIST_EVENTTOTALBYEVENTID

Provide event total in a given FAF event.

Parameters

Parameter Parameter Type Mode Description
@EVENTID uniqueidentifier IN Event ID

Definition

Copy


CREATE procedure dbo.USP_DATALIST_EVENTTOTALBYEVENTID(@EVENTID uniqueidentifier)
as
begin
    set nocount on;

    declare @result table
    (
        GOAL money,
        TOTALAMOUNTRAISED money
    );

    -- try retrieving data from cache first

    set transaction isolation level read uncommitted;
    begin transaction;

    declare @IDOC int;
    declare @CACHEKEY as nvarchar(512);
    declare @CACHEDATA as xml;
    declare @LIFESPANSECONDS int;

    set @LIFESPANSECONDS = 60;
    set @CACHEDATA = null;
    set @CACHEKEY = 'EVENTTOTALBYEVENTID';

    exec dbo.USP_FAFEVENTDATACACHE_GET @DATA = @CACHEDATA output, @EVENTID = @EVENTID, @CACHEKEY = @CACHEKEY;

    if @CACHEDATA is null    -- start calculations

        begin
            -- update cache ISCALCULATING flag

            exec dbo.USP_FAFEVENTDATACACHE_CALCULATIONSTARTS @EVENTID = @EVENTID, @CACHEKEY = @CACHEKEY;

            insert into @result(GOAL, TOTALAMOUNTRAISED)
            select REVENUETOTAL AS GOAL, dbo.UFN_REVENUE_GETEVENTTOTAL(@EVENTID) TOTALAMOUNTRAISED
            from dbo.EVENTGOAL
            where EVENTID = @EVENTID

            -- convert the result to xml

            set @CACHEDATA = (select * from @result for xml raw);
            if @CACHEDATA is null
                set @CACHEDATA = '<rows />';
            else
                set @CACHEDATA= '<rows>' + convert(nvarchar(max), @CACHEDATA) + '</rows>';

            select @LIFESPANSECONDS = CONVERT(int, ISNULL(Value, '60')) from dbo.SETTING where Name = 'FAFEventTotalCache';

            -- cache the result

            exec dbo.USP_FAFEVENTDATACACHE_ADD
                @EVENTID = @EVENTID,
                @CACHEKEY = @CACHEKEY,
                @DATA = @CACHEDATA,
                @LIFESPANSECONDS = @LIFESPANSECONDS;            
        end
    else
        begin
            begin try
                exec sp_xml_preparedocument @IDOC output, @CACHEDATA;

                insert into @result
                select * from openxml(@IDOC, '/rows/row', 0) with (
                    GOAL money,
                    TOTALAMOUNTRAISED money
                );

                exec sp_xml_removedocument @IDOC;
            end try
            begin catch
                -- do nothing

            end catch        
        end

    commit transaction;

    select GOAL, TOTALAMOUNTRAISED from @result
end