Skip to content

Allow to filter requirements by status on GraphQL

What does this MR do?

Allow filtering requirements by status on GraphQL

Sample query

query passingRequirements {
  project(fullPath: "flightjs/flight") {
    requirements(lastTestReportState: PASSED) {
      edges {
        node {
          id
          title
        }
      }
    }
  }
}

Query to fetch requirements

SELECT     "requirements".* 
FROM       "requirements" 
INNER JOIN lateral 
           ( SELECT DISTINCT ON (requirement_id) requirement_id, state 
              FROM  requirements_management_test_reports 
              WHERE requirement_id = requirements.id 
              ORDER BY requirement_id, created_at DESC limit 1 
           ) AS test_reports ON true 
WHERE      "requirements"."project_id" = 278964 
AND        "test_reports"."state" = 1 
ORDER BY   "requirements"."id" DESC

Query plan
 Sort  (cost=200.79..200.85 rows=24 width=334) (actual time=0.398..0.398 rows=3 loops=1)
   Sort Key: requirements.id DESC
   Sort Method: quicksort  Memory: 26kB
   ->  Nested Loop  (cost=7.17..200.24 rows=24 width=334) (actual time=0.133..0.333 rows=3 loops=1)
         ->  Index Scan using index_requirements_on_project_id on requirements  (cost=0.28..34.36 rows=24
 width=334) (actual time=0.062..0.120 rows=24 loops=1)
               Index Cond: (project_id = 278964)
         ->  Subquery Scan on test_reports  (cost=6.89..6.90 rows=1 width=0) (actual time=0.008..0.008 ro
ws=0 loops=24)
               Filter: (test_reports.state = 1)
               Rows Removed by Filter: 0
               ->  Limit  (cost=6.89..6.89 rows=1 width=18) (actual time=0.008..0.008 rows=0 loops=24)
                     ->  Unique  (cost=6.89..6.90 rows=6 width=18) (actual time=0.007..0.007 rows=0 loops
=24)
                           ->  Sort  (cost=6.89..6.90 rows=6 width=18) (actual time=0.007..0.007 rows=0 l
oops=24)
                                 Sort Key: requirements_management_test_reports.created_at DESC
                                 Sort Method: quicksort  Memory: 25kB
                                 ->  Index Scan using index_requirements_management_test_reports_on_requi
rement_id on requirements_management_test_reports  (cost=0.28..6.81 rows=6 width=18) (actual time=0.005..
0.005 rows=1 loops=24)
                                       Index Cond: (requirement_id = requirements.id)
 Planning Time: 0.344 ms
 Execution Time: 0.462 ms
(18 rows)

related to #224614 (closed)

Edited by Felipe Artur

Merge request reports