USP_DATALIST_ADHOCQUERY

Returns a list of ad-hoc queries.

Parameters

Parameter Parameter Type Mode Description
@CURRENTAPPUSERID uniqueidentifier IN Input parameter indicating the ID of the current user.
@NAME nvarchar(100) IN Name
@ONLYSHOWMYQUERIES bit IN Only show my queries
@RECORDTYPEID uniqueidentifier IN Type
@QUERYCATEGORYCODEID uniqueidentifier IN Category
@SITEFILTERMODE tinyint IN Sites
@SITESSELECTED xml IN
@SECURITYFEATUREID uniqueidentifier IN Input parameter indicating the ID of the feature to use for site security checking.
@SECURITYFEATURETYPE tinyint IN Input parameter indicating the type of the feature to use for site security checking.
@INCLUDEFOLDERS bit IN
@ONLYSHOWMOBILIZED bit IN Only show mobilized

Definition

Copy


CREATE procedure dbo.USP_DATALIST_ADHOCQUERY(
    @CURRENTAPPUSERID uniqueidentifier, 
    @NAME nvarchar(100) = null
    @ONLYSHOWMYQUERIES bit = null,
    @RECORDTYPEID uniqueidentifier = null
    @QUERYCATEGORYCODEID uniqueidentifier = null,
    @SITEFILTERMODE tinyint = 0,
    @SITESSELECTED xml = null,
    @SECURITYFEATUREID uniqueidentifier = null,
    @SECURITYFEATURETYPE tinyint = null,
    @INCLUDEFOLDERS bit = 0,
    @ONLYSHOWMOBILIZED bit = 0
    )
as
    set nocount on;

declare @QUERYCATEGORYCODEIDNOTNULL as uniqueidentifier;

declare @RECORDTYPEIDNOTNULL as uniqueidentifier;

if @RECORDTYPEID = '00000000-0000-0000-0000-000000000001'
begin
    set @RECORDTYPEIDNOTNULL = null;
end
else
begin
    set @RECORDTYPEIDNOTNULL = @RECORDTYPEID;
end;

if @QUERYCATEGORYCODEID = '00000000-0000-0000-0000-000000000001'
begin
    set @QUERYCATEGORYCODEIDNOTNULL = null;
end
else
begin
    set @QUERYCATEGORYCODEIDNOTNULL = @QUERYCATEGORYCODEID;
end;

declare @ISSYSADMIN bit;
declare @HASQUERYVIEWSYSTEMPRIVILEGE bit = 0;

select @ISSYSADMIN = ISSYSADMIN from dbo.APPUSER where ID = @CURRENTAPPUSERID;

/* Filter out any ad-hoc queries involving query views to which the current user does not have rights */
if @ISSYSADMIN = 0 
begin
    select @HASQUERYVIEWSYSTEMPRIVILEGE = dbo.UFN_SECURITY_APPUSER_GRANTED_SYSTEMPRIVILEGE_IN_SYSTEMROLE(@CURRENTAPPUSERID, '5f9bbcaf-9c67-4539-9880-ae4f709a9c1f');


    if (@HASQUERYVIEWSYSTEMPRIVILEGE = 0)
    begin
        declare @OKVIEWS table (OBJECTNAME nvarchar(128));

        insert into @OKVIEWS (OBJECTNAME)
        select QUERYVIEWCATALOG.OBJECTNAME from dbo.QUERYVIEWCATALOG
        where exists (
            select [OKVIEWS].QUERYVIEWCATALOGID 
            from dbo.UFN_SECURITY_GETGRANTEDQUERYVIEWSFORUSER(@CURRENTAPPUSERID) as [OKVIEWS] where [OKVIEWS].QUERYVIEWCATALOGID = QUERYVIEWCATALOG.ID);
    end
end;

declare @PERMISSIONEDFOLDERS table
(
    FOLDERID uniqueidentifier
)

insert into @PERMISSIONEDFOLDERS (FOLDERID)
select ID
from dbo.UFN_ADHOCQUERYFOLDERS_GETUSERSFOLDERS(@CURRENTAPPUSERID)

declare @QUERIESTOINCLUDE table
(
    QUERYID uniqueidentifier,
    FOLDERID uniqueidentifier
)

declare @HASCRITERIA bit
set @HASCRITERIA = 0
if rtrim(ltrim(coalesce(@NAME, ''))) <> '' or coalesce(@SITEFILTERMODE, 0) <> 0 or @RECORDTYPEID is not null or @QUERYCATEGORYCODEID is not null or coalesce(@ONLYSHOWMYQUERIES, 0) <> 0 or @ONLYSHOWMOBILIZED <> 0
    set @HASCRITERIA = 1

insert into @QUERIESTOINCLUDE (QUERYID, FOLDERID)
select
    ADHOCQUERY.ID,
    ADHOCQUERY.FOLDERID
from dbo.ADHOCQUERY
inner join dbo.QUERYVIEWCATALOG on ADHOCQUERY.QUERYVIEWCATALOGID = QUERYVIEWCATALOG.ID
where 
    /* Filter out restricted query views */
    (
        (
            @ISSYSADMIN = 1 
            or 
            (
                @HASQUERYVIEWSYSTEMPRIVILEGE = 1 
                and 
                (dbo.UFN_SECURITY_APPUSER_GRANTED_ADHOCQUERYINSTANCE_IN_SYSTEMROLE(@CURRENTAPPUSERID, ADHOCQUERY.ID) = 1)
            )
        )
        /* This will return a list of query views in use by the ad-hoc query but not in the OK views table variable; 
        These ad-hoc queries should not be returned to the client. */
        or 
        (
            not exists
            (
                select [QUERYVIEWSINUSE].OBJECTNAME 
                from dbo.ADHOCQUERY as [ADHOCQUERYRIGHTSTEST]
                outer apply dbo.UFN_ADHOCQUERY_QUERYVIEWSINUSE(ADHOCQUERYRIGHTSTEST.QUERYDEFINITIONXML) as [QUERYVIEWSINUSE]
                where 
                    [ADHOCQUERYRIGHTSTEST].ID = ADHOCQUERY.ID and
                    not exists 
                    (
                        select [OKVIEWS].OBJECTNAME 
                        from @OKVIEWS as [OKVIEWS] where [OKVIEWS].OBJECTNAME = [QUERYVIEWSINUSE].OBJECTNAME
                    )
            )
        )
        and
        (dbo.UFN_SECURITY_APPUSER_GRANTED_ADHOCQUERYINSTANCE_IN_SYSTEMROLE(@CURRENTAPPUSERID, ADHOCQUERY.ID) = 1)
    )    
    -- Ensure the folder the query belongs to is visible

    and 
    (
        ADHOCQUERY.FOLDERID is null
        or ADHOCQUERY.FOLDERID in (select FOLDERID from @PERMISSIONEDFOLDERS)
    )
    /* End restricted query views filter */
    and (@ONLYSHOWMOBILIZED = 0 or ADHOCQUERY.MOBILIZE = 1)
    and ((@NAME is null or @NAME = '') or ADHOCQUERY.NAME like '%' + @NAME + '%')
    and ((@ONLYSHOWMYQUERIES is null or @ONLYSHOWMYQUERIES = 0) or (@ONLYSHOWMYQUERIES = 1 and ADHOCQUERY.OWNERID = @CURRENTAPPUSERID))
    and (@RECORDTYPEID is null or ((@RECORDTYPEIDNOTNULL is null and QUERYVIEWCATALOG.RECORDTYPEID is null) or (QUERYVIEWCATALOG.RECORDTYPEID = @RECORDTYPEIDNOTNULL))) 
    and (@QUERYCATEGORYCODEID is null or ((@QUERYCATEGORYCODEIDNOTNULL is null and ADHOCQUERY.QUERYCATEGORYCODEID is null) or (ADHOCQUERY.QUERYCATEGORYCODEID = @QUERYCATEGORYCODEIDNOTNULL)))
    and QUERYVIEWCATALOG.ROOTOBJECT = 1
    and
    (
        ADHOCQUERY.SITEID is null 
        or
        (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[ADHOCQUERY].[SITEID] or (SITEID is null and [ADHOCQUERY].[SITEID] is null)))
    )
    and 
    (
        @SITEFILTERMODE = 0
        or 
        ADHOCQUERY.SITEID in (select SITEID from dbo.UFN_SITE_BUILDDATALISTSITEFILTER (@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED))        
    )

declare @QUERYANCESTORS table
(
    QUERYID uniqueidentifier,
    ANCESTORFOLDERID uniqueidentifier
)

insert into @QUERYANCESTORS (QUERYID, ANCESTORFOLDERID)
select
    QUERIESTOINCLUDE.QUERYID,
    ANCESTORS.ID
from @QUERIESTOINCLUDE QUERIESTOINCLUDE
cross apply dbo.UFN_ADHOCQUERY_GETANCESTORS(QUERIESTOINCLUDE.FOLDERID) as ANCESTORS

select ADHOCQUERY.ID,
    ADHOCQUERY.NAME,
    ADHOCQUERY.DESCRIPTION,
    QUERYVIEWCATALOG.RECORDTYPEID,
    RECORDTYPE.NAME [RECORDTYPE_NAME],
    ADHOCQUERY.QUERYCATEGORYCODEID,
    QUERYCATEGORYCODE.DESCRIPTION [QUERYCATEGORYCODE_DESCRIPTION],
    QUERYVIEWCATALOG.DISPLAYNAME [QUERYVIEWCATALOG_NAME],
    case when APPUSER.DISPLAYNAME = ''
        then APPUSER.USERNAME
        else APPUSER.DISPLAYNAME
    end [OWNER],
    ADHOCQUERY.OWNERID,
    ADHOCQUERY.OTHERSCANMODIFY,
    ADHOCQUERY.DATEADDED,
    CHANGEAGENT.USERNAME [ADDEDBY_USERNAME],
    ADHOCQUERY.ISBROWSABLE,
    coalesce(SITE.NAME, 'All sites') [SITE],
    cast(1 as bit) as ISQUERY,
    ADHOCQUERY.FOLDERID as PARENTFOLDERID,
    'RES:newitem',
    ADHOCQUERY.DISPLAYORDER,
    case 
        when DISPLAYORDER = 0 then 1 
        else 0 
    end as DISPLAYORDERNOTSET,
    ADHOCQUERY.MOBILIZE,
    case 
        when @ISSYSADMIN = 1 then cast(1 as bit)
        when dbo.UFN_SECURITY_APPUSER_GRANTED_ADHOCQUERYINSTANCEEDIT_IN_SYSTEMROLE(@CURRENTAPPUSERID, ADHOCQUERY.ID) = 1 then cast(1 as bit)
        else cast(0 as bit)
    end as USERCANEDIT
from @QUERIESTOINCLUDE as QUERIESTOINCLUDE
inner join dbo.ADHOCQUERY on ADHOCQUERY.ID = QUERIESTOINCLUDE.QUERYID
inner join dbo.QUERYVIEWCATALOG on ADHOCQUERY.QUERYVIEWCATALOGID = QUERYVIEWCATALOG.ID
left join dbo.RECORDTYPE on QUERYVIEWCATALOG.RECORDTYPEID = RECORDTYPE.ID
left join dbo.APPUSER on ADHOCQUERY.OWNERID = dbo.APPUSER.ID
left join dbo.QUERYCATEGORYCODE on ADHOCQUERY.QUERYCATEGORYCODEID = QUERYCATEGORYCODE.ID
left join dbo.CHANGEAGENT on ADHOCQUERY.ADDEDBYID = CHANGEAGENT.ID
left join dbo.SITE on ADHOCQUERY.SITEID = SITE.ID


union all

select ADHOCQUERYFOLDER.ID,
    ADHOCQUERYFOLDER.NAME + ' (' + cast((select count(*) from @QUERYANCESTORS as QUERYANCESTORS where QUERYANCESTORS.ANCESTORFOLDERID = ADHOCQUERYFOLDER.ID) as nvarchar(10)) + ')',
    null,
    null,
    null,
    null,
    null,
    null,
    null,
    null,
    cast(1 as bit) as OTHERSCANMODIFY,
    null,
    null,
    null,
    null,
    cast(0 as bit) as ISQUERY,
    ADHOCQUERYFOLDER.PARENTFOLDERID,
    'RES:folder_closed',
    ADHOCQUERYFOLDER.DISPLAYORDER,
    case 
        when DISPLAYORDER = 0 then 1 
        else 0 
    end as DISPLAYORDERNOTSET,
    null,
    cast(0 as bit) as USERCANEDIT
from @PERMISSIONEDFOLDERS PERMISSIONEDFOLDERS
inner join dbo.ADHOCQUERYFOLDER on PERMISSIONEDFOLDERS.FOLDERID = ADHOCQUERYFOLDER.ID
where
    @INCLUDEFOLDERS = 1 and
    (@ISSYSADMIN = 1 or dbo.UFN_SECURITY_APPUSER_GRANTED_ADHOCQUERYFOLDER_IN_SYSTEMROLE(@CURRENTAPPUSERID, ADHOCQUERYFOLDER.ID) = 1) and
    (
        @HASCRITERIA = 0 or
        -- Ensure that there are visible queries under this folder

        exists
        (
            select 1 from 
            @QUERYANCESTORS as QUERYANCESTORS 
            where 
                QUERYANCESTORS.ANCESTORFOLDERID = ADHOCQUERYFOLDER.ID
        )
    )
order by 
    -- This order statement is to ensure that rows with a blank DISPLAYORDER appear

    -- after rows that have a set DISPLAYORDER

    DISPLAYORDERNOTSET,
    DISPLAYORDER, 
    NAME;