UFN_QUERY_QUERIESLIST

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@NODEID uniqueidentifier IN
@GROUPBY tinyint IN
@SITEFILTERMODE tinyint IN
@SITESSELECTED xml IN
@CURRENTAPPUSERID uniqueidentifier IN
@SECURITYFEATUREID uniqueidentifier IN
@SECURITYFEATURETYPE tinyint IN
@FEATURETIPS xml IN

Definition

Copy


CREATE function dbo.[UFN_QUERY_QUERIESLIST]
(
  @NODEID uniqueidentifier = null,
  @GROUPBY tinyint = 0,
  @SITEFILTERMODE tinyint = 0,
  @SITESSELECTED xml = null,
  @CURRENTAPPUSERID uniqueidentifier,
  @SECURITYFEATUREID uniqueidentifier = null,
  @SECURITYFEATURETYPE tinyint = null,
  @FEATURETIPS xml = null
)

returns  table

as

return

  with xmlnamespaces ('Blackbaud.AppFx.WebService.API.1' as [ns]),

    [HIERARCHYCTE]  as
    (
      select
        [PARENTFOLDERID],
        [ID] as [FOLDERID],
        0 as [LEVEL],
        cast([NAME] as nvarchar(max)) as [FOLDERPATH]
      from (    select
        [ID],
        [PARENTFOLDERID],
        [NAME]
      from dbo.[UFN_ADHOCQUERYFOLDERS_GETUSERSFOLDERS](@CURRENTAPPUSERID)) as [USERFOLDERS]
      where [ID] = @NODEID or (@NODEID = '00000000-0000-0000-0000-000000000000' or @NODEID is null) or @GROUPBY > 0 or @NODEID = '00000000-0000-0000-0000-000000000002'

      union all

      select
        [FOLDERS].[PARENTFOLDERID],
        [FOLDERS].[ID] as [FOLDERID],
        cte.[LEVEL] + 1 as [LEVEL],
        cast(cte.[FOLDERPATH] + ' | ' + [FOLDERS].[NAME] as nvarchar(max)) as [FOLDERPATH]
      from (    select
        [ID],
        [PARENTFOLDERID],
        [NAME]
      from dbo.[UFN_ADHOCQUERYFOLDERS_GETUSERSFOLDERS](@CURRENTAPPUSERID)) as [FOLDERS]
      inner join [HIERARCHYCTE] as cte on [FOLDERS].[PARENTFOLDERID] = cte.[FOLDERID]
    ),
    [PERMISSIONEDFOLDERS] as
     ( select
        [FOLDERID],
        [FOLDERPATH]
      from [HIERARCHYCTE] cte
      where [LEVEL] = (select max([LEVEL]) from [HIERARCHYCTE] cte2 where cte.[FOLDERID] = cte2.[FOLDERID])),

    /* Filter out any ad-hoc queries involving query views to which the current user does not have access */

    [USERQUERIES] as
    (
    select 
      [SECURITYVIEW].[ADHOCQUERYID] as [ID]
    from 
    dbo.[V_SECURITY_SYSTEMROLEASSIGNMENT_USER_ADHOCQUERYINSTANCE] [SECURITYVIEW]
    where 
    ([SECURITYVIEW].[APPUSERID] = @CURRENTAPPUSERID
    group by [ADHOCQUERYID]
    having  min(cast([SECURITYVIEW].[GRANTORDENY] as tinyint)) = 1

    union all

    select
      [ID]
    from dbo.[ADHOCQUERY]
    where [OWNERID] = @CURRENTAPPUSERID or [SECURITYLEVEL] = 0
    ),
    [SMARTCATALOGITEMS] as
    (
      select [SMARTQUERYCATALOG].[ID] [SMARTQUERYCATALOGID]
      from dbo.[SMARTQUERYCATALOG]
      where exists
      (
        select [SMARTCATALOGITEMS].[SMARTQUERYCATALOGID]
        from dbo.[UFN_SECURITY_GETGRANTEDSMARTQUERIESFORUSER](@CURRENTAPPUSERID) as [SMARTCATALOGITEMS]
        where [SMARTCATALOGITEMS].[SMARTQUERYCATALOGID] = [SMARTQUERYCATALOG].[ID]
      )
    )
      select
        [QUERY].[ID],
        [QUERY].[NAME],
        [QUERY].[DESCRIPTION],
              [RECORDTYPE].[ID] [RECORDTYPEID],
        [RECORDTYPE].[NAME] [RECORDTYPE_NAME],
              isnull([QUERYCATEGORYCODE].[ID], '00000000-0000-0000-0000-000000000000') [QUERYCATEGORYCODEID],
        [QUERYCATEGORYCODE].[DESCRIPTION] [QUERYCATEGORYCODE_DESCRIPTION],
              [QUERYVIEWCATALOG].[ID] [SOURCEVIEWID],
        [QUERYVIEWCATALOG].[DISPLAYNAME] [SOURCEVIEW],
        case 
          when [OWNER].[DISPLAYNAME] = '' then [OWNER].[USERNAME]
          else [OWNER].[DISPLAYNAME]
        end [OWNER],
        [QUERY].[OWNERID],
        [QUERY].[OTHERSCANMODIFY],
        [QUERY].[DATEADDED],
        [ADDEDBY].[USERNAME] [ADDEDBY_USERNAME],
        [QUERY].[DATECHANGED],
        [CHANGEDBY].[USERNAME] [CHANGEDBY_USERNAME],
        [QUERY].[ISBROWSABLE],
        coalesce([SITE].[NAME], 'All sites') [SITE],
        [QUERY].[MOBILIZE],
        case
          when [SECURITYUSER].[ISSYSADMIN] = 1 then cast(1 as bit)
          when dbo.[UFN_SECURITY_APPUSER_GRANTED_ADHOCQUERYINSTANCEEDIT_IN_SYSTEMROLE](@CURRENTAPPUSERID, [QUERY].[ID]) = 1 then cast(1 as bit)
          else cast(0 as bit)
        end as [USERCANEDIT],
        0 as [QUERY_TYPE],
        'Ad-hoc' as [QUERY_TYPE_NAME],
        case 
          when [FAVORITE].[ID] is not null then convert(bit, 1
          else convert(bit, 0)
        end as [ISFAVORITE],
        case 
          when [FAVORITE].[ID] is not null then 'catalog:Blackbaud.AppFx.Platform.Catalog.dll,Blackbaud.AppFx.Platform.Catalog.favorites_blue_star_16.png'
          else 'catalog:Blackbaud.AppFx.Platform.Catalog.dll,Blackbaud.AppFx.Platform.Catalog.favorites_gray_star_16.png'
        end as [FAVORITEPIC],
        [FOLDERS].[FOLDERPATH],
        case
          when [IDSETREGISTERADHOCQUERY].[ID] is null then 0
          else 1
        end as [HASSELECTION],
        @GROUPBY as [GROUPEDBY],
              [RUNINFO].[LASTRUNDATE],
              [RUNINFO].[LASTRUNDURATION],
              case 
          when [LASTRUNBY].[DISPLAYNAME] = '' then [LASTRUNBY].[USERNAME]
          else [LASTRUNBY].[DISPLAYNAME]
        end [LASTRUNBY_USERNAME],
              [RUNINFO].[LASTRUNRESULTCOUNT],
              [RUNINFO].[RUNCOUNT],
        'Get OData link' as [ODATAFEED],
              [ODATA].[LASTRUNDATE] as [ODATALASTRUNDATE],
              [ODATA].[LASTRUNDURATION] as [ODATALASTRUNDURATION],
              case 
          when [ODATALASTRUNBY].[DISPLAYNAME] = '' then [ODATALASTRUNBY].[USERNAME]
          else [ODATALASTRUNBY].[DISPLAYNAME]
        end [ODATALASTRUNBY_USERNAME],
        [ODATA].[LASTRUNRESULTCOUNT] as [ODATALASTRUNRESULTCOUNT],
        [ODATA].[RUNCOUNT] as [ODATARUNCOUNT],
        case when [IDSETREGISTER].[STATIC] = 1 then '00000000-0000-0000-0000-000000000002'
             when [IDSETREGISTER].[STATIC] = 0 then '00000000-0000-0000-0000-000000000001'
        else '00000000-0000-0000-0000-000000000000' end as [SELECTIONTYPEID],
        case when [IDSETREGISTER].[STATIC] = 1 then 'Static'
             when [IDSETREGISTER].[STATIC] = 0 then 'Dynamic'
        else '' end as [SELECTIONTYPE],
        case
          when [DELETEERROR].[ID] is null then 0
          else 1
        end as [DELETEERROR]
      from dbo.[ADHOCQUERY] [QUERY]
      inner join dbo.[QUERYVIEWCATALOG] on [QUERY].[QUERYVIEWCATALOGID] = [QUERYVIEWCATALOG].[ID]
          left join dbo.[ADHOCQUERYRUNINFO] [RUNINFO] on [QUERY].[ID] = [RUNINFO].[ID]
      left join dbo.[APPUSERADHOCQUERYFAVORITE] [FAVORITE] on [FAVORITE].[ADHOCQUERYID] = [QUERY].[ID] and [FAVORITE].[APPUSERID] = @CURRENTAPPUSERID
      left join dbo.[IDSETREGISTERADHOCQUERY] on [QUERY].[ID] = [IDSETREGISTERADHOCQUERY].[ADHOCQUERYID]
      left join dbo.[IDSETREGISTER] on [IDSETREGISTER].[ID] = [IDSETREGISTERADHOCQUERY].[IDSETREGISTERID]
      left join dbo.[RECORDTYPE] on [QUERYVIEWCATALOG].[RECORDTYPEID] = [RECORDTYPE].[ID]
      left join [PERMISSIONEDFOLDERS] as [FOLDERS] on [FOLDERS].[FOLDERID] = [QUERY].[FOLDERID] 
      left join dbo.[APPUSER] as [OWNER] on [QUERY].[OWNERID] = [OWNER].[ID]
      left join dbo.[QUERYCATEGORYCODE] on [QUERY].[QUERYCATEGORYCODEID] = [QUERYCATEGORYCODE].[ID]
      left join dbo.[CHANGEAGENT] as [ADDEDBY] on [QUERY].[ADDEDBYID] = [ADDEDBY].[ID]
      left join dbo.[CHANGEAGENT] as [CHANGEDBY] on [QUERY].[CHANGEDBYID] = [CHANGEDBY].[ID]
          left join dbo.[APPUSER] as [LASTRUNBY] on [RUNINFO].[LASTRUNBY] = [LASTRUNBY].[ID]
      left join dbo.[SITE] on [QUERY].[SITEID] = [SITE].[ID]
      left join dbo.[ODATAQUERYRUNINFO] as [ODATA] on [ODATA].[QUERYID] = [QUERY].[ID]
      left join dbo.[APPUSER] as [ODATALASTRUNBY] on [ODATA].[LASTRUNBY] = [ODATALASTRUNBY].[ID]
      left join dbo.[QUERYWITHDELETEERROR] as [DELETEERROR] on [DELETEERROR].[QUERYID] = [QUERY].[ID]
      left join(
        select
          [ISSYSADMIN],
          dbo.[UFN_SECURITY_APPUSER_GRANTED_SYSTEMPRIVILEGE_IN_SYSTEMROLE](@CURRENTAPPUSERID, '5f9bbcaf-9c67-4539-9880-ae4f709a9c1f') as [HASQUERYPRIVILEGE]
        from dbo.[APPUSER]
        where [ID] = @CURRENTAPPUSERID
      ) as [SECURITYUSER] on 1=1

      where
      --Check security

      (
        (
          --User is a system administrator

          ([SECURITYUSER].[ISSYSADMIN] = 1
          or
          --User has query system privilege, check system roles for query rights

          (
            [SECURITYUSER].[HASQUERYPRIVILEGE] = 1
            and exists 
            (
              select
                [USERQUERIES].[ID]
              from [USERQUERIES]
              where [USERQUERIES].[ID] = [QUERY].[ID]
            )
          )
         or 
          ([QUERY].[OWNERID] = @CURRENTAPPUSERID
          or
        --User is not admin or query system privilege, check system role and query view rights

        ([SECURITYUSER].[ISSYSADMIN] = 0 and [SECURITYUSER].[HASQUERYPRIVILEGE] = 0
        and exists 
        (
        select
          [OTHERQUERIES].[ID]
        from dbo.[UFN_ADHOCQUERY_GETUSERQUERIES](@CURRENTAPPUSERID) [OTHERQUERIES] 
        where [OTHERQUERIES].[ID] = [QUERY].[ID]
        )
        )

        )
      )
      and
        (
          (
          [QUERY].[FOLDERID] in 
          (
            select [FOLDERID] 
            from [PERMISSIONEDFOLDERS]
          )

          or  [QUERY].[FOLDERID] is null
          )

        )  --Check folder security

        and
        (
          ([QUERY].[FOLDERID] in 
            (
              select [FOLDERID] 
              from [PERMISSIONEDFOLDERS]
            )
         and @GROUPBY = 0 and @NODEID not in ('00000000-0000-0000-0000-000000000002','00000000-0000-0000-0000-000000000001','00000000-0000-0000-0000-000000000000')
        ) --selected folder

        or ([QUERY].[QUERYCATEGORYCODEID] = @NODEID and @GROUPBY = 1)  --Selected category

        or ([QUERY].[OWNERID] = @NODEID and @GROUPBY = 2)  --Selected owner

        or ([QUERYVIEWCATALOG].[RECORDTYPEID] = @NODEID and @GROUPBY = 3)  --Selected recordtype

        or (@NODEID = '00000000-0000-0000-0000-000000000000' or @NODEID is null) --All queries

        or ([FAVORITE].[APPUSERID] = @CURRENTAPPUSERID and @NODEID = '00000000-0000-0000-0000-000000000002')  --Favorites

        or ([QUERY].[FOLDERID] is null and @NODEID = '00000000-0000-0000-0000-000000000001' and @GROUPBY = 0) --none folder node

        or ([QUERY].[QUERYCATEGORYCODEID] is null and @NODEID = '00000000-0000-0000-0000-000000000001' and @GROUPBY = 1) --none category node

        )

          /* End restricted query views filter */
      and [QUERYVIEWCATALOG].[ROOTOBJECT] = 1
      and
      (
        [QUERY].[SITEID] is null
        or
        ([SECURITYUSER].[ISSYSADMIN] = 1 or exists (select 1 from dbo.[UFN_SITESFORUSERONFEATURE](@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where [SITEID] = [QUERY].[SITEID] or ([SITEID] is null and [QUERY].[SITEID] is null)))
      )
      and
      (
        @SITEFILTERMODE = 0
        or
        [QUERY].[SITEID] in 
        (
          select [SITEID] 
          from dbo.[UFN_SITE_BUILDDATALISTSITEFILTER] (@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED)
        )
      )

      union all

      select
        [SMARTQUERYINSTANCE].[ID],
        [SMARTQUERYINSTANCE].[NAME],
        [SMARTQUERYINSTANCE].[DESCRIPTION],
              [RECORDTYPE].[ID] [RECORDTYPEID],
        [RECORDTYPE].[NAME] [RECORDTYPE_NAME],
              isnull([QUERYCATEGORYCODE].[ID], '00000000-0000-0000-0000-000000000000') [QUERYCATEGORYCODEID],
        [QUERYCATEGORYCODE].[DESCRIPTION] [QUERYCATEGORYCODE_DESCRIPTION],
              [SMARTQUERYCATALOG].[ID] [SOURCEVIEWID],
        [SMARTQUERYCATALOG].[NAME] as [SOURCEVIEW],
        case 
          when [OWNER].[DISPLAYNAME] = '' then [OWNER].[USERNAME]
          else [OWNER].[DISPLAYNAME]
        end [OWNER],
        [SMARTQUERYINSTANCE].[OWNERID],
        [SMARTQUERYINSTANCE].[OTHERSCANMODIFY],
        [SMARTQUERYINSTANCE].[DATEADDED],
        [ADDEDBY].[USERNAME] [ADDEDBY_USERNAME],
        [SMARTQUERYINSTANCE].[DATECHANGED],
        [CHANGEDBY].[USERNAME] [CHANGEDBY_USERNAME],
        case 
          when [SMARTQUERYCATALOG].[PRIMARYKEYFIELD] is not null then 1
          else 0
        end as [ISBROWSABLE],
        coalesce([SITE].[NAME], 'All sites') [SITE],
        [SMARTQUERYINSTANCE].[MOBILIZE],
        cast(1 as bit) as [USERCANEDIT],
        1 as [QUERY_TYPE],
        'Smart' as [QUERY_TYPE_NAME],
        case 
          when [FAVORITE].[ID] is not null then convert(bit, 1
          else convert(bit, 0)
        end as [ISFAVORITE],
        case 
          when [FAVORITE].[ID] is not null then 'catalog:Blackbaud.AppFx.Platform.Catalog.dll,Blackbaud.AppFx.Platform.Catalog.favorites_blue_star_16.png'
          else 'catalog:Blackbaud.AppFx.Platform.Catalog.dll,Blackbaud.AppFx.Platform.Catalog.favorites_gray_star_16.png'
        end as [FAVORITEPIC],
        [FOLDERS].[FOLDERPATH],
        case
          when [IDSETREGISTERSMARTQUERYINSTANCE].[ID] is null then 0
          else 1
        end as [HASSELECTION],
        @GROUPBY as [GROUPEDBY],
              [RUNINFO].[LASTRUNDATE],
              [RUNINFO].[LASTRUNDURATION],
              case 
          when [LASTRUNBY].[DISPLAYNAME] = '' then [LASTRUNBY].[USERNAME]
          else [LASTRUNBY].[DISPLAYNAME]
        end [LASTRUNBY_USERNAME],
              [RUNINFO].[LASTRUNRESULTCOUNT],
              [RUNINFO].[RUNCOUNT],
        'Get OData link' as [ODATAFEED],
              [ODATA].[LASTRUNDATE] as [ODATALASTRUNDATE],
              [ODATA].[LASTRUNDURATION] as [ODATALASTRUNDURATION],
              case 
          when [ODATALASTRUNBY].[DISPLAYNAME] = '' then [ODATALASTRUNBY].[USERNAME]
          else [ODATALASTRUNBY].[DISPLAYNAME]
        end [ODATALASTRUNBY_USERNAME],
        [ODATA].[LASTRUNRESULTCOUNT] as [ODATALASTRUNRESULTCOUNT],
        [ODATA].[RUNCOUNT] as [ODATARUNCOUNT],
        case when [IDSETREGISTER].[STATIC] = 1 then '00000000-0000-0000-0000-000000000002'
             when [IDSETREGISTER].[STATIC] = 0 then '00000000-0000-0000-0000-000000000001'
        else '00000000-0000-0000-0000-000000000000' end as [SELECTIONTYPEID],
        case when [IDSETREGISTER].[STATIC] = 1 then 'Static'
             when [IDSETREGISTER].[STATIC] = 0 then 'Dynamic'
        else '' end as [SELECTIONTYPE],
        case
          when [DELETEERROR].[ID] is null then 0
          else 1
        end as [DELETEERROR]
      from dbo.[SMARTQUERYINSTANCE]
      inner join dbo.[SMARTQUERYCATALOG] on [SMARTQUERYINSTANCE].[SMARTQUERYCATALOGID] = [SMARTQUERYCATALOG].[ID]
          left join dbo.[SMARTQUERYINSTANCERUNINFO] [RUNINFO] on [SMARTQUERYINSTANCE].[ID] = [RUNINFO].[ID]
      left join dbo.[APPUSERSMARTQUERYINSTANCEFAVORITE] [FAVORITE] on [FAVORITE].[SMARTQUERYINSTANCEID] = [SMARTQUERYINSTANCE].[ID] and [FAVORITE].[APPUSERID] = @CURRENTAPPUSERID
      left join dbo.[IDSETREGISTERSMARTQUERYINSTANCE] on [SMARTQUERYINSTANCE].[ID] = [IDSETREGISTERSMARTQUERYINSTANCE].[SMARTQUERYINSTANCEID]
      left join dbo.[IDSETREGISTER] on [IDSETREGISTERSMARTQUERYINSTANCE].[IDSETREGISTERID] = [IDSETREGISTER].[ID]
      left join dbo.[RECORDTYPE] on [SMARTQUERYCATALOG].[RECORDTYPEID] = [RECORDTYPE].[ID]
      left join [PERMISSIONEDFOLDERS] as [FOLDERS] on [FOLDERS].[FOLDERID] = [SMARTQUERYINSTANCE].[FOLDERID]
      left join dbo.[APPUSER] as [OWNER] on [SMARTQUERYINSTANCE].[OWNERID] = [OWNER].[ID]
      left join dbo.[QUERYCATEGORYCODE] on [SMARTQUERYINSTANCE].[QUERYCATEGORYCODEID] = [QUERYCATEGORYCODE].[ID]
      left join dbo.[CHANGEAGENT] as [ADDEDBY] on [SMARTQUERYINSTANCE].[ADDEDBYID] = [ADDEDBY].[ID]
      left join dbo.[CHANGEAGENT] as [CHANGEDBY] on [SMARTQUERYINSTANCE].[CHANGEDBYID] = [CHANGEDBY].[ID]
          left join dbo.[APPUSER] as [LASTRUNBY] on [RUNINFO].[LASTRUNBY] = [LASTRUNBY].[ID]
      left join dbo.[SITE] on [SMARTQUERYINSTANCE].[SITEID] = [SITE].[ID]
      left join dbo.[ODATAQUERYRUNINFO] as [ODATA] on [ODATA].[QUERYID] = [SMARTQUERYINSTANCE].[ID]
      left join dbo.[APPUSER] as [ODATALASTRUNBY] on [ODATA].[LASTRUNBY] = [ODATALASTRUNBY].[ID]
      left join dbo.[QUERYWITHDELETEERROR] as [DELETEERROR] on [DELETEERROR].[QUERYID] = [SMARTQUERYINSTANCE].[ID]
      left join(
        select
          [ISSYSADMIN]
        from dbo.[APPUSER]
        where [ID] = @CURRENTAPPUSERID
      ) as [SECURITYUSER] on 1=1
      where
      /* Filter out restricted smart queries */
      (
        ([SECURITYUSER].[ISSYSADMIN] = 1)
         or 
        ([SMARTQUERYINSTANCE].[OWNERID] = @CURRENTAPPUSERID)
        /*This will return a list of smart queries in use by the smart query but not in the SMARTCATALOGITEMS variable;
        These smart queries should not be returned to the client.*/
        or
        (exists 
        (
          select
          [SMARTCATALOGITEMS].[SMARTQUERYCATALOGID]
          from [SMARTCATALOGITEMS]
          where [SMARTCATALOGITEMS].[SMARTQUERYCATALOGID] = [SMARTQUERYCATALOG].[ID]
        )
        and
        (
          dbo.[UFN_SECURITY_APPUSER_GRANTED_SMARTQUERYINSTANCE_IN_SYSTEMROLE](@CURRENTAPPUSERID, [SMARTQUERYINSTANCE].[ID]) = 1
        ))
      )
      and
      (
        (
          [SMARTQUERYINSTANCE].[FOLDERID] in 
          (
            select [FOLDERID] 
            from [PERMISSIONEDFOLDERS]
          ) 
          and @NODEID <> '00000000-0000-0000-0000-000000000002' 
          and @GROUPBY = 0
        )  --Selected folder

        or ([SMARTQUERYINSTANCE].[QUERYCATEGORYCODEID] = @NODEID and @GROUPBY = 1)  --Selected category

        or ([SMARTQUERYINSTANCE].[OWNERID] = @NODEID and @GROUPBY = 2)  --Selected owner

        or ([SMARTQUERYCATALOG].[RECORDTYPEID] = @NODEID and @GROUPBY = 3)  --Selected recordtype

        or (@NODEID = '00000000-0000-0000-0000-000000000000' or @NODEID is null) --All queries

        or ([FAVORITE].[APPUSERID] = @CURRENTAPPUSERID and @NODEID = '00000000-0000-0000-0000-000000000002')  --Favorites

        or ([SMARTQUERYINSTANCE].[FOLDERID] is null and @NODEID = '00000000-0000-0000-0000-000000000001' and @GROUPBY = 0) --none folder node

        or ([SMARTQUERYINSTANCE].[QUERYCATEGORYCODEID] is null and @NODEID = '00000000-0000-0000-0000-000000000001' and @GROUPBY = 1) --none category node

      )
      and
      (
        [SMARTQUERYINSTANCE].[SITEID] is null
        or
        (
          [SECURITYUSER].[ISSYSADMIN] = 1
          or exists
          (
            select 1 
            from dbo.[UFN_SITESFORUSERONFEATURE](@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE)
            where [SITEID]=[SMARTQUERYINSTANCE].[SITEID] or ([SITEID] is null and [SMARTQUERYINSTANCE].[SITEID] is null)
          )
        )
      )
      and
      (
        @SITEFILTERMODE = 0
        or
        [SMARTQUERYINSTANCE].[SITEID] in 
        (
          select [SITEID] from dbo.[UFN_SITE_BUILDDATALISTSITEFILTER] (@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED)
        )
      )