diff options
author | Lin Jen-Shin <godfat@godfat.org> | 2017-06-27 12:46:45 +0300 |
---|---|---|
committer | Lin Jen-Shin <godfat@godfat.org> | 2017-06-27 12:46:45 +0300 |
commit | 10e732d2bb1afff22a0549c74636641859cc3bde (patch) | |
tree | f93fe19cf9f6b1054201a0aea6f3bb7f2071b9e6 /db/migrate/20170622135451_rename_duplicated_variable_key.rb | |
parent | 6ff162cfd911ccfeeabc8fd1516840b10a8f9700 (diff) |
Rename instead of delete, feedback:
https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/12363#note_33449374
Diffstat (limited to 'db/migrate/20170622135451_rename_duplicated_variable_key.rb')
-rw-r--r-- | db/migrate/20170622135451_rename_duplicated_variable_key.rb | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/db/migrate/20170622135451_rename_duplicated_variable_key.rb b/db/migrate/20170622135451_rename_duplicated_variable_key.rb new file mode 100644 index 00000000000..b88e7d7ba81 --- /dev/null +++ b/db/migrate/20170622135451_rename_duplicated_variable_key.rb @@ -0,0 +1,35 @@ +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 |