Skip to content

Add ApprovalRule model

Mark Chao requested to merge 1979-1-multi-block-approval-data-migration into master

What does this MR do?

See https://gitlab.com/gitlab-org/gitlab-ee/issues/8647 for overall description.

1979-models.svg

Add several new tables to support #1979 (closed)

  • approval_merge_request_rules
  • approval_project_rules
  • approval_merge_request_rules_users (HABTM to User)
  • approval_merge_request_rules_groups (HABTM to Group)
  • approval_project_rules_users (HABTM to User)
  • approval_project_rules_groups (HABTM to Group)
  • approval_merge_request_rules_approvals (HABTM for persisting which approval rules was satisfied by an approval)
  • approval_merge_request_rules_sources (record MR rule's project rule source)

The associations are:

  • MergeRequest has_many ApprovalMergeRequestRule
  • Project has many ApprovalProjectRule
  • ApprovalMergeRequestRule has_and_belongs_to_many User
  • ApprovalMergeRequestRule has_and_belongs_to_many Group
  • ApprovalMergeRequestRule has_one ApprovalProjectRule
  • ApprovalProjectRule has_and_belongs_to_many User
  • ApprovalProjectRule has_and_belongs_to_many Group
  • ApprovalMergeRequestRule has_and_belongs_to_many Approval

Query samples

#approvers

SELECT "users".* FROM (
  SELECT "users".* FROM "users"
  INNER JOIN "approval_merge_request_rules_users"
  ON "users"."id" = "approval_merge_request_rules_users"."user_id"
  WHERE "approval_merge_request_rules_users"."approval_merge_request_rule_id" = 1

  UNION

  SELECT "users".* FROM "users" INNER JOIN "members"
  ON "members"."user_id" = "users"."id" AND "members"."type" IN ('GroupMember') AND "members"."source_type" = 'Namespace' AND "members"."requested_at" IS NULL
  WHERE "members"."source_id" IN (
    SELECT "namespaces"."id" FROM "namespaces"
    INNER JOIN "approval_merge_request_rules_groups"
    ON "namespaces"."id" = "approval_merge_request_rules_groups"."group_id"
    WHERE "namespaces"."type" IN ('Group') AND "approval_merge_request_rules_groups"."approval_merge_request_rule_id" = 1
  )
) users WHERE ("users"."id" != 1)

What are the relevant issue numbers?

#1979 (closed) #8647 (closed)

Does this MR meet the acceptance criteria?

Edited by Mark Chao

Merge request reports