20160705163108_remove_requesters_that_are_owners.rb 1.26 KB
Newer Older
1
class RemoveRequestersThatAreOwners < ActiveRecord::Migration[4.2]
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
  include Gitlab::Database::MigrationHelpers

  def up
    # Delete requesters that are owner of their projects and actually requested
    # access to it
    execute <<-SQL
      DELETE FROM members
      WHERE members.source_type = 'Project'
      AND members.type = 'ProjectMember'
      AND members.requested_at IS NOT NULL
      AND members.user_id = (
        SELECT namespaces.owner_id
        FROM namespaces
        JOIN projects ON namespaces.id = projects.namespace_id
        WHERE namespaces.type IS NULL
        AND projects.id = members.source_id
        AND namespaces.owner_id = members.user_id);
    SQL

    # Delete requesters that are owner of their project's group and actually requested
    # access to it
    execute <<-SQL
      DELETE FROM members
      WHERE members.source_type = 'Project'
      AND members.type = 'ProjectMember'
      AND members.requested_at IS NOT NULL
      AND members.user_id = (
        SELECT namespaces.owner_id
        FROM namespaces
        JOIN projects ON namespaces.id = projects.namespace_id
        WHERE namespaces.type = 'Group'
        AND projects.id = members.source_id
        AND namespaces.owner_id = members.user_id);
    SQL
  end

  def down
  end
end