diff options
author | Robert Schilling <rschilling@student.tugraz.at> | 2018-08-25 05:38:54 +0000 |
---|---|---|
committer | Nick Thomas <nick@gitlab.com> | 2018-08-25 05:38:54 +0000 |
commit | 08cc6afc6eaa05fbc072452901a7d381bbdb2af8 (patch) | |
tree | c6e4f3779ff9ff13e3539681a7ac34488aaa8d16 /db | |
parent | 26ea5437f17ce2a6546fbfd644b93b7f18896783 (diff) | |
download | gitlab-ce-08cc6afc6eaa05fbc072452901a7d381bbdb2af8.tar.gz |
API: Protected tags
Diffstat (limited to 'db')
-rw-r--r-- | db/migrate/20180711103851_drop_duplicate_protected_tags.rb | 45 | ||||
-rw-r--r-- | db/migrate/20180711103922_add_protected_tags_index.rb | 18 | ||||
-rw-r--r-- | db/schema.rb | 1 |
3 files changed, 64 insertions, 0 deletions
diff --git a/db/migrate/20180711103851_drop_duplicate_protected_tags.rb b/db/migrate/20180711103851_drop_duplicate_protected_tags.rb new file mode 100644 index 00000000000..8fa2137551e --- /dev/null +++ b/db/migrate/20180711103851_drop_duplicate_protected_tags.rb @@ -0,0 +1,45 @@ +# See http://doc.gitlab.com/ce/development/migration_style_guide.html +# for more information on how to write migrations for GitLab. + +class DropDuplicateProtectedTags < ActiveRecord::Migration + DOWNTIME = false + + disable_ddl_transaction! + + BATCH_SIZE = 1000 + + class Project < ActiveRecord::Base + self.table_name = 'projects' + + include ::EachBatch + end + + class ProtectedTag < ActiveRecord::Base + self.table_name = 'protected_tags' + end + + def up + Project.each_batch(of: BATCH_SIZE) do |projects| + ids = ProtectedTag + .where(project_id: projects) + .group(:name, :project_id) + .select('max(id)') + + tags = ProtectedTag + .where(project_id: projects) + .where.not(id: ids) + + if Gitlab::Database.postgresql? + tags.delete_all + else + # Workaround needed for MySQL + sql = "SELECT id FROM (#{tags.to_sql}) protected_tags" + + ProtectedTag.where("id IN (#{sql})").delete_all # rubocop:disable GitlabSecurity/SqlInjection + end + end + end + + def down + end +end diff --git a/db/migrate/20180711103922_add_protected_tags_index.rb b/db/migrate/20180711103922_add_protected_tags_index.rb new file mode 100644 index 00000000000..7ed2258ebaf --- /dev/null +++ b/db/migrate/20180711103922_add_protected_tags_index.rb @@ -0,0 +1,18 @@ +# See http://doc.gitlab.com/ce/development/migration_style_guide.html +# for more information on how to write migrations for GitLab. + +class AddProtectedTagsIndex < ActiveRecord::Migration + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + disable_ddl_transaction! + + def up + add_concurrent_index :protected_tags, [:project_id, :name], unique: true + end + + def down + remove_concurrent_index :protected_tags, [:project_id, :name] + end +end diff --git a/db/schema.rb b/db/schema.rb index f5ce7df60e8..380d4e49ddf 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -1741,6 +1741,7 @@ ActiveRecord::Schema.define(version: 20180816193530) do t.datetime "updated_at", null: false end + add_index "protected_tags", ["project_id", "name"], name: "index_protected_tags_on_project_id_and_name", unique: true, using: :btree add_index "protected_tags", ["project_id"], name: "index_protected_tags_on_project_id", using: :btree create_table "push_event_payloads", id: false, force: :cascade do |t| |