UFN_ADHOCQUERY_GETHIERARCHY

Returns a table holding the ad-hoc query folders.

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@CURRENTAPPUSERID uniqueidentifier IN

Definition

Copy


CREATE function dbo.UFN_ADHOCQUERY_GETHIERARCHY 
(
  @CURRENTAPPUSERID uniqueidentifier = null
)
returns @HIERARCHY table 
(
  ID uniqueidentifier, 
  PARENTFOLDERID uniqueidentifier, 
  NAME nvarchar(255),
  DISPLAYORDER int
  ITEMTYPE int
  APPLYASDEFAULTPERMISSIONSFORALLSUBFOLDERS bit,
  SECURITYLEVEL nvarchar(14),
  QUERYDEFAULTALLOWALLUSERSTORUN bit,
  QUERYDEFAULTALLOWALLUSERSTOEDIT bit,
  ISFAVORITE bit,
  SMARTQUERYDEFAULTALLOWALLUSERSTORUN bit,
  SMARTQUERYDEFAULTALLOWALLUSERSTOEDIT bit,
  DESCRIPTION nvarchar(1024), 
  TYPE nvarchar(50), 
  DATEADDED datetime
)
as
begin 

  declare @HASQUERYVIEWSYSTEMPRIVILEGE bit = 0;
  declare @ISSYSADMIN bit = (select top 1 ISSYSADMIN from APPUSER where ID = @CURRENTAPPUSERID);

  if @ISSYSADMIN = 0
    select @HASQUERYVIEWSYSTEMPRIVILEGE = dbo.UFN_SECURITY_APPUSER_GRANTED_SYSTEMPRIVILEGE_IN_SYSTEMROLE(@CURRENTAPPUSERID, '5f9bbcaf-9c67-4539-9880-ae4f709a9c1f')

  if (@ISSYSADMIN = 0 and @HASQUERYVIEWSYSTEMPRIVILEGE = 0)
  begin
    declare @ADHOCCATALOGITEMS table (OBJECTNAME nvarchar(128));

    insert into @ADHOCCATALOGITEMS (OBJECTNAME)
    select QUERYVIEWCATALOG.OBJECTNAME 
    from dbo.QUERYVIEWCATALOG
    inner join dbo.UFN_SECURITY_GETGRANTEDQUERYVIEWSFORUSER(@CURRENTAPPUSERID) as [ADHOCCATALOGITEMS] 
      on [ADHOCCATALOGITEMS].QUERYVIEWCATALOGID = QUERYVIEWCATALOG.ID;

    declare @SMARTCATALOGITEMS table (SMARTQUERYCATALOGID uniqueidentifier);

    insert into @SMARTCATALOGITEMS (SMARTQUERYCATALOGID)
    select SMARTQUERYCATALOG.ID 
    from dbo.SMARTQUERYCATALOG
    inner join dbo.UFN_SECURITY_GETGRANTEDSMARTQUERIESFORUSER(@CURRENTAPPUSERID) as [SMARTCATALOGITEMS] 
      on [SMARTCATALOGITEMS].SMARTQUERYCATALOGID = SMARTQUERYCATALOG.ID;
  end;

  declare @PERMISSIONEDFOLDERS table (FOLDERID uniqueidentifier);
  insert into @PERMISSIONEDFOLDERS (FOLDERID)
  select ID
  from dbo.UFN_ADHOCQUERYFOLDERS_GETUSERSFOLDERS(@CURRENTAPPUSERID);

  insert into @HIERARCHY (ID, PARENTFOLDERID, NAME, DISPLAYORDER, ITEMTYPE, APPLYASDEFAULTPERMISSIONSFORALLSUBFOLDERS, SECURITYLEVEL, QUERYDEFAULTALLOWALLUSERSTORUN, QUERYDEFAULTALLOWALLUSERSTOEDIT, ISFAVORITE, SMARTQUERYDEFAULTALLOWALLUSERSTORUN, SMARTQUERYDEFAULTALLOWALLUSERSTOEDIT,  DESCRIPTION,  TYPE, DATEADDED)
  select
    ID,
    PARENTFOLDERID,
    NAME,
    case 
      -- Since DISPLAYORDER can't hold nulls, 0 or less is acting as null.  If the DISPLAYORDER

      -- isn't set, then the items will be sorted by their name.

      when DISPLAYORDER > 0 then DISPLAYORDER
      else (row_number() over (order by NAME)) + coalesce((    select max(DISPLAYORDER)
      from
      (
        select DISPLAYORDER from dbo.ADHOCQUERYFOLDER
        union all
        select DISPLAYORDER from dbo.ADHOCQUERY
        union all
        select DISPLAYORDER from dbo.SMARTQUERYINSTANCE
      ) as HIERARCHYITEMS)
    , 0)
    end as DISPLAYORDER,
    ITEMTYPE,
    APPLYASDEFAULTPERMISSIONSFORALLSUBFOLDERS,
    SECURITYLEVEL,
    QUERYDEFAULTALLOWALLUSERSTORUN,
    QUERYDEFAULTALLOWALLUSERSTOEDIT,
    ISFAVORITE,
    SMARTQUERYDEFAULTALLOWALLUSERSTORUN,
    SMARTQUERYDEFAULTALLOWALLUSERSTOEDIT,
    DESCRIPTION,
    TYPE,
    DATEADDED
  from 
  (
    select
      ADHOCQUERYFOLDER.ID,
      ADHOCQUERYFOLDER.PARENTFOLDERID,
      ADHOCQUERYFOLDER.NAME,
      null DESCRIPTION,
      ADHOCQUERYFOLDER.DISPLAYORDER,
      1 as ITEMTYPE, -- Indicates folder,

      null TYPE,
      null DATEADDED,
      convert(bit, 0) as ISFAVORITE,
      APPLYASDEFAULTPERMISSIONSFORALLSUBFOLDERS,
      SECURITYLEVELCODE as SECURITYLEVEL,
      QUERYDEFAULTALLOWALLUSERSTORUN,
      QUERYDEFAULTALLOWALLUSERSTOEDIT,
      SMARTQUERYDEFAULTALLOWALLUSERSTORUN,
      SMARTQUERYDEFAULTALLOWALLUSERSTOEDIT
    from dbo.ADHOCQUERYFOLDER
    inner join @PERMISSIONEDFOLDERS PERMISSIONED_FOLDERS
      on ADHOCQUERYFOLDER.ID = PERMISSIONED_FOLDERS.FOLDERID

    union all

    select 
      QUERY_ITEM.ID,
      QUERY_ITEM.FOLDERID,
      QUERY_ITEM.NAME,
      QUERY_ITEM.DESCRIPTION,
      QUERY_ITEM.DISPLAYORDER,
      QUERY_ITEM.ITEMTYPE, 
      RECORDTYPE.NAME TYPE,
      QUERY_ITEM.DATEADDED,
      QUERY_ITEM.ISFAVORITE,
      0 as APPLYASDEFAULTPERMISSIONSFORALLSUBFOLDERS,
      null as SECURITYLEVEL,
      null as QUERYDEFAULTALLOWALLUSERSTORUN,
      null as QUERYDEFAULTALLOWALLUSERSTOEDIT,
      null as SMARTQUERYDEFAULTALLOWALLUSERSTORUN,
      null as SMARTQUERYDEFAULTALLOWALLUSERSTOEDIT
    from  
    (select
      QUERY.ID,
      QUERY.FOLDERID,
      QUERY.NAME,
      QUERY.DESCRIPTION,
      QUERY.DISPLAYORDER,
      0 as ITEMTYPE, -- Indicates ad-hoc query

      QUERYVIEWCATALOG.RECORDTYPEID,
      QUERY.DATEADDED,
      case when exists(select ID from dbo.APPUSERADHOCQUERYFAVORITE where ADHOCQUERYID = QUERY.ID and APPUSERID = @CURRENTAPPUSERID)
          then convert(bit, 1) else convert(bit, 0)
      end as ISFAVORITE
    from dbo.ADHOCQUERY QUERY
    inner join dbo.QUERYVIEWCATALOG on QUERY.QUERYVIEWCATALOGID = QUERYVIEWCATALOG.ID
    where
      (@ISSYSADMIN = 1 or @HASQUERYVIEWSYSTEMPRIVILEGE = 1)
      or 
      (not exists(
        select [QUERYVIEWSINUSE].OBJECTNAME 
        from dbo.UFN_ADHOCQUERY_QUERYVIEWSINUSE(QUERY.QUERYDEFINITIONXML) as [QUERYVIEWSINUSE]
        where not exists (
          select 1 
          from @ADHOCCATALOGITEMS as [ADHOCCATALOGITEMS] 
          where [ADHOCCATALOGITEMS].OBJECTNAME = [QUERYVIEWSINUSE].OBJECTNAME)
      )
      and
      dbo.UFN_SECURITY_APPUSER_GRANTED_ADHOCQUERYINSTANCE_IN_SYSTEMROLE(@CURRENTAPPUSERID, QUERY.ID) = 1) and
      -- Ensure the folder the query belongs to is visible

      (QUERY.FOLDERID is null or QUERY.FOLDERID in (select FOLDERID from @PERMISSIONEDFOLDERS))

    union all

    select
      SMARTQUERY.ID,
      SMARTQUERY.FOLDERID,
      SMARTQUERY.NAME,
      SMARTQUERY.DESCRIPTION,
      SMARTQUERY.DISPLAYORDER,
      2 as ITEMTYPE, -- Indicates template query

      SMARTQUERYCATALOG.RECORDTYPEID,
      SMARTQUERY.DATEADDED,
      case when exists(select ID from dbo.APPUSERSMARTQUERYINSTANCEFAVORITE where SMARTQUERYINSTANCEID = SMARTQUERY.ID and APPUSERID = @CURRENTAPPUSERID)
          then convert(bit, 1) else convert(bit, 0)
      end as ISFAVORITE
    from dbo.SMARTQUERYINSTANCE SMARTQUERY
    inner join dbo.SMARTQUERYCATALOG on SMARTQUERY.SMARTQUERYCATALOGID = SMARTQUERYCATALOG.ID
    where
      (@ISSYSADMIN = 1 or @HASQUERYVIEWSYSTEMPRIVILEGE = 1)
      or 
      (exists (
        select 1
        from @SMARTCATALOGITEMS as [SMARTCATALOGITEMS] 
        where [SMARTCATALOGITEMS].SMARTQUERYCATALOGID = SMARTQUERYCATALOG.ID)
      and
      dbo.UFN_SECURITY_APPUSER_GRANTED_SMARTQUERYINSTANCE_IN_SYSTEMROLE(@CURRENTAPPUSERID, SMARTQUERY.ID) = 1) and
      -- Ensure the folder the query belongs to is visible

      (SMARTQUERY.FOLDERID is null or SMARTQUERY.FOLDERID in (select FOLDERID from @PERMISSIONEDFOLDERS)) ) as QUERY_ITEM 
    left join dbo.RECORDTYPE on QUERY_ITEM.RECORDTYPEID = RECORDTYPE.ID
  ) as HIERARCHY

  return
end