Add v2 approval rule table and model

What does this MR do and why?

Adds new approval rule table and model for new approval rule architecture.

Migration Output UP

main: == [advisory_lock_connection] object_id: 130500, pg_backend_pid: 86772
main: == 20250123151650 CreateMergeRequestsApprovalRules: migrating =================
main: -- create_table(:merge_requests_approval_rules)
main: -- quote_column_name(:name)
main: -> 0.0000s
main: -> 0.0191s
main: == 20250123151650 CreateMergeRequestsApprovalRules: migrated (0.0583s) ========
main: == [advisory_lock_connection] object_id: 130500, pg_backend_pid: 86772
main: == [advisory_lock_connection] object_id: 131120, pg_backend_pid: 86798
main: == 20250205094214 AddMergeRequestsApprovalRulesSourceRuleFk: migrating ========
main: -- transaction_open?(nil)
main: -> 0.0000s
main: -- transaction_open?(nil)
main: -> 0.0000s
main: -- execute("ALTER TABLE merge_requests_approval_rules ADD CONSTRAINT fk_fa5b38e373 FOREIGN KEY (source_rule_id) REFERENCES merge_requests_approval_rules (id) ON DELETE SET NULL NOT VALID;")
main: -> 0.0016s
main: -- execute("SET statement_timeout TO 0")
main: -> 0.0004s
main: -- execute("ALTER TABLE merge_requests_approval_rules VALIDATE CONSTRAINT fk_fa5b38e373;")
main: -> 0.0011s
main: -- execute("RESET statement_timeout")
main: -> 0.0004s
main: == 20250205094214 AddMergeRequestsApprovalRulesSourceRuleFk: migrated (0.0334s)
main: == [advisory_lock_connection] object_id: 131120, pg_backend_pid: 86798
main: == [advisory_lock_connection] object_id: 131620, pg_backend_pid: 86803
main: == 20250205094243 AddMergeRequestsApprovalRulesProjectFk: migrating ===========
main: -- transaction_open?(nil)
main: -> 0.0000s
main: -- transaction_open?(nil)
main: -> 0.0000s
main: -- execute("ALTER TABLE merge_requests_approval_rules ADD CONSTRAINT fk_7af76dbd21 FOREIGN KEY (project_id) REFERENCES projects (id) ON DELETE CASCADE NOT VALID;")
main: -> 0.0014s
main: -- execute("SET statement_timeout TO 0")
main: -> 0.0005s
main: -- execute("ALTER TABLE merge_requests_approval_rules VALIDATE CONSTRAINT fk_7af76dbd21;")
main: -> 0.0109s
main: -- execute("RESET statement_timeout")
main: -> 0.0005s
main: == 20250205094243 AddMergeRequestsApprovalRulesProjectFk: migrated (0.0325s) ==
main: == [advisory_lock_connection] object_id: 131620, pg_backend_pid: 86803
main: == [advisory_lock_connection] object_id: 132080, pg_backend_pid: 86826
main: == 20250205094302 AddMergeRequestsApprovalRulesGroupFk: migrating =============
main: -- transaction_open?(nil)
main: -> 0.0000s
main: -- transaction_open?(nil)
main: -> 0.0000s
main: -- execute("ALTER TABLE merge_requests_approval_rules ADD CONSTRAINT fk_03983bf729 FOREIGN KEY (group_id) REFERENCES namespaces (id) ON DELETE CASCADE NOT VALID;")
main: -> 0.0022s
main: -- execute("SET statement_timeout TO 0")
main: -> 0.0008s
main: -- execute("ALTER TABLE merge_requests_approval_rules VALIDATE CONSTRAINT fk_03983bf729;")
main: -> 0.0060s
main: -- execute("RESET statement_timeout")
main: -> 0.0005s
main: == 20250205094302 AddMergeRequestsApprovalRulesGroupFk: migrated (0.0382s) ====
main: == [advisory_lock_connection] object_id: 132080, pg_backend_pid: 86826
main: == [advisory_lock_connection] object_id: 132580, pg_backend_pid: 86849
main: == 20250205094331 AddMergeRequestsApprovalRulesMultiColumnNotNullConstraint: migrating
main: -- transaction_open?(nil)
main: -> 0.0000s
main: -- transaction_open?(nil)
main: -> 0.0000s
main: -- execute("ALTER TABLE merge_requests_approval_rules\nADD CONSTRAINT check_ba7b03c61a\nCHECK ( num_nonnulls(group_id, project_id) = 1 )\nNOT VALID;\n")
main: -> 0.0011s
main: -- execute("SET statement_timeout TO 0")
main: -> 0.0003s
main: -- execute("ALTER TABLE merge_requests_approval_rules VALIDATE CONSTRAINT check_ba7b03c61a;")
main: -> 0.0006s
main: -- execute("RESET statement_timeout")
main: -> 0.0004s
main: == 20250205094331 AddMergeRequestsApprovalRulesMultiColumnNotNullConstraint: migrated (0.0112s)
main: == [advisory_lock_connection] object_id: 132580, pg_backend_pid: 86849

DOWN

main: == [advisory_lock_connection] object_id: 130180, pg_backend_pid: 71023
main: == 20250205094331 AddMergeRequestsApprovalRulesMultiColumnNotNullConstraint: reverting
main: -- transaction_open?(nil)
main: -> 0.0000s
main: -- transaction_open?(nil)
main: -> 0.0000s
main: -- execute(" ALTER TABLE merge_requests_approval_rules\n DROP CONSTRAINT IF EXISTS check_ba7b03c61a\n")
main: -> 0.0013s
main: == 20250205094331 AddMergeRequestsApprovalRulesMultiColumnNotNullConstraint: reverted (0.0317s)
main: == [advisory_lock_connection] object_id: 130180, pg_backend_pid: 71023
main: == [advisory_lock_connection] object_id: 130180, pg_backend_pid: 72297
main: == 20250205094302 AddMergeRequestsApprovalRulesGroupFk: reverting =============
main: -- transaction_open?(nil)
main: -> 0.0000s
main: -- remove_foreign_key(:merge_requests_approval_rules, {:column=>:group_id})
main: -> 0.0404s
main: == 20250205094302 AddMergeRequestsApprovalRulesGroupFk: reverted (0.0800s) ====
main: == [advisory_lock_connection] object_id: 130180, pg_backend_pid: 72297
main: == [advisory_lock_connection] object_id: 130180, pg_backend_pid: 73599
main: == 20250205094243 AddMergeRequestsApprovalRulesProjectFk: reverting ===========
main: -- transaction_open?(nil)
main: -> 0.0000s
main: -- remove_foreign_key(:merge_requests_approval_rules, {:column=>:project_id})
main: -> 0.0381s
main: == 20250205094243 AddMergeRequestsApprovalRulesProjectFk: reverted (0.0702s) ==
main: == [advisory_lock_connection] object_id: 130180, pg_backend_pid: 73599
main: == [advisory_lock_connection] object_id: 130180, pg_backend_pid: 74782
main: == 20250205094214 AddMergeRequestsApprovalRulesSourceRuleFk: reverting ========
main: -- transaction_open?(nil)
main: -> 0.0000s
main: -- remove_foreign_key(:merge_requests_approval_rules, {:column=>:source_rule_id})
main: -> 0.0346s
main: == 20250205094214 AddMergeRequestsApprovalRulesSourceRuleFk: reverted (0.0549s)
main: == [advisory_lock_connection] object_id: 130180, pg_backend_pid: 74782
main: == [advisory_lock_connection] object_id: 130180, pg_backend_pid: 76153
main: == 20250123151650 CreateMergeRequestsApprovalRules: reverting =================
main: -- drop_table(:merge_requests_approval_rules)
main: -> 0.0114s
main: == 20250123151650 CreateMergeRequestsApprovalRules: reverted (0.0344s) ========
main: == [advisory_lock_connection] object_id: 130180, pg_backend_pid: 76153

References

Issue: Create new architecture tables (#512606 - closed)
Epic: Rearchitecting Approval Rules (&12955)
POC: Draft: [ci skip][DO NOT MERGE][PoC] Start of Po... (!171114 - closed)

Associations will follow: Add v2 approval rule associations to project gr... (!179861 - merged)
Add v2 approval rule associations to user and u... (!179877 - merged)
Draft: Add v2 approval rule associations to pro... (!179879)

MR acceptance checklist

Please evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability. Related to #512606 (closed)

Edited by Gavin Hinfey

Merge request reports

Loading