summaryrefslogtreecommitdiff
path: root/db/migrate/20170622135451_rename_duplicated_variable_key.rb
blob: 368718ab0ce787d95f66894ea053e04006745156 (plain)
1
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
class RenameDuplicatedVariableKey < ActiveRecord::Migration
  include Gitlab::Database::MigrationHelpers

  DOWNTIME = false

  disable_ddl_transaction!

  def up
    execute(<<~SQL)
      UPDATE ci_variables
      SET #{key} = CONCAT(#{key}, #{underscore}, id)
      WHERE id IN (
        SELECT *
        FROM ( -- MySQL requires an extra layer
          SELECT dup.id
          FROM ci_variables dup
          INNER JOIN (SELECT max(id) AS id, #{key}, project_id
                      FROM ci_variables tmp
                      GROUP BY #{key}, project_id) var
          USING (#{key}, project_id) where dup.id <> var.id
        ) dummy
      )
    SQL
  end

  def down
    # noop
  end

  def key
    # key needs to be quoted in MySQL
    quote_column_name('key')
  end

  def underscore
    quote('_')
  end
end