Skip to content

Filter projects by compliance framework presence

Harsimar Sandhu requested to merge 388188-compliance-filter-presence-query into master

What does this MR do and why?

Adds filter to check presence of compliance framework of the project. we can pass "none" or "any" in projects graphql query.

How to set up and validate locally

  1. Create a group
  2. Create 3 projects, project_a project_b project_c
  3. Create two compliance frameworks for the group. refer https://docs.gitlab.com/ee/user/group/compliance_frameworks.html
  4. Add 1 compliance framework to project_a and another to project_b
  5. Test group search query with presence: NONE and ANY.

ANY query should return project_a and project_b NONE query should return project_c

query SearchGroup {
  group(fullPath: "complianceframework") {
    name
    projects(complianceFrameworkFilters: {presence_filter: NONE}) {
      nodes {
        id
        fullPath
        complianceFrameworks {
          edges {
            node {
              id
            }
          }
        }
        name
      }
      pageInfo {
        endCursor
        startCursor
        hasNextPage
      }
    }
  }
}
query SearchGroup {
  group(fullPath: "complianceframework") {
    name
    projects(complianceFrameworkFilters: {presence_filter: ANY}) {
      nodes {
        id
        fullPath
        complianceFrameworks {
          edges {
            node {
              id
            }
          }
        }
        name
      }
      pageInfo {
        endCursor
        startCursor
        hasNextPage
      }
    }
  }
}

QUERY PLANS

SQL

NONE filter
SELECT projects.*
FROM   projects
       LEFT OUTER JOIN project_compliance_framework_settings
                    ON project_compliance_framework_settings.project_id =
                       projects.id
WHERE  projects.namespace_id = 88
       AND project_compliance_framework_settings.project_id IS NULL

https://console.postgres.ai/gitlab/gitlab-production-tunnel-pg12/sessions/16296/commands/56000

ANY filter
SELECT projects.*
FROM   projects
       INNER JOIN project_compliance_framework_settings
               ON project_compliance_framework_settings.project_id = projects.id
WHERE  projects.namespace_id = 88

https://console.postgres.ai/gitlab/gitlab-production-tunnel-pg12/sessions/16296/commands/55999

MR acceptance checklist

This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.

Related to #388188 (closed)

Edited by Harsimar Sandhu

Merge request reports

Loading