summaryrefslogtreecommitdiff
path: root/db/post_migrate/20220223124428_schedule_merge_topics_with_same_name.rb
diff options
context:
space:
mode:
Diffstat (limited to 'db/post_migrate/20220223124428_schedule_merge_topics_with_same_name.rb')
-rw-r--r--db/post_migrate/20220223124428_schedule_merge_topics_with_same_name.rb23
1 files changed, 23 insertions, 0 deletions
diff --git a/db/post_migrate/20220223124428_schedule_merge_topics_with_same_name.rb b/db/post_migrate/20220223124428_schedule_merge_topics_with_same_name.rb
new file mode 100644
index 00000000000..7e79c89203a
--- /dev/null
+++ b/db/post_migrate/20220223124428_schedule_merge_topics_with_same_name.rb
@@ -0,0 +1,23 @@
+# frozen_string_literal: true
+
+class ScheduleMergeTopicsWithSameName < Gitlab::Database::Migration[1.0]
+ MIGRATION = 'MergeTopicsWithSameName'
+ BATCH_SIZE = 100
+
+ disable_ddl_transaction!
+
+ class Topic < ActiveRecord::Base
+ self.table_name = 'topics'
+ end
+
+ def up
+ Topic.select('LOWER(name) as name').group('LOWER(name)').having('COUNT(*) > 1').order('LOWER(name)')
+ .in_groups_of(BATCH_SIZE, false).each_with_index do |group, i|
+ migrate_in((i + 1) * 2.minutes, MIGRATION, [group.map(&:name)])
+ end
+ end
+
+ def down
+ # no-op
+ end
+end