diff options
Diffstat (limited to 'db')
159 files changed, 2219 insertions, 1175 deletions
diff --git a/db/fixtures/development/14_pipelines.rb b/db/fixtures/development/14_pipelines.rb index db043e39d2c..5c8b681fa92 100644 --- a/db/fixtures/development/14_pipelines.rb +++ b/db/fixtures/development/14_pipelines.rb @@ -1,7 +1,7 @@ require './spec/support/sidekiq' class Gitlab::Seeder::Pipelines - STAGES = %w[build test security deploy notify] + STAGES = %w[build test deploy notify] BUILDS = [ # build stage { name: 'build:linux', stage: 'build', status: :success, @@ -31,16 +31,6 @@ class Gitlab::Seeder::Pipelines { name: 'spinach:osx', stage: 'test', status: :failed, allow_failure: true, queued_at: 8.hour.ago, started_at: 8.hour.ago, finished_at: 7.hour.ago }, - # security stage - { name: 'dast', stage: 'security', status: :success, - queued_at: 8.hour.ago, started_at: 8.hour.ago, finished_at: 7.hour.ago }, - { name: 'sast', stage: 'security', status: :success, - queued_at: 8.hour.ago, started_at: 8.hour.ago, finished_at: 7.hour.ago }, - { name: 'dependency_scanning', stage: 'security', status: :success, - queued_at: 8.hour.ago, started_at: 8.hour.ago, finished_at: 7.hour.ago }, - { name: 'container_scanning', stage: 'security', status: :success, - queued_at: 8.hour.ago, started_at: 8.hour.ago, finished_at: 7.hour.ago }, - # deploy stage { name: 'staging', stage: 'deploy', environment: 'staging', status_event: :success, options: { environment: { action: 'start', on_stop: 'stop staging' } }, @@ -79,9 +69,17 @@ class Gitlab::Seeder::Pipelines def create_master_pipelines @project.repository.commits('master', limit: 4).map do |commit| - create_pipeline!(@project, 'master', commit) + create_pipeline!(@project, 'master', commit).tap do |pipeline| + random_pipeline.tap do |triggered_by_pipeline| + triggered_by_pipeline.try(:sourced_pipelines)&.create( + source_job: triggered_by_pipeline.builds.all.sample, + source_project: triggered_by_pipeline.project, + project: pipeline.project, + pipeline: pipeline) + end + end end - rescue + rescue ActiveRecord::ActiveRecordError [] end @@ -98,7 +96,7 @@ class Gitlab::Seeder::Pipelines end pipelines.flatten - rescue + rescue ActiveRecord::ActiveRecordError [] end @@ -119,11 +117,6 @@ class Gitlab::Seeder::Pipelines setup_artifacts(build) setup_test_reports(build) - if build.ref == build.project.default_branch - setup_security_reports_file(build) - else - setup_security_reports_legacy_archive(build) - end setup_build_log(build) build.project.environments. @@ -159,55 +152,6 @@ class Gitlab::Seeder::Pipelines end end - def setup_security_reports_file(build) - return unless build.stage == "security" - - # we have two sources: master and feature-branch - branch_name = build.ref == build.project.default_branch ? - 'master' : 'feature-branch' - - artifacts_cache_file(security_reports_path(branch_name, build.name)) do |file| - build.job_artifacts.build( - project: build.project, - file_type: build.name, - file_format: :raw, - file: file) - end - end - - def setup_security_reports_legacy_archive(build) - return unless build.stage == "security" - - # we have two sources: master and feature-branch - branch_name = build.ref == build.project.default_branch ? - 'master' : 'feature-branch' - - artifacts_cache_file(security_reports_archive_path(branch_name)) do |file| - build.job_artifacts.build( - project: build.project, - file_type: :archive, - file_format: :zip, - file: file) - end - - # assign dummy metadata - artifacts_cache_file(artifacts_metadata_path) do |file| - build.job_artifacts.build( - project: build.project, - file_type: :metadata, - file_format: :gzip, - file: file) - end - - build.options = { - artifacts: { - paths: [ - Ci::JobArtifact::DEFAULT_FILE_NAMES.fetch(build.name.to_sym) - ] - } - } - end - def setup_build_log(build) if %w(running success failed).include?(build.status) build.trace.set(FFaker::Lorem.paragraphs(6).join("\n\n")) @@ -231,6 +175,10 @@ class Gitlab::Seeder::Pipelines @project.team.users.sample end + def random_pipeline + Ci::Pipeline.limit(4).all.sample + end + def build_status Ci::Build::AVAILABLE_STATUSES.sample end @@ -255,15 +203,6 @@ class Gitlab::Seeder::Pipelines Rails.root + 'spec/fixtures/junit/junit.xml.gz' end - def security_reports_archive_path(branch) - Rails.root.join('spec', 'fixtures', 'security-reports', branch + '.zip') - end - - def security_reports_path(branch, name) - file_name = Ci::JobArtifact::DEFAULT_FILE_NAMES.fetch(name.to_sym) - Rails.root.join('spec', 'fixtures', 'security-reports', branch, file_name) - end - def artifacts_cache_file(file_path) file = Tempfile.new("artifacts") file.close diff --git a/db/fixtures/development/15_award_emoji.rb b/db/fixtures/development/15_award_emoji.rb index 137a036edaf..a9dcc048586 100644 --- a/db/fixtures/development/15_award_emoji.rb +++ b/db/fixtures/development/15_award_emoji.rb @@ -1,35 +1,22 @@ require './spec/support/sidekiq' Gitlab::Seeder.quiet do - emoji = Gitlab::Emoji.emojis.keys + EMOJI = Gitlab::Emoji.emojis.keys - Issue.order(Gitlab::Database.random).limit(Issue.count / 2).each do |issue| - project = issue.project + def seed_award_emoji(klass) + klass.order(Gitlab::Database.random).limit(klass.count / 2).each do |awardable| + awardable.project.authorized_users.where('project_authorizations.access_level > ?', Gitlab::Access::GUEST).sample(2).each do |user| + AwardEmojis::AddService.new(awardable, EMOJI.sample, user).execute - project.team.users.sample(2).each do |user| - issue.create_award_emoji(emoji.sample, user) + awardable.notes.user.sample(2).each do |note| + AwardEmojis::AddService.new(note, EMOJI.sample, user).execute + end - issue.notes.sample(2).each do |note| - next if note.system? - note.create_award_emoji(emoji.sample, user) + print '.' end - - print '.' end end - MergeRequest.order(Gitlab::Database.random).limit(MergeRequest.count / 2).each do |mr| - project = mr.project - - project.team.users.sample(2).each do |user| - mr.create_award_emoji(emoji.sample, user) - - mr.notes.sample(2).each do |note| - next if note.system? - note.create_award_emoji(emoji.sample, user) - end - - print '.' - end - end + seed_award_emoji(Issue) + seed_award_emoji(MergeRequest) end diff --git a/db/fixtures/development/99_common_metrics.rb b/db/fixtures/development/99_common_metrics.rb index 1f39c0ce5a0..d52f78ea536 100644 --- a/db/fixtures/development/99_common_metrics.rb +++ b/db/fixtures/development/99_common_metrics.rb @@ -1,5 +1,3 @@ # frozen_string_literal: true -require Rails.root.join('db/importers/common_metrics_importer.rb') - -::Importers::CommonMetricsImporter.new.execute +::Gitlab::DatabaseImporters::CommonMetrics::Importer.new.execute diff --git a/db/fixtures/production/999_common_metrics.rb b/db/fixtures/production/999_common_metrics.rb index 1f39c0ce5a0..d52f78ea536 100644 --- a/db/fixtures/production/999_common_metrics.rb +++ b/db/fixtures/production/999_common_metrics.rb @@ -1,5 +1,3 @@ # frozen_string_literal: true -require Rails.root.join('db/importers/common_metrics_importer.rb') - -::Importers::CommonMetricsImporter.new.execute +::Gitlab::DatabaseImporters::CommonMetrics::Importer.new.execute diff --git a/db/importers/common_metrics_importer.rb b/db/importers/common_metrics_importer.rb deleted file mode 100644 index 195bde8f34a..00000000000 --- a/db/importers/common_metrics_importer.rb +++ /dev/null @@ -1,105 +0,0 @@ -# frozen_string_literal: true - -module Importers - class PrometheusMetric < ActiveRecord::Base - enum group: { - # built-in groups - nginx_ingress_vts: -1, - ha_proxy: -2, - aws_elb: -3, - nginx: -4, - kubernetes: -5, - nginx_ingress: -6, - - # custom groups - business: 0, - response: 1, - system: 2 - } - - scope :common, -> { where(common: true) } - - GROUP_TITLES = { - business: _('Business metrics (Custom)'), - response: _('Response metrics (Custom)'), - system: _('System metrics (Custom)'), - nginx_ingress_vts: _('Response metrics (NGINX Ingress VTS)'), - nginx_ingress: _('Response metrics (NGINX Ingress)'), - ha_proxy: _('Response metrics (HA Proxy)'), - aws_elb: _('Response metrics (AWS ELB)'), - nginx: _('Response metrics (NGINX)'), - kubernetes: _('System metrics (Kubernetes)') - }.freeze - end - - class CommonMetricsImporter - MissingQueryId = Class.new(StandardError) - - attr_reader :content - - def initialize(filename = 'common_metrics.yml') - @content = YAML.load_file(Rails.root.join('config', 'prometheus', filename)) - end - - def execute - PrometheusMetric.reset_column_information - - process_content do |id, attributes| - find_or_build_metric!(id) - .update!(**attributes) - end - end - - private - - def process_content(&blk) - content['panel_groups'].map do |group| - process_group(group, &blk) - end - end - - def process_group(group, &blk) - attributes = { - group: find_group_title_key(group['group']) - } - - group['panels'].map do |panel| - process_panel(panel, attributes, &blk) - end - end - - def process_panel(panel, attributes, &blk) - attributes = attributes.merge( - title: panel['title'], - y_label: panel['y_label']) - - panel['metrics'].map do |metric_details| - process_metric_details(metric_details, attributes, &blk) - end - end - - def process_metric_details(metric_details, attributes, &blk) - attributes = attributes.merge( - legend: metric_details['label'], - query: metric_details['query_range'], - unit: metric_details['unit']) - - yield(metric_details['id'], attributes) - end - - def find_or_build_metric!(id) - raise MissingQueryId unless id - - PrometheusMetric.common.find_by(identifier: id) || - PrometheusMetric.new(common: true, identifier: id) - end - - def find_group_title_key(title) - PrometheusMetric.groups[find_group_title(title)] - end - - def find_group_title(title) - PrometheusMetric::GROUP_TITLES.invert[title] - end - end -end diff --git a/db/migrate/20171230123729_init_schema.rb b/db/migrate/20171230123729_init_schema.rb index ae7541f2475..a474ea2f925 100644 --- a/db/migrate/20171230123729_init_schema.rb +++ b/db/migrate/20171230123729_init_schema.rb @@ -5,6 +5,7 @@ # rubocop:disable Metrics/AbcSize # rubocop:disable Migration/AddConcurrentForeignKey # rubocop:disable Style/WordArray +# rubocop:disable Migration/AddLimitToStringColumns class InitSchema < ActiveRecord::Migration[4.2] DOWNTIME = false @@ -788,7 +789,7 @@ class InitSchema < ActiveRecord::Migration[4.2] t.datetime_with_timezone "closed_at" t.index ["author_id"], name: "index_issues_on_author_id", using: :btree t.index ["confidential"], name: "index_issues_on_confidential", using: :btree - t.index ["description"], name: "index_issues_on_description_trigram", using: :gin, opclasses: {"description"=>"gin_trgm_ops"} + t.index ["description"], name: "index_issues_on_description_trigram", using: :gin, opclass: {"description"=>"gin_trgm_ops"} t.index ["milestone_id"], name: "index_issues_on_milestone_id", using: :btree t.index ["moved_to_id"], name: "index_issues_on_moved_to_id", where: "(moved_to_id IS NOT NULL)", using: :btree t.index ["project_id", "created_at", "id", "state"], name: "index_issues_on_project_id_and_created_at_and_id_and_state", using: :btree @@ -797,7 +798,7 @@ class InitSchema < ActiveRecord::Migration[4.2] t.index ["project_id", "updated_at", "id", "state"], name: "index_issues_on_project_id_and_updated_at_and_id_and_state", using: :btree t.index ["relative_position"], name: "index_issues_on_relative_position", using: :btree t.index ["state"], name: "index_issues_on_state", using: :btree - t.index ["title"], name: "index_issues_on_title_trigram", using: :gin, opclasses: {"title"=>"gin_trgm_ops"} + t.index ["title"], name: "index_issues_on_title_trigram", using: :gin, opclass: {"title"=>"gin_trgm_ops"} t.index ["updated_by_id"], name: "index_issues_on_updated_by_id", where: "(updated_by_id IS NOT NULL)", using: :btree end create_table "keys", id: :serial do |t| @@ -989,7 +990,7 @@ class InitSchema < ActiveRecord::Migration[4.2] t.index ["assignee_id"], name: "index_merge_requests_on_assignee_id", using: :btree t.index ["author_id"], name: "index_merge_requests_on_author_id", using: :btree t.index ["created_at"], name: "index_merge_requests_on_created_at", using: :btree - t.index ["description"], name: "index_merge_requests_on_description_trigram", using: :gin, opclasses: {"description"=>"gin_trgm_ops"} + t.index ["description"], name: "index_merge_requests_on_description_trigram", using: :gin, opclass: {"description"=>"gin_trgm_ops"} t.index ["head_pipeline_id"], name: "index_merge_requests_on_head_pipeline_id", using: :btree t.index ["latest_merge_request_diff_id"], name: "index_merge_requests_on_latest_merge_request_diff_id", using: :btree t.index ["merge_user_id"], name: "index_merge_requests_on_merge_user_id", where: "(merge_user_id IS NOT NULL)", using: :btree @@ -1001,7 +1002,7 @@ class InitSchema < ActiveRecord::Migration[4.2] t.index ["target_project_id", "iid"], name: "index_merge_requests_on_target_project_id_and_iid", unique: true, using: :btree t.index ["target_project_id", "merge_commit_sha", "id"], name: "index_merge_requests_on_tp_id_and_merge_commit_sha_and_id", using: :btree t.index ["title"], name: "index_merge_requests_on_title", using: :btree - t.index ["title"], name: "index_merge_requests_on_title_trigram", using: :gin, opclasses: {"title"=>"gin_trgm_ops"} + t.index ["title"], name: "index_merge_requests_on_title_trigram", using: :gin, opclass: {"title"=>"gin_trgm_ops"} t.index ["updated_by_id"], name: "index_merge_requests_on_updated_by_id", where: "(updated_by_id IS NOT NULL)", using: :btree end create_table "merge_requests_closing_issues", id: :serial do |t| @@ -1026,12 +1027,12 @@ class InitSchema < ActiveRecord::Migration[4.2] t.date "start_date" t.integer "cached_markdown_version" t.integer "group_id" - t.index ["description"], name: "index_milestones_on_description_trigram", using: :gin, opclasses: {"description"=>"gin_trgm_ops"} + t.index ["description"], name: "index_milestones_on_description_trigram", using: :gin, opclass: {"description"=>"gin_trgm_ops"} t.index ["due_date"], name: "index_milestones_on_due_date", using: :btree t.index ["group_id"], name: "index_milestones_on_group_id", using: :btree t.index ["project_id", "iid"], name: "index_milestones_on_project_id_and_iid", unique: true, using: :btree t.index ["title"], name: "index_milestones_on_title", using: :btree - t.index ["title"], name: "index_milestones_on_title_trigram", using: :gin, opclasses: {"title"=>"gin_trgm_ops"} + t.index ["title"], name: "index_milestones_on_title_trigram", using: :gin, opclass: {"title"=>"gin_trgm_ops"} end create_table "namespaces", id: :serial do |t| t.string "name", null: false @@ -1054,11 +1055,11 @@ class InitSchema < ActiveRecord::Migration[4.2] t.string "runners_token" t.index ["created_at"], name: "index_namespaces_on_created_at", using: :btree t.index ["name", "parent_id"], name: "index_namespaces_on_name_and_parent_id", unique: true, using: :btree - t.index ["name"], name: "index_namespaces_on_name_trigram", using: :gin, opclasses: {"name"=>"gin_trgm_ops"} + t.index ["name"], name: "index_namespaces_on_name_trigram", using: :gin, opclass: {"name"=>"gin_trgm_ops"} t.index ["owner_id"], name: "index_namespaces_on_owner_id", using: :btree t.index ["parent_id", "id"], name: "index_namespaces_on_parent_id_and_id", unique: true, using: :btree t.index ["path"], name: "index_namespaces_on_path", using: :btree - t.index ["path"], name: "index_namespaces_on_path_trigram", using: :gin, opclasses: {"path"=>"gin_trgm_ops"} + t.index ["path"], name: "index_namespaces_on_path_trigram", using: :gin, opclass: {"path"=>"gin_trgm_ops"} t.index ["require_two_factor_authentication"], name: "index_namespaces_on_require_two_factor_authentication", using: :btree t.index ["type"], name: "index_namespaces_on_type", using: :btree end @@ -1091,7 +1092,7 @@ class InitSchema < ActiveRecord::Migration[4.2] t.index ["created_at"], name: "index_notes_on_created_at", using: :btree t.index ["discussion_id"], name: "index_notes_on_discussion_id", using: :btree t.index ["line_code"], name: "index_notes_on_line_code", using: :btree - t.index ["note"], name: "index_notes_on_note_trigram", using: :gin, opclasses: {"note"=>"gin_trgm_ops"} + t.index ["note"], name: "index_notes_on_note_trigram", using: :gin, opclass: {"note"=>"gin_trgm_ops"} t.index ["noteable_id", "noteable_type"], name: "index_notes_on_noteable_id_and_noteable_type", using: :btree t.index ["noteable_type"], name: "index_notes_on_noteable_type", using: :btree t.index ["project_id", "noteable_type"], name: "index_notes_on_project_id_and_noteable_type", using: :btree @@ -1304,14 +1305,14 @@ class InitSchema < ActiveRecord::Migration[4.2] t.index ["ci_id"], name: "index_projects_on_ci_id", using: :btree t.index ["created_at"], name: "index_projects_on_created_at", using: :btree t.index ["creator_id"], name: "index_projects_on_creator_id", using: :btree - t.index ["description"], name: "index_projects_on_description_trigram", using: :gin, opclasses: {"description"=>"gin_trgm_ops"} + t.index ["description"], name: "index_projects_on_description_trigram", using: :gin, opclass: {"description"=>"gin_trgm_ops"} t.index ["last_activity_at"], name: "index_projects_on_last_activity_at", using: :btree t.index ["last_repository_check_failed"], name: "index_projects_on_last_repository_check_failed", using: :btree t.index ["last_repository_updated_at"], name: "index_projects_on_last_repository_updated_at", using: :btree - t.index ["name"], name: "index_projects_on_name_trigram", using: :gin, opclasses: {"name"=>"gin_trgm_ops"} + t.index ["name"], name: "index_projects_on_name_trigram", using: :gin, opclass: {"name"=>"gin_trgm_ops"} t.index ["namespace_id"], name: "index_projects_on_namespace_id", using: :btree t.index ["path"], name: "index_projects_on_path", using: :btree - t.index ["path"], name: "index_projects_on_path_trigram", using: :gin, opclasses: {"path"=>"gin_trgm_ops"} + t.index ["path"], name: "index_projects_on_path_trigram", using: :gin, opclass: {"path"=>"gin_trgm_ops"} t.index ["pending_delete"], name: "index_projects_on_pending_delete", using: :btree t.index ["repository_storage"], name: "index_projects_on_repository_storage", using: :btree t.index ["runners_token"], name: "index_projects_on_runners_token", using: :btree @@ -1375,7 +1376,7 @@ class InitSchema < ActiveRecord::Migration[4.2] t.datetime "updated_at", null: false t.boolean "permanent" t.index ["path"], name: "index_redirect_routes_on_path", unique: true, using: :btree - t.index ["path"], name: "index_redirect_routes_on_path_text_pattern_ops", using: :btree, opclasses: {"path"=>"varchar_pattern_ops"} + t.index ["path"], name: "index_redirect_routes_on_path_text_pattern_ops", using: :btree, opclass: {"path"=>"varchar_pattern_ops"} t.index ["permanent"], name: "index_redirect_routes_on_permanent", using: :btree t.index ["source_type", "source_id"], name: "index_redirect_routes_on_source_type_and_source_id", using: :btree end @@ -1398,7 +1399,7 @@ class InitSchema < ActiveRecord::Migration[4.2] t.datetime "updated_at" t.string "name" t.index ["path"], name: "index_routes_on_path", unique: true, using: :btree - t.index ["path"], name: "index_routes_on_path_text_pattern_ops", using: :btree, opclasses: {"path"=>"varchar_pattern_ops"} + t.index ["path"], name: "index_routes_on_path_text_pattern_ops", using: :btree, opclass: {"path"=>"varchar_pattern_ops"} t.index ["source_type", "source_id"], name: "index_routes_on_source_type_and_source_id", unique: true, using: :btree end create_table "sent_notifications", id: :serial do |t| @@ -1454,9 +1455,9 @@ class InitSchema < ActiveRecord::Migration[4.2] t.text "description" t.text "description_html" t.index ["author_id"], name: "index_snippets_on_author_id", using: :btree - t.index ["file_name"], name: "index_snippets_on_file_name_trigram", using: :gin, opclasses: {"file_name"=>"gin_trgm_ops"} + t.index ["file_name"], name: "index_snippets_on_file_name_trigram", using: :gin, opclass: {"file_name"=>"gin_trgm_ops"} t.index ["project_id"], name: "index_snippets_on_project_id", using: :btree - t.index ["title"], name: "index_snippets_on_title_trigram", using: :gin, opclasses: {"title"=>"gin_trgm_ops"} + t.index ["title"], name: "index_snippets_on_title_trigram", using: :gin, opclass: {"title"=>"gin_trgm_ops"} t.index ["updated_at"], name: "index_snippets_on_updated_at", using: :btree t.index ["visibility_level"], name: "index_snippets_on_visibility_level", using: :btree end @@ -1663,16 +1664,16 @@ class InitSchema < ActiveRecord::Migration[4.2] t.index ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true, using: :btree t.index ["created_at"], name: "index_users_on_created_at", using: :btree t.index ["email"], name: "index_users_on_email", unique: true, using: :btree - t.index ["email"], name: "index_users_on_email_trigram", using: :gin, opclasses: {"email"=>"gin_trgm_ops"} + t.index ["email"], name: "index_users_on_email_trigram", using: :gin, opclass: {"email"=>"gin_trgm_ops"} t.index ["ghost"], name: "index_users_on_ghost", using: :btree t.index ["incoming_email_token"], name: "index_users_on_incoming_email_token", using: :btree t.index ["name"], name: "index_users_on_name", using: :btree - t.index ["name"], name: "index_users_on_name_trigram", using: :gin, opclasses: {"name"=>"gin_trgm_ops"} + t.index ["name"], name: "index_users_on_name_trigram", using: :gin, opclass: {"name"=>"gin_trgm_ops"} t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree t.index ["rss_token"], name: "index_users_on_rss_token", using: :btree t.index ["state"], name: "index_users_on_state", using: :btree t.index ["username"], name: "index_users_on_username", using: :btree - t.index ["username"], name: "index_users_on_username_trigram", using: :gin, opclasses: {"username"=>"gin_trgm_ops"} + t.index ["username"], name: "index_users_on_username_trigram", using: :gin, opclass: {"username"=>"gin_trgm_ops"} end create_table "users_star_projects", id: :serial do |t| t.integer "project_id", null: false @@ -1852,3 +1853,4 @@ class InitSchema < ActiveRecord::Migration[4.2] raise ActiveRecord::IrreversibleMigration, "The initial migration is not revertable" end end +# rubocop:enable Migration/AddLimitToStringColumns diff --git a/db/migrate/20180101160629_create_prometheus_metrics.rb b/db/migrate/20180101160629_create_prometheus_metrics.rb index e3b1ed710d6..a098b999a0a 100644 --- a/db/migrate/20180101160629_create_prometheus_metrics.rb +++ b/db/migrate/20180101160629_create_prometheus_metrics.rb @@ -4,6 +4,7 @@ class CreatePrometheusMetrics < ActiveRecord::Migration[4.2] DOWNTIME = false def change + # rubocop:disable Migration/AddLimitToStringColumns create_table :prometheus_metrics do |t| t.references :project, index: true, foreign_key: { on_delete: :cascade }, null: false t.string :title, null: false @@ -14,5 +15,6 @@ class CreatePrometheusMetrics < ActiveRecord::Migration[4.2] t.integer :group, null: false, index: true t.timestamps_with_timezone null: false end + # rubocop:enable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20180122162010_add_auto_devops_domain_to_application_settings.rb b/db/migrate/20180122162010_add_auto_devops_domain_to_application_settings.rb index c76dc5b3a68..eb446ad0d72 100644 --- a/db/migrate/20180122162010_add_auto_devops_domain_to_application_settings.rb +++ b/db/migrate/20180122162010_add_auto_devops_domain_to_application_settings.rb @@ -8,6 +8,6 @@ class AddAutoDevopsDomainToApplicationSettings < ActiveRecord::Migration[4.2] DOWNTIME = false def change - add_column :application_settings, :auto_devops_domain, :string + add_column :application_settings, :auto_devops_domain, :string # rubocop:disable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20180129193323_add_uploads_builder_context.rb b/db/migrate/20180129193323_add_uploads_builder_context.rb index c7227bf0f1e..710fa7b3ba8 100644 --- a/db/migrate/20180129193323_add_uploads_builder_context.rb +++ b/db/migrate/20180129193323_add_uploads_builder_context.rb @@ -8,7 +8,9 @@ class AddUploadsBuilderContext < ActiveRecord::Migration[4.2] DOWNTIME = false def change + # rubocop:disable Migration/AddLimitToStringColumns add_column :uploads, :mount_point, :string add_column :uploads, :secret, :string + # rubocop:enable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20180206200543_reset_events_primary_key_sequence.rb b/db/migrate/20180206200543_reset_events_primary_key_sequence.rb index d395c5725e4..e7a18e68395 100644 --- a/db/migrate/20180206200543_reset_events_primary_key_sequence.rb +++ b/db/migrate/20180206200543_reset_events_primary_key_sequence.rb @@ -12,24 +12,10 @@ class ResetEventsPrimaryKeySequence < ActiveRecord::Migration[4.2] end def up - if Gitlab::Database.postgresql? - reset_primary_key_for_postgresql - else - reset_primary_key_for_mysql - end + reset_pk_sequence!(Event.table_name) end def down # No-op end - - def reset_primary_key_for_postgresql - reset_pk_sequence!(Event.table_name) - end - - def reset_primary_key_for_mysql - amount = Event.pluck('COALESCE(MAX(id), 1)').first - - execute "ALTER TABLE #{Event.table_name} AUTO_INCREMENT = #{amount}" - end end diff --git a/db/migrate/20180212030105_add_external_ip_to_clusters_applications_ingress.rb b/db/migrate/20180212030105_add_external_ip_to_clusters_applications_ingress.rb index e2a9a68b1ad..78aa2014601 100644 --- a/db/migrate/20180212030105_add_external_ip_to_clusters_applications_ingress.rb +++ b/db/migrate/20180212030105_add_external_ip_to_clusters_applications_ingress.rb @@ -4,6 +4,6 @@ class AddExternalIpToClustersApplicationsIngress < ActiveRecord::Migration[4.2] DOWNTIME = false def change - add_column :clusters_applications_ingress, :external_ip, :string + add_column :clusters_applications_ingress, :external_ip, :string # rubocop:disable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20180214093516_create_badges.rb b/db/migrate/20180214093516_create_badges.rb index 66e017b115a..fe27d465571 100644 --- a/db/migrate/20180214093516_create_badges.rb +++ b/db/migrate/20180214093516_create_badges.rb @@ -2,6 +2,7 @@ class CreateBadges < ActiveRecord::Migration[4.2] DOWNTIME = false def change + # rubocop:disable Migration/AddLimitToStringColumns create_table :badges do |t| t.string :link_url, null: false t.string :image_url, null: false @@ -11,6 +12,7 @@ class CreateBadges < ActiveRecord::Migration[4.2] t.timestamps_with_timezone null: false end + # rubocop:enable Migration/AddLimitToStringColumns # rubocop:disable Migration/AddConcurrentForeignKey add_foreign_key :badges, :namespaces, column: :group_id, on_delete: :cascade diff --git a/db/migrate/20180214155405_create_clusters_applications_runners.rb b/db/migrate/20180214155405_create_clusters_applications_runners.rb index ce594c91890..f611fefbb0d 100644 --- a/db/migrate/20180214155405_create_clusters_applications_runners.rb +++ b/db/migrate/20180214155405_create_clusters_applications_runners.rb @@ -13,7 +13,7 @@ class CreateClustersApplicationsRunners < ActiveRecord::Migration[4.2] t.index :cluster_id, unique: true t.integer :status, null: false t.timestamps_with_timezone null: false - t.string :version, null: false + t.string :version, null: false # rubocop:disable Migration/AddLimitToStringColumns t.text :status_reason end diff --git a/db/migrate/20180216120000_add_pages_domain_verification.rb b/db/migrate/20180216120000_add_pages_domain_verification.rb index f709f5a5809..b2f19f2e1a9 100644 --- a/db/migrate/20180216120000_add_pages_domain_verification.rb +++ b/db/migrate/20180216120000_add_pages_domain_verification.rb @@ -3,6 +3,6 @@ class AddPagesDomainVerification < ActiveRecord::Migration[4.2] def change add_column :pages_domains, :verified_at, :datetime_with_timezone - add_column :pages_domains, :verification_code, :string + add_column :pages_domains, :verification_code, :string # rubocop:disable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20180222043024_add_ip_address_to_runner.rb b/db/migrate/20180222043024_add_ip_address_to_runner.rb index b52366c0be1..08fb0bd900c 100644 --- a/db/migrate/20180222043024_add_ip_address_to_runner.rb +++ b/db/migrate/20180222043024_add_ip_address_to_runner.rb @@ -4,6 +4,6 @@ class AddIpAddressToRunner < ActiveRecord::Migration[4.2] DOWNTIME = false def change - add_column :ci_runners, :ip_address, :string + add_column :ci_runners, :ip_address, :string # rubocop:disable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20180308125206_add_user_internal_regex_to_application_setting.rb b/db/migrate/20180308125206_add_user_internal_regex_to_application_setting.rb index 5e4bf96f86f..9bdd44baf58 100644 --- a/db/migrate/20180308125206_add_user_internal_regex_to_application_setting.rb +++ b/db/migrate/20180308125206_add_user_internal_regex_to_application_setting.rb @@ -4,7 +4,7 @@ class AddUserInternalRegexToApplicationSetting < ActiveRecord::Migration[4.2] DOWNTIME = false def up - add_column :application_settings, :user_default_internal_regex, :string, null: true + add_column :application_settings, :user_default_internal_regex, :string, null: true # rubocop:disable Migration/AddLimitToStringColumns end def down diff --git a/db/migrate/20180315160435_add_external_auth_mutual_tls_fields_to_project_settings.rb b/db/migrate/20180315160435_add_external_auth_mutual_tls_fields_to_project_settings.rb index ee3d1078f5e..c379d207ff0 100644 --- a/db/migrate/20180315160435_add_external_auth_mutual_tls_fields_to_project_settings.rb +++ b/db/migrate/20180315160435_add_external_auth_mutual_tls_fields_to_project_settings.rb @@ -2,6 +2,7 @@ class AddExternalAuthMutualTlsFieldsToProjectSettings < ActiveRecord::Migration[ DOWNTIME = false def change + # rubocop:disable Migration/AddLimitToStringColumns add_column :application_settings, :external_auth_client_cert, :text add_column :application_settings, @@ -12,5 +13,6 @@ class AddExternalAuthMutualTlsFieldsToProjectSettings < ActiveRecord::Migration[ :encrypted_external_auth_client_key_pass, :string add_column :application_settings, :encrypted_external_auth_client_key_pass_iv, :string + # rubocop:enable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20180319190020_create_deploy_tokens.rb b/db/migrate/20180319190020_create_deploy_tokens.rb index a4d797679c5..f444521b3ae 100644 --- a/db/migrate/20180319190020_create_deploy_tokens.rb +++ b/db/migrate/20180319190020_create_deploy_tokens.rb @@ -2,6 +2,7 @@ class CreateDeployTokens < ActiveRecord::Migration[4.2] DOWNTIME = false def change + # rubocop:disable Migration/AddLimitToStringColumns create_table :deploy_tokens do |t| t.boolean :revoked, default: false t.boolean :read_repository, null: false, default: false @@ -15,5 +16,6 @@ class CreateDeployTokens < ActiveRecord::Migration[4.2] t.index [:token, :expires_at, :id], where: "(revoked IS FALSE)" end + # rubocop:enable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20180403035759_create_project_ci_cd_settings.rb b/db/migrate/20180403035759_create_project_ci_cd_settings.rb index 00028689779..c630dd3c942 100644 --- a/db/migrate/20180403035759_create_project_ci_cd_settings.rb +++ b/db/migrate/20180403035759_create_project_ci_cd_settings.rb @@ -30,12 +30,6 @@ class CreateProjectCiCdSettings < ActiveRecord::Migration[4.2] end def add_foreign_key_with_retry - if Gitlab::Database.mysql? - # When using MySQL we don't support online upgrades, thus projects can't - # be deleted while we are running this migration. - return add_project_id_foreign_key - end - # Between the initial INSERT and the addition of the foreign key some # projects may have been removed, leaving orphaned rows in our new settings # table. diff --git a/db/migrate/20180406204716_add_limits_ci_build_trace_chunks_raw_data_for_mysql.rb b/db/migrate/20180406204716_add_limits_ci_build_trace_chunks_raw_data_for_mysql.rb deleted file mode 100644 index 0b541e94353..00000000000 --- a/db/migrate/20180406204716_add_limits_ci_build_trace_chunks_raw_data_for_mysql.rb +++ /dev/null @@ -1,13 +0,0 @@ -# See http://doc.gitlab.com/ce/development/migration_style_guide.html -# for more information on how to write migrations for GitLab. -require Rails.root.join('db/migrate/limits_ci_build_trace_chunks_raw_data_for_mysql') - -class AddLimitsCiBuildTraceChunksRawDataForMysql < ActiveRecord::Migration[4.2] - include Gitlab::Database::MigrationHelpers - - DOWNTIME = false - - def up - LimitsCiBuildTraceChunksRawDataForMysql.new.up - end -end diff --git a/db/migrate/20180502122856_create_project_mirror_data.rb b/db/migrate/20180502122856_create_project_mirror_data.rb index 9781815a97b..04367e1c98b 100644 --- a/db/migrate/20180502122856_create_project_mirror_data.rb +++ b/db/migrate/20180502122856_create_project_mirror_data.rb @@ -3,6 +3,7 @@ class CreateProjectMirrorData < ActiveRecord::Migration[4.2] DOWNTIME = false + # rubocop:disable Migration/AddLimitToStringColumns def up if table_exists?(:project_mirror_data) add_column :project_mirror_data, :status, :string unless column_exists?(:project_mirror_data, :status) @@ -17,6 +18,7 @@ class CreateProjectMirrorData < ActiveRecord::Migration[4.2] end end end + # rubocop:enable Migration/AddLimitToStringColumns def down remove_column :project_mirror_data, :status diff --git a/db/migrate/20180503131624_create_remote_mirrors.rb b/db/migrate/20180503131624_create_remote_mirrors.rb index 288ae365f0f..a079c1b3328 100644 --- a/db/migrate/20180503131624_create_remote_mirrors.rb +++ b/db/migrate/20180503131624_create_remote_mirrors.rb @@ -5,6 +5,7 @@ class CreateRemoteMirrors < ActiveRecord::Migration[4.2] disable_ddl_transaction! + # rubocop:disable Migration/AddLimitToStringColumns def up return if table_exists?(:remote_mirrors) @@ -27,6 +28,7 @@ class CreateRemoteMirrors < ActiveRecord::Migration[4.2] t.timestamps null: false end end + # rubocop:enable Migration/AddLimitToStringColumns def down # ee/db/migrate/20160321161032_create_remote_mirrors_ee.rb will remove the table diff --git a/db/migrate/20180503175053_ensure_missing_columns_to_project_mirror_data.rb b/db/migrate/20180503175053_ensure_missing_columns_to_project_mirror_data.rb index 3775b3a08c9..f00493ed515 100644 --- a/db/migrate/20180503175053_ensure_missing_columns_to_project_mirror_data.rb +++ b/db/migrate/20180503175053_ensure_missing_columns_to_project_mirror_data.rb @@ -4,8 +4,8 @@ class EnsureMissingColumnsToProjectMirrorData < ActiveRecord::Migration[4.2] DOWNTIME = false def up - add_column :project_mirror_data, :status, :string unless column_exists?(:project_mirror_data, :status) - add_column :project_mirror_data, :jid, :string unless column_exists?(:project_mirror_data, :jid) + add_column :project_mirror_data, :status, :string unless column_exists?(:project_mirror_data, :status) # rubocop:disable Migration/AddLimitToStringColumns + add_column :project_mirror_data, :jid, :string unless column_exists?(:project_mirror_data, :jid) # rubocop:disable Migration/AddLimitToStringColumns add_column :project_mirror_data, :last_error, :text unless column_exists?(:project_mirror_data, :last_error) end diff --git a/db/migrate/20180511131058_create_clusters_applications_jupyter.rb b/db/migrate/20180511131058_create_clusters_applications_jupyter.rb index 749aeeb4792..4633d930e2d 100644 --- a/db/migrate/20180511131058_create_clusters_applications_jupyter.rb +++ b/db/migrate/20180511131058_create_clusters_applications_jupyter.rb @@ -7,17 +7,19 @@ class CreateClustersApplicationsJupyter < ActiveRecord::Migration[4.2] DOWNTIME = false def change + # rubocop:disable Migration/AddLimitToStringColumns create_table :clusters_applications_jupyter do |t| t.references :cluster, null: false, unique: true, foreign_key: { on_delete: :cascade } t.references :oauth_application, foreign_key: { on_delete: :nullify } t.integer :status, null: false - t.string :version, null: false - t.string :hostname + t.string :version, null: false # rubocop:disable Migration/AddLimitToStringColumns + t.string :hostname # rubocop:disable Migration/AddLimitToStringColumns t.timestamps_with_timezone null: false t.text :status_reason end + # rubocop:enable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20180515121227_create_notes_diff_files.rb b/db/migrate/20180515121227_create_notes_diff_files.rb index e50324d8599..5f6dba11ff9 100644 --- a/db/migrate/20180515121227_create_notes_diff_files.rb +++ b/db/migrate/20180515121227_create_notes_diff_files.rb @@ -4,6 +4,7 @@ class CreateNotesDiffFiles < ActiveRecord::Migration[4.2] disable_ddl_transaction! def change + # rubocop:disable Migration/AddLimitToStringColumns create_table :note_diff_files do |t| t.references :diff_note, references: :notes, null: false, index: { unique: true } t.text :diff, null: false @@ -18,5 +19,6 @@ class CreateNotesDiffFiles < ActiveRecord::Migration[4.2] # rubocop:disable Migration/AddConcurrentForeignKey add_foreign_key :note_diff_files, :notes, column: :diff_note_id, on_delete: :cascade + # rubocop:enable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20180521171529_increase_mysql_text_limit_for_gpg_keys.rb b/db/migrate/20180521171529_increase_mysql_text_limit_for_gpg_keys.rb deleted file mode 100644 index 08ce8cc3094..00000000000 --- a/db/migrate/20180521171529_increase_mysql_text_limit_for_gpg_keys.rb +++ /dev/null @@ -1 +0,0 @@ -require_relative 'gpg_keys_limits_to_mysql' diff --git a/db/migrate/20180529093006_ensure_remote_mirror_columns.rb b/db/migrate/20180529093006_ensure_remote_mirror_columns.rb index 207e1f089fb..a0a1150f022 100644 --- a/db/migrate/20180529093006_ensure_remote_mirror_columns.rb +++ b/db/migrate/20180529093006_ensure_remote_mirror_columns.rb @@ -8,7 +8,7 @@ class EnsureRemoteMirrorColumns < ActiveRecord::Migration[4.2] def up # rubocop:disable Migration/Datetime add_column :remote_mirrors, :last_update_started_at, :datetime unless column_exists?(:remote_mirrors, :last_update_started_at) - add_column :remote_mirrors, :remote_name, :string unless column_exists?(:remote_mirrors, :remote_name) + add_column :remote_mirrors, :remote_name, :string unless column_exists?(:remote_mirrors, :remote_name) # rubocop:disable Migration/AddLimitToStringColumns unless column_exists?(:remote_mirrors, :only_protected_branches) add_column_with_default(:remote_mirrors, diff --git a/db/migrate/20180531185349_add_repository_languages.rb b/db/migrate/20180531185349_add_repository_languages.rb index 26a01c3bb26..d517c21c26c 100644 --- a/db/migrate/20180531185349_add_repository_languages.rb +++ b/db/migrate/20180531185349_add_repository_languages.rb @@ -4,6 +4,7 @@ class AddRepositoryLanguages < ActiveRecord::Migration[4.2] DOWNTIME = false def up + # rubocop:disable Migration/AddLimitToStringColumns create_table(:programming_languages) do |t| t.string :name, null: false t.string :color, null: false @@ -19,6 +20,7 @@ class AddRepositoryLanguages < ActiveRecord::Migration[4.2] add_index :programming_languages, :name, unique: true add_index :repository_languages, [:project_id, :programming_language_id], unique: true, name: "index_repository_languages_on_project_and_languages_id" + # rubocop:enable Migration/AddLimitToStringColumns end def down diff --git a/db/migrate/20180613081317_create_ci_builds_runner_session.rb b/db/migrate/20180613081317_create_ci_builds_runner_session.rb index eb41f76b105..68af38834d2 100644 --- a/db/migrate/20180613081317_create_ci_builds_runner_session.rb +++ b/db/migrate/20180613081317_create_ci_builds_runner_session.rb @@ -8,6 +8,7 @@ class CreateCiBuildsRunnerSession < ActiveRecord::Migration[4.2] DOWNTIME = false def change + # rubocop:disable Migration/AddLimitToStringColumns create_table :ci_builds_runner_session, id: :bigserial do |t| t.integer :build_id, null: false t.string :url, null: false @@ -17,5 +18,6 @@ class CreateCiBuildsRunnerSession < ActiveRecord::Migration[4.2] t.foreign_key :ci_builds, column: :build_id, on_delete: :cascade t.index :build_id, unique: true end + # rubocop:enable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20180713092803_create_user_statuses.rb b/db/migrate/20180713092803_create_user_statuses.rb index 43b96805c1e..3abab4e45a9 100644 --- a/db/migrate/20180713092803_create_user_statuses.rb +++ b/db/migrate/20180713092803_create_user_statuses.rb @@ -6,6 +6,7 @@ class CreateUserStatuses < ActiveRecord::Migration[4.2] DOWNTIME = false def change + # rubocop:disable Migration/AddLimitToStringColumns create_table :user_statuses, id: false, primary_key: :user_id do |t| t.references :user, foreign_key: { on_delete: :cascade }, @@ -16,5 +17,6 @@ class CreateUserStatuses < ActiveRecord::Migration[4.2] t.string :message, limit: 100 t.string :message_html end + # rubocop:enable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20180814153625_add_commit_email_to_users.rb b/db/migrate/20180814153625_add_commit_email_to_users.rb index 4d9217ea504..98bafc14a03 100644 --- a/db/migrate/20180814153625_add_commit_email_to_users.rb +++ b/db/migrate/20180814153625_add_commit_email_to_users.rb @@ -28,6 +28,6 @@ class AddCommitEmailToUsers < ActiveRecord::Migration[4.2] # disable_ddl_transaction! def change - add_column :users, :commit_email, :string + add_column :users, :commit_email, :string # rubocop:disable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20180824202952_add_outbound_requests_whitelist_to_application_settings.rb b/db/migrate/20180824202952_add_outbound_requests_whitelist_to_application_settings.rb new file mode 100644 index 00000000000..4ee654ce873 --- /dev/null +++ b/db/migrate/20180824202952_add_outbound_requests_whitelist_to_application_settings.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class AddOutboundRequestsWhitelistToApplicationSettings < ActiveRecord::Migration[5.1] + DOWNTIME = false + + def change + add_column :application_settings, :outbound_local_requests_whitelist, :string, array: true, limit: 255 + end +end diff --git a/db/migrate/20180831164908_add_identifier_to_prometheus_metric.rb b/db/migrate/20180831164908_add_identifier_to_prometheus_metric.rb index 7aa5950249c..8f30363c310 100644 --- a/db/migrate/20180831164908_add_identifier_to_prometheus_metric.rb +++ b/db/migrate/20180831164908_add_identifier_to_prometheus_metric.rb @@ -6,6 +6,6 @@ class AddIdentifierToPrometheusMetric < ActiveRecord::Migration[4.2] DOWNTIME = false def change - add_column :prometheus_metrics, :identifier, :string + add_column :prometheus_metrics, :identifier, :string # rubocop:disable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20180831164910_import_common_metrics.rb b/db/migrate/20180831164910_import_common_metrics.rb index f67d5f40aad..4e61a25c1ad 100644 --- a/db/migrate/20180831164910_import_common_metrics.rb +++ b/db/migrate/20180831164910_import_common_metrics.rb @@ -3,12 +3,10 @@ class ImportCommonMetrics < ActiveRecord::Migration[4.2] include Gitlab::Database::MigrationHelpers - require Rails.root.join('db/importers/common_metrics_importer.rb') - DOWNTIME = false def up - Importers::CommonMetricsImporter.new.execute + ::Gitlab::DatabaseImporters::CommonMetrics::Importer.new.execute end def down diff --git a/db/migrate/20180910115836_add_attr_encrypted_columns_to_web_hook.rb b/db/migrate/20180910115836_add_attr_encrypted_columns_to_web_hook.rb index ca8dbdba2bb..9757f7fdc79 100644 --- a/db/migrate/20180910115836_add_attr_encrypted_columns_to_web_hook.rb +++ b/db/migrate/20180910115836_add_attr_encrypted_columns_to_web_hook.rb @@ -6,10 +6,12 @@ class AddAttrEncryptedColumnsToWebHook < ActiveRecord::Migration[4.2] DOWNTIME = false def change + # rubocop:disable Migration/AddLimitToStringColumns add_column :web_hooks, :encrypted_token, :string add_column :web_hooks, :encrypted_token_iv, :string add_column :web_hooks, :encrypted_url, :string add_column :web_hooks, :encrypted_url_iv, :string + # rubocop:enable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20180910153412_add_token_digest_to_personal_access_tokens.rb b/db/migrate/20180910153412_add_token_digest_to_personal_access_tokens.rb index 142e454832f..52923f52499 100644 --- a/db/migrate/20180910153412_add_token_digest_to_personal_access_tokens.rb +++ b/db/migrate/20180910153412_add_token_digest_to_personal_access_tokens.rb @@ -8,7 +8,7 @@ class AddTokenDigestToPersonalAccessTokens < ActiveRecord::Migration[4.2] def up change_column :personal_access_tokens, :token, :string, null: true - add_column :personal_access_tokens, :token_digest, :string + add_column :personal_access_tokens, :token_digest, :string # rubocop:disable Migration/AddLimitToStringColumns end def down diff --git a/db/migrate/20180912111628_add_knative_application.rb b/db/migrate/20180912111628_add_knative_application.rb index 86d9100d2e7..7c55de02d1c 100644 --- a/db/migrate/20180912111628_add_knative_application.rb +++ b/db/migrate/20180912111628_add_knative_application.rb @@ -6,6 +6,7 @@ class AddKnativeApplication < ActiveRecord::Migration[4.2] DOWNTIME = false def change + # rubocop:disable Migration/AddLimitToStringColumns create_table "clusters_applications_knative" do |t| t.references :cluster, null: false, unique: true, foreign_key: { on_delete: :cascade } @@ -16,5 +17,6 @@ class AddKnativeApplication < ActiveRecord::Migration[4.2] t.string "hostname" t.text "status_reason" end + # rubocop:enable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20181006004100_import_common_metrics_nginx_vts.rb b/db/migrate/20181006004100_import_common_metrics_nginx_vts.rb index 5cd312837df..2b238774dca 100644 --- a/db/migrate/20181006004100_import_common_metrics_nginx_vts.rb +++ b/db/migrate/20181006004100_import_common_metrics_nginx_vts.rb @@ -1,12 +1,10 @@ class ImportCommonMetricsNginxVts < ActiveRecord::Migration[5.0] include Gitlab::Database::MigrationHelpers - require Rails.root.join('db/importers/common_metrics_importer.rb') - DOWNTIME = false def up - Importers::CommonMetricsImporter.new.execute + ::Gitlab::DatabaseImporters::CommonMetrics::Importer.new.execute end def down diff --git a/db/migrate/20181009190428_create_clusters_kubernetes_namespaces.rb b/db/migrate/20181009190428_create_clusters_kubernetes_namespaces.rb index 62ad6c63d0a..b6ffb2866aa 100644 --- a/db/migrate/20181009190428_create_clusters_kubernetes_namespaces.rb +++ b/db/migrate/20181009190428_create_clusters_kubernetes_namespaces.rb @@ -5,6 +5,7 @@ class CreateClustersKubernetesNamespaces < ActiveRecord::Migration[4.2] INDEX_NAME = 'kubernetes_namespaces_cluster_and_namespace' def change + # rubocop:disable Migration/AddLimitToStringColumns create_table :clusters_kubernetes_namespaces, id: :bigserial do |t| t.references :cluster, null: false, index: true, foreign_key: { on_delete: :cascade } t.references :project, index: true, foreign_key: { on_delete: :nullify } @@ -20,5 +21,6 @@ class CreateClustersKubernetesNamespaces < ActiveRecord::Migration[4.2] t.index [:cluster_id, :namespace], name: INDEX_NAME, unique: true end + # rubocop:enable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20181019032400_add_shards_table.rb b/db/migrate/20181019032400_add_shards_table.rb index e31af97cc94..82287e5c3b5 100644 --- a/db/migrate/20181019032400_add_shards_table.rb +++ b/db/migrate/20181019032400_add_shards_table.rb @@ -5,7 +5,7 @@ class AddShardsTable < ActiveRecord::Migration[4.2] def change create_table :shards do |t| - t.string :name, null: false, index: { unique: true } + t.string :name, null: false, index: { unique: true } # rubocop:disable Migration/AddLimitToStringColumns end end end diff --git a/db/migrate/20181019032408_add_repositories_table.rb b/db/migrate/20181019032408_add_repositories_table.rb index 2153c1c9fc6..dd510b44084 100644 --- a/db/migrate/20181019032408_add_repositories_table.rb +++ b/db/migrate/20181019032408_add_repositories_table.rb @@ -6,7 +6,7 @@ class AddRepositoriesTable < ActiveRecord::Migration[4.2] def change create_table :repositories, id: :bigserial do |t| t.references :shard, null: false, index: true, foreign_key: { on_delete: :restrict } - t.string :disk_path, null: false, index: { unique: true } + t.string :disk_path, null: false, index: { unique: true } # rubocop:disable Migration/AddLimitToStringColumns end add_column :projects, :pool_repository_id, :bigint diff --git a/db/migrate/20181025115728_add_private_commit_email_hostname_to_application_settings.rb b/db/migrate/20181025115728_add_private_commit_email_hostname_to_application_settings.rb index 052a344f182..c0e4897b8d7 100644 --- a/db/migrate/20181025115728_add_private_commit_email_hostname_to_application_settings.rb +++ b/db/migrate/20181025115728_add_private_commit_email_hostname_to_application_settings.rb @@ -6,6 +6,6 @@ class AddPrivateCommitEmailHostnameToApplicationSettings < ActiveRecord::Migrati DOWNTIME = false def change - add_column(:application_settings, :commit_email_hostname, :string, null: true) + add_column(:application_settings, :commit_email_hostname, :string, null: true) # rubocop:disable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20181030154446_add_missing_indexes_for_foreign_keys.rb b/db/migrate/20181030154446_add_missing_indexes_for_foreign_keys.rb index 2b5cd45e92c..e21eb291282 100644 --- a/db/migrate/20181030154446_add_missing_indexes_for_foreign_keys.rb +++ b/db/migrate/20181030154446_add_missing_indexes_for_foreign_keys.rb @@ -34,10 +34,6 @@ class AddMissingIndexesForForeignKeys < ActiveRecord::Migration[4.2] end def down - # MySQL requires index for FK, - # thus removal of indexes does fail - return if Gitlab::Database.mysql? - remove_concurrent_index(:application_settings, :usage_stats_set_by_user_id) remove_concurrent_index(:ci_pipeline_schedules, :owner_id) remove_concurrent_index(:ci_trigger_requests, :trigger_id) diff --git a/db/migrate/20181031190559_drop_gcp_clusters_table.rb b/db/migrate/20181031190559_drop_gcp_clusters_table.rb index 597fe49f4c8..850fa93c75a 100644 --- a/db/migrate/20181031190559_drop_gcp_clusters_table.rb +++ b/db/migrate/20181031190559_drop_gcp_clusters_table.rb @@ -10,6 +10,7 @@ class DropGcpClustersTable < ActiveRecord::Migration[4.2] end def down + # rubocop:disable Migration/AddLimitToStringColumns create_table :gcp_clusters do |t| # Order columns by best align scheme t.references :project, null: false, index: { unique: true }, foreign_key: { on_delete: :cascade } @@ -49,5 +50,6 @@ class DropGcpClustersTable < ActiveRecord::Migration[4.2] t.text :encrypted_gcp_token t.string :encrypted_gcp_token_iv end + # rubocop:enable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20181101191341_create_clusters_applications_cert_manager.rb b/db/migrate/20181101191341_create_clusters_applications_cert_manager.rb index 0b6155356d9..3bc20046311 100644 --- a/db/migrate/20181101191341_create_clusters_applications_cert_manager.rb +++ b/db/migrate/20181101191341_create_clusters_applications_cert_manager.rb @@ -6,6 +6,7 @@ class CreateClustersApplicationsCertManager < ActiveRecord::Migration[4.2] DOWNTIME = false def change + # rubocop:disable Migration/AddLimitToStringColumns create_table :clusters_applications_cert_managers do |t| t.references :cluster, null: false, index: false, foreign_key: { on_delete: :cascade } t.integer :status, null: false @@ -15,5 +16,6 @@ class CreateClustersApplicationsCertManager < ActiveRecord::Migration[4.2] t.text :status_reason t.index :cluster_id, unique: true end + # rubocop:enable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20181115140140_add_encrypted_runners_token_to_settings.rb b/db/migrate/20181115140140_add_encrypted_runners_token_to_settings.rb index 5b2bb4f6b08..124eedf7933 100644 --- a/db/migrate/20181115140140_add_encrypted_runners_token_to_settings.rb +++ b/db/migrate/20181115140140_add_encrypted_runners_token_to_settings.rb @@ -6,6 +6,6 @@ class AddEncryptedRunnersTokenToSettings < ActiveRecord::Migration[4.2] DOWNTIME = false def change - add_column :application_settings, :runners_registration_token_encrypted, :string + add_column :application_settings, :runners_registration_token_encrypted, :string # rubocop:disable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20181116050532_knative_external_ip.rb b/db/migrate/20181116050532_knative_external_ip.rb index 5645b040a23..4634b411108 100644 --- a/db/migrate/20181116050532_knative_external_ip.rb +++ b/db/migrate/20181116050532_knative_external_ip.rb @@ -9,6 +9,6 @@ class KnativeExternalIp < ActiveRecord::Migration[4.2] DOWNTIME = false def change - add_column :clusters_applications_knative, :external_ip, :string + add_column :clusters_applications_knative, :external_ip, :string # rubocop:disable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20181116141415_add_encrypted_runners_token_to_namespaces.rb b/db/migrate/20181116141415_add_encrypted_runners_token_to_namespaces.rb index dcf565cd6c0..0a8ed912891 100644 --- a/db/migrate/20181116141415_add_encrypted_runners_token_to_namespaces.rb +++ b/db/migrate/20181116141415_add_encrypted_runners_token_to_namespaces.rb @@ -6,6 +6,6 @@ class AddEncryptedRunnersTokenToNamespaces < ActiveRecord::Migration[4.2] DOWNTIME = false def change - add_column :namespaces, :runners_token_encrypted, :string + add_column :namespaces, :runners_token_encrypted, :string # rubocop:disable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20181116141504_add_encrypted_runners_token_to_projects.rb b/db/migrate/20181116141504_add_encrypted_runners_token_to_projects.rb index 13cd80e5c8b..3083dff49b8 100644 --- a/db/migrate/20181116141504_add_encrypted_runners_token_to_projects.rb +++ b/db/migrate/20181116141504_add_encrypted_runners_token_to_projects.rb @@ -6,6 +6,6 @@ class AddEncryptedRunnersTokenToProjects < ActiveRecord::Migration[4.2] DOWNTIME = false def change - add_column :projects, :runners_token_encrypted, :string + add_column :projects, :runners_token_encrypted, :string # rubocop:disable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20181120151656_add_token_encrypted_to_ci_runners.rb b/db/migrate/20181120151656_add_token_encrypted_to_ci_runners.rb index 8b990451adc..2270246dfb4 100644 --- a/db/migrate/20181120151656_add_token_encrypted_to_ci_runners.rb +++ b/db/migrate/20181120151656_add_token_encrypted_to_ci_runners.rb @@ -6,6 +6,6 @@ class AddTokenEncryptedToCiRunners < ActiveRecord::Migration[4.2] DOWNTIME = false def change - add_column :ci_runners, :token_encrypted, :string + add_column :ci_runners, :token_encrypted, :string # rubocop:disable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20181122160027_create_project_repositories.rb b/db/migrate/20181122160027_create_project_repositories.rb index e42cef9b1c6..3f123daa150 100644 --- a/db/migrate/20181122160027_create_project_repositories.rb +++ b/db/migrate/20181122160027_create_project_repositories.rb @@ -11,7 +11,7 @@ class CreateProjectRepositories < ActiveRecord::Migration[5.0] def change create_table :project_repositories, id: :bigserial do |t| t.references :shard, null: false, index: true, foreign_key: { on_delete: :restrict } - t.string :disk_path, null: false, index: { unique: true } + t.string :disk_path, null: false, index: { unique: true } # rubocop:disable Migration/AddLimitToStringColumns t.references :project, null: false, index: { unique: true }, foreign_key: { on_delete: :cascade } end end diff --git a/db/migrate/20181123144235_create_suggestions.rb b/db/migrate/20181123144235_create_suggestions.rb index 1723f6de7eb..78888517db5 100644 --- a/db/migrate/20181123144235_create_suggestions.rb +++ b/db/migrate/20181123144235_create_suggestions.rb @@ -8,7 +8,7 @@ class CreateSuggestions < ActiveRecord::Migration[5.0] t.references :note, foreign_key: { on_delete: :cascade }, null: false t.integer :relative_order, null: false, limit: 2 t.boolean :applied, null: false, default: false - t.string :commit_id + t.string :commit_id # rubocop:disable Migration/AddLimitToStringColumns t.text :from_content, null: false t.text :to_content, null: false diff --git a/db/migrate/20181128123704_add_state_to_pool_repository.rb b/db/migrate/20181128123704_add_state_to_pool_repository.rb index 714232ede56..04bbcf24f62 100644 --- a/db/migrate/20181128123704_add_state_to_pool_repository.rb +++ b/db/migrate/20181128123704_add_state_to_pool_repository.rb @@ -9,7 +9,7 @@ class AddStateToPoolRepository < ActiveRecord::Migration[5.0] # the transactions don't have to be disabled # rubocop: disable Migration/AddConcurrentForeignKey, Migration/AddIndex def change - add_column(:pool_repositories, :state, :string, null: true) + add_column(:pool_repositories, :state, :string, null: true) # rubocop:disable Migration/AddLimitToStringColumns add_column :pool_repositories, :source_project_id, :integer add_index :pool_repositories, :source_project_id, unique: true diff --git a/db/migrate/20181129104854_add_token_encrypted_to_ci_builds.rb b/db/migrate/20181129104854_add_token_encrypted_to_ci_builds.rb index 11b98203793..62a7421eae0 100644 --- a/db/migrate/20181129104854_add_token_encrypted_to_ci_builds.rb +++ b/db/migrate/20181129104854_add_token_encrypted_to_ci_builds.rb @@ -6,6 +6,6 @@ class AddTokenEncryptedToCiBuilds < ActiveRecord::Migration[5.0] DOWNTIME = false def change - add_column :ci_builds, :token_encrypted, :string + add_column :ci_builds, :token_encrypted, :string # rubocop:disable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20181203002526_add_project_bfg_object_map_column.rb b/db/migrate/20181203002526_add_project_bfg_object_map_column.rb index 8b42cd6f941..5e6d416895c 100644 --- a/db/migrate/20181203002526_add_project_bfg_object_map_column.rb +++ b/db/migrate/20181203002526_add_project_bfg_object_map_column.rb @@ -4,6 +4,6 @@ class AddProjectBfgObjectMapColumn < ActiveRecord::Migration[5.0] DOWNTIME = false def change - add_column :projects, :bfg_object_map, :string + add_column :projects, :bfg_object_map, :string # rubocop:disable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20181211092510_add_name_author_id_and_sha_to_releases.rb b/db/migrate/20181211092510_add_name_author_id_and_sha_to_releases.rb index 60815e0c31a..3ab808ba667 100644 --- a/db/migrate/20181211092510_add_name_author_id_and_sha_to_releases.rb +++ b/db/migrate/20181211092510_add_name_author_id_and_sha_to_releases.rb @@ -7,7 +7,7 @@ class AddNameAuthorIdAndShaToReleases < ActiveRecord::Migration[5.0] def change add_column :releases, :author_id, :integer - add_column :releases, :name, :string - add_column :releases, :sha, :string + add_column :releases, :name, :string # rubocop:disable Migration/AddLimitToStringColumns + add_column :releases, :sha, :string # rubocop:disable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20181212171634_create_error_tracking_settings.rb b/db/migrate/20181212171634_create_error_tracking_settings.rb index 18c38bd2c47..950b9a88005 100644 --- a/db/migrate/20181212171634_create_error_tracking_settings.rb +++ b/db/migrate/20181212171634_create_error_tracking_settings.rb @@ -6,6 +6,7 @@ class CreateErrorTrackingSettings < ActiveRecord::Migration[5.0] DOWNTIME = false def change + # rubocop:disable Migration/AddLimitToStringColumns create_table :project_error_tracking_settings, id: :int, primary_key: :project_id, default: nil do |t| t.boolean :enabled, null: false, default: true t.string :api_url, null: false @@ -13,5 +14,6 @@ class CreateErrorTrackingSettings < ActiveRecord::Migration[5.0] t.string :encrypted_token_iv t.foreign_key :projects, column: :project_id, on_delete: :cascade end + # rubocop:enable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20181228175414_create_releases_link_table.rb b/db/migrate/20181228175414_create_releases_link_table.rb index 03558202137..168c4722cc1 100644 --- a/db/migrate/20181228175414_create_releases_link_table.rb +++ b/db/migrate/20181228175414_create_releases_link_table.rb @@ -6,6 +6,7 @@ class CreateReleasesLinkTable < ActiveRecord::Migration[5.0] DOWNTIME = false def change + # rubocop:disable Migration/AddLimitToStringColumns create_table :release_links, id: :bigserial do |t| t.references :release, null: false, index: false, foreign_key: { on_delete: :cascade } t.string :url, null: false @@ -15,5 +16,6 @@ class CreateReleasesLinkTable < ActiveRecord::Migration[5.0] t.index [:release_id, :url], unique: true t.index [:release_id, :name], unique: true end + # rubocop:enable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20190109153125_add_merge_request_external_diffs.rb b/db/migrate/20190109153125_add_merge_request_external_diffs.rb index c67903c7f67..a680856a3d8 100644 --- a/db/migrate/20190109153125_add_merge_request_external_diffs.rb +++ b/db/migrate/20190109153125_add_merge_request_external_diffs.rb @@ -11,7 +11,7 @@ class AddMergeRequestExternalDiffs < ActiveRecord::Migration[5.0] def change # Allow the merge request diff to store details about an external file - add_column :merge_request_diffs, :external_diff, :string + add_column :merge_request_diffs, :external_diff, :string # rubocop:disable Migration/AddLimitToStringColumns add_column :merge_request_diffs, :external_diff_store, :integer add_column :merge_request_diffs, :stored_externally, :boolean diff --git a/db/migrate/20190114172110_add_domain_to_cluster.rb b/db/migrate/20190114172110_add_domain_to_cluster.rb index 58d7664b8c0..d8f10af9cad 100644 --- a/db/migrate/20190114172110_add_domain_to_cluster.rb +++ b/db/migrate/20190114172110_add_domain_to_cluster.rb @@ -4,6 +4,6 @@ class AddDomainToCluster < ActiveRecord::Migration[5.0] DOWNTIME = false def change - add_column :clusters, :domain, :string + add_column :clusters, :domain, :string # rubocop:disable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20190115092821_add_columns_project_error_tracking_settings.rb b/db/migrate/20190115092821_add_columns_project_error_tracking_settings.rb index 190b6f958fd..afed929cce4 100644 --- a/db/migrate/20190115092821_add_columns_project_error_tracking_settings.rb +++ b/db/migrate/20190115092821_add_columns_project_error_tracking_settings.rb @@ -6,8 +6,8 @@ class AddColumnsProjectErrorTrackingSettings < ActiveRecord::Migration[5.0] DOWNTIME = false def change - add_column :project_error_tracking_settings, :project_name, :string - add_column :project_error_tracking_settings, :organization_name, :string + add_column :project_error_tracking_settings, :project_name, :string # rubocop:disable Migration/AddLimitToStringColumns + add_column :project_error_tracking_settings, :organization_name, :string # rubocop:disable Migration/AddLimitToStringColumns change_column_default :project_error_tracking_settings, :enabled, from: true, to: false diff --git a/db/migrate/20190116234221_add_sorting_fields_to_user_preference.rb b/db/migrate/20190116234221_add_sorting_fields_to_user_preference.rb index 7bf581fe9b0..39aab600546 100644 --- a/db/migrate/20190116234221_add_sorting_fields_to_user_preference.rb +++ b/db/migrate/20190116234221_add_sorting_fields_to_user_preference.rb @@ -10,8 +10,8 @@ class AddSortingFieldsToUserPreference < ActiveRecord::Migration[5.0] DOWNTIME = false def up - add_column :user_preferences, :issues_sort, :string - add_column :user_preferences, :merge_requests_sort, :string + add_column :user_preferences, :issues_sort, :string # rubocop:disable Migration/AddLimitToStringColumns + add_column :user_preferences, :merge_requests_sort, :string # rubocop:disable Migration/AddLimitToStringColumns end def down diff --git a/db/migrate/20190206193120_add_index_to_tags.rb b/db/migrate/20190206193120_add_index_to_tags.rb index 5257ebba003..d6c0270cb4f 100644 --- a/db/migrate/20190206193120_add_index_to_tags.rb +++ b/db/migrate/20190206193120_add_index_to_tags.rb @@ -9,7 +9,7 @@ class AddIndexToTags < ActiveRecord::Migration[5.0] disable_ddl_transaction! def up - add_concurrent_index :tags, :name, name: INDEX_NAME, using: :gin, opclasses: { name: :gin_trgm_ops } + add_concurrent_index :tags, :name, name: INDEX_NAME, using: :gin, opclass: { name: :gin_trgm_ops } end def down diff --git a/db/migrate/20190222051615_add_indexes_for_merge_request_diffs_query.rb b/db/migrate/20190222051615_add_indexes_for_merge_request_diffs_query.rb index 0048268ca6f..bf7f7b44dec 100644 --- a/db/migrate/20190222051615_add_indexes_for_merge_request_diffs_query.rb +++ b/db/migrate/20190222051615_add_indexes_for_merge_request_diffs_query.rb @@ -35,7 +35,7 @@ class AddIndexesForMergeRequestDiffsQuery < ActiveRecord::Migration[5.0] end def down - INDEX_SPECS.reverse.each do |spec| + INDEX_SPECS.reverse_each do |spec| remove_concurrent_index(*spec) end end diff --git a/db/migrate/20190301182457_add_external_hostname_to_ingress_and_knative.rb b/db/migrate/20190301182457_add_external_hostname_to_ingress_and_knative.rb index 2c3a54b12a9..37ba1090cf0 100644 --- a/db/migrate/20190301182457_add_external_hostname_to_ingress_and_knative.rb +++ b/db/migrate/20190301182457_add_external_hostname_to_ingress_and_knative.rb @@ -4,7 +4,7 @@ class AddExternalHostnameToIngressAndKnative < ActiveRecord::Migration[5.0] DOWNTIME = false def change - add_column :clusters_applications_ingress, :external_hostname, :string - add_column :clusters_applications_knative, :external_hostname, :string + add_column :clusters_applications_ingress, :external_hostname, :string # rubocop:disable Migration/AddLimitToStringColumns + add_column :clusters_applications_knative, :external_hostname, :string # rubocop:disable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20190320174702_add_lets_encrypt_notification_email_to_application_settings.rb b/db/migrate/20190320174702_add_lets_encrypt_notification_email_to_application_settings.rb index e9cf2af84a5..aeabf4e3cb4 100644 --- a/db/migrate/20190320174702_add_lets_encrypt_notification_email_to_application_settings.rb +++ b/db/migrate/20190320174702_add_lets_encrypt_notification_email_to_application_settings.rb @@ -10,6 +10,6 @@ class AddLetsEncryptNotificationEmailToApplicationSettings < ActiveRecord::Migra DOWNTIME = false def change - add_column :application_settings, :lets_encrypt_notification_email, :string + add_column :application_settings, :lets_encrypt_notification_email, :string # rubocop:disable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20190325105715_add_fields_to_user_preferences.rb b/db/migrate/20190325105715_add_fields_to_user_preferences.rb index 9ea3b4f9cd8..4da5c496147 100644 --- a/db/migrate/20190325105715_add_fields_to_user_preferences.rb +++ b/db/migrate/20190325105715_add_fields_to_user_preferences.rb @@ -11,7 +11,7 @@ class AddFieldsToUserPreferences < ActiveRecord::Migration[5.0] DOWNTIME = false def up - add_column(:user_preferences, :timezone, :string) + add_column(:user_preferences, :timezone, :string) # rubocop:disable Migration/AddLimitToStringColumns add_column(:user_preferences, :time_display_relative, :boolean) add_column(:user_preferences, :time_format_in_24h, :boolean) end diff --git a/db/migrate/20190326164045_import_common_metrics_knative.rb b/db/migrate/20190326164045_import_common_metrics_knative.rb index 340ec1e1f75..6b331755774 100644 --- a/db/migrate/20190326164045_import_common_metrics_knative.rb +++ b/db/migrate/20190326164045_import_common_metrics_knative.rb @@ -3,12 +3,10 @@ class ImportCommonMetricsKnative < ActiveRecord::Migration[5.0] include Gitlab::Database::MigrationHelpers - require Rails.root.join('db/importers/common_metrics_importer.rb') - DOWNTIME = false def up - Importers::CommonMetricsImporter.new.execute + ::Gitlab::DatabaseImporters::CommonMetrics::Importer.new.execute end def down diff --git a/db/migrate/20190327163904_add_notification_email_to_notification_settings.rb b/db/migrate/20190327163904_add_notification_email_to_notification_settings.rb index 2f3069032a1..d912f922510 100644 --- a/db/migrate/20190327163904_add_notification_email_to_notification_settings.rb +++ b/db/migrate/20190327163904_add_notification_email_to_notification_settings.rb @@ -6,6 +6,6 @@ class AddNotificationEmailToNotificationSettings < ActiveRecord::Migration[5.0] DOWNTIME = false def change - add_column :notification_settings, :notification_email, :string + add_column :notification_settings, :notification_email, :string # rubocop:disable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20190402150158_backport_enterprise_schema.rb b/db/migrate/20190402150158_backport_enterprise_schema.rb index 8762cc53ed7..3f13b68c2f3 100644 --- a/db/migrate/20190402150158_backport_enterprise_schema.rb +++ b/db/migrate/20190402150158_backport_enterprise_schema.rb @@ -2,6 +2,7 @@ # rubocop: disable Metrics/AbcSize # rubocop: disable Migration/Datetime +# rubocop: disable Migration/AddLimitToStringColumns class BackportEnterpriseSchema < ActiveRecord::Migration[5.0] include Gitlab::Database::MigrationHelpers @@ -2190,3 +2191,4 @@ class BackportEnterpriseSchema < ActiveRecord::Migration[5.0] end # rubocop: enable Metrics/AbcSize # rubocop: enable Migration/Datetime +# rubocop: enable Migration/AddLimitToStringColumns diff --git a/db/migrate/20190408163745_prometheus_knative05_fix.rb b/db/migrate/20190408163745_prometheus_knative05_fix.rb index c11f6f0e29b..3d0aa782669 100644 --- a/db/migrate/20190408163745_prometheus_knative05_fix.rb +++ b/db/migrate/20190408163745_prometheus_knative05_fix.rb @@ -6,12 +6,10 @@ class PrometheusKnative05Fix < ActiveRecord::Migration[5.0] include Gitlab::Database::MigrationHelpers - require Rails.root.join('db/importers/common_metrics_importer.rb') - DOWNTIME = false def up - Importers::CommonMetricsImporter.new.execute + ::Gitlab::DatabaseImporters::CommonMetrics::Importer.new.execute end def down diff --git a/db/migrate/20190409224933_add_name_to_geo_nodes.rb b/db/migrate/20190409224933_add_name_to_geo_nodes.rb index 2dff81b429c..65c01683995 100644 --- a/db/migrate/20190409224933_add_name_to_geo_nodes.rb +++ b/db/migrate/20190409224933_add_name_to_geo_nodes.rb @@ -10,7 +10,7 @@ class AddNameToGeoNodes < ActiveRecord::Migration[5.0] DOWNTIME = false def up - add_column :geo_nodes, :name, :string + add_column :geo_nodes, :name, :string # rubocop:disable Migration/AddLimitToStringColumns # url is also unique, and its type and size is identical to the name column, # so this is safe. diff --git a/db/migrate/20190422082247_create_project_metrics_settings.rb b/db/migrate/20190422082247_create_project_metrics_settings.rb index 3e21dd0a934..a0a2ed64820 100644 --- a/db/migrate/20190422082247_create_project_metrics_settings.rb +++ b/db/migrate/20190422082247_create_project_metrics_settings.rb @@ -7,7 +7,7 @@ class CreateProjectMetricsSettings < ActiveRecord::Migration[5.0] def change create_table :project_metrics_settings, id: :int, primary_key: :project_id, default: nil do |t| - t.string :external_dashboard_url, null: false + t.string :external_dashboard_url, null: false # rubocop:disable Migration/AddLimitToStringColumns t.foreign_key :projects, column: :project_id, on_delete: :cascade end end diff --git a/db/migrate/20190429082448_create_pages_domain_acme_orders.rb b/db/migrate/20190429082448_create_pages_domain_acme_orders.rb index af811e83518..ca1796d054c 100644 --- a/db/migrate/20190429082448_create_pages_domain_acme_orders.rb +++ b/db/migrate/20190429082448_create_pages_domain_acme_orders.rb @@ -10,6 +10,7 @@ class CreatePagesDomainAcmeOrders < ActiveRecord::Migration[5.1] DOWNTIME = false def change + # rubocop:disable Migration/AddLimitToStringColumns create_table :pages_domain_acme_orders do |t| t.references :pages_domain, null: false, index: true, foreign_key: { on_delete: :cascade }, type: :integer @@ -24,5 +25,6 @@ class CreatePagesDomainAcmeOrders < ActiveRecord::Migration[5.1] t.text :encrypted_private_key, null: false t.text :encrypted_private_key_iv, null: false end + # rubocop:enable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20190430131225_create_issue_tracker_data.rb b/db/migrate/20190430131225_create_issue_tracker_data.rb index 7859bea9c22..d2134ad82c7 100644 --- a/db/migrate/20190430131225_create_issue_tracker_data.rb +++ b/db/migrate/20190430131225_create_issue_tracker_data.rb @@ -9,6 +9,7 @@ class CreateIssueTrackerData < ActiveRecord::Migration[5.1] DOWNTIME = false def change + # rubocop:disable Migration/AddLimitToStringColumns create_table :issue_tracker_data do |t| t.references :service, foreign_key: { on_delete: :cascade }, type: :integer, index: true, null: false t.timestamps_with_timezone @@ -19,5 +20,6 @@ class CreateIssueTrackerData < ActiveRecord::Migration[5.1] t.string :encrypted_new_issue_url t.string :encrypted_new_issue_url_iv end + # rubocop:enable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20190430142025_create_jira_tracker_data.rb b/db/migrate/20190430142025_create_jira_tracker_data.rb index d328ad63854..5e53e5a701a 100644 --- a/db/migrate/20190430142025_create_jira_tracker_data.rb +++ b/db/migrate/20190430142025_create_jira_tracker_data.rb @@ -9,6 +9,7 @@ class CreateJiraTrackerData < ActiveRecord::Migration[5.1] DOWNTIME = false def change + # rubocop:disable Migration/AddLimitToStringColumns create_table :jira_tracker_data do |t| t.references :service, foreign_key: { on_delete: :cascade }, type: :integer, index: true, null: false t.timestamps_with_timezone @@ -22,5 +23,6 @@ class CreateJiraTrackerData < ActiveRecord::Migration[5.1] t.string :encrypted_password_iv t.string :jira_issue_transition_id end + # rubocop:enable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20190514105711_create_ip_restriction.rb b/db/migrate/20190514105711_create_ip_restriction.rb index dfafbe32ad1..69f8c1b8c4e 100644 --- a/db/migrate/20190514105711_create_ip_restriction.rb +++ b/db/migrate/20190514105711_create_ip_restriction.rb @@ -12,7 +12,7 @@ class CreateIpRestriction < ActiveRecord::Migration[5.1] type: :integer, null: false, index: true - t.string :range, null: false + t.string :range, null: false # rubocop:disable Migration/AddLimitToStringColumns end add_foreign_key(:ip_restrictions, :namespaces, column: :group_id, on_delete: :cascade) # rubocop: disable Migration/AddConcurrentForeignKey diff --git a/db/migrate/20190527011309_add_required_template_name_to_application_settings.rb b/db/migrate/20190527011309_add_required_template_name_to_application_settings.rb index 6cbac0ed507..5c47e6f33c2 100644 --- a/db/migrate/20190527011309_add_required_template_name_to_application_settings.rb +++ b/db/migrate/20190527011309_add_required_template_name_to_application_settings.rb @@ -10,6 +10,6 @@ class AddRequiredTemplateNameToApplicationSettings < ActiveRecord::Migration[5.1 DOWNTIME = false def change - add_column :application_settings, :required_instance_ci_template, :string, null: true + add_column :application_settings, :required_instance_ci_template, :string, null: true # rubocop:disable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20190606054742_add_token_encrypted_to_operations_feature_flags_clients.rb b/db/migrate/20190606054742_add_token_encrypted_to_operations_feature_flags_clients.rb index 024b5bd2ba5..2db4dc85750 100644 --- a/db/migrate/20190606054742_add_token_encrypted_to_operations_feature_flags_clients.rb +++ b/db/migrate/20190606054742_add_token_encrypted_to_operations_feature_flags_clients.rb @@ -6,6 +6,6 @@ class AddTokenEncryptedToOperationsFeatureFlagsClients < ActiveRecord::Migration DOWNTIME = false def change - add_column :operations_feature_flags_clients, :token_encrypted, :string + add_column :operations_feature_flags_clients, :token_encrypted, :string # rubocop:disable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20190611100201_add_geo_container_repository_updated_events_table.rb b/db/migrate/20190611100201_add_geo_container_repository_updated_events_table.rb new file mode 100644 index 00000000000..8963e837e08 --- /dev/null +++ b/db/migrate/20190611100201_add_geo_container_repository_updated_events_table.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class AddGeoContainerRepositoryUpdatedEventsTable < ActiveRecord::Migration[5.1] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + def change + create_table :geo_container_repository_updated_events, force: :cascade do |t| + t.integer :container_repository_id, null: false + + t.index :container_repository_id, name: :idx_geo_con_rep_updated_events_on_container_repository_id, using: :btree + end + + add_column :geo_event_log, :container_repository_updated_event_id, :bigint + end +end diff --git a/db/migrate/20190611100202_add_index_to_geo_event_log.rb b/db/migrate/20190611100202_add_index_to_geo_event_log.rb new file mode 100644 index 00000000000..c5c855fed61 --- /dev/null +++ b/db/migrate/20190611100202_add_index_to_geo_event_log.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class AddIndexToGeoEventLog < ActiveRecord::Migration[5.1] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + disable_ddl_transaction! + + def up + add_concurrent_index :geo_event_log, :container_repository_updated_event_id + end + + def down + remove_concurrent_index(:geo_event_log, :container_repository_updated_event_id) + end +end diff --git a/db/migrate/20190612111201_add_geo_container_repository_counters.rb b/db/migrate/20190612111201_add_geo_container_repository_counters.rb new file mode 100644 index 00000000000..b73bb885ab7 --- /dev/null +++ b/db/migrate/20190612111201_add_geo_container_repository_counters.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class AddGeoContainerRepositoryCounters < ActiveRecord::Migration[5.1] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + def change + change_table :geo_node_statuses do |t| + t.column :container_repositories_count, :integer + t.column :container_repositories_synced_count, :integer + t.column :container_repositories_failed_count, :integer + t.column :container_repositories_registry_count, :integer + end + end +end diff --git a/db/migrate/20190612111404_add_geo_container_sync_capacity.rb b/db/migrate/20190612111404_add_geo_container_sync_capacity.rb new file mode 100644 index 00000000000..d4cd569f460 --- /dev/null +++ b/db/migrate/20190612111404_add_geo_container_sync_capacity.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class AddGeoContainerSyncCapacity < ActiveRecord::Migration[5.1] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + def change + change_table :geo_nodes do |t| + t.column :container_repositories_max_capacity, :integer, default: 10, null: false + end + end +end diff --git a/db/migrate/20190613044655_add_username_to_deploy_tokens.rb b/db/migrate/20190613044655_add_username_to_deploy_tokens.rb index 793553afe35..a0acb02013b 100644 --- a/db/migrate/20190613044655_add_username_to_deploy_tokens.rb +++ b/db/migrate/20190613044655_add_username_to_deploy_tokens.rb @@ -4,6 +4,6 @@ class AddUsernameToDeployTokens < ActiveRecord::Migration[5.1] DOWNTIME = false def change - add_column :deploy_tokens, :username, :string + add_column :deploy_tokens, :username, :string # rubocop:disable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20190613073003_create_project_aliases.rb b/db/migrate/20190613073003_create_project_aliases.rb index 5a2c2ba0cf2..896d3ca5813 100644 --- a/db/migrate/20190613073003_create_project_aliases.rb +++ b/db/migrate/20190613073003_create_project_aliases.rb @@ -8,7 +8,7 @@ class CreateProjectAliases < ActiveRecord::Migration[5.1] def change create_table :project_aliases do |t| t.references :project, null: false, index: true, foreign_key: { on_delete: :cascade }, type: :integer - t.string :name, null: false, index: { unique: true } + t.string :name, null: false, index: { unique: true } # rubocop:disable Migration/AddLimitToStringColumns t.timestamps_with_timezone null: false end diff --git a/db/migrate/20190620105427_change_null_private_profile_to_false.rb b/db/migrate/20190620105427_change_null_private_profile_to_false.rb new file mode 100644 index 00000000000..d820dbbe9d3 --- /dev/null +++ b/db/migrate/20190620105427_change_null_private_profile_to_false.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +class ChangeNullPrivateProfileToFalse < ActiveRecord::Migration[5.1] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + DELAY = 30.seconds.to_i + BATCH_SIZE = 1_000 + + disable_ddl_transaction! + + class User < ActiveRecord::Base + self.table_name = 'users' + + include ::EachBatch + end + + def up + change_column_default :users, :private_profile, false + + # Migration will take about 120 hours + User.where(private_profile: nil).each_batch(of: BATCH_SIZE) do |batch, index| + range = batch.pluck('MIN(id)', 'MAX(id)').first + delay = index * DELAY + + BackgroundMigrationWorker.perform_in(delay.seconds, 'MigrateNullPrivateProfileToFalse', [*range]) + end + end + + def down + change_column_default :users, :private_profile, nil + end +end diff --git a/db/migrate/20190621151636_add_merge_request_rebase_jid.rb b/db/migrate/20190621151636_add_merge_request_rebase_jid.rb index 1fed5690ead..6c1081732e8 100644 --- a/db/migrate/20190621151636_add_merge_request_rebase_jid.rb +++ b/db/migrate/20190621151636_add_merge_request_rebase_jid.rb @@ -4,6 +4,6 @@ class AddMergeRequestRebaseJid < ActiveRecord::Migration[5.1] DOWNTIME = false def change - add_column :merge_requests, :rebase_jid, :string + add_column :merge_requests, :rebase_jid, :string # rubocop:disable Migration/AddLimitToStringColumns end end diff --git a/db/migrate/20190624123615_add_grafana_url_to_settings.rb b/db/migrate/20190624123615_add_grafana_url_to_settings.rb index 61efe64a7a1..835ec4e9094 100644 --- a/db/migrate/20190624123615_add_grafana_url_to_settings.rb +++ b/db/migrate/20190624123615_add_grafana_url_to_settings.rb @@ -8,8 +8,10 @@ class AddGrafanaUrlToSettings < ActiveRecord::Migration[5.1] DOWNTIME = false def up + # rubocop:disable Migration/AddLimitToStringColumns add_column_with_default(:application_settings, :grafana_url, :string, default: '/-/grafana', allow_null: false) + # rubocop:enable Migration/AddLimitToStringColumns end def down diff --git a/db/migrate/20190626175626_add_group_creation_level_to_namespaces.rb b/db/migrate/20190626175626_add_group_creation_level_to_namespaces.rb new file mode 100644 index 00000000000..3b75c92e518 --- /dev/null +++ b/db/migrate/20190626175626_add_group_creation_level_to_namespaces.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +class AddGroupCreationLevelToNamespaces < ActiveRecord::Migration[5.1] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + def up + add_column(:namespaces, :subgroup_creation_level, :integer) + change_column_default(:namespaces, + :subgroup_creation_level, + ::Gitlab::Access::MAINTAINER_SUBGROUP_ACCESS) + end + + def down + remove_column(:namespaces, :subgroup_creation_level) + end +end diff --git a/db/migrate/20190627100221_add_mr_productivity_metrics.rb b/db/migrate/20190627100221_add_mr_productivity_metrics.rb new file mode 100644 index 00000000000..b6f1520cb2d --- /dev/null +++ b/db/migrate/20190627100221_add_mr_productivity_metrics.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +class AddMrProductivityMetrics < ActiveRecord::Migration[5.1] + DOWNTIME = false + + def change + add_column :merge_request_metrics, :first_comment_at, :datetime_with_timezone + add_column :merge_request_metrics, :first_commit_at, :datetime_with_timezone + add_column :merge_request_metrics, :last_commit_at, :datetime_with_timezone + add_column :merge_request_metrics, :diff_size, :integer + add_column :merge_request_metrics, :modified_paths_size, :integer + add_column :merge_request_metrics, :commits_count, :integer + end +end diff --git a/db/migrate/20190627122264_add_foreign_keys_for_container_repository.rb b/db/migrate/20190627122264_add_foreign_keys_for_container_repository.rb new file mode 100644 index 00000000000..cf7fd03e9af --- /dev/null +++ b/db/migrate/20190627122264_add_foreign_keys_for_container_repository.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +class AddForeignKeysForContainerRepository < ActiveRecord::Migration[5.1] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + disable_ddl_transaction! + + def up + add_concurrent_foreign_key(:geo_container_repository_updated_events, :container_repositories, column: :container_repository_id, on_delete: :cascade) + + add_concurrent_foreign_key(:geo_event_log, :geo_container_repository_updated_events, column: :container_repository_updated_event_id, on_delete: :cascade) + end + + def down + if foreign_key_exists?(:geo_container_repository_updated_events, :container_repositories) + remove_foreign_key(:geo_container_repository_updated_events, :container_repositories) + end + + if foreign_key_exists?(:geo_event_log, :geo_container_repository_updated_events) + remove_foreign_key(:geo_event_log, :geo_container_repository_updated_events) + end + end +end diff --git a/db/migrate/20190703043358_add_commit_id_to_draft_notes.rb b/db/migrate/20190703043358_add_commit_id_to_draft_notes.rb new file mode 100644 index 00000000000..022400ce585 --- /dev/null +++ b/db/migrate/20190703043358_add_commit_id_to_draft_notes.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class AddCommitIdToDraftNotes < ActiveRecord::Migration[5.1] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + def change + add_column :draft_notes, :commit_id, :binary + end +end diff --git a/db/migrate/20190709204413_add_rule_type_to_approval_project_rules.rb b/db/migrate/20190709204413_add_rule_type_to_approval_project_rules.rb new file mode 100644 index 00000000000..87a228c9bf9 --- /dev/null +++ b/db/migrate/20190709204413_add_rule_type_to_approval_project_rules.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class AddRuleTypeToApprovalProjectRules < ActiveRecord::Migration[5.1] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + disable_ddl_transaction! + + def up + add_column_with_default :approval_project_rules, :rule_type, :integer, limit: 2, default: 0, allow_null: false + end + + def down + remove_column :approval_project_rules, :rule_type + end +end diff --git a/db/migrate/20190709220014_import_common_metrics_y_axis.rb b/db/migrate/20190709220014_import_common_metrics_y_axis.rb new file mode 100644 index 00000000000..89ecf32ecc1 --- /dev/null +++ b/db/migrate/20190709220014_import_common_metrics_y_axis.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class ImportCommonMetricsYAxis < ActiveRecord::Migration[5.1] + DOWNTIME = false + + def up + ::Gitlab::DatabaseImporters::CommonMetrics::Importer.new.execute + end + + def down + # no-op + end +end diff --git a/db/migrate/20190709220143_add_index_to_issues_relative_position.rb b/db/migrate/20190709220143_add_index_to_issues_relative_position.rb new file mode 100644 index 00000000000..effab33ce4f --- /dev/null +++ b/db/migrate/20190709220143_add_index_to_issues_relative_position.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +class AddIndexToIssuesRelativePosition < ActiveRecord::Migration[5.1] + include Gitlab::Database::MigrationHelpers + + # Set this constant to true if this migration requires downtime. + DOWNTIME = false + + disable_ddl_transaction! + + INDEX_NAME = 'index_issues_on_project_id_and_state_and_rel_position_and_id'.freeze + + def up + add_concurrent_index :issues, [:project_id, :state, :relative_position, :id], order: { id: :desc }, name: INDEX_NAME + end + + def down + remove_concurrent_index_by_name :issues, INDEX_NAME + end +end diff --git a/db/migrate/20190710151229_add_index_to_approval_project_rules_rule_type.rb b/db/migrate/20190710151229_add_index_to_approval_project_rules_rule_type.rb new file mode 100644 index 00000000000..64123c53c4a --- /dev/null +++ b/db/migrate/20190710151229_add_index_to_approval_project_rules_rule_type.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class AddIndexToApprovalProjectRulesRuleType < ActiveRecord::Migration[5.1] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + disable_ddl_transaction! + + def up + add_concurrent_index :approval_project_rules, :rule_type + end + + def down + remove_concurrent_index :approval_project_rules, :rule_type + end +end diff --git a/db/migrate/20190711124721_create_job_variables.rb b/db/migrate/20190711124721_create_job_variables.rb new file mode 100644 index 00000000000..4ff4b031d8f --- /dev/null +++ b/db/migrate/20190711124721_create_job_variables.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +# See http://doc.gitlab.com/ce/development/migration_style_guide.html +# for more information on how to write migrations for GitLab. + +class CreateJobVariables < ActiveRecord::Migration[5.1] + include Gitlab::Database::MigrationHelpers + + # Set this constant to true if this migration requires downtime. + DOWNTIME = false + + def change + # rubocop:disable Migration/AddLimitToStringColumns + create_table :ci_job_variables do |t| + t.string :key, null: false + t.text :encrypted_value + t.string :encrypted_value_iv + t.references :job, null: false, index: true, foreign_key: { to_table: :ci_builds, on_delete: :cascade } + t.integer :variable_type, null: false, limit: 2, default: 1 + end + # rubocop:enable Migration/AddLimitToStringColumns + + add_index :ci_job_variables, [:key, :job_id], unique: true + end +end diff --git a/db/migrate/20190711200053_change_deploy_tokens_token_not_null.rb b/db/migrate/20190711200053_change_deploy_tokens_token_not_null.rb new file mode 100644 index 00000000000..14ccf544d0b --- /dev/null +++ b/db/migrate/20190711200053_change_deploy_tokens_token_not_null.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class ChangeDeployTokensTokenNotNull < ActiveRecord::Migration[5.1] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + def change + change_column_null :deploy_tokens, :token, true + end +end diff --git a/db/migrate/20190711200508_add_token_encrypted_to_deploy_tokens.rb b/db/migrate/20190711200508_add_token_encrypted_to_deploy_tokens.rb new file mode 100644 index 00000000000..ea0956fdf7f --- /dev/null +++ b/db/migrate/20190711200508_add_token_encrypted_to_deploy_tokens.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class AddTokenEncryptedToDeployTokens < ActiveRecord::Migration[5.1] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + def change + add_column :deploy_tokens, :token_encrypted, :string, limit: 255 + end +end diff --git a/db/migrate/20190712040400_add_environment_id_to_clusters_kubernetes_namespaces.rb b/db/migrate/20190712040400_add_environment_id_to_clusters_kubernetes_namespaces.rb new file mode 100644 index 00000000000..5ab5a9ba2f8 --- /dev/null +++ b/db/migrate/20190712040400_add_environment_id_to_clusters_kubernetes_namespaces.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +class AddEnvironmentIdToClustersKubernetesNamespaces < ActiveRecord::Migration[5.1] + DOWNTIME = false + + def change + add_reference :clusters_kubernetes_namespaces, :environment, + index: true, type: :bigint, foreign_key: { on_delete: :nullify } + end +end diff --git a/db/migrate/20190712040412_index_clusters_kubernetes_namespaces_on_environment_id.rb b/db/migrate/20190712040412_index_clusters_kubernetes_namespaces_on_environment_id.rb new file mode 100644 index 00000000000..23082492091 --- /dev/null +++ b/db/migrate/20190712040412_index_clusters_kubernetes_namespaces_on_environment_id.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +class IndexClustersKubernetesNamespacesOnEnvironmentId < ActiveRecord::Migration[5.1] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + INDEX_NAME = 'index_kubernetes_namespaces_on_cluster_project_environment_id' + + disable_ddl_transaction! + + def up + add_concurrent_index :clusters_kubernetes_namespaces, [:cluster_id, :project_id, :environment_id], unique: true, name: INDEX_NAME + end + + def down + remove_concurrent_index :clusters_kubernetes_namespaces, name: INDEX_NAME + end +end diff --git a/db/migrate/20180831164904_fix_prometheus_metric_query_limits.rb b/db/migrate/20190712064021_add_namespace_per_environment_flag_to_clusters.rb index 80c4d11a38e..4c8a0ab3def 100644 --- a/db/migrate/20180831164904_fix_prometheus_metric_query_limits.rb +++ b/db/migrate/20190712064021_add_namespace_per_environment_flag_to_clusters.rb @@ -2,18 +2,19 @@ # See http://doc.gitlab.com/ce/development/migration_style_guide.html # for more information on how to write migrations for GitLab. -require Rails.root.join('db/migrate/prometheus_metrics_limits_to_mysql') -class FixPrometheusMetricQueryLimits < ActiveRecord::Migration[4.2] +class AddNamespacePerEnvironmentFlagToClusters < ActiveRecord::Migration[5.1] include Gitlab::Database::MigrationHelpers DOWNTIME = false + disable_ddl_transaction! + def up - PrometheusMetricsLimitsToMysql.new.up + add_column_with_default :clusters, :namespace_per_environment, :boolean, default: false end def down - # no-op + remove_column :clusters, :namespace_per_environment end end diff --git a/db/migrate/20190715042813_add_issue_id_to_versions.rb b/db/migrate/20190715042813_add_issue_id_to_versions.rb new file mode 100644 index 00000000000..1cefdbc9df2 --- /dev/null +++ b/db/migrate/20190715042813_add_issue_id_to_versions.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class AddIssueIdToVersions < ActiveRecord::Migration[5.2] + DOWNTIME = false + + def up + add_reference :design_management_versions, :issue, index: true, foreign_key: { on_delete: :cascade } + end + + def down + remove_reference :design_management_versions, :issue + end +end diff --git a/db/migrate/20190715043954_set_issue_id_for_all_versions.rb b/db/migrate/20190715043954_set_issue_id_for_all_versions.rb new file mode 100644 index 00000000000..345b749f1a4 --- /dev/null +++ b/db/migrate/20190715043954_set_issue_id_for_all_versions.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class SetIssueIdForAllVersions < ActiveRecord::Migration[5.2] + DOWNTIME = false + + def up + execute('UPDATE design_management_versions as versions SET issue_id = ( + SELECT design_management_designs.issue_id + FROM design_management_designs + INNER JOIN design_management_designs_versions ON design_management_designs.id = design_management_designs_versions.design_id + WHERE design_management_designs_versions.version_id = versions.id + LIMIT 1 + )') + end + + def down + # no-op + end +end diff --git a/db/migrate/20190715140740_add_event_type_to_design_management_designs_versions.rb b/db/migrate/20190715140740_add_event_type_to_design_management_designs_versions.rb new file mode 100644 index 00000000000..81a8b0a3271 --- /dev/null +++ b/db/migrate/20190715140740_add_event_type_to_design_management_designs_versions.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +# This migration sets up a event enum on the DesignsVersions join table +class AddEventTypeToDesignManagementDesignsVersions < ActiveRecord::Migration[5.2] + include Gitlab::Database::MigrationHelpers + + # Set this constant to true if this migration requires downtime. + DOWNTIME = false + + # We disable these cops here because adding this column is safe. The table does not + # have any data in it. + # rubocop: disable Migration/AddIndex + # rubocop: disable Migration/AddColumn + def up + add_column(:design_management_designs_versions, :event, :integer, + limit: 2, + null: false, + default: 0) + add_index(:design_management_designs_versions, :event) + end + + # rubocop: disable Migration/RemoveIndex + def down + remove_index(:design_management_designs_versions, :event) + remove_column(:design_management_designs_versions, :event) + end +end diff --git a/db/migrate/20190715142138_add_raw_blob_request_limit_to_application_settings.rb b/db/migrate/20190715142138_add_raw_blob_request_limit_to_application_settings.rb new file mode 100644 index 00000000000..e8198e11ea7 --- /dev/null +++ b/db/migrate/20190715142138_add_raw_blob_request_limit_to_application_settings.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class AddRawBlobRequestLimitToApplicationSettings < ActiveRecord::Migration[5.2] + DOWNTIME = false + + def change + add_column :application_settings, :raw_blob_request_limit, :integer, default: 300, null: false + end +end diff --git a/db/migrate/20190715173819_add_object_storage_flag_to_geo_node.rb b/db/migrate/20190715173819_add_object_storage_flag_to_geo_node.rb new file mode 100644 index 00000000000..2d3243f3357 --- /dev/null +++ b/db/migrate/20190715173819_add_object_storage_flag_to_geo_node.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +# See http://doc.gitlab.com/ce/development/migration_style_guide.html +# for more information on how to write migrations for GitLab. + +class AddObjectStorageFlagToGeoNode < ActiveRecord::Migration[5.2] + include Gitlab::Database::MigrationHelpers + + # Set this constant to true if this migration requires downtime. + DOWNTIME = false + + disable_ddl_transaction! + + def up + add_column_with_default :geo_nodes, :sync_object_storage, :boolean, default: false + end + + def down + remove_column :geo_nodes, :sync_object_storage + end +end diff --git a/db/migrate/20190715215532_add_project_emails_disabled.rb b/db/migrate/20190715215532_add_project_emails_disabled.rb new file mode 100644 index 00000000000..536ea34c0fb --- /dev/null +++ b/db/migrate/20190715215532_add_project_emails_disabled.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class AddProjectEmailsDisabled < ActiveRecord::Migration[5.2] + DOWNTIME = false + + def change + add_column :projects, :emails_disabled, :boolean + end +end diff --git a/db/migrate/20190715215549_add_group_emails_disabled.rb b/db/migrate/20190715215549_add_group_emails_disabled.rb new file mode 100644 index 00000000000..d3fd4d2d923 --- /dev/null +++ b/db/migrate/20190715215549_add_group_emails_disabled.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class AddGroupEmailsDisabled < ActiveRecord::Migration[5.2] + DOWNTIME = false + + def change + add_column :namespaces, :emails_disabled, :boolean + end +end diff --git a/db/migrate/20190716144222_create_analytics_cycle_analytics_project_stages.rb b/db/migrate/20190716144222_create_analytics_cycle_analytics_project_stages.rb new file mode 100644 index 00000000000..5c005377b00 --- /dev/null +++ b/db/migrate/20190716144222_create_analytics_cycle_analytics_project_stages.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +class CreateAnalyticsCycleAnalyticsProjectStages < ActiveRecord::Migration[5.2] + DOWNTIME = false + + INDEX_PREFIX = 'index_analytics_ca_project_stages_' + + def change + create_table :analytics_cycle_analytics_project_stages do |t| + t.timestamps_with_timezone + t.integer :relative_position + t.integer :start_event_identifier, null: false + t.integer :end_event_identifier, null: false + t.references(:project, { + null: false, + foreign_key: { to_table: :projects, on_delete: :cascade }, + index: { name: INDEX_PREFIX + 'on_project_id' } + }) + t.references(:start_event_label, { + foreign_key: { to_table: :labels, on_delete: :cascade }, + index: { name: INDEX_PREFIX + 'on_start_event_label_id' } + }) + t.references(:end_event_label, { + foreign_key: { to_table: :labels, on_delete: :cascade }, + index: { name: INDEX_PREFIX + 'on_end_event_label_id' } + }) + t.boolean :hidden, default: false, null: false + t.boolean :custom, default: true, null: false + t.string :name, null: false, limit: 255 + end + + add_index :analytics_cycle_analytics_project_stages, [:project_id, :name], unique: true, name: INDEX_PREFIX + 'on_project_id_and_name' + add_index :analytics_cycle_analytics_project_stages, [:relative_position], name: INDEX_PREFIX + 'on_relative_position' + end +end diff --git a/db/migrate/20190719174505_add_index_to_deploy_tokens_token_encrypted.rb b/db/migrate/20190719174505_add_index_to_deploy_tokens_token_encrypted.rb new file mode 100644 index 00000000000..d58d1d8348c --- /dev/null +++ b/db/migrate/20190719174505_add_index_to_deploy_tokens_token_encrypted.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class AddIndexToDeployTokensTokenEncrypted < ActiveRecord::Migration[5.1] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + disable_ddl_transaction! + + def up + add_concurrent_index :deploy_tokens, :token_encrypted, unique: true, name: "index_deploy_tokens_on_token_encrypted" + end + + def down + remove_concurrent_index_by_name :deploy_tokens, "index_deploy_tokens_on_token_encrypted" + end +end diff --git a/db/migrate/20190723153247_create_allowed_email_domains_for_groups.rb b/db/migrate/20190723153247_create_allowed_email_domains_for_groups.rb new file mode 100644 index 00000000000..c6c5b56ed8b --- /dev/null +++ b/db/migrate/20190723153247_create_allowed_email_domains_for_groups.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +# See http://doc.gitlab.com/ce/development/migration_style_guide.html +# for more information on how to write migrations for GitLab. + +class CreateAllowedEmailDomainsForGroups < ActiveRecord::Migration[5.2] + # Set this constant to true if this migration requires downtime. + DOWNTIME = false + + def change + create_table :allowed_email_domains do |t| + t.timestamps_with_timezone null: false + t.references :group, references: :namespace, + column: :group_id, + type: :integer, + null: false, + index: true + t.foreign_key :namespaces, column: :group_id, on_delete: :cascade + t.string :domain, null: false, limit: 255 + end + end +end diff --git a/db/migrate/20190724112147_add_column_for_self_monitoring_project_id.rb b/db/migrate/20190724112147_add_column_for_self_monitoring_project_id.rb new file mode 100644 index 00000000000..ce249a527e6 --- /dev/null +++ b/db/migrate/20190724112147_add_column_for_self_monitoring_project_id.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +class AddColumnForSelfMonitoringProjectId < ActiveRecord::Migration[5.2] + DOWNTIME = false + + def change + add_reference( + :application_settings, + :instance_administration_project, + index: { name: 'index_applicationsettings_on_instance_administration_project_id' }, + foreign_key: { to_table: :projects, on_delete: :nullify } + ) + end +end diff --git a/db/migrate/20190725012225_change_outbound_local_requests_whitelist_default.rb b/db/migrate/20190725012225_change_outbound_local_requests_whitelist_default.rb new file mode 100644 index 00000000000..21b00e0b7d9 --- /dev/null +++ b/db/migrate/20190725012225_change_outbound_local_requests_whitelist_default.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +class ChangeOutboundLocalRequestsWhitelistDefault < ActiveRecord::Migration[5.2] + include Gitlab::Database::MigrationHelpers + + # Set this constant to true if this migration requires downtime. + DOWNTIME = false + + class ApplicationSetting < ActiveRecord::Base + self.table_name = 'application_settings' + end + + def up + default_value = [] + + change_column_default(:application_settings, :outbound_local_requests_whitelist, default_value) + + ApplicationSetting + .where(outbound_local_requests_whitelist: nil) + .update(outbound_local_requests_whitelist: default_value) + + change_column_null(:application_settings, :outbound_local_requests_whitelist, false) + end + + def down + change_column_null(:application_settings, :outbound_local_requests_whitelist, true) + + change_column_default(:application_settings, :outbound_local_requests_whitelist, nil) + end +end diff --git a/db/migrate/20190726101050_rename_allow_local_requests_from_hooks_and_services_application_setting.rb b/db/migrate/20190726101050_rename_allow_local_requests_from_hooks_and_services_application_setting.rb new file mode 100644 index 00000000000..cce8942128c --- /dev/null +++ b/db/migrate/20190726101050_rename_allow_local_requests_from_hooks_and_services_application_setting.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class RenameAllowLocalRequestsFromHooksAndServicesApplicationSetting < ActiveRecord::Migration[5.2] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + disable_ddl_transaction! + + def up + rename_column_concurrently :application_settings, :allow_local_requests_from_hooks_and_services, :allow_local_requests_from_web_hooks_and_services + end + + def down + undo_rename_column_concurrently :application_settings, :allow_local_requests_from_hooks_and_services, :allow_local_requests_from_web_hooks_and_services + end +end diff --git a/db/migrate/20190726101133_add_allow_local_requests_from_system_hooks_to_application_settings.rb b/db/migrate/20190726101133_add_allow_local_requests_from_system_hooks_to_application_settings.rb new file mode 100644 index 00000000000..95d4f956f93 --- /dev/null +++ b/db/migrate/20190726101133_add_allow_local_requests_from_system_hooks_to_application_settings.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +class AddAllowLocalRequestsFromSystemHooksToApplicationSettings < ActiveRecord::Migration[5.2] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + def up + add_column(:application_settings, :allow_local_requests_from_system_hooks, + :boolean, + default: true, + null: false) + end + + def down + remove_column(:application_settings, :allow_local_requests_from_system_hooks) + end +end diff --git a/db/migrate/20190729062536_create_analytics_cycle_analytics_group_stages.rb b/db/migrate/20190729062536_create_analytics_cycle_analytics_group_stages.rb new file mode 100644 index 00000000000..5b327dc5332 --- /dev/null +++ b/db/migrate/20190729062536_create_analytics_cycle_analytics_group_stages.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +class CreateAnalyticsCycleAnalyticsGroupStages < ActiveRecord::Migration[5.2] + DOWNTIME = false + + INDEX_PREFIX = 'index_analytics_ca_group_stages_' + + def change + create_table :analytics_cycle_analytics_group_stages do |t| + t.timestamps_with_timezone + t.integer :relative_position + t.integer :start_event_identifier, null: false + t.integer :end_event_identifier, null: false + t.references(:group, { + null: false, + foreign_key: { to_table: :namespaces, on_delete: :cascade }, + index: { name: INDEX_PREFIX + 'on_group_id' } + }) + t.references(:start_event_label, { + foreign_key: { to_table: :labels, on_delete: :cascade }, + index: { name: INDEX_PREFIX + 'on_start_event_label_id' } + }) + t.references(:end_event_label, { + foreign_key: { to_table: :labels, on_delete: :cascade }, + index: { name: INDEX_PREFIX + 'on_end_event_label_id' } + }) + t.boolean :hidden, default: false, null: false + t.boolean :custom, default: true, null: false + t.string :name, null: false, limit: 255 + end + + add_index :analytics_cycle_analytics_group_stages, [:group_id, :name], unique: true, name: INDEX_PREFIX + 'on_group_id_and_name' + add_index :analytics_cycle_analytics_group_stages, [:relative_position], name: INDEX_PREFIX + 'on_relative_position' + end +end diff --git a/db/migrate/20190729090456_add_index_on_environments_with_state.rb b/db/migrate/20190729090456_add_index_on_environments_with_state.rb new file mode 100644 index 00000000000..9a8d8391415 --- /dev/null +++ b/db/migrate/20190729090456_add_index_on_environments_with_state.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class AddIndexOnEnvironmentsWithState < ActiveRecord::Migration[5.2] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + disable_ddl_transaction! + + def up + add_concurrent_index :environments, [:project_id, :state] + end + + def down + remove_concurrent_index :environments, [:project_id, :state] + end +end diff --git a/db/migrate/20190731084415_add_build_need.rb b/db/migrate/20190731084415_add_build_need.rb new file mode 100644 index 00000000000..45b8abb480d --- /dev/null +++ b/db/migrate/20190731084415_add_build_need.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +# See http://doc.gitlab.com/ce/development/migration_style_guide.html +# for more information on how to write migrations for GitLab. + +class AddBuildNeed < ActiveRecord::Migration[5.2] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + def change + create_table :ci_build_needs, id: :serial do |t| + t.integer :build_id, null: false + t.text :name, null: false + + t.index [:build_id, :name], unique: true + t.foreign_key :ci_builds, column: :build_id, on_delete: :cascade + end + end +end diff --git a/db/migrate/20190801060809_delete_kubernetes_services.rb b/db/migrate/20190801060809_delete_kubernetes_services.rb new file mode 100644 index 00000000000..018976584d4 --- /dev/null +++ b/db/migrate/20190801060809_delete_kubernetes_services.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class DeleteKubernetesServices < ActiveRecord::Migration[5.2] + DOWNTIME = false + + def up + Service.where(type: "KubernetesService").delete_all + end + + def down + # no-op + end +end diff --git a/db/migrate/20190801193427_rename_application_settings_snowplow_collector_uri_column.rb b/db/migrate/20190801193427_rename_application_settings_snowplow_collector_uri_column.rb new file mode 100644 index 00000000000..a4bd5841a46 --- /dev/null +++ b/db/migrate/20190801193427_rename_application_settings_snowplow_collector_uri_column.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class RenameApplicationSettingsSnowplowCollectorUriColumn < ActiveRecord::Migration[5.2] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + disable_ddl_transaction! + + def up + rename_column_concurrently :application_settings, :snowplow_collector_uri, :snowplow_collector_hostname + end + + def down + cleanup_concurrent_column_rename :application_settings, :snowplow_collector_hostname, :snowplow_collector_uri + end +end diff --git a/db/migrate/20190802012622_reorder_issues_project_id_relative_position_index.rb b/db/migrate/20190802012622_reorder_issues_project_id_relative_position_index.rb new file mode 100644 index 00000000000..12088dd763f --- /dev/null +++ b/db/migrate/20190802012622_reorder_issues_project_id_relative_position_index.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +class ReorderIssuesProjectIdRelativePositionIndex < ActiveRecord::Migration[5.2] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + disable_ddl_transaction! + + OLD_INDEX_NAME = 'index_issues_on_project_id_and_state_and_rel_position_and_id' + NEW_INDEX_NAME = 'index_issues_on_project_id_and_rel_position_and_state_and_id' + + def up + add_concurrent_index :issues, [:project_id, :relative_position, :state, :id], order: { id: :desc }, name: NEW_INDEX_NAME + + remove_concurrent_index_by_name :issues, OLD_INDEX_NAME + end + + def down + add_concurrent_index :issues, [:project_id, :state, :relative_position, :id], order: { id: :desc }, name: OLD_INDEX_NAME + + remove_concurrent_index_by_name :issues, NEW_INDEX_NAME + end +end diff --git a/db/migrate/20190802195602_add_timestamps_columns_to_geo_nodes.rb b/db/migrate/20190802195602_add_timestamps_columns_to_geo_nodes.rb new file mode 100644 index 00000000000..b95d9037afe --- /dev/null +++ b/db/migrate/20190802195602_add_timestamps_columns_to_geo_nodes.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +class AddTimestampsColumnsToGeoNodes < ActiveRecord::Migration[5.2] + DOWNTIME = false + + def change + add_column(:geo_nodes, :created_at, :datetime_with_timezone, null: true) + add_column(:geo_nodes, :updated_at, :datetime_with_timezone, null: true) + end +end diff --git a/db/migrate/20190805140353_remove_rendundant_index_from_releases.rb b/db/migrate/20190805140353_remove_rendundant_index_from_releases.rb new file mode 100644 index 00000000000..fc4bc1a423b --- /dev/null +++ b/db/migrate/20190805140353_remove_rendundant_index_from_releases.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +# See http://doc.gitlab.com/ce/development/migration_style_guide.html +# for more information on how to write migrations for GitLab. + +class RemoveRendundantIndexFromReleases < ActiveRecord::Migration[5.2] + include Gitlab::Database::MigrationHelpers + + # Set this constant to true if this migration requires downtime. + DOWNTIME = false + + disable_ddl_transaction! + + def up + remove_concurrent_index :releases, :project_id + end + + def down + add_concurrent_index :releases, :project_id + end +end diff --git a/db/migrate/20190806071559_remove_epic_issues_default_relative_position.rb b/db/migrate/20190806071559_remove_epic_issues_default_relative_position.rb new file mode 100644 index 00000000000..f6db90f6637 --- /dev/null +++ b/db/migrate/20190806071559_remove_epic_issues_default_relative_position.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +class RemoveEpicIssuesDefaultRelativePosition < ActiveRecord::Migration[5.2] + DOWNTIME = false + + def change + change_column_null :epic_issues, :relative_position, true + change_column_default :epic_issues, :relative_position, from: 1073741823, to: nil + end +end diff --git a/db/migrate/20190808152507_add_projects_sorting_field_to_user_preferences.rb b/db/migrate/20190808152507_add_projects_sorting_field_to_user_preferences.rb new file mode 100644 index 00000000000..941fead655e --- /dev/null +++ b/db/migrate/20190808152507_add_projects_sorting_field_to_user_preferences.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class AddProjectsSortingFieldToUserPreferences < ActiveRecord::Migration[5.2] + DOWNTIME = false + + def up + add_column :user_preferences, :projects_sort, :string, limit: 64 + end + + def down + remove_column :user_preferences, :projects_sort + end +end diff --git a/db/migrate/20190814205640_import_common_metrics_line_charts.rb b/db/migrate/20190814205640_import_common_metrics_line_charts.rb new file mode 100644 index 00000000000..1c28d686a42 --- /dev/null +++ b/db/migrate/20190814205640_import_common_metrics_line_charts.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class ImportCommonMetricsLineCharts < ActiveRecord::Migration[5.2] + DOWNTIME = false + + def up + ::Gitlab::DatabaseImporters::CommonMetrics::Importer.new.execute + end + + def down + # no-op + end +end diff --git a/db/migrate/20190815093936_add_index_notes_on_project_id_and_id_and_system_false.rb b/db/migrate/20190815093936_add_index_notes_on_project_id_and_id_and_system_false.rb new file mode 100644 index 00000000000..cbbece35901 --- /dev/null +++ b/db/migrate/20190815093936_add_index_notes_on_project_id_and_id_and_system_false.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +class AddIndexNotesOnProjectIdAndIdAndSystemFalse < ActiveRecord::Migration[5.2] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + disable_ddl_transaction! + + def up + add_concurrent_index(*index_arguments) + end + + def down + remove_concurrent_index(*index_arguments) + end + + private + + def index_arguments + [ + :notes, + [:project_id, :id], + { + name: 'index_notes_on_project_id_and_id_and_system_false', + where: 'NOT system' + } + ] + end +end diff --git a/db/migrate/20190815093949_remove_index_notes_on_noteable_type.rb b/db/migrate/20190815093949_remove_index_notes_on_noteable_type.rb new file mode 100644 index 00000000000..158c88e6258 --- /dev/null +++ b/db/migrate/20190815093949_remove_index_notes_on_noteable_type.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +class RemoveIndexNotesOnNoteableType < ActiveRecord::Migration[5.2] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + disable_ddl_transaction! + + def up + remove_concurrent_index(*index_arguments) + end + + def down + add_concurrent_index(*index_arguments) + end + + private + + def index_arguments + [ + :notes, + [:noteable_type], + { + name: 'index_notes_on_noteable_type' + } + ] + end +end diff --git a/db/migrate/20190820163320_add_first_last_name_to_user.rb b/db/migrate/20190820163320_add_first_last_name_to_user.rb new file mode 100644 index 00000000000..0ea465fc2e2 --- /dev/null +++ b/db/migrate/20190820163320_add_first_last_name_to_user.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +# See http://doc.gitlab.com/ce/development/migration_style_guide.html +# for more information on how to write migrations for GitLab. + +class AddFirstLastNameToUser < ActiveRecord::Migration[5.2] + # Set this constant to true if this migration requires downtime. + DOWNTIME = false + + def change + add_column(:users, :first_name, :string, null: true, limit: 255) + add_column(:users, :last_name, :string, null: true, limit: 255) + end +end diff --git a/db/migrate/gpg_keys_limits_to_mysql.rb b/db/migrate/gpg_keys_limits_to_mysql.rb deleted file mode 100644 index 2cd347a0463..00000000000 --- a/db/migrate/gpg_keys_limits_to_mysql.rb +++ /dev/null @@ -1,14 +0,0 @@ -class IncreaseMysqlTextLimitForGpgKeys < ActiveRecord::Migration[4.2] - # Set this constant to true if this migration requires downtime. - DOWNTIME = false - - def up - return unless Gitlab::Database.mysql? - - change_column :gpg_keys, :key, :text, limit: 16.megabytes - 1 - end - - def down - # no-op - end -end diff --git a/db/migrate/limits_ci_build_trace_chunks_raw_data_for_mysql.rb b/db/migrate/limits_ci_build_trace_chunks_raw_data_for_mysql.rb deleted file mode 100644 index 92402cf387b..00000000000 --- a/db/migrate/limits_ci_build_trace_chunks_raw_data_for_mysql.rb +++ /dev/null @@ -1,9 +0,0 @@ -class LimitsCiBuildTraceChunksRawDataForMysql < ActiveRecord::Migration[4.2] - def up - return unless Gitlab::Database.mysql? - - # Mysql needs MEDIUMTEXT type (up to 16MB) rather than TEXT (up to 64KB) - # Because 'raw_data' is always capped by Ci::BuildTraceChunk::CHUNK_SIZE, which is 128KB - change_column :ci_build_trace_chunks, :raw_data, :binary, limit: 16.megabytes - 1 # MEDIUMTEXT - end -end diff --git a/db/migrate/limits_to_mysql.rb b/db/migrate/limits_to_mysql.rb deleted file mode 100644 index 33cb19aff9e..00000000000 --- a/db/migrate/limits_to_mysql.rb +++ /dev/null @@ -1,8 +0,0 @@ -class LimitsToMysql < ActiveRecord::Migration[4.2] - def up - return unless ActiveRecord::Base.configurations[Rails.env]['adapter'] =~ /^mysql/ - - change_column :snippets, :content, :text, limit: 2147483647 - change_column :notes, :st_diff, :text, limit: 2147483647 - end -end diff --git a/db/migrate/markdown_cache_limits_to_mysql.rb b/db/migrate/markdown_cache_limits_to_mysql.rb deleted file mode 100644 index f99d500a137..00000000000 --- a/db/migrate/markdown_cache_limits_to_mysql.rb +++ /dev/null @@ -1,13 +0,0 @@ -class MarkdownCacheLimitsToMysql < ActiveRecord::Migration[4.2] - DOWNTIME = false - - def up - return unless Gitlab::Database.mysql? - - change_column :snippets, :content_html, :text, limit: 2147483647 - end - - def down - # no-op - end -end diff --git a/db/migrate/merge_request_diff_file_limits_to_mysql.rb b/db/migrate/merge_request_diff_file_limits_to_mysql.rb deleted file mode 100644 index 65dd0b5b7f7..00000000000 --- a/db/migrate/merge_request_diff_file_limits_to_mysql.rb +++ /dev/null @@ -1,12 +0,0 @@ -class MergeRequestDiffFileLimitsToMysql < ActiveRecord::Migration[4.2] - DOWNTIME = false - - def up - return unless Gitlab::Database.mysql? - - change_column :merge_request_diff_files, :diff, :text, limit: 2147483647, default: nil - end - - def down - end -end diff --git a/db/migrate/prometheus_metrics_limits_to_mysql.rb b/db/migrate/prometheus_metrics_limits_to_mysql.rb deleted file mode 100644 index f7a2fcba8c2..00000000000 --- a/db/migrate/prometheus_metrics_limits_to_mysql.rb +++ /dev/null @@ -1,12 +0,0 @@ -class PrometheusMetricsLimitsToMysql < ActiveRecord::Migration[4.2] - DOWNTIME = false - - def up - return unless Gitlab::Database.mysql? - - change_column :prometheus_metrics, :query, :text, limit: 4096, default: nil - end - - def down - end -end diff --git a/db/post_migrate/20180223124427_build_user_interacted_projects_table.rb b/db/post_migrate/20180223124427_build_user_interacted_projects_table.rb index fa332fd5c70..325895a5ddb 100644 --- a/db/post_migrate/20180223124427_build_user_interacted_projects_table.rb +++ b/db/post_migrate/20180223124427_build_user_interacted_projects_table.rb @@ -82,7 +82,7 @@ class BuildUserInteractedProjectsTable < ActiveRecord::Migration[4.2] iteration = 0 records = 0 begin - Rails.logger.info "Building user_interacted_projects table, batch ##{iteration}" + Rails.logger.info "Building user_interacted_projects table, batch ##{iteration}" # rubocop:disable Gitlab/RailsLogger result = execute <<~SQL INSERT INTO user_interacted_projects (user_id, project_id) SELECT e.user_id, e.project_id @@ -93,7 +93,7 @@ class BuildUserInteractedProjectsTable < ActiveRecord::Migration[4.2] SQL iteration += 1 records += result.cmd_tuples - Rails.logger.info "Building user_interacted_projects table, batch ##{iteration} complete, created #{records} overall" + Rails.logger.info "Building user_interacted_projects table, batch ##{iteration} complete, created #{records} overall" # rubocop:disable Gitlab/RailsLogger Kernel.sleep(SLEEP_TIME) if result.cmd_tuples > 0 end while result.cmd_tuples > 0 end diff --git a/db/post_migrate/20180409170809_populate_missing_project_ci_cd_settings.rb b/db/post_migrate/20180409170809_populate_missing_project_ci_cd_settings.rb index 0cda3d76a3d..a400a071e07 100644 --- a/db/post_migrate/20180409170809_populate_missing_project_ci_cd_settings.rb +++ b/db/post_migrate/20180409170809_populate_missing_project_ci_cd_settings.rb @@ -9,10 +9,6 @@ class PopulateMissingProjectCiCdSettings < ActiveRecord::Migration[4.2] disable_ddl_transaction! def up - # MySQL does not support online upgrades, thus there can't be any missing - # rows. - return if Gitlab::Database.mysql? - # Projects created after the initial migration but before the code started # using ProjectCiCdSetting won't have a corresponding row in # project_ci_cd_settings, so let's fix that. diff --git a/db/post_migrate/20181013005024_remove_koding_from_application_settings.rb b/db/post_migrate/20181013005024_remove_koding_from_application_settings.rb index 550ad94f4ab..b6e5473e896 100644 --- a/db/post_migrate/20181013005024_remove_koding_from_application_settings.rb +++ b/db/post_migrate/20181013005024_remove_koding_from_application_settings.rb @@ -12,6 +12,6 @@ class RemoveKodingFromApplicationSettings < ActiveRecord::Migration[4.2] def down add_column :application_settings, :koding_enabled, :boolean # rubocop:disable Migration/SaferBooleanColumn - add_column :application_settings, :koding_url, :string + add_column :application_settings, :koding_url, :string # rubocop:disable Migration/AddLimitToStringColumns end end diff --git a/db/post_migrate/20181219130552_update_project_import_visibility_level.rb b/db/post_migrate/20181219130552_update_project_import_visibility_level.rb index 6209de88b31..bfa452578a3 100644 --- a/db/post_migrate/20181219130552_update_project_import_visibility_level.rb +++ b/db/post_migrate/20181219130552_update_project_import_visibility_level.rb @@ -49,7 +49,7 @@ class UpdateProjectImportVisibilityLevel < ActiveRecord::Migration[5.0] def update_projects_visibility(visibility) say_with_time("Updating project visibility to #{visibility} on #{Project::IMPORT_TYPE} imports.") do Project.with_group_visibility(visibility).select(:id).each_batch(of: BATCH_SIZE) do |batch, _index| - batch_sql = Gitlab::Database.mysql? ? batch.pluck(:id).join(', ') : batch.select(:id).to_sql + batch_sql = batch.select(:id).to_sql say("Updating #{batch.size} items.", true) diff --git a/db/post_migrate/20190204115450_migrate_auto_dev_ops_domain_to_cluster_domain.rb b/db/post_migrate/20190204115450_migrate_auto_dev_ops_domain_to_cluster_domain.rb index 392e64eeade..036b0b64b48 100644 --- a/db/post_migrate/20190204115450_migrate_auto_dev_ops_domain_to_cluster_domain.rb +++ b/db/post_migrate/20190204115450_migrate_auto_dev_ops_domain_to_cluster_domain.rb @@ -16,26 +16,6 @@ class MigrateAutoDevOpsDomainToClusterDomain < ActiveRecord::Migration[5.0] private def update_clusters_domain_query - if Gitlab::Database.mysql? - mysql_query - else - postgresql_query - end - end - - def mysql_query - <<~HEREDOC - UPDATE clusters, project_auto_devops, cluster_projects - SET - clusters.domain = project_auto_devops.domain - WHERE - cluster_projects.cluster_id = clusters.id - AND project_auto_devops.project_id = cluster_projects.project_id - AND project_auto_devops.domain != '' - HEREDOC - end - - def postgresql_query <<~HEREDOC UPDATE clusters SET domain = project_auto_devops.domain diff --git a/db/post_migrate/20190404143330_add_unique_constraint_to_approvals_user_id_and_merge_request_id.rb b/db/post_migrate/20190404143330_add_unique_constraint_to_approvals_user_id_and_merge_request_id.rb index 447f91ebc7e..dd85ebc8001 100644 --- a/db/post_migrate/20190404143330_add_unique_constraint_to_approvals_user_id_and_merge_request_id.rb +++ b/db/post_migrate/20190404143330_add_unique_constraint_to_approvals_user_id_and_merge_request_id.rb @@ -21,34 +21,18 @@ class AddUniqueConstraintToApprovalsUserIdAndMergeRequestId < ActiveRecord::Migr def remove_duplicates add_concurrent_index :approvals, [:user_id, :merge_request_id, :id] - if Gitlab::Database.mysql? - execute <<-SQL - DELETE FROM a - USING approvals AS a - INNER JOIN ( - SELECT user_id, merge_request_id, MIN(id) as min_id - FROM approvals - GROUP BY user_id, merge_request_id - HAVING COUNT(id) > 1 - ) as approvals_with_duplicates - ON approvals_with_duplicates.user_id = a.user_id - AND approvals_with_duplicates.merge_request_id = a.merge_request_id - WHERE approvals_with_duplicates.min_id <> a.id; - SQL - else - execute <<-SQL - DELETE FROM approvals - USING ( - SELECT user_id, merge_request_id, MIN(id) as min_id - FROM approvals - GROUP BY user_id, merge_request_id - HAVING COUNT(id) > 1 - ) as approvals_with_duplicates - WHERE approvals_with_duplicates.user_id = approvals.user_id - AND approvals_with_duplicates.merge_request_id = approvals.merge_request_id - AND approvals_with_duplicates.min_id <> approvals.id; - SQL - end + execute <<-SQL + DELETE FROM approvals + USING ( + SELECT user_id, merge_request_id, MIN(id) as min_id + FROM approvals + GROUP BY user_id, merge_request_id + HAVING COUNT(id) > 1 + ) as approvals_with_duplicates + WHERE approvals_with_duplicates.user_id = approvals.user_id + AND approvals_with_duplicates.merge_request_id = approvals.merge_request_id + AND approvals_with_duplicates.min_id <> approvals.id; + SQL remove_concurrent_index :approvals, [:user_id, :merge_request_id, :id] end diff --git a/db/post_migrate/20190404231137_remove_alternate_url_from_geo_nodes.rb b/db/post_migrate/20190404231137_remove_alternate_url_from_geo_nodes.rb index 785ceb2fb28..8e7ef0ec54f 100644 --- a/db/post_migrate/20190404231137_remove_alternate_url_from_geo_nodes.rb +++ b/db/post_migrate/20190404231137_remove_alternate_url_from_geo_nodes.rb @@ -16,6 +16,6 @@ class RemoveAlternateUrlFromGeoNodes < ActiveRecord::Migration[5.0] end def down - add_column :geo_nodes, :alternate_url, :string + add_column :geo_nodes, :alternate_url, :string # rubocop:disable Migration/AddLimitToStringColumns end end diff --git a/db/post_migrate/20190625184066_remove_sentry_from_application_settings.rb b/db/post_migrate/20190625184066_remove_sentry_from_application_settings.rb index 427df343193..9d71bfafffb 100644 --- a/db/post_migrate/20190625184066_remove_sentry_from_application_settings.rb +++ b/db/post_migrate/20190625184066_remove_sentry_from_application_settings.rb @@ -32,7 +32,7 @@ class RemoveSentryFromApplicationSettings < ActiveRecord::Migration[5.0] end SENTRY_DSN_COLUMNS.each do |column| - add_column(:application_settings, column, :string) unless column_exists?(:application_settings, column) + add_column(:application_settings, column, :string) unless column_exists?(:application_settings, column) # rubocop:disable Migration/AddLimitToStringColumns end end end diff --git a/db/post_migrate/20190628191740_schedule_fixing_names_of_user_namespaces.rb b/db/post_migrate/20190628191740_schedule_fixing_names_of_user_namespaces.rb new file mode 100644 index 00000000000..8fa7068b957 --- /dev/null +++ b/db/post_migrate/20190628191740_schedule_fixing_names_of_user_namespaces.rb @@ -0,0 +1,48 @@ +# frozen_string_literal: true + +# See http://doc.gitlab.com/ce/development/migration_style_guide.html +# for more information on how to write migrations for GitLab. + +class ScheduleFixingNamesOfUserNamespaces < ActiveRecord::Migration[5.1] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + class Namespace < ActiveRecord::Base + include ::EachBatch + + self.table_name = 'namespaces' + + scope :user_namespaces, -> { where(type: nil) } + end + + class Route < ActiveRecord::Base + include ::EachBatch + + self.table_name = 'routes' + + scope :project_routes, -> { where(source_type: 'Project') } + end + + disable_ddl_transaction! + + def up + queue_background_migration_jobs_by_range_at_intervals( + ScheduleFixingNamesOfUserNamespaces::Namespace.user_namespaces, + 'FixUserNamespaceNames', + 60.seconds, + batch_size: 5000 + ) + + queue_background_migration_jobs_by_range_at_intervals( + ScheduleFixingNamesOfUserNamespaces::Route.project_routes, + 'FixUserProjectRouteNames', + 60.seconds, + batch_size: 5000 + ) + end + + def down + # no-op + end +end diff --git a/db/post_migrate/20190702173936_populate_remaining_merge_request_assignees.rb b/db/post_migrate/20190702173936_populate_remaining_merge_request_assignees.rb new file mode 100644 index 00000000000..c435b94015d --- /dev/null +++ b/db/post_migrate/20190702173936_populate_remaining_merge_request_assignees.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +# See http://doc.gitlab.com/ce/development/migration_style_guide.html +# for more information on how to write migrations for GitLab. + +class PopulateRemainingMergeRequestAssignees < ActiveRecord::Migration[5.1] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + BATCH_SIZE = 10_000 + MIGRATION = 'PopulateMergeRequestAssigneesTable' + + disable_ddl_transaction! + + def up + Gitlab::BackgroundMigration.steal(MIGRATION) + + Gitlab::BackgroundMigration::PopulateMergeRequestAssigneesTable.new.perform_all_sync(batch_size: BATCH_SIZE) + end +end diff --git a/db/post_migrate/20190703185326_fix_wrong_pages_access_level.rb b/db/post_migrate/20190703185326_fix_wrong_pages_access_level.rb new file mode 100644 index 00000000000..e5981956cf5 --- /dev/null +++ b/db/post_migrate/20190703185326_fix_wrong_pages_access_level.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +class FixWrongPagesAccessLevel < ActiveRecord::Migration[5.1] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + MIGRATION = 'FixPagesAccessLevel' + BATCH_SIZE = 20_000 + BATCH_TIME = 2.minutes + + disable_ddl_transaction! + + class ProjectFeature < ActiveRecord::Base + include ::EachBatch + + self.table_name = 'project_features' + self.inheritance_column = :_type_disabled + end + + def up + queue_background_migration_jobs_by_range_at_intervals( + ProjectFeature, + MIGRATION, + BATCH_TIME, + batch_size: BATCH_SIZE) + end +end diff --git a/db/post_migrate/20190711201818_encrypt_deploy_tokens_tokens.rb b/db/post_migrate/20190711201818_encrypt_deploy_tokens_tokens.rb new file mode 100644 index 00000000000..2eb8d1ee11c --- /dev/null +++ b/db/post_migrate/20190711201818_encrypt_deploy_tokens_tokens.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +class EncryptDeployTokensTokens < ActiveRecord::Migration[5.1] + DOWNTIME = false + + class DeploymentTokens < ActiveRecord::Base + self.table_name = 'deploy_tokens' + end + + def up + say_with_time("Encrypting tokens from deploy_tokens") do + DeploymentTokens.where('token_encrypted is NULL AND token IS NOT NULL').find_each(batch_size: 10000) do |deploy_token| + token_encrypted = Gitlab::CryptoHelper.aes256_gcm_encrypt(deploy_token.token) + deploy_token.update!(token_encrypted: token_encrypted) + end + end + end + + def down + say_with_time("Decrypting tokens from deploy_tokens") do + DeploymentTokens.where('token_encrypted IS NOT NULL AND token IS NULL').find_each(batch_size: 10000) do |deploy_token| + token = Gitlab::CryptoHelper.aes256_gcm_decrypt(deploy_token.token_encrypted) + deploy_token.update!(token: token) + end + end + end +end diff --git a/db/post_migrate/20190715043944_remove_sha_index_from_versions.rb b/db/post_migrate/20190715043944_remove_sha_index_from_versions.rb new file mode 100644 index 00000000000..b23abb80dda --- /dev/null +++ b/db/post_migrate/20190715043944_remove_sha_index_from_versions.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class RemoveShaIndexFromVersions < ActiveRecord::Migration[5.2] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + disable_ddl_transaction! + + def up + remove_concurrent_index :design_management_versions, :sha + end + + def down + add_concurrent_index :design_management_versions, :sha, unique: true, using: :btree + end +end diff --git a/db/post_migrate/20190715044501_add_unique_issue_id_sha_index_to_versions.rb b/db/post_migrate/20190715044501_add_unique_issue_id_sha_index_to_versions.rb new file mode 100644 index 00000000000..27b0c9648f9 --- /dev/null +++ b/db/post_migrate/20190715044501_add_unique_issue_id_sha_index_to_versions.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class AddUniqueIssueIdShaIndexToVersions < ActiveRecord::Migration[5.2] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + disable_ddl_transaction! + + def up + add_concurrent_index :design_management_versions, [:sha, :issue_id], unique: true, using: :btree + end + + def down + remove_concurrent_index :design_management_versions, [:sha, :issue_id] + end +end diff --git a/db/post_migrate/20190715114644_drop_project_features_pages_access_level_default.rb b/db/post_migrate/20190715114644_drop_project_features_pages_access_level_default.rb new file mode 100644 index 00000000000..2fb0aa0f460 --- /dev/null +++ b/db/post_migrate/20190715114644_drop_project_features_pages_access_level_default.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +class DropProjectFeaturesPagesAccessLevelDefault < ActiveRecord::Migration[5.1] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + ENABLED_VALUE = 20 + + def change + change_column_default :project_features, :pages_access_level, from: ENABLED_VALUE, to: nil + end +end diff --git a/db/post_migrate/20190723105753_add_index_on_identities_lower_extern_uid_and_provider.rb b/db/post_migrate/20190723105753_add_index_on_identities_lower_extern_uid_and_provider.rb new file mode 100644 index 00000000000..36ecca4821f --- /dev/null +++ b/db/post_migrate/20190723105753_add_index_on_identities_lower_extern_uid_and_provider.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class AddIndexOnIdentitiesLowerExternUidAndProvider < ActiveRecord::Migration[5.2] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + disable_ddl_transaction! + + INDEX_NAME = "index_on_identities_lower_extern_uid_and_provider" + + def up + add_concurrent_index(:identities, 'lower(extern_uid), provider', name: INDEX_NAME) + end + + def down + remove_concurrent_index_by_name(:identities, INDEX_NAME) + end +end diff --git a/db/post_migrate/20190801072937_add_gitlab_instance_administration_project.rb b/db/post_migrate/20190801072937_add_gitlab_instance_administration_project.rb new file mode 100644 index 00000000000..8b2cf7b3d76 --- /dev/null +++ b/db/post_migrate/20190801072937_add_gitlab_instance_administration_project.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class AddGitlabInstanceAdministrationProject < ActiveRecord::Migration[5.2] + DOWNTIME = false + + def up + Gitlab::DatabaseImporters::SelfMonitoring::Project::CreateService.new.execute! + end + + def down + ApplicationSetting.current_without_cache + &.instance_administration_project + &.owner + &.destroy! + end +end diff --git a/db/post_migrate/20190801114109_cleanup_allow_local_requests_from_hooks_and_services_application_setting_rename.rb b/db/post_migrate/20190801114109_cleanup_allow_local_requests_from_hooks_and_services_application_setting_rename.rb new file mode 100644 index 00000000000..cb86f843f9c --- /dev/null +++ b/db/post_migrate/20190801114109_cleanup_allow_local_requests_from_hooks_and_services_application_setting_rename.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class CleanupAllowLocalRequestsFromHooksAndServicesApplicationSettingRename < ActiveRecord::Migration[5.2] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + disable_ddl_transaction! + + def up + cleanup_concurrent_column_rename :application_settings, :allow_local_requests_from_hooks_and_services, :allow_local_requests_from_web_hooks_and_services + end + + def down + undo_cleanup_concurrent_column_rename :application_settings, :allow_local_requests_from_hooks_and_services, :allow_local_requests_from_web_hooks_and_services + end +end diff --git a/db/post_migrate/20190802091750_cleanup_application_settings_snowplow_collector_uri_rename.rb b/db/post_migrate/20190802091750_cleanup_application_settings_snowplow_collector_uri_rename.rb new file mode 100644 index 00000000000..768ece925c6 --- /dev/null +++ b/db/post_migrate/20190802091750_cleanup_application_settings_snowplow_collector_uri_rename.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class CleanupApplicationSettingsSnowplowCollectorUriRename < ActiveRecord::Migration[5.2] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + disable_ddl_transaction! + + def up + cleanup_concurrent_column_rename :application_settings, :snowplow_collector_uri, :snowplow_collector_hostname + end + + def down + rename_column_concurrently :application_settings, :snowplow_collector_hostname, :snowplow_collector_uri + end +end diff --git a/db/post_migrate/20190802235445_add_index_on_id_and_type_and_public_to_keys.rb b/db/post_migrate/20190802235445_add_index_on_id_and_type_and_public_to_keys.rb new file mode 100644 index 00000000000..9b4d74b4bea --- /dev/null +++ b/db/post_migrate/20190802235445_add_index_on_id_and_type_and_public_to_keys.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +class AddIndexOnIdAndTypeAndPublicToKeys < ActiveRecord::Migration[5.2] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + disable_ddl_transaction! + + INDEX_NAME = "index_on_deploy_keys_id_and_type_and_public" + + def up + add_concurrent_index(:keys, + [:id, :type], + where: "public = 't'", + unique: true, + name: INDEX_NAME) + end + + def down + remove_concurrent_index_by_name(:keys, INDEX_NAME) + end +end diff --git a/db/post_migrate/20190809072552_set_self_monitoring_project_alerting_token.rb b/db/post_migrate/20190809072552_set_self_monitoring_project_alerting_token.rb new file mode 100644 index 00000000000..0c4faebc548 --- /dev/null +++ b/db/post_migrate/20190809072552_set_self_monitoring_project_alerting_token.rb @@ -0,0 +1,73 @@ +# frozen_string_literal: true + +class SetSelfMonitoringProjectAlertingToken < ActiveRecord::Migration[5.2] + DOWNTIME = false + + module Migratable + module Alerting + class ProjectAlertingSetting < ApplicationRecord + self.table_name = 'project_alerting_settings' + + belongs_to :project + + validates :token, presence: true + + attr_encrypted :token, + mode: :per_attribute_iv, + key: Settings.attr_encrypted_db_key_base_truncated, + algorithm: 'aes-256-gcm' + + before_validation :ensure_token + + private + + def ensure_token + self.token ||= generate_token + end + + def generate_token + SecureRandom.hex + end + end + end + + class Project < ApplicationRecord + has_one :alerting_setting, inverse_of: :project, class_name: 'Alerting::ProjectAlertingSetting' + end + + class ApplicationSetting < ApplicationRecord + self.table_name = 'application_settings' + + belongs_to :instance_administration_project, class_name: 'Project' + + def self.current_without_cache + last + end + end + end + + def setup_alertmanager_token(project) + return unless License.feature_available?(:prometheus_alerts) + + project.create_alerting_setting! + end + + def up + Gitlab.ee do + project = Migratable::ApplicationSetting.current_without_cache&.instance_administration_project + + if project + setup_alertmanager_token(project) + end + end + end + + def down + Gitlab.ee do + Migratable::ApplicationSetting.current_without_cache + &.instance_administration_project + &.alerting_setting + &.destroy! + end + end +end diff --git a/db/post_migrate/20190812070645_migrate_private_profile_nulls.rb b/db/post_migrate/20190812070645_migrate_private_profile_nulls.rb new file mode 100644 index 00000000000..063c1e16c27 --- /dev/null +++ b/db/post_migrate/20190812070645_migrate_private_profile_nulls.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +class MigratePrivateProfileNulls < ActiveRecord::Migration[5.2] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + DELAY = 5.minutes.to_i + BATCH_SIZE = 1_000 + + disable_ddl_transaction! + + class User < ActiveRecord::Base + self.table_name = 'users' + + include ::EachBatch + end + + def up + # Migration will take about 7 hours + User.where(private_profile: nil).each_batch(of: BATCH_SIZE) do |batch, index| + range = batch.pluck(Arel.sql("MIN(id)"), Arel.sql("MAX(id)")).first + delay = index * DELAY + + BackgroundMigrationWorker.perform_in(delay.seconds, 'MigrateNullPrivateProfileToFalse', [*range]) + end + end + + def down + # noop + end +end diff --git a/db/schema.rb b/db/schema.rb index 9a8b64689bd..f30dad3d030 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,11 +10,11 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20190703130053) do +ActiveRecord::Schema.define(version: 2019_08_20_163320) do # These are extensions that must be enabled in order to support this database - enable_extension "plpgsql" enable_extension "pg_trgm" + enable_extension "plpgsql" create_table "abuse_reports", id: :serial, force: :cascade do |t| t.integer "reporter_id" @@ -26,6 +26,52 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "cached_markdown_version" end + create_table "allowed_email_domains", force: :cascade do |t| + t.datetime_with_timezone "created_at", null: false + t.datetime_with_timezone "updated_at", null: false + t.integer "group_id", null: false + t.string "domain", limit: 255, null: false + t.index ["group_id"], name: "index_allowed_email_domains_on_group_id" + end + + create_table "analytics_cycle_analytics_group_stages", force: :cascade do |t| + t.datetime_with_timezone "created_at", null: false + t.datetime_with_timezone "updated_at", null: false + t.integer "relative_position" + t.integer "start_event_identifier", null: false + t.integer "end_event_identifier", null: false + t.bigint "group_id", null: false + t.bigint "start_event_label_id" + t.bigint "end_event_label_id" + t.boolean "hidden", default: false, null: false + t.boolean "custom", default: true, null: false + t.string "name", limit: 255, null: false + t.index ["end_event_label_id"], name: "index_analytics_ca_group_stages_on_end_event_label_id" + t.index ["group_id", "name"], name: "index_analytics_ca_group_stages_on_group_id_and_name", unique: true + t.index ["group_id"], name: "index_analytics_ca_group_stages_on_group_id" + t.index ["relative_position"], name: "index_analytics_ca_group_stages_on_relative_position" + t.index ["start_event_label_id"], name: "index_analytics_ca_group_stages_on_start_event_label_id" + end + + create_table "analytics_cycle_analytics_project_stages", force: :cascade do |t| + t.datetime_with_timezone "created_at", null: false + t.datetime_with_timezone "updated_at", null: false + t.integer "relative_position" + t.integer "start_event_identifier", null: false + t.integer "end_event_identifier", null: false + t.bigint "project_id", null: false + t.bigint "start_event_label_id" + t.bigint "end_event_label_id" + t.boolean "hidden", default: false, null: false + t.boolean "custom", default: true, null: false + t.string "name", limit: 255, null: false + t.index ["end_event_label_id"], name: "index_analytics_ca_project_stages_on_end_event_label_id" + t.index ["project_id", "name"], name: "index_analytics_ca_project_stages_on_project_id_and_name", unique: true + t.index ["project_id"], name: "index_analytics_ca_project_stages_on_project_id" + t.index ["relative_position"], name: "index_analytics_ca_project_stages_on_relative_position" + t.index ["start_event_label_id"], name: "index_analytics_ca_project_stages_on_start_event_label_id" + end + create_table "appearances", id: :serial, force: :cascade do |t| t.string "title", null: false t.text "description", null: false @@ -63,6 +109,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime "updated_at" t.string "home_page_url" t.integer "default_branch_protection", default: 2 + t.text "help_text" t.text "restricted_visibility_levels" t.boolean "version_check_enabled", default: true t.integer "max_attachment_size", default: 10, null: false @@ -104,6 +151,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "container_registry_token_expire_delay", default: 5 t.text "after_sign_up_text" t.boolean "user_default_external", default: false, null: false + t.boolean "elasticsearch_indexing", default: false, null: false + t.boolean "elasticsearch_search", default: false, null: false t.string "repository_storages", default: "default" t.string "enabled_git_access_protocol" t.boolean "domain_blacklist_enabled", default: false @@ -125,18 +174,37 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.boolean "html_emails_enabled", default: true t.string "plantuml_url" t.boolean "plantuml_enabled" + t.integer "shared_runners_minutes", default: 0, null: false + t.bigint "repository_size_limit", default: 0 t.integer "terminal_max_session_time", default: 0, null: false t.integer "unique_ips_limit_per_user" t.integer "unique_ips_limit_time_window" t.boolean "unique_ips_limit_enabled", default: false, null: false t.string "default_artifacts_expire_in", default: "0", null: false + t.string "elasticsearch_url", default: "http://localhost:9200" + t.boolean "elasticsearch_aws", default: false, null: false + t.string "elasticsearch_aws_region", default: "us-east-1" + t.string "elasticsearch_aws_access_key" + t.string "elasticsearch_aws_secret_access_key" + t.integer "geo_status_timeout", default: 10 t.string "uuid" t.decimal "polling_interval_multiplier", default: "1.0", null: false + t.boolean "elasticsearch_experimental_indexer" t.integer "cached_markdown_version" + t.boolean "check_namespace_plan", default: false, null: false + t.integer "mirror_max_delay", default: 300, null: false + t.integer "mirror_max_capacity", default: 100, null: false + t.integer "mirror_capacity_threshold", default: 50, null: false t.boolean "prometheus_metrics_enabled", default: true, null: false + t.boolean "authorized_keys_enabled", default: true, null: false t.boolean "help_page_hide_commercial_content", default: false t.string "help_page_support_url" + t.boolean "slack_app_enabled", default: false + t.string "slack_app_id" + t.string "slack_app_secret" + t.string "slack_app_verification_token" t.integer "performance_bar_allowed_group_id" + t.boolean "allow_group_owners_to_manage_ldap", default: true, null: false t.boolean "hashed_storage_enabled", default: true, null: false t.boolean "project_export_enabled", default: true, null: false t.boolean "auto_devops_enabled", default: true, null: false @@ -149,22 +217,36 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.boolean "throttle_authenticated_web_enabled", default: false, null: false t.integer "throttle_authenticated_web_requests_per_period", default: 7200, null: false t.integer "throttle_authenticated_web_period_in_seconds", default: 3600, null: false - t.boolean "password_authentication_enabled_for_web" - t.boolean "password_authentication_enabled_for_git", default: true, null: false t.integer "gitaly_timeout_default", default: 55, null: false t.integer "gitaly_timeout_medium", default: 30, null: false t.integer "gitaly_timeout_fast", default: 10, null: false - t.boolean "authorized_keys_enabled", default: true, null: false + t.boolean "mirror_available", default: true, null: false + t.boolean "password_authentication_enabled_for_web" + t.boolean "password_authentication_enabled_for_git", default: true, null: false t.string "auto_devops_domain" + t.boolean "external_authorization_service_enabled", default: false, null: false + t.string "external_authorization_service_url" + t.string "external_authorization_service_default_label" t.boolean "pages_domain_verification_enabled", default: true, null: false t.string "user_default_internal_regex" - t.boolean "allow_local_requests_from_hooks_and_services", default: false, null: false + t.float "external_authorization_service_timeout", default: 0.5 + t.text "external_auth_client_cert" + t.text "encrypted_external_auth_client_key" + t.string "encrypted_external_auth_client_key_iv" + t.string "encrypted_external_auth_client_key_pass" + t.string "encrypted_external_auth_client_key_pass_iv" + t.string "email_additional_text" t.boolean "enforce_terms", default: false - t.boolean "mirror_available", default: true, null: false + t.integer "file_template_project_id" + t.boolean "pseudonymizer_enabled", default: false, null: false t.boolean "hide_third_party_offers", default: false, null: false + t.boolean "snowplow_enabled", default: false, null: false + t.string "snowplow_site_id" + t.string "snowplow_cookie_domain" t.boolean "instance_statistics_visibility_private", default: false, null: false t.boolean "web_ide_clientside_preview_enabled", default: false, null: false t.boolean "user_show_add_ssh_key_message", default: true, null: false + t.integer "custom_project_templates_group_id" t.integer "usage_stats_set_by_user_id" t.integer "receive_max_input_size" t.integer "diff_max_patch_bytes", default: 102400, null: false @@ -174,18 +256,11 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "runners_registration_token_encrypted" t.integer "local_markdown_version", default: 0, null: false t.integer "first_day_of_week", default: 0, null: false + t.boolean "elasticsearch_limit_indexing", default: false, null: false t.integer "default_project_creation", default: 2, null: false - t.boolean "external_authorization_service_enabled", default: false, null: false - t.string "external_authorization_service_url" - t.string "external_authorization_service_default_label" - t.float "external_authorization_service_timeout", default: 0.5 - t.text "external_auth_client_cert" - t.text "encrypted_external_auth_client_key" - t.string "encrypted_external_auth_client_key_iv" - t.string "encrypted_external_auth_client_key_pass" - t.string "encrypted_external_auth_client_key_pass_iv" t.string "lets_encrypt_notification_email" t.boolean "lets_encrypt_terms_of_service_accepted", default: false, null: false + t.string "geo_node_allowed_ips", default: "0.0.0.0/0, ::/0" t.integer "elasticsearch_shards", default: 5, null: false t.integer "elasticsearch_replicas", default: 1, null: false t.text "encrypted_lets_encrypt_private_key" @@ -195,49 +270,25 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.boolean "default_project_deletion_protection", default: false, null: false t.boolean "grafana_enabled", default: false, null: false t.boolean "lock_memberships_to_ldap", default: false, null: false - t.text "help_text" - t.boolean "elasticsearch_indexing", default: false, null: false - t.boolean "elasticsearch_search", default: false, null: false - t.integer "shared_runners_minutes", default: 0, null: false - t.bigint "repository_size_limit", default: 0 - t.string "elasticsearch_url", default: "http://localhost:9200" - t.boolean "elasticsearch_aws", default: false, null: false - t.string "elasticsearch_aws_region", default: "us-east-1" - t.string "elasticsearch_aws_access_key" - t.string "elasticsearch_aws_secret_access_key" - t.integer "geo_status_timeout", default: 10 - t.boolean "elasticsearch_experimental_indexer" - t.boolean "check_namespace_plan", default: false, null: false - t.integer "mirror_max_delay", default: 300, null: false - t.integer "mirror_max_capacity", default: 100, null: false - t.integer "mirror_capacity_threshold", default: 50, null: false - t.boolean "slack_app_enabled", default: false - t.string "slack_app_id" - t.string "slack_app_secret" - t.string "slack_app_verification_token" - t.boolean "allow_group_owners_to_manage_ldap", default: true, null: false - t.string "email_additional_text" - t.integer "file_template_project_id" - t.boolean "pseudonymizer_enabled", default: false, null: false - t.boolean "snowplow_enabled", default: false, null: false - t.string "snowplow_collector_uri" - t.string "snowplow_site_id" - t.string "snowplow_cookie_domain" - t.integer "custom_project_templates_group_id" - t.boolean "elasticsearch_limit_indexing", default: false, null: false - t.string "geo_node_allowed_ips", default: "0.0.0.0/0, ::/0" t.boolean "time_tracking_limit_to_hours", default: false, null: false t.string "grafana_url", default: "/-/grafana", null: false - t.index ["custom_project_templates_group_id"], name: "index_application_settings_on_custom_project_templates_group_id", using: :btree - t.index ["file_template_project_id"], name: "index_application_settings_on_file_template_project_id", using: :btree - t.index ["usage_stats_set_by_user_id"], name: "index_application_settings_on_usage_stats_set_by_user_id", using: :btree + t.string "outbound_local_requests_whitelist", limit: 255, default: [], null: false, array: true + t.integer "raw_blob_request_limit", default: 300, null: false + t.boolean "allow_local_requests_from_web_hooks_and_services", default: false, null: false + t.boolean "allow_local_requests_from_system_hooks", default: true, null: false + t.bigint "instance_administration_project_id" + t.string "snowplow_collector_hostname" + t.index ["custom_project_templates_group_id"], name: "index_application_settings_on_custom_project_templates_group_id" + t.index ["file_template_project_id"], name: "index_application_settings_on_file_template_project_id" + t.index ["instance_administration_project_id"], name: "index_applicationsettings_on_instance_administration_project_id" + t.index ["usage_stats_set_by_user_id"], name: "index_application_settings_on_usage_stats_set_by_user_id" end create_table "approval_merge_request_rule_sources", force: :cascade do |t| t.bigint "approval_merge_request_rule_id", null: false t.bigint "approval_project_rule_id", null: false - t.index ["approval_merge_request_rule_id"], name: "index_approval_merge_request_rule_sources_1", unique: true, using: :btree - t.index ["approval_project_rule_id"], name: "index_approval_merge_request_rule_sources_2", using: :btree + t.index ["approval_merge_request_rule_id"], name: "index_approval_merge_request_rule_sources_1", unique: true + t.index ["approval_project_rule_id"], name: "index_approval_merge_request_rule_sources_2" end create_table "approval_merge_request_rules", force: :cascade do |t| @@ -249,31 +300,31 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "name", null: false t.integer "rule_type", limit: 2, default: 1, null: false t.integer "report_type", limit: 2 - t.index ["merge_request_id", "code_owner", "name"], name: "approval_rule_name_index_for_code_owners", unique: true, where: "(code_owner = true)", using: :btree - t.index ["merge_request_id", "code_owner"], name: "index_approval_merge_request_rules_1", using: :btree - t.index ["merge_request_id", "rule_type", "name"], name: "index_approval_rule_name_for_code_owners_rule_type", unique: true, where: "(rule_type = 2)", using: :btree - t.index ["merge_request_id", "rule_type"], name: "index_approval_rules_code_owners_rule_type", where: "(rule_type = 2)", using: :btree + t.index ["merge_request_id", "code_owner", "name"], name: "approval_rule_name_index_for_code_owners", unique: true, where: "(code_owner = true)" + t.index ["merge_request_id", "code_owner"], name: "index_approval_merge_request_rules_1" + t.index ["merge_request_id", "rule_type", "name"], name: "index_approval_rule_name_for_code_owners_rule_type", unique: true, where: "(rule_type = 2)" + t.index ["merge_request_id", "rule_type"], name: "index_approval_rules_code_owners_rule_type", where: "(rule_type = 2)" end create_table "approval_merge_request_rules_approved_approvers", force: :cascade do |t| t.bigint "approval_merge_request_rule_id", null: false t.integer "user_id", null: false - t.index ["approval_merge_request_rule_id", "user_id"], name: "index_approval_merge_request_rules_approved_approvers_1", unique: true, using: :btree - t.index ["user_id"], name: "index_approval_merge_request_rules_approved_approvers_2", using: :btree + t.index ["approval_merge_request_rule_id", "user_id"], name: "index_approval_merge_request_rules_approved_approvers_1", unique: true + t.index ["user_id"], name: "index_approval_merge_request_rules_approved_approvers_2" end create_table "approval_merge_request_rules_groups", force: :cascade do |t| t.bigint "approval_merge_request_rule_id", null: false t.integer "group_id", null: false - t.index ["approval_merge_request_rule_id", "group_id"], name: "index_approval_merge_request_rules_groups_1", unique: true, using: :btree - t.index ["group_id"], name: "index_approval_merge_request_rules_groups_2", using: :btree + t.index ["approval_merge_request_rule_id", "group_id"], name: "index_approval_merge_request_rules_groups_1", unique: true + t.index ["group_id"], name: "index_approval_merge_request_rules_groups_2" end create_table "approval_merge_request_rules_users", force: :cascade do |t| t.bigint "approval_merge_request_rule_id", null: false t.integer "user_id", null: false - t.index ["approval_merge_request_rule_id", "user_id"], name: "index_approval_merge_request_rules_users_1", unique: true, using: :btree - t.index ["user_id"], name: "index_approval_merge_request_rules_users_2", using: :btree + t.index ["approval_merge_request_rule_id", "user_id"], name: "index_approval_merge_request_rules_users_1", unique: true + t.index ["user_id"], name: "index_approval_merge_request_rules_users_2" end create_table "approval_project_rules", force: :cascade do |t| @@ -282,21 +333,23 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "project_id", null: false t.integer "approvals_required", limit: 2, default: 0, null: false t.string "name", null: false - t.index ["project_id"], name: "index_approval_project_rules_on_project_id", using: :btree + t.integer "rule_type", limit: 2, default: 0, null: false + t.index ["project_id"], name: "index_approval_project_rules_on_project_id" + t.index ["rule_type"], name: "index_approval_project_rules_on_rule_type" end create_table "approval_project_rules_groups", force: :cascade do |t| t.bigint "approval_project_rule_id", null: false t.integer "group_id", null: false - t.index ["approval_project_rule_id", "group_id"], name: "index_approval_project_rules_groups_1", unique: true, using: :btree - t.index ["group_id"], name: "index_approval_project_rules_groups_2", using: :btree + t.index ["approval_project_rule_id", "group_id"], name: "index_approval_project_rules_groups_1", unique: true + t.index ["group_id"], name: "index_approval_project_rules_groups_2" end create_table "approval_project_rules_users", force: :cascade do |t| t.bigint "approval_project_rule_id", null: false t.integer "user_id", null: false - t.index ["approval_project_rule_id", "user_id"], name: "index_approval_project_rules_users_1", unique: true, using: :btree - t.index ["user_id"], name: "index_approval_project_rules_users_2", using: :btree + t.index ["approval_project_rule_id", "user_id"], name: "index_approval_project_rules_users_1", unique: true + t.index ["user_id"], name: "index_approval_project_rules_users_2" end create_table "approvals", id: :serial, force: :cascade do |t| @@ -304,8 +357,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "user_id", null: false t.datetime "created_at" t.datetime "updated_at" - t.index ["merge_request_id"], name: "index_approvals_on_merge_request_id", using: :btree - t.index ["user_id", "merge_request_id"], name: "index_approvals_on_user_id_and_merge_request_id", unique: true, using: :btree + t.index ["merge_request_id"], name: "index_approvals_on_merge_request_id" + t.index ["user_id", "merge_request_id"], name: "index_approvals_on_user_id_and_merge_request_id", unique: true end create_table "approver_groups", id: :serial, force: :cascade do |t| @@ -314,8 +367,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "group_id", null: false t.datetime "created_at" t.datetime "updated_at" - t.index ["group_id"], name: "index_approver_groups_on_group_id", using: :btree - t.index ["target_id", "target_type"], name: "index_approver_groups_on_target_id_and_target_type", using: :btree + t.index ["group_id"], name: "index_approver_groups_on_group_id" + t.index ["target_id", "target_type"], name: "index_approver_groups_on_target_id_and_target_type" end create_table "approvers", id: :serial, force: :cascade do |t| @@ -324,8 +377,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "user_id", null: false t.datetime "created_at" t.datetime "updated_at" - t.index ["target_id", "target_type"], name: "index_approvers_on_target_id_and_target_type", using: :btree - t.index ["user_id"], name: "index_approvers_on_user_id", using: :btree + t.index ["target_id", "target_type"], name: "index_approvers_on_target_id_and_target_type" + t.index ["user_id"], name: "index_approvers_on_user_id" end create_table "audit_events", id: :serial, force: :cascade do |t| @@ -336,8 +389,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.text "details" t.datetime "created_at" t.datetime "updated_at" - t.index ["created_at", "author_id"], name: "analytics_index_audit_events_on_created_at_and_author_id", using: :btree - t.index ["entity_id", "entity_type"], name: "index_audit_events_on_entity_id_and_entity_type", using: :btree + t.index ["created_at", "author_id"], name: "analytics_index_audit_events_on_created_at_and_author_id" + t.index ["entity_id", "entity_type"], name: "index_audit_events_on_entity_id_and_entity_type" end create_table "award_emoji", id: :serial, force: :cascade do |t| @@ -347,8 +400,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "awardable_type" t.datetime "created_at" t.datetime "updated_at" - t.index ["awardable_type", "awardable_id"], name: "index_award_emoji_on_awardable_type_and_awardable_id", using: :btree - t.index ["user_id", "name"], name: "index_award_emoji_on_user_id_and_name", using: :btree + t.index ["awardable_type", "awardable_id"], name: "index_award_emoji_on_awardable_type_and_awardable_id" + t.index ["user_id", "name"], name: "index_award_emoji_on_user_id_and_name" end create_table "badges", id: :serial, force: :cascade do |t| @@ -359,15 +412,15 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "type", null: false t.datetime_with_timezone "created_at", null: false t.datetime_with_timezone "updated_at", null: false - t.index ["group_id"], name: "index_badges_on_group_id", using: :btree - t.index ["project_id"], name: "index_badges_on_project_id", using: :btree + t.index ["group_id"], name: "index_badges_on_group_id" + t.index ["project_id"], name: "index_badges_on_project_id" end create_table "board_assignees", id: :serial, force: :cascade do |t| t.integer "board_id", null: false t.integer "assignee_id", null: false - t.index ["assignee_id"], name: "index_board_assignees_on_assignee_id", using: :btree - t.index ["board_id", "assignee_id"], name: "index_board_assignees_on_board_id_and_assignee_id", unique: true, using: :btree + t.index ["assignee_id"], name: "index_board_assignees_on_assignee_id" + t.index ["board_id", "assignee_id"], name: "index_board_assignees_on_board_id_and_assignee_id", unique: true end create_table "board_group_recent_visits", force: :cascade do |t| @@ -376,17 +429,17 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "user_id" t.integer "board_id" t.integer "group_id" - t.index ["board_id"], name: "index_board_group_recent_visits_on_board_id", using: :btree - t.index ["group_id"], name: "index_board_group_recent_visits_on_group_id", using: :btree - t.index ["user_id", "group_id", "board_id"], name: "index_board_group_recent_visits_on_user_group_and_board", unique: true, using: :btree - t.index ["user_id"], name: "index_board_group_recent_visits_on_user_id", using: :btree + t.index ["board_id"], name: "index_board_group_recent_visits_on_board_id" + t.index ["group_id"], name: "index_board_group_recent_visits_on_group_id" + t.index ["user_id", "group_id", "board_id"], name: "index_board_group_recent_visits_on_user_group_and_board", unique: true + t.index ["user_id"], name: "index_board_group_recent_visits_on_user_id" end create_table "board_labels", id: :serial, force: :cascade do |t| t.integer "board_id", null: false t.integer "label_id", null: false - t.index ["board_id", "label_id"], name: "index_board_labels_on_board_id_and_label_id", unique: true, using: :btree - t.index ["label_id"], name: "index_board_labels_on_label_id", using: :btree + t.index ["board_id", "label_id"], name: "index_board_labels_on_board_id_and_label_id", unique: true + t.index ["label_id"], name: "index_board_labels_on_label_id" end create_table "board_project_recent_visits", force: :cascade do |t| @@ -395,23 +448,23 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "user_id" t.integer "project_id" t.integer "board_id" - t.index ["board_id"], name: "index_board_project_recent_visits_on_board_id", using: :btree - t.index ["project_id"], name: "index_board_project_recent_visits_on_project_id", using: :btree - t.index ["user_id", "project_id", "board_id"], name: "index_board_project_recent_visits_on_user_project_and_board", unique: true, using: :btree - t.index ["user_id"], name: "index_board_project_recent_visits_on_user_id", using: :btree + t.index ["board_id"], name: "index_board_project_recent_visits_on_board_id" + t.index ["project_id"], name: "index_board_project_recent_visits_on_project_id" + t.index ["user_id", "project_id", "board_id"], name: "index_board_project_recent_visits_on_user_project_and_board", unique: true + t.index ["user_id"], name: "index_board_project_recent_visits_on_user_id" end create_table "boards", id: :serial, force: :cascade do |t| t.integer "project_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.integer "group_id" + t.string "name", default: "Development", null: false t.integer "milestone_id" + t.integer "group_id" t.integer "weight" - t.string "name", default: "Development", null: false - t.index ["group_id"], name: "index_boards_on_group_id", using: :btree - t.index ["milestone_id"], name: "index_boards_on_milestone_id", using: :btree - t.index ["project_id"], name: "index_boards_on_project_id", using: :btree + t.index ["group_id"], name: "index_boards_on_group_id" + t.index ["milestone_id"], name: "index_boards_on_milestone_id" + t.index ["project_id"], name: "index_boards_on_project_id" end create_table "broadcast_messages", id: :serial, force: :cascade do |t| @@ -424,7 +477,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "font" t.text "message_html", null: false t.integer "cached_markdown_version" - t.index ["starts_at", "ends_at", "id"], name: "index_broadcast_messages_on_starts_at_and_ends_at_and_id", using: :btree + t.index ["starts_at", "ends_at", "id"], name: "index_broadcast_messages_on_starts_at_and_ends_at_and_id" end create_table "chat_names", id: :serial, force: :cascade do |t| @@ -437,8 +490,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime "last_used_at" t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.index ["service_id", "team_id", "chat_id"], name: "index_chat_names_on_service_id_and_team_id_and_chat_id", unique: true, using: :btree - t.index ["user_id", "service_id"], name: "index_chat_names_on_user_id_and_service_id", unique: true, using: :btree + t.index ["service_id", "team_id", "chat_id"], name: "index_chat_names_on_service_id_and_team_id_and_chat_id", unique: true + t.index ["user_id", "service_id"], name: "index_chat_names_on_user_id_and_service_id", unique: true end create_table "chat_teams", id: :serial, force: :cascade do |t| @@ -447,7 +500,13 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "name" t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.index ["namespace_id"], name: "index_chat_teams_on_namespace_id", unique: true, using: :btree + t.index ["namespace_id"], name: "index_chat_teams_on_namespace_id", unique: true + end + + create_table "ci_build_needs", id: :serial, force: :cascade do |t| + t.integer "build_id", null: false + t.text "name", null: false + t.index ["build_id", "name"], name: "index_ci_build_needs_on_build_id_and_name", unique: true end create_table "ci_build_trace_chunks", force: :cascade do |t| @@ -455,13 +514,13 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "chunk_index", null: false t.integer "data_store", null: false t.binary "raw_data" - t.index ["build_id", "chunk_index"], name: "index_ci_build_trace_chunks_on_build_id_and_chunk_index", unique: true, using: :btree + t.index ["build_id", "chunk_index"], name: "index_ci_build_trace_chunks_on_build_id_and_chunk_index", unique: true end create_table "ci_build_trace_section_names", id: :serial, force: :cascade do |t| t.integer "project_id", null: false t.string "name", null: false - t.index ["project_id", "name"], name: "index_ci_build_trace_section_names_on_project_id_and_name", unique: true, using: :btree + t.index ["project_id", "name"], name: "index_ci_build_trace_section_names_on_project_id_and_name", unique: true end create_table "ci_build_trace_sections", id: :serial, force: :cascade do |t| @@ -472,9 +531,9 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.bigint "byte_end", null: false t.integer "build_id", null: false t.integer "section_name_id", null: false - t.index ["build_id", "section_name_id"], name: "index_ci_build_trace_sections_on_build_id_and_section_name_id", unique: true, using: :btree - t.index ["project_id"], name: "index_ci_build_trace_sections_on_project_id", using: :btree - t.index ["section_name_id"], name: "index_ci_build_trace_sections_on_section_name_id", using: :btree + t.index ["build_id", "section_name_id"], name: "index_ci_build_trace_sections_on_build_id_and_section_name_id", unique: true + t.index ["project_id"], name: "index_ci_build_trace_sections_on_project_id" + t.index ["section_name_id"], name: "index_ci_build_trace_sections_on_section_name_id" end create_table "ci_builds", id: :serial, force: :cascade do |t| @@ -524,28 +583,28 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime_with_timezone "scheduled_at" t.string "token_encrypted" t.integer "upstream_pipeline_id" - t.index ["artifacts_expire_at"], name: "index_ci_builds_on_artifacts_expire_at", where: "(artifacts_file <> ''::text)", using: :btree - t.index ["auto_canceled_by_id"], name: "index_ci_builds_on_auto_canceled_by_id", using: :btree - t.index ["commit_id", "artifacts_expire_at", "id"], name: "index_ci_builds_on_commit_id_and_artifacts_expireatandidpartial", where: "(((type)::text = 'Ci::Build'::text) AND ((retried = false) OR (retried IS NULL)) AND ((name)::text = ANY (ARRAY[('sast'::character varying)::text, ('dependency_scanning'::character varying)::text, ('sast:container'::character varying)::text, ('container_scanning'::character varying)::text, ('dast'::character varying)::text])))", using: :btree - t.index ["commit_id", "stage_idx", "created_at"], name: "index_ci_builds_on_commit_id_and_stage_idx_and_created_at", using: :btree - t.index ["commit_id", "status", "type"], name: "index_ci_builds_on_commit_id_and_status_and_type", using: :btree - t.index ["commit_id", "type", "name", "ref"], name: "index_ci_builds_on_commit_id_and_type_and_name_and_ref", using: :btree - t.index ["commit_id", "type", "ref"], name: "index_ci_builds_on_commit_id_and_type_and_ref", using: :btree - t.index ["name"], name: "index_ci_builds_on_name_for_security_products_values", where: "((name)::text = ANY (ARRAY[('container_scanning'::character varying)::text, ('dast'::character varying)::text, ('dependency_scanning'::character varying)::text, ('license_management'::character varying)::text, ('sast'::character varying)::text]))", using: :btree - t.index ["project_id", "id"], name: "index_ci_builds_on_project_id_and_id", using: :btree - t.index ["project_id", "status"], name: "index_ci_builds_project_id_and_status_for_live_jobs_partial2", where: "(((type)::text = 'Ci::Build'::text) AND ((status)::text = ANY (ARRAY[('running'::character varying)::text, ('pending'::character varying)::text, ('created'::character varying)::text])))", using: :btree - t.index ["protected"], name: "index_ci_builds_on_protected", using: :btree - t.index ["queued_at"], name: "index_ci_builds_on_queued_at", using: :btree - t.index ["runner_id"], name: "index_ci_builds_on_runner_id", using: :btree - t.index ["scheduled_at"], name: "partial_index_ci_builds_on_scheduled_at_with_scheduled_jobs", where: "((scheduled_at IS NOT NULL) AND ((type)::text = 'Ci::Build'::text) AND ((status)::text = 'scheduled'::text))", using: :btree - t.index ["stage_id", "stage_idx"], name: "tmp_build_stage_position_index", where: "(stage_idx IS NOT NULL)", using: :btree - t.index ["stage_id"], name: "index_ci_builds_on_stage_id", using: :btree - t.index ["status", "type", "runner_id"], name: "index_ci_builds_on_status_and_type_and_runner_id", using: :btree - t.index ["token"], name: "index_ci_builds_on_token", unique: true, using: :btree - t.index ["token_encrypted"], name: "index_ci_builds_on_token_encrypted", unique: true, where: "(token_encrypted IS NOT NULL)", using: :btree - t.index ["updated_at"], name: "index_ci_builds_on_updated_at", using: :btree - t.index ["upstream_pipeline_id"], name: "index_ci_builds_on_upstream_pipeline_id", where: "(upstream_pipeline_id IS NOT NULL)", using: :btree - t.index ["user_id"], name: "index_ci_builds_on_user_id", using: :btree + t.index ["artifacts_expire_at"], name: "index_ci_builds_on_artifacts_expire_at", where: "(artifacts_file <> ''::text)" + t.index ["auto_canceled_by_id"], name: "index_ci_builds_on_auto_canceled_by_id" + t.index ["commit_id", "artifacts_expire_at", "id"], name: "index_ci_builds_on_commit_id_and_artifacts_expireatandidpartial", where: "(((type)::text = 'Ci::Build'::text) AND ((retried = false) OR (retried IS NULL)) AND ((name)::text = ANY (ARRAY[('sast'::character varying)::text, ('dependency_scanning'::character varying)::text, ('sast:container'::character varying)::text, ('container_scanning'::character varying)::text, ('dast'::character varying)::text])))" + t.index ["commit_id", "stage_idx", "created_at"], name: "index_ci_builds_on_commit_id_and_stage_idx_and_created_at" + t.index ["commit_id", "status", "type"], name: "index_ci_builds_on_commit_id_and_status_and_type" + t.index ["commit_id", "type", "name", "ref"], name: "index_ci_builds_on_commit_id_and_type_and_name_and_ref" + t.index ["commit_id", "type", "ref"], name: "index_ci_builds_on_commit_id_and_type_and_ref" + t.index ["name"], name: "index_ci_builds_on_name_for_security_products_values", where: "((name)::text = ANY (ARRAY[('container_scanning'::character varying)::text, ('dast'::character varying)::text, ('dependency_scanning'::character varying)::text, ('license_management'::character varying)::text, ('sast'::character varying)::text]))" + t.index ["project_id", "id"], name: "index_ci_builds_on_project_id_and_id" + t.index ["project_id", "status"], name: "index_ci_builds_project_id_and_status_for_live_jobs_partial2", where: "(((type)::text = 'Ci::Build'::text) AND ((status)::text = ANY (ARRAY[('running'::character varying)::text, ('pending'::character varying)::text, ('created'::character varying)::text])))" + t.index ["protected"], name: "index_ci_builds_on_protected" + t.index ["queued_at"], name: "index_ci_builds_on_queued_at" + t.index ["runner_id"], name: "index_ci_builds_on_runner_id" + t.index ["scheduled_at"], name: "partial_index_ci_builds_on_scheduled_at_with_scheduled_jobs", where: "((scheduled_at IS NOT NULL) AND ((type)::text = 'Ci::Build'::text) AND ((status)::text = 'scheduled'::text))" + t.index ["stage_id", "stage_idx"], name: "tmp_build_stage_position_index", where: "(stage_idx IS NOT NULL)" + t.index ["stage_id"], name: "index_ci_builds_on_stage_id" + t.index ["status", "type", "runner_id"], name: "index_ci_builds_on_status_and_type_and_runner_id" + t.index ["token"], name: "index_ci_builds_on_token", unique: true + t.index ["token_encrypted"], name: "index_ci_builds_on_token_encrypted", unique: true, where: "(token_encrypted IS NOT NULL)" + t.index ["updated_at"], name: "index_ci_builds_on_updated_at" + t.index ["upstream_pipeline_id"], name: "index_ci_builds_on_upstream_pipeline_id", where: "(upstream_pipeline_id IS NOT NULL)" + t.index ["user_id"], name: "index_ci_builds_on_user_id" end create_table "ci_builds_metadata", id: :serial, force: :cascade do |t| @@ -555,8 +614,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "timeout_source", default: 1, null: false t.jsonb "config_options" t.jsonb "config_variables" - t.index ["build_id"], name: "index_ci_builds_metadata_on_build_id", unique: true, using: :btree - t.index ["project_id"], name: "index_ci_builds_metadata_on_project_id", using: :btree + t.index ["build_id"], name: "index_ci_builds_metadata_on_build_id", unique: true + t.index ["project_id"], name: "index_ci_builds_metadata_on_project_id" end create_table "ci_builds_runner_session", force: :cascade do |t| @@ -564,7 +623,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "url", null: false t.string "certificate" t.string "authorization" - t.index ["build_id"], name: "index_ci_builds_runner_session_on_build_id", unique: true, using: :btree + t.index ["build_id"], name: "index_ci_builds_runner_session_on_build_id", unique: true end create_table "ci_group_variables", id: :serial, force: :cascade do |t| @@ -579,7 +638,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime_with_timezone "updated_at", null: false t.boolean "masked", default: false, null: false t.integer "variable_type", limit: 2, default: 1, null: false - t.index ["group_id", "key"], name: "index_ci_group_variables_on_group_id_and_key", unique: true, using: :btree + t.index ["group_id", "key"], name: "index_ci_group_variables_on_group_id_and_key", unique: true end create_table "ci_job_artifacts", id: :serial, force: :cascade do |t| @@ -595,18 +654,28 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.binary "file_sha256" t.integer "file_format", limit: 2 t.integer "file_location", limit: 2 - t.index ["expire_at", "job_id"], name: "index_ci_job_artifacts_on_expire_at_and_job_id", using: :btree - t.index ["file_store"], name: "index_ci_job_artifacts_on_file_store", using: :btree - t.index ["job_id", "file_type"], name: "index_ci_job_artifacts_on_job_id_and_file_type", unique: true, using: :btree - t.index ["project_id"], name: "index_ci_job_artifacts_on_project_id", using: :btree + t.index ["expire_at", "job_id"], name: "index_ci_job_artifacts_on_expire_at_and_job_id" + t.index ["file_store"], name: "index_ci_job_artifacts_on_file_store" + t.index ["job_id", "file_type"], name: "index_ci_job_artifacts_on_job_id_and_file_type", unique: true + t.index ["project_id"], name: "index_ci_job_artifacts_on_project_id" + end + + create_table "ci_job_variables", force: :cascade do |t| + t.string "key", null: false + t.text "encrypted_value" + t.string "encrypted_value_iv" + t.bigint "job_id", null: false + t.integer "variable_type", limit: 2, default: 1, null: false + t.index ["job_id"], name: "index_ci_job_variables_on_job_id" + t.index ["key", "job_id"], name: "index_ci_job_variables_on_key_and_job_id", unique: true end create_table "ci_pipeline_chat_data", force: :cascade do |t| t.integer "pipeline_id", null: false t.integer "chat_name_id", null: false t.text "response_url", null: false - t.index ["chat_name_id"], name: "index_ci_pipeline_chat_data_on_chat_name_id", using: :btree - t.index ["pipeline_id"], name: "index_ci_pipeline_chat_data_on_pipeline_id", unique: true, using: :btree + t.index ["chat_name_id"], name: "index_ci_pipeline_chat_data_on_chat_name_id" + t.index ["pipeline_id"], name: "index_ci_pipeline_chat_data_on_pipeline_id", unique: true end create_table "ci_pipeline_schedule_variables", force: :cascade do |t| @@ -619,7 +688,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime_with_timezone "created_at" t.datetime_with_timezone "updated_at" t.integer "variable_type", limit: 2, default: 1, null: false - t.index ["pipeline_schedule_id", "key"], name: "index_ci_pipeline_schedule_variables_on_schedule_id_and_key", unique: true, using: :btree + t.index ["pipeline_schedule_id", "key"], name: "index_ci_pipeline_schedule_variables_on_schedule_id_and_key", unique: true end create_table "ci_pipeline_schedules", id: :serial, force: :cascade do |t| @@ -633,9 +702,9 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.boolean "active", default: true t.datetime "created_at" t.datetime "updated_at" - t.index ["next_run_at", "active"], name: "index_ci_pipeline_schedules_on_next_run_at_and_active", using: :btree - t.index ["owner_id"], name: "index_ci_pipeline_schedules_on_owner_id", using: :btree - t.index ["project_id"], name: "index_ci_pipeline_schedules_on_project_id", using: :btree + t.index ["next_run_at", "active"], name: "index_ci_pipeline_schedules_on_next_run_at_and_active" + t.index ["owner_id"], name: "index_ci_pipeline_schedules_on_owner_id" + t.index ["project_id"], name: "index_ci_pipeline_schedules_on_project_id" end create_table "ci_pipeline_variables", id: :serial, force: :cascade do |t| @@ -646,7 +715,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "encrypted_value_iv" t.integer "pipeline_id", null: false t.integer "variable_type", limit: 2, default: 1, null: false - t.index ["pipeline_id", "key"], name: "index_ci_pipeline_variables_on_pipeline_id_and_key", unique: true, using: :btree + t.index ["pipeline_id", "key"], name: "index_ci_pipeline_variables_on_pipeline_id_and_key", unique: true end create_table "ci_pipelines", id: :serial, force: :cascade do |t| @@ -675,25 +744,25 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "merge_request_id" t.binary "source_sha" t.binary "target_sha" - t.index ["auto_canceled_by_id"], name: "index_ci_pipelines_on_auto_canceled_by_id", using: :btree - t.index ["merge_request_id"], name: "index_ci_pipelines_on_merge_request_id", where: "(merge_request_id IS NOT NULL)", using: :btree - t.index ["pipeline_schedule_id"], name: "index_ci_pipelines_on_pipeline_schedule_id", using: :btree - t.index ["project_id", "iid"], name: "index_ci_pipelines_on_project_id_and_iid", unique: true, where: "(iid IS NOT NULL)", using: :btree - t.index ["project_id", "ref", "id"], name: "index_ci_pipelines_on_project_idandrefandiddesc", order: { id: :desc }, using: :btree - t.index ["project_id", "ref", "status", "id"], name: "index_ci_pipelines_on_project_id_and_ref_and_status_and_id", using: :btree - t.index ["project_id", "sha"], name: "index_ci_pipelines_on_project_id_and_sha", using: :btree - t.index ["project_id", "source"], name: "index_ci_pipelines_on_project_id_and_source", using: :btree - t.index ["project_id", "status", "config_source"], name: "index_ci_pipelines_on_project_id_and_status_and_config_source", using: :btree - t.index ["project_id"], name: "index_ci_pipelines_on_project_id", using: :btree - t.index ["status"], name: "index_ci_pipelines_on_status", using: :btree - t.index ["user_id"], name: "index_ci_pipelines_on_user_id", using: :btree + t.index ["auto_canceled_by_id"], name: "index_ci_pipelines_on_auto_canceled_by_id" + t.index ["merge_request_id"], name: "index_ci_pipelines_on_merge_request_id", where: "(merge_request_id IS NOT NULL)" + t.index ["pipeline_schedule_id"], name: "index_ci_pipelines_on_pipeline_schedule_id" + t.index ["project_id", "iid"], name: "index_ci_pipelines_on_project_id_and_iid", unique: true, where: "(iid IS NOT NULL)" + t.index ["project_id", "ref", "id"], name: "index_ci_pipelines_on_project_idandrefandiddesc", order: { id: :desc } + t.index ["project_id", "ref", "status", "id"], name: "index_ci_pipelines_on_project_id_and_ref_and_status_and_id" + t.index ["project_id", "sha"], name: "index_ci_pipelines_on_project_id_and_sha" + t.index ["project_id", "source"], name: "index_ci_pipelines_on_project_id_and_source" + t.index ["project_id", "status", "config_source"], name: "index_ci_pipelines_on_project_id_and_status_and_config_source" + t.index ["project_id"], name: "index_ci_pipelines_on_project_id" + t.index ["status"], name: "index_ci_pipelines_on_status" + t.index ["user_id"], name: "index_ci_pipelines_on_user_id" end create_table "ci_runner_namespaces", id: :serial, force: :cascade do |t| t.integer "runner_id" t.integer "namespace_id" - t.index ["namespace_id"], name: "index_ci_runner_namespaces_on_namespace_id", using: :btree - t.index ["runner_id", "namespace_id"], name: "index_ci_runner_namespaces_on_runner_id_and_namespace_id", unique: true, using: :btree + t.index ["namespace_id"], name: "index_ci_runner_namespaces_on_namespace_id" + t.index ["runner_id", "namespace_id"], name: "index_ci_runner_namespaces_on_runner_id_and_namespace_id", unique: true end create_table "ci_runner_projects", id: :serial, force: :cascade do |t| @@ -701,8 +770,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime "created_at" t.datetime "updated_at" t.integer "project_id" - t.index ["project_id"], name: "index_ci_runner_projects_on_project_id", using: :btree - t.index ["runner_id"], name: "index_ci_runner_projects_on_runner_id", using: :btree + t.index ["project_id"], name: "index_ci_runner_projects_on_project_id" + t.index ["runner_id"], name: "index_ci_runner_projects_on_runner_id" end create_table "ci_runners", id: :serial, force: :cascade do |t| @@ -725,12 +794,12 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "maximum_timeout" t.integer "runner_type", limit: 2, null: false t.string "token_encrypted" - t.index ["contacted_at"], name: "index_ci_runners_on_contacted_at", using: :btree - t.index ["is_shared"], name: "index_ci_runners_on_is_shared", using: :btree - t.index ["locked"], name: "index_ci_runners_on_locked", using: :btree - t.index ["runner_type"], name: "index_ci_runners_on_runner_type", using: :btree - t.index ["token"], name: "index_ci_runners_on_token", using: :btree - t.index ["token_encrypted"], name: "index_ci_runners_on_token_encrypted", using: :btree + t.index ["contacted_at"], name: "index_ci_runners_on_contacted_at" + t.index ["is_shared"], name: "index_ci_runners_on_is_shared" + t.index ["locked"], name: "index_ci_runners_on_locked" + t.index ["runner_type"], name: "index_ci_runners_on_runner_type" + t.index ["token"], name: "index_ci_runners_on_token" + t.index ["token_encrypted"], name: "index_ci_runners_on_token_encrypted" end create_table "ci_sources_pipelines", id: :serial, force: :cascade do |t| @@ -739,11 +808,11 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "source_project_id" t.integer "source_job_id" t.integer "source_pipeline_id" - t.index ["pipeline_id"], name: "index_ci_sources_pipelines_on_pipeline_id", using: :btree - t.index ["project_id"], name: "index_ci_sources_pipelines_on_project_id", using: :btree - t.index ["source_job_id"], name: "index_ci_sources_pipelines_on_source_job_id", using: :btree - t.index ["source_pipeline_id"], name: "index_ci_sources_pipelines_on_source_pipeline_id", using: :btree - t.index ["source_project_id"], name: "index_ci_sources_pipelines_on_source_project_id", using: :btree + t.index ["pipeline_id"], name: "index_ci_sources_pipelines_on_pipeline_id" + t.index ["project_id"], name: "index_ci_sources_pipelines_on_project_id" + t.index ["source_job_id"], name: "index_ci_sources_pipelines_on_source_job_id" + t.index ["source_pipeline_id"], name: "index_ci_sources_pipelines_on_source_pipeline_id" + t.index ["source_project_id"], name: "index_ci_sources_pipelines_on_source_project_id" end create_table "ci_stages", id: :serial, force: :cascade do |t| @@ -755,10 +824,10 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "status" t.integer "lock_version" t.integer "position" - t.index ["pipeline_id", "name"], name: "index_ci_stages_on_pipeline_id_and_name", unique: true, using: :btree - t.index ["pipeline_id", "position"], name: "index_ci_stages_on_pipeline_id_and_position", using: :btree - t.index ["pipeline_id"], name: "index_ci_stages_on_pipeline_id", using: :btree - t.index ["project_id"], name: "index_ci_stages_on_project_id", using: :btree + t.index ["pipeline_id", "name"], name: "index_ci_stages_on_pipeline_id_and_name", unique: true + t.index ["pipeline_id", "position"], name: "index_ci_stages_on_pipeline_id_and_position" + t.index ["pipeline_id"], name: "index_ci_stages_on_pipeline_id" + t.index ["project_id"], name: "index_ci_stages_on_project_id" end create_table "ci_trigger_requests", id: :serial, force: :cascade do |t| @@ -767,8 +836,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime "created_at" t.datetime "updated_at" t.integer "commit_id" - t.index ["commit_id"], name: "index_ci_trigger_requests_on_commit_id", using: :btree - t.index ["trigger_id"], name: "index_ci_trigger_requests_on_trigger_id", using: :btree + t.index ["commit_id"], name: "index_ci_trigger_requests_on_commit_id" + t.index ["trigger_id"], name: "index_ci_trigger_requests_on_trigger_id" end create_table "ci_triggers", id: :serial, force: :cascade do |t| @@ -779,8 +848,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "owner_id" t.string "description" t.string "ref" - t.index ["owner_id"], name: "index_ci_triggers_on_owner_id", using: :btree - t.index ["project_id"], name: "index_ci_triggers_on_project_id", using: :btree + t.index ["owner_id"], name: "index_ci_triggers_on_owner_id" + t.index ["project_id"], name: "index_ci_triggers_on_project_id" end create_table "ci_variables", id: :serial, force: :cascade do |t| @@ -794,14 +863,14 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "environment_scope", default: "*", null: false t.boolean "masked", default: false, null: false t.integer "variable_type", limit: 2, default: 1, null: false - t.index ["project_id", "key", "environment_scope"], name: "index_ci_variables_on_project_id_and_key_and_environment_scope", unique: true, using: :btree + t.index ["project_id", "key", "environment_scope"], name: "index_ci_variables_on_project_id_and_key_and_environment_scope", unique: true end create_table "cluster_groups", id: :serial, force: :cascade do |t| t.integer "cluster_id", null: false t.integer "group_id", null: false - t.index ["cluster_id", "group_id"], name: "index_cluster_groups_on_cluster_id_and_group_id", unique: true, using: :btree - t.index ["group_id"], name: "index_cluster_groups_on_group_id", using: :btree + t.index ["cluster_id", "group_id"], name: "index_cluster_groups_on_cluster_id_and_group_id", unique: true + t.index ["group_id"], name: "index_cluster_groups_on_group_id" end create_table "cluster_platforms_kubernetes", id: :serial, force: :cascade do |t| @@ -817,7 +886,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.text "encrypted_token" t.string "encrypted_token_iv" t.integer "authorization_type", limit: 2 - t.index ["cluster_id"], name: "index_cluster_platforms_kubernetes_on_cluster_id", unique: true, using: :btree + t.index ["cluster_id"], name: "index_cluster_platforms_kubernetes_on_cluster_id", unique: true end create_table "cluster_projects", id: :serial, force: :cascade do |t| @@ -825,8 +894,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "cluster_id", null: false t.datetime_with_timezone "created_at", null: false t.datetime_with_timezone "updated_at", null: false - t.index ["cluster_id"], name: "index_cluster_projects_on_cluster_id", using: :btree - t.index ["project_id"], name: "index_cluster_projects_on_project_id", using: :btree + t.index ["cluster_id"], name: "index_cluster_projects_on_cluster_id" + t.index ["project_id"], name: "index_cluster_projects_on_project_id" end create_table "cluster_providers_gcp", id: :serial, force: :cascade do |t| @@ -844,7 +913,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.text "encrypted_access_token" t.string "encrypted_access_token_iv" t.boolean "legacy_abac", default: false, null: false - t.index ["cluster_id"], name: "index_cluster_providers_gcp_on_cluster_id", unique: true, using: :btree + t.index ["cluster_id"], name: "index_cluster_providers_gcp_on_cluster_id", unique: true end create_table "clusters", id: :serial, force: :cascade do |t| @@ -859,8 +928,9 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "cluster_type", limit: 2, default: 3, null: false t.string "domain" t.boolean "managed", default: true, null: false - t.index ["enabled"], name: "index_clusters_on_enabled", using: :btree - t.index ["user_id"], name: "index_clusters_on_user_id", using: :btree + t.boolean "namespace_per_environment", default: false, null: false + t.index ["enabled"], name: "index_clusters_on_enabled" + t.index ["user_id"], name: "index_clusters_on_user_id" end create_table "clusters_applications_cert_managers", id: :serial, force: :cascade do |t| @@ -871,7 +941,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime_with_timezone "created_at", null: false t.datetime_with_timezone "updated_at", null: false t.text "status_reason" - t.index ["cluster_id"], name: "index_clusters_applications_cert_managers_on_cluster_id", unique: true, using: :btree + t.index ["cluster_id"], name: "index_clusters_applications_cert_managers_on_cluster_id", unique: true end create_table "clusters_applications_helm", id: :serial, force: :cascade do |t| @@ -884,7 +954,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.text "encrypted_ca_key" t.text "encrypted_ca_key_iv" t.text "ca_cert" - t.index ["cluster_id"], name: "index_clusters_applications_helm_on_cluster_id", unique: true, using: :btree + t.index ["cluster_id"], name: "index_clusters_applications_helm_on_cluster_id", unique: true end create_table "clusters_applications_ingress", id: :serial, force: :cascade do |t| @@ -898,7 +968,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.text "status_reason" t.string "external_ip" t.string "external_hostname" - t.index ["cluster_id"], name: "index_clusters_applications_ingress_on_cluster_id", unique: true, using: :btree + t.index ["cluster_id"], name: "index_clusters_applications_ingress_on_cluster_id", unique: true end create_table "clusters_applications_jupyter", id: :serial, force: :cascade do |t| @@ -910,8 +980,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime_with_timezone "created_at", null: false t.datetime_with_timezone "updated_at", null: false t.text "status_reason" - t.index ["cluster_id"], name: "index_clusters_applications_jupyter_on_cluster_id", unique: true, using: :btree - t.index ["oauth_application_id"], name: "index_clusters_applications_jupyter_on_oauth_application_id", using: :btree + t.index ["cluster_id"], name: "index_clusters_applications_jupyter_on_cluster_id", unique: true + t.index ["oauth_application_id"], name: "index_clusters_applications_jupyter_on_oauth_application_id" end create_table "clusters_applications_knative", id: :serial, force: :cascade do |t| @@ -924,7 +994,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.text "status_reason" t.string "external_ip" t.string "external_hostname" - t.index ["cluster_id"], name: "index_clusters_applications_knative_on_cluster_id", unique: true, using: :btree + t.index ["cluster_id"], name: "index_clusters_applications_knative_on_cluster_id", unique: true end create_table "clusters_applications_prometheus", id: :serial, force: :cascade do |t| @@ -937,7 +1007,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "encrypted_alert_manager_token" t.string "encrypted_alert_manager_token_iv" t.datetime_with_timezone "last_update_started_at" - t.index ["cluster_id"], name: "index_clusters_applications_prometheus_on_cluster_id", unique: true, using: :btree + t.index ["cluster_id"], name: "index_clusters_applications_prometheus_on_cluster_id", unique: true end create_table "clusters_applications_runners", id: :serial, force: :cascade do |t| @@ -949,8 +1019,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "version", null: false t.text "status_reason" t.boolean "privileged", default: true, null: false - t.index ["cluster_id"], name: "index_clusters_applications_runners_on_cluster_id", unique: true, using: :btree - t.index ["runner_id"], name: "index_clusters_applications_runners_on_runner_id", using: :btree + t.index ["cluster_id"], name: "index_clusters_applications_runners_on_cluster_id", unique: true + t.index ["runner_id"], name: "index_clusters_applications_runners_on_runner_id" end create_table "clusters_kubernetes_namespaces", force: :cascade do |t| @@ -963,10 +1033,13 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "encrypted_service_account_token_iv" t.string "namespace", null: false t.string "service_account_name" - t.index ["cluster_id", "namespace"], name: "kubernetes_namespaces_cluster_and_namespace", unique: true, using: :btree - t.index ["cluster_id"], name: "index_clusters_kubernetes_namespaces_on_cluster_id", using: :btree - t.index ["cluster_project_id"], name: "index_clusters_kubernetes_namespaces_on_cluster_project_id", using: :btree - t.index ["project_id"], name: "index_clusters_kubernetes_namespaces_on_project_id", using: :btree + t.bigint "environment_id" + t.index ["cluster_id", "namespace"], name: "kubernetes_namespaces_cluster_and_namespace", unique: true + t.index ["cluster_id", "project_id", "environment_id"], name: "index_kubernetes_namespaces_on_cluster_project_environment_id", unique: true + t.index ["cluster_id"], name: "index_clusters_kubernetes_namespaces_on_cluster_id" + t.index ["cluster_project_id"], name: "index_clusters_kubernetes_namespaces_on_cluster_project_id" + t.index ["environment_id"], name: "index_clusters_kubernetes_namespaces_on_environment_id" + t.index ["project_id"], name: "index_clusters_kubernetes_namespaces_on_project_id" end create_table "container_repositories", id: :serial, force: :cascade do |t| @@ -974,8 +1047,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "name", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.index ["project_id", "name"], name: "index_container_repositories_on_project_id_and_name", unique: true, using: :btree - t.index ["project_id"], name: "index_container_repositories_on_project_id", using: :btree + t.index ["project_id", "name"], name: "index_container_repositories_on_project_id_and_name", unique: true + t.index ["project_id"], name: "index_container_repositories_on_project_id" end create_table "conversational_development_index_metrics", id: :serial, force: :cascade do |t| @@ -1021,7 +1094,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "group_id", null: false t.bigint "size" t.datetime_with_timezone "updated_at", null: false - t.index ["group_id", "file_name"], name: "index_dependency_proxy_blobs_on_group_id_and_file_name", using: :btree + t.index ["group_id", "file_name"], name: "index_dependency_proxy_blobs_on_group_id_and_file_name" end create_table "dependency_proxy_group_settings", id: :serial, force: :cascade do |t| @@ -1029,7 +1102,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.boolean "enabled", default: false, null: false t.integer "group_id", null: false t.datetime_with_timezone "updated_at", null: false - t.index ["group_id"], name: "index_dependency_proxy_group_settings_on_group_id", using: :btree + t.index ["group_id"], name: "index_dependency_proxy_group_settings_on_group_id" end create_table "deploy_keys_projects", id: :serial, force: :cascade do |t| @@ -1038,7 +1111,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime "created_at" t.datetime "updated_at" t.boolean "can_push", default: false, null: false - t.index ["project_id"], name: "index_deploy_keys_projects_on_project_id", using: :btree + t.index ["project_id"], name: "index_deploy_keys_projects_on_project_id" end create_table "deploy_tokens", id: :serial, force: :cascade do |t| @@ -1048,10 +1121,12 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime_with_timezone "expires_at", null: false t.datetime_with_timezone "created_at", null: false t.string "name", null: false - t.string "token", null: false + t.string "token" t.string "username" - t.index ["token", "expires_at", "id"], name: "index_deploy_tokens_on_token_and_expires_at_and_id", where: "(revoked IS FALSE)", using: :btree - t.index ["token"], name: "index_deploy_tokens_on_token", unique: true, using: :btree + t.string "token_encrypted", limit: 255 + t.index ["token", "expires_at", "id"], name: "index_deploy_tokens_on_token_and_expires_at_and_id", where: "(revoked IS FALSE)" + t.index ["token"], name: "index_deploy_tokens_on_token", unique: true + t.index ["token_encrypted"], name: "index_deploy_tokens_on_token_encrypted", unique: true end create_table "deployments", id: :serial, force: :cascade do |t| @@ -1070,37 +1145,41 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "status", limit: 2, null: false t.datetime_with_timezone "finished_at" t.integer "cluster_id" - t.index ["cluster_id"], name: "index_deployments_on_cluster_id", using: :btree - t.index ["created_at"], name: "index_deployments_on_created_at", using: :btree - t.index ["deployable_type", "deployable_id"], name: "index_deployments_on_deployable_type_and_deployable_id", using: :btree - t.index ["environment_id", "id"], name: "index_deployments_on_environment_id_and_id", using: :btree - t.index ["environment_id", "iid", "project_id"], name: "index_deployments_on_environment_id_and_iid_and_project_id", using: :btree - t.index ["environment_id", "status"], name: "index_deployments_on_environment_id_and_status", using: :btree - t.index ["id"], name: "partial_index_deployments_for_legacy_successful_deployments", where: "((finished_at IS NULL) AND (status = 2))", using: :btree - t.index ["project_id", "iid"], name: "index_deployments_on_project_id_and_iid", unique: true, using: :btree - t.index ["project_id", "status", "created_at"], name: "index_deployments_on_project_id_and_status_and_created_at", using: :btree - t.index ["project_id", "status"], name: "index_deployments_on_project_id_and_status", using: :btree + t.index ["cluster_id"], name: "index_deployments_on_cluster_id" + t.index ["created_at"], name: "index_deployments_on_created_at" + t.index ["deployable_type", "deployable_id"], name: "index_deployments_on_deployable_type_and_deployable_id" + t.index ["environment_id", "id"], name: "index_deployments_on_environment_id_and_id" + t.index ["environment_id", "iid", "project_id"], name: "index_deployments_on_environment_id_and_iid_and_project_id" + t.index ["environment_id", "status"], name: "index_deployments_on_environment_id_and_status" + t.index ["id"], name: "partial_index_deployments_for_legacy_successful_deployments", where: "((finished_at IS NULL) AND (status = 2))" + t.index ["project_id", "iid"], name: "index_deployments_on_project_id_and_iid", unique: true + t.index ["project_id", "status", "created_at"], name: "index_deployments_on_project_id_and_status_and_created_at" + t.index ["project_id", "status"], name: "index_deployments_on_project_id_and_status" end create_table "design_management_designs", force: :cascade do |t| t.integer "project_id", null: false t.integer "issue_id", null: false t.string "filename", null: false - t.index ["issue_id", "filename"], name: "index_design_management_designs_on_issue_id_and_filename", unique: true, using: :btree - t.index ["project_id"], name: "index_design_management_designs_on_project_id", using: :btree + t.index ["issue_id", "filename"], name: "index_design_management_designs_on_issue_id_and_filename", unique: true + t.index ["project_id"], name: "index_design_management_designs_on_project_id" end create_table "design_management_designs_versions", id: false, force: :cascade do |t| t.bigint "design_id", null: false t.bigint "version_id", null: false - t.index ["design_id", "version_id"], name: "design_management_designs_versions_uniqueness", unique: true, using: :btree - t.index ["design_id"], name: "index_design_management_designs_versions_on_design_id", using: :btree - t.index ["version_id"], name: "index_design_management_designs_versions_on_version_id", using: :btree + t.integer "event", limit: 2, default: 0, null: false + t.index ["design_id", "version_id"], name: "design_management_designs_versions_uniqueness", unique: true + t.index ["design_id"], name: "index_design_management_designs_versions_on_design_id" + t.index ["event"], name: "index_design_management_designs_versions_on_event" + t.index ["version_id"], name: "index_design_management_designs_versions_on_version_id" end create_table "design_management_versions", force: :cascade do |t| t.binary "sha", null: false - t.index ["sha"], name: "index_design_management_versions_on_sha", unique: true, using: :btree + t.bigint "issue_id" + t.index ["issue_id"], name: "index_design_management_versions_on_issue_id" + t.index ["sha", "issue_id"], name: "index_design_management_versions_on_sha_and_issue_id", unique: true end create_table "draft_notes", force: :cascade do |t| @@ -1112,23 +1191,24 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.text "position" t.text "original_position" t.text "change_position" - t.index ["author_id"], name: "index_draft_notes_on_author_id", using: :btree - t.index ["discussion_id"], name: "index_draft_notes_on_discussion_id", using: :btree - t.index ["merge_request_id"], name: "index_draft_notes_on_merge_request_id", using: :btree + t.binary "commit_id" + t.index ["author_id"], name: "index_draft_notes_on_author_id" + t.index ["discussion_id"], name: "index_draft_notes_on_discussion_id" + t.index ["merge_request_id"], name: "index_draft_notes_on_merge_request_id" end create_table "elasticsearch_indexed_namespaces", id: false, force: :cascade do |t| t.datetime_with_timezone "created_at", null: false t.datetime_with_timezone "updated_at", null: false t.integer "namespace_id" - t.index ["namespace_id"], name: "index_elasticsearch_indexed_namespaces_on_namespace_id", unique: true, using: :btree + t.index ["namespace_id"], name: "index_elasticsearch_indexed_namespaces_on_namespace_id", unique: true end create_table "elasticsearch_indexed_projects", id: false, force: :cascade do |t| t.datetime_with_timezone "created_at", null: false t.datetime_with_timezone "updated_at", null: false t.integer "project_id" - t.index ["project_id"], name: "index_elasticsearch_indexed_projects_on_project_id", unique: true, using: :btree + t.index ["project_id"], name: "index_elasticsearch_indexed_projects_on_project_id", unique: true end create_table "emails", id: :serial, force: :cascade do |t| @@ -1139,9 +1219,9 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "confirmation_token" t.datetime_with_timezone "confirmed_at" t.datetime_with_timezone "confirmation_sent_at" - t.index ["confirmation_token"], name: "index_emails_on_confirmation_token", unique: true, using: :btree - t.index ["email"], name: "index_emails_on_email", unique: true, using: :btree - t.index ["user_id"], name: "index_emails_on_user_id", using: :btree + t.index ["confirmation_token"], name: "index_emails_on_confirmation_token", unique: true + t.index ["email"], name: "index_emails_on_email", unique: true + t.index ["user_id"], name: "index_emails_on_user_id" end create_table "environments", id: :serial, force: :cascade do |t| @@ -1153,24 +1233,25 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "environment_type" t.string "state", default: "available", null: false t.string "slug", null: false - t.index ["name"], name: "index_environments_on_name_varchar_pattern_ops", using: :btree, opclasses: {"name"=>"varchar_pattern_ops"} - t.index ["project_id", "name"], name: "index_environments_on_project_id_and_name", unique: true, using: :btree - t.index ["project_id", "slug"], name: "index_environments_on_project_id_and_slug", unique: true, using: :btree + t.index ["name"], name: "index_environments_on_name_varchar_pattern_ops", opclass: :varchar_pattern_ops + t.index ["project_id", "name"], name: "index_environments_on_project_id_and_name", unique: true + t.index ["project_id", "slug"], name: "index_environments_on_project_id_and_slug", unique: true + t.index ["project_id", "state"], name: "index_environments_on_project_id_and_state" end create_table "epic_issues", id: :serial, force: :cascade do |t| t.integer "epic_id", null: false t.integer "issue_id", null: false - t.integer "relative_position", default: 1073741823, null: false - t.index ["epic_id"], name: "index_epic_issues_on_epic_id", using: :btree - t.index ["issue_id"], name: "index_epic_issues_on_issue_id", unique: true, using: :btree + t.integer "relative_position" + t.index ["epic_id"], name: "index_epic_issues_on_epic_id" + t.index ["issue_id"], name: "index_epic_issues_on_issue_id", unique: true end create_table "epic_metrics", id: :serial, force: :cascade do |t| t.integer "epic_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.index ["epic_id"], name: "index_epic_metrics", using: :btree + t.index ["epic_id"], name: "index_epic_metrics" end create_table "epics", id: :serial, force: :cascade do |t| @@ -1203,15 +1284,15 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime "closed_at" t.integer "parent_id" t.integer "relative_position" - t.index ["assignee_id"], name: "index_epics_on_assignee_id", using: :btree - t.index ["author_id"], name: "index_epics_on_author_id", using: :btree - t.index ["closed_by_id"], name: "index_epics_on_closed_by_id", using: :btree - t.index ["end_date"], name: "index_epics_on_end_date", using: :btree - t.index ["group_id"], name: "index_epics_on_group_id", using: :btree - t.index ["iid"], name: "index_epics_on_iid", using: :btree - t.index ["milestone_id"], name: "index_milestone", using: :btree - t.index ["parent_id"], name: "index_epics_on_parent_id", using: :btree - t.index ["start_date"], name: "index_epics_on_start_date", using: :btree + t.index ["assignee_id"], name: "index_epics_on_assignee_id" + t.index ["author_id"], name: "index_epics_on_author_id" + t.index ["closed_by_id"], name: "index_epics_on_closed_by_id" + t.index ["end_date"], name: "index_epics_on_end_date" + t.index ["group_id"], name: "index_epics_on_group_id" + t.index ["iid"], name: "index_epics_on_iid" + t.index ["milestone_id"], name: "index_milestone" + t.index ["parent_id"], name: "index_epics_on_parent_id" + t.index ["start_date"], name: "index_epics_on_start_date" end create_table "events", id: :serial, force: :cascade do |t| @@ -1222,12 +1303,12 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime_with_timezone "updated_at", null: false t.integer "action", limit: 2, null: false t.string "target_type" - t.index ["action"], name: "index_events_on_action", using: :btree - t.index ["author_id", "project_id"], name: "index_events_on_author_id_and_project_id", using: :btree - t.index ["created_at", "author_id"], name: "analytics_index_events_on_created_at_and_author_id", using: :btree - t.index ["project_id", "created_at"], name: "index_events_on_project_id_and_created_at", using: :btree - t.index ["project_id", "id"], name: "index_events_on_project_id_and_id", using: :btree - t.index ["target_type", "target_id"], name: "index_events_on_target_type_and_target_id", using: :btree + t.index ["action"], name: "index_events_on_action" + t.index ["author_id", "project_id"], name: "index_events_on_author_id_and_project_id" + t.index ["created_at", "author_id"], name: "analytics_index_events_on_created_at_and_author_id" + t.index ["project_id", "created_at"], name: "index_events_on_project_id_and_created_at" + t.index ["project_id", "id"], name: "index_events_on_project_id_and_id" + t.index ["target_type", "target_id"], name: "index_events_on_target_type_and_target_id" end create_table "feature_gates", id: :serial, force: :cascade do |t| @@ -1236,29 +1317,29 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "value" t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.index ["feature_key", "key", "value"], name: "index_feature_gates_on_feature_key_and_key_and_value", unique: true, using: :btree + t.index ["feature_key", "key", "value"], name: "index_feature_gates_on_feature_key_and_key_and_value", unique: true end create_table "features", id: :serial, force: :cascade do |t| t.string "key", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.index ["key"], name: "index_features_on_key", unique: true, using: :btree + t.index ["key"], name: "index_features_on_key", unique: true end create_table "fork_network_members", id: :serial, force: :cascade do |t| t.integer "fork_network_id", null: false t.integer "project_id", null: false t.integer "forked_from_project_id" - t.index ["fork_network_id"], name: "index_fork_network_members_on_fork_network_id", using: :btree - t.index ["forked_from_project_id"], name: "index_fork_network_members_on_forked_from_project_id", using: :btree - t.index ["project_id"], name: "index_fork_network_members_on_project_id", unique: true, using: :btree + t.index ["fork_network_id"], name: "index_fork_network_members_on_fork_network_id" + t.index ["forked_from_project_id"], name: "index_fork_network_members_on_forked_from_project_id" + t.index ["project_id"], name: "index_fork_network_members_on_project_id", unique: true end create_table "fork_networks", id: :serial, force: :cascade do |t| t.integer "root_project_id" t.string "deleted_root_project_name" - t.index ["root_project_id"], name: "index_fork_networks_on_root_project_id", unique: true, using: :btree + t.index ["root_project_id"], name: "index_fork_networks_on_root_project_id", unique: true end create_table "forked_project_links", id: :serial, force: :cascade do |t| @@ -1266,13 +1347,18 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "forked_from_project_id", null: false t.datetime "created_at" t.datetime "updated_at" - t.index ["forked_to_project_id"], name: "index_forked_project_links_on_forked_to_project_id", unique: true, using: :btree + t.index ["forked_to_project_id"], name: "index_forked_project_links_on_forked_to_project_id", unique: true end create_table "geo_cache_invalidation_events", force: :cascade do |t| t.string "key", null: false end + create_table "geo_container_repository_updated_events", force: :cascade do |t| + t.integer "container_repository_id", null: false + t.index ["container_repository_id"], name: "idx_geo_con_rep_updated_events_on_container_repository_id" + end + create_table "geo_event_log", force: :cascade do |t| t.datetime "created_at", null: false t.bigint "repository_updated_event_id" @@ -1287,25 +1373,27 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.bigint "job_artifact_deleted_event_id" t.bigint "reset_checksum_event_id" t.bigint "cache_invalidation_event_id" - t.index ["cache_invalidation_event_id"], name: "index_geo_event_log_on_cache_invalidation_event_id", where: "(cache_invalidation_event_id IS NOT NULL)", using: :btree - t.index ["hashed_storage_attachments_event_id"], name: "index_geo_event_log_on_hashed_storage_attachments_event_id", where: "(hashed_storage_attachments_event_id IS NOT NULL)", using: :btree - t.index ["hashed_storage_migrated_event_id"], name: "index_geo_event_log_on_hashed_storage_migrated_event_id", where: "(hashed_storage_migrated_event_id IS NOT NULL)", using: :btree - t.index ["job_artifact_deleted_event_id"], name: "index_geo_event_log_on_job_artifact_deleted_event_id", where: "(job_artifact_deleted_event_id IS NOT NULL)", using: :btree - t.index ["lfs_object_deleted_event_id"], name: "index_geo_event_log_on_lfs_object_deleted_event_id", where: "(lfs_object_deleted_event_id IS NOT NULL)", using: :btree - t.index ["repositories_changed_event_id"], name: "index_geo_event_log_on_repositories_changed_event_id", where: "(repositories_changed_event_id IS NOT NULL)", using: :btree - t.index ["repository_created_event_id"], name: "index_geo_event_log_on_repository_created_event_id", where: "(repository_created_event_id IS NOT NULL)", using: :btree - t.index ["repository_deleted_event_id"], name: "index_geo_event_log_on_repository_deleted_event_id", where: "(repository_deleted_event_id IS NOT NULL)", using: :btree - t.index ["repository_renamed_event_id"], name: "index_geo_event_log_on_repository_renamed_event_id", where: "(repository_renamed_event_id IS NOT NULL)", using: :btree - t.index ["repository_updated_event_id"], name: "index_geo_event_log_on_repository_updated_event_id", where: "(repository_updated_event_id IS NOT NULL)", using: :btree - t.index ["reset_checksum_event_id"], name: "index_geo_event_log_on_reset_checksum_event_id", where: "(reset_checksum_event_id IS NOT NULL)", using: :btree - t.index ["upload_deleted_event_id"], name: "index_geo_event_log_on_upload_deleted_event_id", where: "(upload_deleted_event_id IS NOT NULL)", using: :btree + t.bigint "container_repository_updated_event_id" + t.index ["cache_invalidation_event_id"], name: "index_geo_event_log_on_cache_invalidation_event_id", where: "(cache_invalidation_event_id IS NOT NULL)" + t.index ["container_repository_updated_event_id"], name: "index_geo_event_log_on_container_repository_updated_event_id" + t.index ["hashed_storage_attachments_event_id"], name: "index_geo_event_log_on_hashed_storage_attachments_event_id", where: "(hashed_storage_attachments_event_id IS NOT NULL)" + t.index ["hashed_storage_migrated_event_id"], name: "index_geo_event_log_on_hashed_storage_migrated_event_id", where: "(hashed_storage_migrated_event_id IS NOT NULL)" + t.index ["job_artifact_deleted_event_id"], name: "index_geo_event_log_on_job_artifact_deleted_event_id", where: "(job_artifact_deleted_event_id IS NOT NULL)" + t.index ["lfs_object_deleted_event_id"], name: "index_geo_event_log_on_lfs_object_deleted_event_id", where: "(lfs_object_deleted_event_id IS NOT NULL)" + t.index ["repositories_changed_event_id"], name: "index_geo_event_log_on_repositories_changed_event_id", where: "(repositories_changed_event_id IS NOT NULL)" + t.index ["repository_created_event_id"], name: "index_geo_event_log_on_repository_created_event_id", where: "(repository_created_event_id IS NOT NULL)" + t.index ["repository_deleted_event_id"], name: "index_geo_event_log_on_repository_deleted_event_id", where: "(repository_deleted_event_id IS NOT NULL)" + t.index ["repository_renamed_event_id"], name: "index_geo_event_log_on_repository_renamed_event_id", where: "(repository_renamed_event_id IS NOT NULL)" + t.index ["repository_updated_event_id"], name: "index_geo_event_log_on_repository_updated_event_id", where: "(repository_updated_event_id IS NOT NULL)" + t.index ["reset_checksum_event_id"], name: "index_geo_event_log_on_reset_checksum_event_id", where: "(reset_checksum_event_id IS NOT NULL)" + t.index ["upload_deleted_event_id"], name: "index_geo_event_log_on_upload_deleted_event_id", where: "(upload_deleted_event_id IS NOT NULL)" end create_table "geo_hashed_storage_attachments_events", force: :cascade do |t| t.integer "project_id", null: false t.text "old_attachments_path", null: false t.text "new_attachments_path", null: false - t.index ["project_id"], name: "index_geo_hashed_storage_attachments_events_on_project_id", using: :btree + t.index ["project_id"], name: "index_geo_hashed_storage_attachments_events_on_project_id" end create_table "geo_hashed_storage_migrated_events", force: :cascade do |t| @@ -1317,20 +1405,20 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.text "new_wiki_disk_path", null: false t.integer "old_storage_version", limit: 2 t.integer "new_storage_version", limit: 2, null: false - t.index ["project_id"], name: "index_geo_hashed_storage_migrated_events_on_project_id", using: :btree + t.index ["project_id"], name: "index_geo_hashed_storage_migrated_events_on_project_id" end create_table "geo_job_artifact_deleted_events", force: :cascade do |t| t.integer "job_artifact_id", null: false t.string "file_path", null: false - t.index ["job_artifact_id"], name: "index_geo_job_artifact_deleted_events_on_job_artifact_id", using: :btree + t.index ["job_artifact_id"], name: "index_geo_job_artifact_deleted_events_on_job_artifact_id" end create_table "geo_lfs_object_deleted_events", force: :cascade do |t| t.integer "lfs_object_id", null: false t.string "oid", null: false t.string "file_path", null: false - t.index ["lfs_object_id"], name: "index_geo_lfs_object_deleted_events_on_lfs_object_id", using: :btree + t.index ["lfs_object_id"], name: "index_geo_lfs_object_deleted_events_on_lfs_object_id" end create_table "geo_node_namespace_links", id: :serial, force: :cascade do |t| @@ -1338,9 +1426,9 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "namespace_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.index ["geo_node_id", "namespace_id"], name: "index_geo_node_namespace_links_on_geo_node_id_and_namespace_id", unique: true, using: :btree - t.index ["geo_node_id"], name: "index_geo_node_namespace_links_on_geo_node_id", using: :btree - t.index ["namespace_id"], name: "index_geo_node_namespace_links_on_namespace_id", using: :btree + t.index ["geo_node_id", "namespace_id"], name: "index_geo_node_namespace_links_on_geo_node_id_and_namespace_id", unique: true + t.index ["geo_node_id"], name: "index_geo_node_namespace_links_on_geo_node_id" + t.index ["namespace_id"], name: "index_geo_node_namespace_links_on_namespace_id" end create_table "geo_node_statuses", id: :serial, force: :cascade do |t| @@ -1389,7 +1477,11 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "repositories_retrying_verification_count" t.integer "wikis_retrying_verification_count" t.integer "projects_count" - t.index ["geo_node_id"], name: "index_geo_node_statuses_on_geo_node_id", unique: true, using: :btree + t.integer "container_repositories_count" + t.integer "container_repositories_synced_count" + t.integer "container_repositories_failed_count" + t.integer "container_repositories_registry_count" + t.index ["geo_node_id"], name: "index_geo_node_statuses_on_geo_node_id", unique: true end create_table "geo_nodes", id: :serial, force: :cascade do |t| @@ -1409,14 +1501,18 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "minimum_reverification_interval", default: 7, null: false t.string "internal_url" t.string "name", null: false - t.index ["access_key"], name: "index_geo_nodes_on_access_key", using: :btree - t.index ["name"], name: "index_geo_nodes_on_name", unique: true, using: :btree - t.index ["primary"], name: "index_geo_nodes_on_primary", using: :btree + t.integer "container_repositories_max_capacity", default: 10, null: false + t.datetime_with_timezone "created_at" + t.datetime_with_timezone "updated_at" + t.boolean "sync_object_storage", default: false, null: false + t.index ["access_key"], name: "index_geo_nodes_on_access_key" + t.index ["name"], name: "index_geo_nodes_on_name", unique: true + t.index ["primary"], name: "index_geo_nodes_on_primary" end create_table "geo_repositories_changed_events", force: :cascade do |t| t.integer "geo_node_id", null: false - t.index ["geo_node_id"], name: "index_geo_repositories_changed_events_on_geo_node_id", using: :btree + t.index ["geo_node_id"], name: "index_geo_repositories_changed_events_on_geo_node_id" end create_table "geo_repository_created_events", force: :cascade do |t| @@ -1425,7 +1521,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.text "repo_path", null: false t.text "wiki_path" t.text "project_name", null: false - t.index ["project_id"], name: "index_geo_repository_created_events_on_project_id", using: :btree + t.index ["project_id"], name: "index_geo_repository_created_events_on_project_id" end create_table "geo_repository_deleted_events", force: :cascade do |t| @@ -1434,7 +1530,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.text "deleted_path", null: false t.text "deleted_wiki_path" t.text "deleted_project_name", null: false - t.index ["project_id"], name: "index_geo_repository_deleted_events_on_project_id", using: :btree + t.index ["project_id"], name: "index_geo_repository_deleted_events_on_project_id" end create_table "geo_repository_renamed_events", force: :cascade do |t| @@ -1446,7 +1542,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.text "new_wiki_path_with_namespace", null: false t.text "old_path", null: false t.text "new_path", null: false - t.index ["project_id"], name: "index_geo_repository_renamed_events_on_project_id", using: :btree + t.index ["project_id"], name: "index_geo_repository_renamed_events_on_project_id" end create_table "geo_repository_updated_events", force: :cascade do |t| @@ -1457,13 +1553,13 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.boolean "new_branch", default: false, null: false t.boolean "remove_branch", default: false, null: false t.text "ref" - t.index ["project_id"], name: "index_geo_repository_updated_events_on_project_id", using: :btree - t.index ["source"], name: "index_geo_repository_updated_events_on_source", using: :btree + t.index ["project_id"], name: "index_geo_repository_updated_events_on_project_id" + t.index ["source"], name: "index_geo_repository_updated_events_on_source" end create_table "geo_reset_checksum_events", force: :cascade do |t| t.integer "project_id", null: false - t.index ["project_id"], name: "index_geo_reset_checksum_events_on_project_id", using: :btree + t.index ["project_id"], name: "index_geo_reset_checksum_events_on_project_id" end create_table "geo_upload_deleted_events", force: :cascade do |t| @@ -1472,7 +1568,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "model_id", null: false t.string "model_type", null: false t.string "uploader", null: false - t.index ["upload_id"], name: "index_geo_upload_deleted_events_on_upload_id", using: :btree + t.index ["upload_id"], name: "index_geo_upload_deleted_events_on_upload_id" end create_table "gitlab_subscriptions", force: :cascade do |t| @@ -1486,17 +1582,17 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "max_seats_used", default: 0 t.integer "seats", default: 0 t.boolean "trial", default: false - t.index ["hosted_plan_id"], name: "index_gitlab_subscriptions_on_hosted_plan_id", using: :btree - t.index ["namespace_id"], name: "index_gitlab_subscriptions_on_namespace_id", unique: true, using: :btree + t.index ["hosted_plan_id"], name: "index_gitlab_subscriptions_on_hosted_plan_id" + t.index ["namespace_id"], name: "index_gitlab_subscriptions_on_namespace_id", unique: true end create_table "gpg_key_subkeys", id: :serial, force: :cascade do |t| t.integer "gpg_key_id", null: false t.binary "keyid" t.binary "fingerprint" - t.index ["fingerprint"], name: "index_gpg_key_subkeys_on_fingerprint", unique: true, using: :btree - t.index ["gpg_key_id"], name: "index_gpg_key_subkeys_on_gpg_key_id", using: :btree - t.index ["keyid"], name: "index_gpg_key_subkeys_on_keyid", unique: true, using: :btree + t.index ["fingerprint"], name: "index_gpg_key_subkeys_on_fingerprint", unique: true + t.index ["gpg_key_id"], name: "index_gpg_key_subkeys_on_gpg_key_id" + t.index ["keyid"], name: "index_gpg_key_subkeys_on_keyid", unique: true end create_table "gpg_keys", id: :serial, force: :cascade do |t| @@ -1506,9 +1602,9 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.binary "primary_keyid" t.binary "fingerprint" t.text "key" - t.index ["fingerprint"], name: "index_gpg_keys_on_fingerprint", unique: true, using: :btree - t.index ["primary_keyid"], name: "index_gpg_keys_on_primary_keyid", unique: true, using: :btree - t.index ["user_id"], name: "index_gpg_keys_on_user_id", using: :btree + t.index ["fingerprint"], name: "index_gpg_keys_on_fingerprint", unique: true + t.index ["primary_keyid"], name: "index_gpg_keys_on_primary_keyid", unique: true + t.index ["user_id"], name: "index_gpg_keys_on_user_id" end create_table "gpg_signatures", id: :serial, force: :cascade do |t| @@ -1522,11 +1618,11 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.text "gpg_key_user_email" t.integer "verification_status", limit: 2, default: 0, null: false t.integer "gpg_key_subkey_id" - t.index ["commit_sha"], name: "index_gpg_signatures_on_commit_sha", unique: true, using: :btree - t.index ["gpg_key_id"], name: "index_gpg_signatures_on_gpg_key_id", using: :btree - t.index ["gpg_key_primary_keyid"], name: "index_gpg_signatures_on_gpg_key_primary_keyid", using: :btree - t.index ["gpg_key_subkey_id"], name: "index_gpg_signatures_on_gpg_key_subkey_id", using: :btree - t.index ["project_id"], name: "index_gpg_signatures_on_project_id", using: :btree + t.index ["commit_sha"], name: "index_gpg_signatures_on_commit_sha", unique: true + t.index ["gpg_key_id"], name: "index_gpg_signatures_on_gpg_key_id" + t.index ["gpg_key_primary_keyid"], name: "index_gpg_signatures_on_gpg_key_primary_keyid" + t.index ["gpg_key_subkey_id"], name: "index_gpg_signatures_on_gpg_key_subkey_id" + t.index ["project_id"], name: "index_gpg_signatures_on_project_id" end create_table "group_custom_attributes", id: :serial, force: :cascade do |t| @@ -1535,8 +1631,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "group_id", null: false t.string "key", null: false t.string "value", null: false - t.index ["group_id", "key"], name: "index_group_custom_attributes_on_group_id_and_key", unique: true, using: :btree - t.index ["key", "value"], name: "index_group_custom_attributes_on_key_and_value", using: :btree + t.index ["group_id", "key"], name: "index_group_custom_attributes_on_group_id_and_key", unique: true + t.index ["key", "value"], name: "index_group_custom_attributes_on_key_and_value" end create_table "historical_data", id: :serial, force: :cascade do |t| @@ -1554,8 +1650,9 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime "updated_at" t.integer "saml_provider_id" t.string "secondary_extern_uid" - t.index ["saml_provider_id"], name: "index_identities_on_saml_provider_id", where: "(saml_provider_id IS NOT NULL)", using: :btree - t.index ["user_id"], name: "index_identities_on_user_id", using: :btree + t.index "lower((extern_uid)::text), provider", name: "index_on_identities_lower_extern_uid_and_provider" + t.index ["saml_provider_id"], name: "index_identities_on_saml_provider_id", where: "(saml_provider_id IS NOT NULL)" + t.index ["user_id"], name: "index_identities_on_user_id" end create_table "import_export_uploads", id: :serial, force: :cascade do |t| @@ -1563,8 +1660,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "project_id" t.text "import_file" t.text "export_file" - t.index ["project_id"], name: "index_import_export_uploads_on_project_id", using: :btree - t.index ["updated_at"], name: "index_import_export_uploads_on_updated_at", using: :btree + t.index ["project_id"], name: "index_import_export_uploads_on_project_id" + t.index ["updated_at"], name: "index_import_export_uploads_on_updated_at" end create_table "index_statuses", id: :serial, force: :cascade do |t| @@ -1576,14 +1673,14 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime "updated_at", null: false t.binary "last_wiki_commit" t.datetime_with_timezone "wiki_indexed_at" - t.index ["project_id"], name: "index_index_statuses_on_project_id", unique: true, using: :btree + t.index ["project_id"], name: "index_index_statuses_on_project_id", unique: true end create_table "insights", id: :serial, force: :cascade do |t| t.integer "namespace_id", null: false t.integer "project_id", null: false - t.index ["namespace_id"], name: "index_insights_on_namespace_id", using: :btree - t.index ["project_id"], name: "index_insights_on_project_id", using: :btree + t.index ["namespace_id"], name: "index_insights_on_namespace_id" + t.index ["project_id"], name: "index_insights_on_project_id" end create_table "internal_ids", force: :cascade do |t| @@ -1591,23 +1688,23 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "usage", null: false t.integer "last_value", null: false t.integer "namespace_id" - t.index ["namespace_id"], name: "index_internal_ids_on_namespace_id", using: :btree - t.index ["project_id"], name: "index_internal_ids_on_project_id", using: :btree - t.index ["usage", "namespace_id"], name: "index_internal_ids_on_usage_and_namespace_id", unique: true, where: "(namespace_id IS NOT NULL)", using: :btree - t.index ["usage", "project_id"], name: "index_internal_ids_on_usage_and_project_id", unique: true, where: "(project_id IS NOT NULL)", using: :btree + t.index ["namespace_id"], name: "index_internal_ids_on_namespace_id" + t.index ["project_id"], name: "index_internal_ids_on_project_id" + t.index ["usage", "namespace_id"], name: "index_internal_ids_on_usage_and_namespace_id", unique: true, where: "(namespace_id IS NOT NULL)" + t.index ["usage", "project_id"], name: "index_internal_ids_on_usage_and_project_id", unique: true, where: "(project_id IS NOT NULL)" end create_table "ip_restrictions", force: :cascade do |t| t.integer "group_id", null: false t.string "range", null: false - t.index ["group_id"], name: "index_ip_restrictions_on_group_id", using: :btree + t.index ["group_id"], name: "index_ip_restrictions_on_group_id" end create_table "issue_assignees", id: false, force: :cascade do |t| t.integer "user_id", null: false t.integer "issue_id", null: false - t.index ["issue_id", "user_id"], name: "index_issue_assignees_on_issue_id_and_user_id", unique: true, using: :btree - t.index ["user_id"], name: "index_issue_assignees_on_user_id", using: :btree + t.index ["issue_id", "user_id"], name: "index_issue_assignees_on_issue_id_and_user_id", unique: true + t.index ["user_id"], name: "index_issue_assignees_on_user_id" end create_table "issue_links", id: :serial, force: :cascade do |t| @@ -1615,9 +1712,9 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "target_id", null: false t.datetime "created_at" t.datetime "updated_at" - t.index ["source_id", "target_id"], name: "index_issue_links_on_source_id_and_target_id", unique: true, using: :btree - t.index ["source_id"], name: "index_issue_links_on_source_id", using: :btree - t.index ["target_id"], name: "index_issue_links_on_target_id", using: :btree + t.index ["source_id", "target_id"], name: "index_issue_links_on_source_id_and_target_id", unique: true + t.index ["source_id"], name: "index_issue_links_on_source_id" + t.index ["target_id"], name: "index_issue_links_on_target_id" end create_table "issue_metrics", id: :serial, force: :cascade do |t| @@ -1627,7 +1724,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime "first_added_to_board_at" t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.index ["issue_id"], name: "index_issue_metrics", using: :btree + t.index ["issue_id"], name: "index_issue_metrics" end create_table "issue_tracker_data", force: :cascade do |t| @@ -1640,7 +1737,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "encrypted_issues_url_iv" t.string "encrypted_new_issue_url" t.string "encrypted_new_issue_url_iv" - t.index ["service_id"], name: "index_issue_tracker_data_on_service_id", using: :btree + t.index ["service_id"], name: "index_issue_tracker_data_on_service_id" end create_table "issues", id: :serial, force: :cascade do |t| @@ -1671,21 +1768,22 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "state_id", limit: 2 t.string "service_desk_reply_to" t.integer "weight" - t.index ["author_id"], name: "index_issues_on_author_id", using: :btree - t.index ["closed_by_id"], name: "index_issues_on_closed_by_id", using: :btree - t.index ["confidential"], name: "index_issues_on_confidential", using: :btree - t.index ["description"], name: "index_issues_on_description_trigram", using: :gin, opclasses: {"description"=>"gin_trgm_ops"} - t.index ["milestone_id"], name: "index_issues_on_milestone_id", using: :btree - t.index ["moved_to_id"], name: "index_issues_on_moved_to_id", where: "(moved_to_id IS NOT NULL)", using: :btree - t.index ["project_id", "created_at", "id", "state"], name: "index_issues_on_project_id_and_created_at_and_id_and_state", using: :btree - t.index ["project_id", "due_date", "id", "state"], name: "idx_issues_on_project_id_and_due_date_and_id_and_state_partial", where: "(due_date IS NOT NULL)", using: :btree - t.index ["project_id", "iid"], name: "index_issues_on_project_id_and_iid", unique: true, using: :btree - t.index ["project_id", "updated_at", "id", "state"], name: "index_issues_on_project_id_and_updated_at_and_id_and_state", using: :btree - t.index ["relative_position"], name: "index_issues_on_relative_position", using: :btree - t.index ["state"], name: "index_issues_on_state", using: :btree - t.index ["title"], name: "index_issues_on_title_trigram", using: :gin, opclasses: {"title"=>"gin_trgm_ops"} - t.index ["updated_at"], name: "index_issues_on_updated_at", using: :btree - t.index ["updated_by_id"], name: "index_issues_on_updated_by_id", where: "(updated_by_id IS NOT NULL)", using: :btree + t.index ["author_id"], name: "index_issues_on_author_id" + t.index ["closed_by_id"], name: "index_issues_on_closed_by_id" + t.index ["confidential"], name: "index_issues_on_confidential" + t.index ["description"], name: "index_issues_on_description_trigram", opclass: :gin_trgm_ops, using: :gin + t.index ["milestone_id"], name: "index_issues_on_milestone_id" + t.index ["moved_to_id"], name: "index_issues_on_moved_to_id", where: "(moved_to_id IS NOT NULL)" + t.index ["project_id", "created_at", "id", "state"], name: "index_issues_on_project_id_and_created_at_and_id_and_state" + t.index ["project_id", "due_date", "id", "state"], name: "idx_issues_on_project_id_and_due_date_and_id_and_state_partial", where: "(due_date IS NOT NULL)" + t.index ["project_id", "iid"], name: "index_issues_on_project_id_and_iid", unique: true + t.index ["project_id", "relative_position", "state", "id"], name: "index_issues_on_project_id_and_rel_position_and_state_and_id", order: { id: :desc } + t.index ["project_id", "updated_at", "id", "state"], name: "index_issues_on_project_id_and_updated_at_and_id_and_state" + t.index ["relative_position"], name: "index_issues_on_relative_position" + t.index ["state"], name: "index_issues_on_state" + t.index ["title"], name: "index_issues_on_title_trigram", opclass: :gin_trgm_ops, using: :gin + t.index ["updated_at"], name: "index_issues_on_updated_at" + t.index ["updated_by_id"], name: "index_issues_on_updated_by_id", where: "(updated_by_id IS NOT NULL)" end create_table "jira_connect_installations", force: :cascade do |t| @@ -1693,7 +1791,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "encrypted_shared_secret" t.string "encrypted_shared_secret_iv" t.string "base_url" - t.index ["client_key"], name: "index_jira_connect_installations_on_client_key", unique: true, using: :btree + t.index ["client_key"], name: "index_jira_connect_installations_on_client_key", unique: true end create_table "jira_connect_subscriptions", force: :cascade do |t| @@ -1701,9 +1799,9 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.bigint "jira_connect_installation_id", null: false t.integer "namespace_id", null: false t.datetime_with_timezone "updated_at", null: false - t.index ["jira_connect_installation_id", "namespace_id"], name: "idx_jira_connect_subscriptions_on_installation_id_namespace_id", unique: true, using: :btree - t.index ["jira_connect_installation_id"], name: "idx_jira_connect_subscriptions_on_installation_id", using: :btree - t.index ["namespace_id"], name: "index_jira_connect_subscriptions_on_namespace_id", using: :btree + t.index ["jira_connect_installation_id", "namespace_id"], name: "idx_jira_connect_subscriptions_on_installation_id_namespace_id", unique: true + t.index ["jira_connect_installation_id"], name: "idx_jira_connect_subscriptions_on_installation_id" + t.index ["namespace_id"], name: "index_jira_connect_subscriptions_on_namespace_id" end create_table "jira_tracker_data", force: :cascade do |t| @@ -1719,7 +1817,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "encrypted_password" t.string "encrypted_password_iv" t.string "jira_issue_transition_id" - t.index ["service_id"], name: "index_jira_tracker_data_on_service_id", using: :btree + t.index ["service_id"], name: "index_jira_tracker_data_on_service_id" end create_table "keys", id: :serial, force: :cascade do |t| @@ -1732,8 +1830,9 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "fingerprint" t.boolean "public", default: false, null: false t.datetime "last_used_at" - t.index ["fingerprint"], name: "index_keys_on_fingerprint", unique: true, using: :btree - t.index ["user_id"], name: "index_keys_on_user_id", using: :btree + t.index ["fingerprint"], name: "index_keys_on_fingerprint", unique: true + t.index ["id", "type"], name: "index_on_deploy_keys_id_and_type_and_public", unique: true, where: "(public = true)" + t.index ["user_id"], name: "index_keys_on_user_id" end create_table "label_links", id: :serial, force: :cascade do |t| @@ -1742,8 +1841,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "target_type" t.datetime "created_at" t.datetime "updated_at" - t.index ["label_id"], name: "index_label_links_on_label_id", using: :btree - t.index ["target_id", "target_type"], name: "index_label_links_on_target_id_and_target_type", using: :btree + t.index ["label_id"], name: "index_label_links_on_label_id" + t.index ["target_id", "target_type"], name: "index_label_links_on_target_id_and_target_type" end create_table "label_priorities", id: :serial, force: :cascade do |t| @@ -1752,9 +1851,9 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "priority", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.index ["label_id"], name: "index_label_priorities_on_label_id", using: :btree - t.index ["priority"], name: "index_label_priorities_on_priority", using: :btree - t.index ["project_id", "label_id"], name: "index_label_priorities_on_project_id_and_label_id", unique: true, using: :btree + t.index ["label_id"], name: "index_label_priorities_on_label_id" + t.index ["priority"], name: "index_label_priorities_on_priority" + t.index ["project_id", "label_id"], name: "index_label_priorities_on_project_id_and_label_id", unique: true end create_table "labels", id: :serial, force: :cascade do |t| @@ -1769,11 +1868,11 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "type" t.integer "group_id" t.integer "cached_markdown_version" - t.index ["group_id", "project_id", "title"], name: "index_labels_on_group_id_and_project_id_and_title", unique: true, using: :btree - t.index ["project_id"], name: "index_labels_on_project_id", using: :btree - t.index ["template"], name: "index_labels_on_template", where: "template", using: :btree - t.index ["title"], name: "index_labels_on_title", using: :btree - t.index ["type", "project_id"], name: "index_labels_on_type_and_project_id", using: :btree + t.index ["group_id", "project_id", "title"], name: "index_labels_on_group_id_and_project_id_and_title", unique: true + t.index ["project_id"], name: "index_labels_on_project_id" + t.index ["template"], name: "index_labels_on_template", where: "template" + t.index ["title"], name: "index_labels_on_title" + t.index ["type", "project_id"], name: "index_labels_on_type_and_project_id" end create_table "ldap_group_links", id: :serial, force: :cascade do |t| @@ -1791,8 +1890,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "user_id", null: false t.datetime "created_at", null: false t.string "path", limit: 511 - t.index ["project_id", "path"], name: "index_lfs_file_locks_on_project_id_and_path", unique: true, using: :btree - t.index ["user_id"], name: "index_lfs_file_locks_on_user_id", using: :btree + t.index ["project_id", "path"], name: "index_lfs_file_locks_on_project_id_and_path", unique: true + t.index ["user_id"], name: "index_lfs_file_locks_on_user_id" end create_table "lfs_objects", id: :serial, force: :cascade do |t| @@ -1802,8 +1901,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime "updated_at" t.string "file" t.integer "file_store" - t.index ["file_store"], name: "index_lfs_objects_on_file_store", using: :btree - t.index ["oid"], name: "index_lfs_objects_on_oid", unique: true, using: :btree + t.index ["file_store"], name: "index_lfs_objects_on_file_store" + t.index ["oid"], name: "index_lfs_objects_on_oid", unique: true end create_table "lfs_objects_projects", id: :serial, force: :cascade do |t| @@ -1812,8 +1911,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime "created_at" t.datetime "updated_at" t.integer "repository_type", limit: 2 - t.index ["lfs_object_id"], name: "index_lfs_objects_projects_on_lfs_object_id", using: :btree - t.index ["project_id"], name: "index_lfs_objects_projects_on_project_id", using: :btree + t.index ["lfs_object_id"], name: "index_lfs_objects_projects_on_lfs_object_id" + t.index ["project_id"], name: "index_lfs_objects_projects_on_project_id" end create_table "licenses", id: :serial, force: :cascade do |t| @@ -1831,11 +1930,11 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime "updated_at", null: false t.integer "milestone_id" t.integer "user_id" - t.index ["board_id", "label_id"], name: "index_lists_on_board_id_and_label_id", unique: true, using: :btree - t.index ["label_id"], name: "index_lists_on_label_id", using: :btree - t.index ["list_type"], name: "index_lists_on_list_type", using: :btree - t.index ["milestone_id"], name: "index_lists_on_milestone_id", using: :btree - t.index ["user_id"], name: "index_lists_on_user_id", using: :btree + t.index ["board_id", "label_id"], name: "index_lists_on_board_id_and_label_id", unique: true + t.index ["label_id"], name: "index_lists_on_label_id" + t.index ["list_type"], name: "index_lists_on_list_type" + t.index ["milestone_id"], name: "index_lists_on_milestone_id" + t.index ["user_id"], name: "index_lists_on_user_id" end create_table "members", id: :serial, force: :cascade do |t| @@ -1855,20 +1954,20 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.date "expires_at" t.boolean "ldap", default: false, null: false t.boolean "override", default: false, null: false - t.index ["access_level"], name: "index_members_on_access_level", using: :btree - t.index ["invite_email"], name: "index_members_on_invite_email", using: :btree - t.index ["invite_token"], name: "index_members_on_invite_token", unique: true, using: :btree - t.index ["requested_at"], name: "index_members_on_requested_at", using: :btree - t.index ["source_id", "source_type"], name: "index_members_on_source_id_and_source_type", using: :btree - t.index ["user_id"], name: "index_members_on_user_id", using: :btree + t.index ["access_level"], name: "index_members_on_access_level" + t.index ["invite_email"], name: "index_members_on_invite_email" + t.index ["invite_token"], name: "index_members_on_invite_token", unique: true + t.index ["requested_at"], name: "index_members_on_requested_at" + t.index ["source_id", "source_type"], name: "index_members_on_source_id_and_source_type" + t.index ["user_id"], name: "index_members_on_user_id" end create_table "merge_request_assignees", force: :cascade do |t| t.integer "user_id", null: false t.integer "merge_request_id", null: false - t.index ["merge_request_id", "user_id"], name: "index_merge_request_assignees_on_merge_request_id_and_user_id", unique: true, using: :btree - t.index ["merge_request_id"], name: "index_merge_request_assignees_on_merge_request_id", using: :btree - t.index ["user_id"], name: "index_merge_request_assignees_on_user_id", using: :btree + t.index ["merge_request_id", "user_id"], name: "index_merge_request_assignees_on_merge_request_id_and_user_id", unique: true + t.index ["merge_request_id"], name: "index_merge_request_assignees_on_merge_request_id" + t.index ["user_id"], name: "index_merge_request_assignees_on_user_id" end create_table "merge_request_blocks", force: :cascade do |t| @@ -1876,8 +1975,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "blocked_merge_request_id", null: false t.datetime_with_timezone "created_at", null: false t.datetime_with_timezone "updated_at", null: false - t.index ["blocked_merge_request_id"], name: "index_merge_request_blocks_on_blocked_merge_request_id", using: :btree - t.index ["blocking_merge_request_id", "blocked_merge_request_id"], name: "index_mr_blocks_on_blocking_and_blocked_mr_ids", unique: true, using: :btree + t.index ["blocked_merge_request_id"], name: "index_merge_request_blocks_on_blocked_merge_request_id" + t.index ["blocking_merge_request_id", "blocked_merge_request_id"], name: "index_mr_blocks_on_blocking_and_blocked_mr_ids", unique: true end create_table "merge_request_diff_commits", id: false, force: :cascade do |t| @@ -1891,8 +1990,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.text "committer_name" t.text "committer_email" t.text "message" - t.index ["merge_request_diff_id", "relative_order"], name: "index_merge_request_diff_commits_on_mr_diff_id_and_order", unique: true, using: :btree - t.index ["sha"], name: "index_merge_request_diff_commits_on_sha", using: :btree + t.index ["merge_request_diff_id", "relative_order"], name: "index_merge_request_diff_commits_on_mr_diff_id_and_order", unique: true + t.index ["sha"], name: "index_merge_request_diff_commits_on_sha" end create_table "merge_request_diff_files", id: false, force: :cascade do |t| @@ -1910,7 +2009,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.boolean "binary" t.integer "external_diff_offset" t.integer "external_diff_size" - t.index ["merge_request_diff_id", "relative_order"], name: "index_merge_request_diff_files_on_mr_diff_id_and_order", unique: true, using: :btree + t.index ["merge_request_diff_id", "relative_order"], name: "index_merge_request_diff_files_on_mr_diff_id_and_order", unique: true end create_table "merge_request_diffs", id: :serial, force: :cascade do |t| @@ -1926,8 +2025,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "external_diff" t.integer "external_diff_store" t.boolean "stored_externally" - t.index ["merge_request_id", "id"], name: "index_merge_request_diffs_on_merge_request_id_and_id", using: :btree - t.index ["merge_request_id", "id"], name: "index_merge_request_diffs_on_merge_request_id_and_id_partial", where: "((NOT stored_externally) OR (stored_externally IS NULL))", using: :btree + t.index ["merge_request_id", "id"], name: "index_merge_request_diffs_on_merge_request_id_and_id" + t.index ["merge_request_id", "id"], name: "index_merge_request_diffs_on_merge_request_id_and_id_partial", where: "((NOT stored_externally) OR (stored_externally IS NULL))" end create_table "merge_request_metrics", id: :serial, force: :cascade do |t| @@ -1942,13 +2041,19 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "merged_by_id" t.integer "latest_closed_by_id" t.datetime_with_timezone "latest_closed_at" - t.index ["first_deployed_to_production_at"], name: "index_merge_request_metrics_on_first_deployed_to_production_at", using: :btree - t.index ["latest_closed_at"], name: "index_merge_request_metrics_on_latest_closed_at", where: "(latest_closed_at IS NOT NULL)", using: :btree - t.index ["latest_closed_by_id"], name: "index_merge_request_metrics_on_latest_closed_by_id", using: :btree - t.index ["merge_request_id", "merged_at"], name: "index_merge_request_metrics_on_merge_request_id_and_merged_at", where: "(merged_at IS NOT NULL)", using: :btree - t.index ["merge_request_id"], name: "index_merge_request_metrics", using: :btree - t.index ["merged_by_id"], name: "index_merge_request_metrics_on_merged_by_id", using: :btree - t.index ["pipeline_id"], name: "index_merge_request_metrics_on_pipeline_id", using: :btree + t.datetime_with_timezone "first_comment_at" + t.datetime_with_timezone "first_commit_at" + t.datetime_with_timezone "last_commit_at" + t.integer "diff_size" + t.integer "modified_paths_size" + t.integer "commits_count" + t.index ["first_deployed_to_production_at"], name: "index_merge_request_metrics_on_first_deployed_to_production_at" + t.index ["latest_closed_at"], name: "index_merge_request_metrics_on_latest_closed_at", where: "(latest_closed_at IS NOT NULL)" + t.index ["latest_closed_by_id"], name: "index_merge_request_metrics_on_latest_closed_by_id" + t.index ["merge_request_id", "merged_at"], name: "index_merge_request_metrics_on_merge_request_id_and_merged_at", where: "(merged_at IS NOT NULL)" + t.index ["merge_request_id"], name: "index_merge_request_metrics" + t.index ["merged_by_id"], name: "index_merge_request_metrics_on_merged_by_id" + t.index ["pipeline_id"], name: "index_merge_request_metrics_on_pipeline_id" end create_table "merge_requests", id: :serial, force: :cascade do |t| @@ -1990,26 +2095,26 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "state_id", limit: 2 t.integer "approvals_before_merge" t.string "rebase_jid" - t.index ["assignee_id"], name: "index_merge_requests_on_assignee_id", using: :btree - t.index ["author_id"], name: "index_merge_requests_on_author_id", using: :btree - t.index ["created_at"], name: "index_merge_requests_on_created_at", using: :btree - t.index ["description"], name: "index_merge_requests_on_description_trigram", using: :gin, opclasses: {"description"=>"gin_trgm_ops"} - t.index ["head_pipeline_id"], name: "index_merge_requests_on_head_pipeline_id", using: :btree - t.index ["id", "merge_jid"], name: "index_merge_requests_on_id_and_merge_jid", where: "((merge_jid IS NOT NULL) AND ((state)::text = 'locked'::text))", using: :btree - t.index ["latest_merge_request_diff_id"], name: "index_merge_requests_on_latest_merge_request_diff_id", using: :btree - t.index ["merge_user_id"], name: "index_merge_requests_on_merge_user_id", where: "(merge_user_id IS NOT NULL)", using: :btree - t.index ["milestone_id"], name: "index_merge_requests_on_milestone_id", using: :btree - t.index ["source_branch"], name: "index_merge_requests_on_source_branch", using: :btree - t.index ["source_project_id", "source_branch"], name: "index_merge_requests_on_source_project_and_branch_state_opened", where: "((state)::text = 'opened'::text)", using: :btree - t.index ["source_project_id", "source_branch"], name: "index_merge_requests_on_source_project_id_and_source_branch", using: :btree - t.index ["state", "merge_status"], name: "index_merge_requests_on_state_and_merge_status", where: "(((state)::text = 'opened'::text) AND ((merge_status)::text = 'can_be_merged'::text))", using: :btree - t.index ["target_branch"], name: "index_merge_requests_on_target_branch", using: :btree - t.index ["target_project_id", "iid"], name: "index_merge_requests_on_target_project_id_and_iid", unique: true, using: :btree - t.index ["target_project_id", "iid"], name: "index_merge_requests_on_target_project_id_and_iid_opened", where: "((state)::text = 'opened'::text)", using: :btree - t.index ["target_project_id", "merge_commit_sha", "id"], name: "index_merge_requests_on_tp_id_and_merge_commit_sha_and_id", using: :btree - t.index ["title"], name: "index_merge_requests_on_title", using: :btree - t.index ["title"], name: "index_merge_requests_on_title_trigram", using: :gin, opclasses: {"title"=>"gin_trgm_ops"} - t.index ["updated_by_id"], name: "index_merge_requests_on_updated_by_id", where: "(updated_by_id IS NOT NULL)", using: :btree + t.index ["assignee_id"], name: "index_merge_requests_on_assignee_id" + t.index ["author_id"], name: "index_merge_requests_on_author_id" + t.index ["created_at"], name: "index_merge_requests_on_created_at" + t.index ["description"], name: "index_merge_requests_on_description_trigram", opclass: :gin_trgm_ops, using: :gin + t.index ["head_pipeline_id"], name: "index_merge_requests_on_head_pipeline_id" + t.index ["id", "merge_jid"], name: "index_merge_requests_on_id_and_merge_jid", where: "((merge_jid IS NOT NULL) AND ((state)::text = 'locked'::text))" + t.index ["latest_merge_request_diff_id"], name: "index_merge_requests_on_latest_merge_request_diff_id" + t.index ["merge_user_id"], name: "index_merge_requests_on_merge_user_id", where: "(merge_user_id IS NOT NULL)" + t.index ["milestone_id"], name: "index_merge_requests_on_milestone_id" + t.index ["source_branch"], name: "index_merge_requests_on_source_branch" + t.index ["source_project_id", "source_branch"], name: "index_merge_requests_on_source_project_and_branch_state_opened", where: "((state)::text = 'opened'::text)" + t.index ["source_project_id", "source_branch"], name: "index_merge_requests_on_source_project_id_and_source_branch" + t.index ["state", "merge_status"], name: "index_merge_requests_on_state_and_merge_status", where: "(((state)::text = 'opened'::text) AND ((merge_status)::text = 'can_be_merged'::text))" + t.index ["target_branch"], name: "index_merge_requests_on_target_branch" + t.index ["target_project_id", "iid"], name: "index_merge_requests_on_target_project_id_and_iid", unique: true + t.index ["target_project_id", "iid"], name: "index_merge_requests_on_target_project_id_and_iid_opened", where: "((state)::text = 'opened'::text)" + t.index ["target_project_id", "merge_commit_sha", "id"], name: "index_merge_requests_on_tp_id_and_merge_commit_sha_and_id" + t.index ["title"], name: "index_merge_requests_on_title" + t.index ["title"], name: "index_merge_requests_on_title_trigram", opclass: :gin_trgm_ops, using: :gin + t.index ["updated_by_id"], name: "index_merge_requests_on_updated_by_id", where: "(updated_by_id IS NOT NULL)" end create_table "merge_requests_closing_issues", id: :serial, force: :cascade do |t| @@ -2017,8 +2122,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "issue_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.index ["issue_id"], name: "index_merge_requests_closing_issues_on_issue_id", using: :btree - t.index ["merge_request_id"], name: "index_merge_requests_closing_issues_on_merge_request_id", using: :btree + t.index ["issue_id"], name: "index_merge_requests_closing_issues_on_issue_id" + t.index ["merge_request_id"], name: "index_merge_requests_closing_issues_on_merge_request_id" end create_table "merge_trains", force: :cascade do |t| @@ -2029,10 +2134,10 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime_with_timezone "updated_at", null: false t.integer "target_project_id", null: false t.text "target_branch", null: false - t.index ["merge_request_id"], name: "index_merge_trains_on_merge_request_id", unique: true, using: :btree - t.index ["pipeline_id"], name: "index_merge_trains_on_pipeline_id", using: :btree - t.index ["target_project_id"], name: "index_merge_trains_on_target_project_id", using: :btree - t.index ["user_id"], name: "index_merge_trains_on_user_id", using: :btree + t.index ["merge_request_id"], name: "index_merge_trains_on_merge_request_id", unique: true + t.index ["pipeline_id"], name: "index_merge_trains_on_pipeline_id" + t.index ["target_project_id"], name: "index_merge_trains_on_target_project_id" + t.index ["user_id"], name: "index_merge_trains_on_user_id" end create_table "milestones", id: :serial, force: :cascade do |t| @@ -2049,16 +2154,16 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.date "start_date" t.integer "cached_markdown_version" t.integer "group_id" - t.index ["description"], name: "index_milestones_on_description_trigram", using: :gin, opclasses: {"description"=>"gin_trgm_ops"} - t.index ["due_date"], name: "index_milestones_on_due_date", using: :btree - t.index ["group_id"], name: "index_milestones_on_group_id", using: :btree - t.index ["project_id", "iid"], name: "index_milestones_on_project_id_and_iid", unique: true, using: :btree - t.index ["title"], name: "index_milestones_on_title", using: :btree - t.index ["title"], name: "index_milestones_on_title_trigram", using: :gin, opclasses: {"title"=>"gin_trgm_ops"} + t.index ["description"], name: "index_milestones_on_description_trigram", opclass: :gin_trgm_ops, using: :gin + t.index ["due_date"], name: "index_milestones_on_due_date" + t.index ["group_id"], name: "index_milestones_on_group_id" + t.index ["project_id", "iid"], name: "index_milestones_on_project_id_and_iid", unique: true + t.index ["title"], name: "index_milestones_on_title" + t.index ["title"], name: "index_milestones_on_title_trigram", opclass: :gin_trgm_ops, using: :gin end create_table "namespace_aggregation_schedules", primary_key: "namespace_id", id: :integer, default: nil, force: :cascade do |t| - t.index ["namespace_id"], name: "index_namespace_aggregation_schedules_on_namespace_id", unique: true, using: :btree + t.index ["namespace_id"], name: "index_namespace_aggregation_schedules_on_namespace_id", unique: true end create_table "namespace_root_storage_statistics", primary_key: "namespace_id", id: :integer, default: nil, force: :cascade do |t| @@ -2069,14 +2174,14 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.bigint "build_artifacts_size", default: 0, null: false t.bigint "storage_size", default: 0, null: false t.bigint "packages_size", default: 0, null: false - t.index ["namespace_id"], name: "index_namespace_root_storage_statistics_on_namespace_id", unique: true, using: :btree + t.index ["namespace_id"], name: "index_namespace_root_storage_statistics_on_namespace_id", unique: true end create_table "namespace_statistics", id: :serial, force: :cascade do |t| t.integer "namespace_id", null: false t.integer "shared_runners_seconds", default: 0, null: false t.datetime "shared_runners_seconds_last_reset" - t.index ["namespace_id"], name: "index_namespace_statistics_on_namespace_id", unique: true, using: :btree + t.index ["namespace_id"], name: "index_namespace_statistics_on_namespace_id", unique: true end create_table "namespaces", id: :serial, force: :cascade do |t| @@ -2117,24 +2222,26 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "ldap_sync_status", default: "ready", null: false t.boolean "membership_lock", default: false t.integer "last_ci_minutes_usage_notification_level" - t.index ["created_at"], name: "index_namespaces_on_created_at", using: :btree - t.index ["custom_project_templates_group_id", "type"], name: "index_namespaces_on_custom_project_templates_group_id_and_type", where: "(custom_project_templates_group_id IS NOT NULL)", using: :btree - t.index ["file_template_project_id"], name: "index_namespaces_on_file_template_project_id", using: :btree - t.index ["ldap_sync_last_successful_update_at"], name: "index_namespaces_on_ldap_sync_last_successful_update_at", using: :btree - t.index ["ldap_sync_last_update_at"], name: "index_namespaces_on_ldap_sync_last_update_at", using: :btree - t.index ["name", "parent_id"], name: "index_namespaces_on_name_and_parent_id", unique: true, using: :btree - t.index ["name"], name: "index_namespaces_on_name_trigram", using: :gin, opclasses: {"name"=>"gin_trgm_ops"} - t.index ["owner_id"], name: "index_namespaces_on_owner_id", using: :btree - t.index ["parent_id", "id"], name: "index_namespaces_on_parent_id_and_id", unique: true, using: :btree - t.index ["path"], name: "index_namespaces_on_path", using: :btree - t.index ["path"], name: "index_namespaces_on_path_trigram", using: :gin, opclasses: {"path"=>"gin_trgm_ops"} - t.index ["plan_id"], name: "index_namespaces_on_plan_id", using: :btree - t.index ["require_two_factor_authentication"], name: "index_namespaces_on_require_two_factor_authentication", using: :btree - t.index ["runners_token"], name: "index_namespaces_on_runners_token", unique: true, using: :btree - t.index ["runners_token_encrypted"], name: "index_namespaces_on_runners_token_encrypted", unique: true, using: :btree - t.index ["shared_runners_minutes_limit", "extra_shared_runners_minutes_limit"], name: "index_namespaces_on_shared_and_extra_runners_minutes_limit", using: :btree - t.index ["trial_ends_on"], name: "index_namespaces_on_trial_ends_on", where: "(trial_ends_on IS NOT NULL)", using: :btree - t.index ["type"], name: "index_namespaces_on_type", using: :btree + t.integer "subgroup_creation_level", default: 1 + t.boolean "emails_disabled" + t.index ["created_at"], name: "index_namespaces_on_created_at" + t.index ["custom_project_templates_group_id", "type"], name: "index_namespaces_on_custom_project_templates_group_id_and_type", where: "(custom_project_templates_group_id IS NOT NULL)" + t.index ["file_template_project_id"], name: "index_namespaces_on_file_template_project_id" + t.index ["ldap_sync_last_successful_update_at"], name: "index_namespaces_on_ldap_sync_last_successful_update_at" + t.index ["ldap_sync_last_update_at"], name: "index_namespaces_on_ldap_sync_last_update_at" + t.index ["name", "parent_id"], name: "index_namespaces_on_name_and_parent_id", unique: true + t.index ["name"], name: "index_namespaces_on_name_trigram", opclass: :gin_trgm_ops, using: :gin + t.index ["owner_id"], name: "index_namespaces_on_owner_id" + t.index ["parent_id", "id"], name: "index_namespaces_on_parent_id_and_id", unique: true + t.index ["path"], name: "index_namespaces_on_path" + t.index ["path"], name: "index_namespaces_on_path_trigram", opclass: :gin_trgm_ops, using: :gin + t.index ["plan_id"], name: "index_namespaces_on_plan_id" + t.index ["require_two_factor_authentication"], name: "index_namespaces_on_require_two_factor_authentication" + t.index ["runners_token"], name: "index_namespaces_on_runners_token", unique: true + t.index ["runners_token_encrypted"], name: "index_namespaces_on_runners_token_encrypted", unique: true + t.index ["shared_runners_minutes_limit", "extra_shared_runners_minutes_limit"], name: "index_namespaces_on_shared_and_extra_runners_minutes_limit" + t.index ["trial_ends_on"], name: "index_namespaces_on_trial_ends_on", where: "(trial_ends_on IS NOT NULL)" + t.index ["type"], name: "index_namespaces_on_type" end create_table "note_diff_files", id: :serial, force: :cascade do |t| @@ -2147,7 +2254,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "b_mode", null: false t.text "new_path", null: false t.text "old_path", null: false - t.index ["diff_note_id"], name: "index_note_diff_files_on_diff_note_id", unique: true, using: :btree + t.index ["diff_note_id"], name: "index_note_diff_files_on_diff_note_id", unique: true end create_table "notes", id: :serial, force: :cascade do |t| @@ -2175,16 +2282,16 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.text "change_position" t.boolean "resolved_by_push" t.bigint "review_id" - t.index ["author_id"], name: "index_notes_on_author_id", using: :btree - t.index ["commit_id"], name: "index_notes_on_commit_id", using: :btree - t.index ["created_at"], name: "index_notes_on_created_at", using: :btree - t.index ["discussion_id"], name: "index_notes_on_discussion_id", using: :btree - t.index ["line_code"], name: "index_notes_on_line_code", using: :btree - t.index ["note"], name: "index_notes_on_note_trigram", using: :gin, opclasses: {"note"=>"gin_trgm_ops"} - t.index ["noteable_id", "noteable_type"], name: "index_notes_on_noteable_id_and_noteable_type", using: :btree - t.index ["noteable_type"], name: "index_notes_on_noteable_type", using: :btree - t.index ["project_id", "noteable_type"], name: "index_notes_on_project_id_and_noteable_type", using: :btree - t.index ["review_id"], name: "index_notes_on_review_id", using: :btree + t.index ["author_id"], name: "index_notes_on_author_id" + t.index ["commit_id"], name: "index_notes_on_commit_id" + t.index ["created_at"], name: "index_notes_on_created_at" + t.index ["discussion_id"], name: "index_notes_on_discussion_id" + t.index ["line_code"], name: "index_notes_on_line_code" + t.index ["note"], name: "index_notes_on_note_trigram", opclass: :gin_trgm_ops, using: :gin + t.index ["noteable_id", "noteable_type"], name: "index_notes_on_noteable_id_and_noteable_type" + t.index ["project_id", "id"], name: "index_notes_on_project_id_and_id_and_system_false", where: "(NOT system)" + t.index ["project_id", "noteable_type"], name: "index_notes_on_project_id_and_noteable_type" + t.index ["review_id"], name: "index_notes_on_review_id" end create_table "notification_settings", id: :serial, force: :cascade do |t| @@ -2210,9 +2317,9 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.boolean "issue_due" t.string "notification_email" t.boolean "new_epic" - t.index ["source_id", "source_type"], name: "index_notification_settings_on_source_id_and_source_type", using: :btree - t.index ["user_id", "source_id", "source_type"], name: "index_notifications_on_user_id_and_source_id_and_source_type", unique: true, using: :btree - t.index ["user_id"], name: "index_notification_settings_on_user_id", using: :btree + t.index ["source_id", "source_type"], name: "index_notification_settings_on_source_id_and_source_type" + t.index ["user_id", "source_id", "source_type"], name: "index_notifications_on_user_id_and_source_id_and_source_type", unique: true + t.index ["user_id"], name: "index_notification_settings_on_user_id" end create_table "oauth_access_grants", id: :serial, force: :cascade do |t| @@ -2224,7 +2331,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime "created_at", null: false t.datetime "revoked_at" t.string "scopes" - t.index ["token"], name: "index_oauth_access_grants_on_token", unique: true, using: :btree + t.index ["token"], name: "index_oauth_access_grants_on_token", unique: true end create_table "oauth_access_tokens", id: :serial, force: :cascade do |t| @@ -2236,9 +2343,9 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime "revoked_at" t.datetime "created_at", null: false t.string "scopes" - t.index ["refresh_token"], name: "index_oauth_access_tokens_on_refresh_token", unique: true, using: :btree - t.index ["resource_owner_id"], name: "index_oauth_access_tokens_on_resource_owner_id", using: :btree - t.index ["token"], name: "index_oauth_access_tokens_on_token", unique: true, using: :btree + t.index ["refresh_token"], name: "index_oauth_access_tokens_on_refresh_token", unique: true + t.index ["resource_owner_id"], name: "index_oauth_access_tokens_on_resource_owner_id" + t.index ["token"], name: "index_oauth_access_tokens_on_token", unique: true end create_table "oauth_applications", id: :serial, force: :cascade do |t| @@ -2252,14 +2359,14 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "owner_id" t.string "owner_type" t.boolean "trusted", default: false, null: false - t.index ["owner_id", "owner_type"], name: "index_oauth_applications_on_owner_id_and_owner_type", using: :btree - t.index ["uid"], name: "index_oauth_applications_on_uid", unique: true, using: :btree + t.index ["owner_id", "owner_type"], name: "index_oauth_applications_on_owner_id_and_owner_type" + t.index ["uid"], name: "index_oauth_applications_on_uid", unique: true end create_table "oauth_openid_requests", id: :serial, force: :cascade do |t| t.integer "access_grant_id", null: false t.string "nonce", null: false - t.index ["access_grant_id"], name: "index_oauth_openid_requests_on_access_grant_id", using: :btree + t.index ["access_grant_id"], name: "index_oauth_openid_requests_on_access_grant_id" end create_table "operations_feature_flag_scopes", force: :cascade do |t| @@ -2269,7 +2376,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.boolean "active", null: false t.string "environment_scope", default: "*", null: false t.jsonb "strategies", default: [{"name"=>"default", "parameters"=>{}}], null: false - t.index ["feature_flag_id", "environment_scope"], name: "index_feature_flag_scopes_on_flag_id_and_environment_scope", unique: true, using: :btree + t.index ["feature_flag_id", "environment_scope"], name: "index_feature_flag_scopes_on_flag_id_and_environment_scope", unique: true end create_table "operations_feature_flags", force: :cascade do |t| @@ -2279,15 +2386,15 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime_with_timezone "updated_at", null: false t.string "name", null: false t.text "description" - t.index ["project_id", "name"], name: "index_operations_feature_flags_on_project_id_and_name", unique: true, using: :btree + t.index ["project_id", "name"], name: "index_operations_feature_flags_on_project_id_and_name", unique: true end create_table "operations_feature_flags_clients", force: :cascade do |t| t.integer "project_id", null: false t.string "token" t.string "token_encrypted" - t.index ["project_id", "token"], name: "index_operations_feature_flags_clients_on_project_id_and_token", unique: true, using: :btree - t.index ["project_id", "token_encrypted"], name: "index_feature_flags_clients_on_project_id_and_token_encrypted", unique: true, using: :btree + t.index ["project_id", "token"], name: "index_operations_feature_flags_clients_on_project_id_and_token", unique: true + t.index ["project_id", "token_encrypted"], name: "index_feature_flags_clients_on_project_id_and_token_encrypted", unique: true end create_table "packages_maven_metadata", force: :cascade do |t| @@ -2298,7 +2405,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "app_name", null: false t.string "app_version" t.string "path", limit: 512, null: false - t.index ["package_id", "path"], name: "index_packages_maven_metadata_on_package_id_and_path", using: :btree + t.index ["package_id", "path"], name: "index_packages_maven_metadata_on_package_id_and_path" end create_table "packages_package_files", force: :cascade do |t| @@ -2312,7 +2419,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.binary "file_sha1" t.string "file_name", null: false t.text "file", null: false - t.index ["package_id", "file_name"], name: "index_packages_package_files_on_package_id_and_file_name", using: :btree + t.index ["package_id", "file_name"], name: "index_packages_package_files_on_package_id_and_file_name" end create_table "packages_packages", force: :cascade do |t| @@ -2322,7 +2429,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "name", null: false t.string "version" t.integer "package_type", limit: 2, null: false - t.index ["project_id"], name: "index_packages_packages_on_project_id", using: :btree + t.index ["project_id"], name: "index_packages_packages_on_project_id" end create_table "pages_domain_acme_orders", force: :cascade do |t| @@ -2335,8 +2442,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.text "challenge_file_content", null: false t.text "encrypted_private_key", null: false t.text "encrypted_private_key_iv", null: false - t.index ["challenge_token"], name: "index_pages_domain_acme_orders_on_challenge_token", using: :btree - t.index ["pages_domain_id"], name: "index_pages_domain_acme_orders_on_pages_domain_id", using: :btree + t.index ["challenge_token"], name: "index_pages_domain_acme_orders_on_challenge_token" + t.index ["pages_domain_id"], name: "index_pages_domain_acme_orders_on_pages_domain_id" end create_table "pages_domains", id: :serial, force: :cascade do |t| @@ -2354,13 +2461,13 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime_with_timezone "certificate_valid_not_before" t.datetime_with_timezone "certificate_valid_not_after" t.integer "certificate_source", limit: 2, default: 0, null: false - t.index ["certificate_source", "certificate_valid_not_after"], name: "index_pages_domains_need_auto_ssl_renewal", where: "(auto_ssl_enabled = true)", using: :btree - t.index ["domain"], name: "index_pages_domains_on_domain", unique: true, using: :btree - t.index ["project_id", "enabled_until"], name: "index_pages_domains_on_project_id_and_enabled_until", using: :btree - t.index ["project_id"], name: "index_pages_domains_on_project_id", using: :btree - t.index ["remove_at"], name: "index_pages_domains_on_remove_at", using: :btree - t.index ["verified_at", "enabled_until"], name: "index_pages_domains_on_verified_at_and_enabled_until", using: :btree - t.index ["verified_at"], name: "index_pages_domains_on_verified_at", using: :btree + t.index ["certificate_source", "certificate_valid_not_after"], name: "index_pages_domains_need_auto_ssl_renewal", where: "(auto_ssl_enabled = true)" + t.index ["domain"], name: "index_pages_domains_on_domain", unique: true + t.index ["project_id", "enabled_until"], name: "index_pages_domains_on_project_id_and_enabled_until" + t.index ["project_id"], name: "index_pages_domains_on_project_id" + t.index ["remove_at"], name: "index_pages_domains_on_remove_at" + t.index ["verified_at", "enabled_until"], name: "index_pages_domains_on_verified_at_and_enabled_until" + t.index ["verified_at"], name: "index_pages_domains_on_verified_at" end create_table "path_locks", id: :serial, force: :cascade do |t| @@ -2369,9 +2476,9 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "user_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.index ["path"], name: "index_path_locks_on_path", using: :btree - t.index ["project_id"], name: "index_path_locks_on_project_id", using: :btree - t.index ["user_id"], name: "index_path_locks_on_user_id", using: :btree + t.index ["path"], name: "index_path_locks_on_path" + t.index ["project_id"], name: "index_path_locks_on_project_id" + t.index ["user_id"], name: "index_path_locks_on_user_id" end create_table "personal_access_tokens", id: :serial, force: :cascade do |t| @@ -2384,8 +2491,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "scopes", default: "--- []\n", null: false t.boolean "impersonation", default: false, null: false t.string "token_digest" - t.index ["token_digest"], name: "index_personal_access_tokens_on_token_digest", unique: true, using: :btree - t.index ["user_id"], name: "index_personal_access_tokens_on_user_id", using: :btree + t.index ["token_digest"], name: "index_personal_access_tokens_on_token_digest", unique: true + t.index ["user_id"], name: "index_personal_access_tokens_on_user_id" end create_table "plans", id: :serial, force: :cascade do |t| @@ -2395,7 +2502,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "title" t.integer "active_pipelines_limit" t.integer "pipeline_size_limit" - t.index ["name"], name: "index_plans_on_name", using: :btree + t.index ["name"], name: "index_plans_on_name" end create_table "pool_repositories", force: :cascade do |t| @@ -2403,16 +2510,16 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "disk_path" t.string "state" t.integer "source_project_id" - t.index ["disk_path"], name: "index_pool_repositories_on_disk_path", unique: true, using: :btree - t.index ["shard_id"], name: "index_pool_repositories_on_shard_id", using: :btree - t.index ["source_project_id"], name: "index_pool_repositories_on_source_project_id", unique: true, using: :btree + t.index ["disk_path"], name: "index_pool_repositories_on_disk_path", unique: true + t.index ["shard_id"], name: "index_pool_repositories_on_shard_id" + t.index ["source_project_id"], name: "index_pool_repositories_on_source_project_id", unique: true end create_table "programming_languages", id: :serial, force: :cascade do |t| t.string "name", null: false t.string "color", null: false t.datetime_with_timezone "created_at", null: false - t.index ["name"], name: "index_programming_languages_on_name", unique: true, using: :btree + t.index ["name"], name: "index_programming_languages_on_name", unique: true end create_table "project_alerting_settings", primary_key: "project_id", id: :integer, default: nil, force: :cascade do |t| @@ -2425,16 +2532,16 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "name", null: false t.datetime_with_timezone "created_at", null: false t.datetime_with_timezone "updated_at", null: false - t.index ["name"], name: "index_project_aliases_on_name", unique: true, using: :btree - t.index ["project_id"], name: "index_project_aliases_on_project_id", using: :btree + t.index ["name"], name: "index_project_aliases_on_name", unique: true + t.index ["project_id"], name: "index_project_aliases_on_project_id" end create_table "project_authorizations", id: false, force: :cascade do |t| t.integer "user_id", null: false t.integer "project_id", null: false t.integer "access_level", null: false - t.index ["project_id"], name: "index_project_authorizations_on_project_id", using: :btree - t.index ["user_id", "project_id", "access_level"], name: "index_project_authorizations_on_user_id_project_id_access_level", unique: true, using: :btree + t.index ["project_id"], name: "index_project_authorizations_on_project_id" + t.index ["user_id", "project_id", "access_level"], name: "index_project_authorizations_on_user_id_project_id_access_level", unique: true end create_table "project_auto_devops", id: :serial, force: :cascade do |t| @@ -2443,7 +2550,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime_with_timezone "updated_at", null: false t.boolean "enabled" t.integer "deploy_strategy", default: 0, null: false - t.index ["project_id"], name: "index_project_auto_devops_on_project_id", unique: true, using: :btree + t.index ["project_id"], name: "index_project_auto_devops_on_project_id", unique: true end create_table "project_ci_cd_settings", id: :serial, force: :cascade do |t| @@ -2452,7 +2559,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.boolean "merge_pipelines_enabled" t.boolean "merge_trains_enabled", default: false, null: false t.integer "default_git_depth" - t.index ["project_id"], name: "index_project_ci_cd_settings_on_project_id", unique: true, using: :btree + t.index ["project_id"], name: "index_project_ci_cd_settings_on_project_id", unique: true end create_table "project_custom_attributes", id: :serial, force: :cascade do |t| @@ -2461,23 +2568,23 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "project_id", null: false t.string "key", null: false t.string "value", null: false - t.index ["key", "value"], name: "index_project_custom_attributes_on_key_and_value", using: :btree - t.index ["project_id", "key"], name: "index_project_custom_attributes_on_project_id_and_key", unique: true, using: :btree + t.index ["key", "value"], name: "index_project_custom_attributes_on_key_and_value" + t.index ["project_id", "key"], name: "index_project_custom_attributes_on_project_id_and_key", unique: true end create_table "project_daily_statistics", force: :cascade do |t| t.integer "project_id", null: false t.integer "fetch_count", null: false t.date "date" - t.index ["project_id", "date"], name: "index_project_daily_statistics_on_project_id_and_date", unique: true, order: { date: :desc }, using: :btree + t.index ["project_id", "date"], name: "index_project_daily_statistics_on_project_id_and_date", unique: true, order: { date: :desc } end create_table "project_deploy_tokens", id: :serial, force: :cascade do |t| t.integer "project_id", null: false t.integer "deploy_token_id", null: false t.datetime_with_timezone "created_at", null: false - t.index ["deploy_token_id"], name: "index_project_deploy_tokens_on_deploy_token_id", using: :btree - t.index ["project_id", "deploy_token_id"], name: "index_project_deploy_tokens_on_project_id_and_deploy_token_id", unique: true, using: :btree + t.index ["deploy_token_id"], name: "index_project_deploy_tokens_on_deploy_token_id" + t.index ["project_id", "deploy_token_id"], name: "index_project_deploy_tokens_on_project_id_and_deploy_token_id", unique: true end create_table "project_error_tracking_settings", primary_key: "project_id", id: :integer, default: nil, force: :cascade do |t| @@ -2492,9 +2599,9 @@ ActiveRecord::Schema.define(version: 20190703130053) do create_table "project_feature_usages", primary_key: "project_id", id: :integer, default: nil, force: :cascade do |t| t.datetime "jira_dvcs_cloud_last_sync_at" t.datetime "jira_dvcs_server_last_sync_at" - t.index ["jira_dvcs_cloud_last_sync_at", "project_id"], name: "idx_proj_feat_usg_on_jira_dvcs_cloud_last_sync_at_and_proj_id", where: "(jira_dvcs_cloud_last_sync_at IS NOT NULL)", using: :btree - t.index ["jira_dvcs_server_last_sync_at", "project_id"], name: "idx_proj_feat_usg_on_jira_dvcs_server_last_sync_at_and_proj_id", where: "(jira_dvcs_server_last_sync_at IS NOT NULL)", using: :btree - t.index ["project_id"], name: "index_project_feature_usages_on_project_id", using: :btree + t.index ["jira_dvcs_cloud_last_sync_at", "project_id"], name: "idx_proj_feat_usg_on_jira_dvcs_cloud_last_sync_at_and_proj_id", where: "(jira_dvcs_cloud_last_sync_at IS NOT NULL)" + t.index ["jira_dvcs_server_last_sync_at", "project_id"], name: "idx_proj_feat_usg_on_jira_dvcs_server_last_sync_at_and_proj_id", where: "(jira_dvcs_server_last_sync_at IS NOT NULL)" + t.index ["project_id"], name: "index_project_feature_usages_on_project_id" end create_table "project_features", id: :serial, force: :cascade do |t| @@ -2507,8 +2614,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime "created_at" t.datetime "updated_at" t.integer "repository_access_level", default: 20, null: false - t.integer "pages_access_level", default: 20, null: false - t.index ["project_id"], name: "index_project_features_on_project_id", unique: true, using: :btree + t.integer "pages_access_level", null: false + t.index ["project_id"], name: "index_project_features_on_project_id", unique: true end create_table "project_group_links", id: :serial, force: :cascade do |t| @@ -2518,8 +2625,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime "updated_at" t.integer "group_access", default: 30, null: false t.date "expires_at" - t.index ["group_id"], name: "index_project_group_links_on_group_id", using: :btree - t.index ["project_id"], name: "index_project_group_links_on_project_id", using: :btree + t.index ["group_id"], name: "index_project_group_links_on_group_id" + t.index ["project_id"], name: "index_project_group_links_on_project_id" end create_table "project_import_data", id: :serial, force: :cascade do |t| @@ -2528,7 +2635,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.text "encrypted_credentials" t.string "encrypted_credentials_iv" t.string "encrypted_credentials_salt" - t.index ["project_id"], name: "index_project_import_data_on_project_id", using: :btree + t.index ["project_id"], name: "index_project_import_data_on_project_id" end create_table "project_incident_management_settings", primary_key: "project_id", id: :serial, force: :cascade do |t| @@ -2552,21 +2659,21 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime "last_update_started_at" t.datetime "next_execution_timestamp" t.integer "retry_count", default: 0, null: false - t.index ["jid"], name: "index_project_mirror_data_on_jid", using: :btree - t.index ["last_successful_update_at"], name: "index_project_mirror_data_on_last_successful_update_at", using: :btree - t.index ["last_update_at", "retry_count"], name: "index_project_mirror_data_on_last_update_at_and_retry_count", using: :btree - t.index ["next_execution_timestamp", "retry_count"], name: "index_mirror_data_on_next_execution_and_retry_count", using: :btree - t.index ["project_id"], name: "index_project_mirror_data_on_project_id", unique: true, using: :btree - t.index ["status"], name: "index_project_mirror_data_on_status", using: :btree + t.index ["jid"], name: "index_project_mirror_data_on_jid" + t.index ["last_successful_update_at"], name: "index_project_mirror_data_on_last_successful_update_at" + t.index ["last_update_at", "retry_count"], name: "index_project_mirror_data_on_last_update_at_and_retry_count" + t.index ["next_execution_timestamp", "retry_count"], name: "index_mirror_data_on_next_execution_and_retry_count" + t.index ["project_id"], name: "index_project_mirror_data_on_project_id", unique: true + t.index ["status"], name: "index_project_mirror_data_on_status" end create_table "project_repositories", force: :cascade do |t| t.integer "shard_id", null: false t.string "disk_path", null: false t.integer "project_id", null: false - t.index ["disk_path"], name: "index_project_repositories_on_disk_path", unique: true, using: :btree - t.index ["project_id"], name: "index_project_repositories_on_project_id", unique: true, using: :btree - t.index ["shard_id"], name: "index_project_repositories_on_shard_id", using: :btree + t.index ["disk_path"], name: "index_project_repositories_on_disk_path", unique: true + t.index ["project_id"], name: "index_project_repositories_on_project_id", unique: true + t.index ["shard_id"], name: "index_project_repositories_on_shard_id" end create_table "project_repository_states", id: :serial, force: :cascade do |t| @@ -2581,12 +2688,12 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "wiki_retry_count" t.datetime_with_timezone "last_repository_verification_ran_at" t.datetime_with_timezone "last_wiki_verification_ran_at" - t.index ["last_repository_verification_failure"], name: "idx_repository_states_on_repository_failure_partial", where: "(last_repository_verification_failure IS NOT NULL)", using: :btree - t.index ["last_wiki_verification_failure"], name: "idx_repository_states_on_wiki_failure_partial", where: "(last_wiki_verification_failure IS NOT NULL)", using: :btree - t.index ["project_id", "last_repository_verification_ran_at"], name: "idx_repository_states_on_last_repository_verification_ran_at", where: "((repository_verification_checksum IS NOT NULL) AND (last_repository_verification_failure IS NULL))", using: :btree - t.index ["project_id", "last_wiki_verification_ran_at"], name: "idx_repository_states_on_last_wiki_verification_ran_at", where: "((wiki_verification_checksum IS NOT NULL) AND (last_wiki_verification_failure IS NULL))", using: :btree - t.index ["project_id"], name: "idx_repository_states_outdated_checksums", where: "(((repository_verification_checksum IS NULL) AND (last_repository_verification_failure IS NULL)) OR ((wiki_verification_checksum IS NULL) AND (last_wiki_verification_failure IS NULL)))", using: :btree - t.index ["project_id"], name: "index_project_repository_states_on_project_id", unique: true, using: :btree + t.index ["last_repository_verification_failure"], name: "idx_repository_states_on_repository_failure_partial", where: "(last_repository_verification_failure IS NOT NULL)" + t.index ["last_wiki_verification_failure"], name: "idx_repository_states_on_wiki_failure_partial", where: "(last_wiki_verification_failure IS NOT NULL)" + t.index ["project_id", "last_repository_verification_ran_at"], name: "idx_repository_states_on_last_repository_verification_ran_at", where: "((repository_verification_checksum IS NOT NULL) AND (last_repository_verification_failure IS NULL))" + t.index ["project_id", "last_wiki_verification_ran_at"], name: "idx_repository_states_on_last_wiki_verification_ran_at", where: "((wiki_verification_checksum IS NOT NULL) AND (last_wiki_verification_failure IS NULL))" + t.index ["project_id"], name: "idx_repository_states_outdated_checksums", where: "(((repository_verification_checksum IS NULL) AND (last_repository_verification_failure IS NULL)) OR ((wiki_verification_checksum IS NULL) AND (last_wiki_verification_failure IS NULL)))" + t.index ["project_id"], name: "index_project_repository_states_on_project_id", unique: true end create_table "project_statistics", id: :serial, force: :cascade do |t| @@ -2601,8 +2708,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.bigint "wiki_size" t.bigint "shared_runners_seconds", default: 0, null: false t.datetime "shared_runners_seconds_last_reset" - t.index ["namespace_id"], name: "index_project_statistics_on_namespace_id", using: :btree - t.index ["project_id"], name: "index_project_statistics_on_project_id", unique: true, using: :btree + t.index ["namespace_id"], name: "index_project_statistics_on_namespace_id" + t.index ["project_id"], name: "index_project_statistics_on_project_id", unique: true end create_table "project_tracing_settings", force: :cascade do |t| @@ -2610,7 +2717,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime_with_timezone "updated_at", null: false t.integer "project_id", null: false t.string "external_url", null: false - t.index ["project_id"], name: "index_project_tracing_settings_on_project_id", unique: true, using: :btree + t.index ["project_id"], name: "index_project_tracing_settings_on_project_id", unique: true end create_table "projects", id: :serial, force: :cascade do |t| @@ -2687,31 +2794,32 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.boolean "reset_approvals_on_push", default: true t.boolean "service_desk_enabled", default: true t.integer "approvals_before_merge", default: 0, null: false - t.index ["archived", "pending_delete", "merge_requests_require_code_owner_approval"], name: "projects_requiring_code_owner_approval", where: "((pending_delete = false) AND (archived = false) AND (merge_requests_require_code_owner_approval = true))", using: :btree - t.index ["created_at"], name: "index_projects_on_created_at", using: :btree - t.index ["creator_id"], name: "index_projects_on_creator_id", using: :btree - t.index ["description"], name: "index_projects_on_description_trigram", using: :gin, opclasses: {"description"=>"gin_trgm_ops"} - t.index ["id", "repository_storage", "last_repository_updated_at"], name: "idx_projects_on_repository_storage_last_repository_updated_at", using: :btree - t.index ["id"], name: "index_projects_on_id_partial_for_visibility", unique: true, where: "(visibility_level = ANY (ARRAY[10, 20]))", using: :btree - t.index ["id"], name: "index_projects_on_mirror_and_mirror_trigger_builds_both_true", where: "((mirror IS TRUE) AND (mirror_trigger_builds IS TRUE))", using: :btree - t.index ["last_activity_at"], name: "index_projects_on_last_activity_at", using: :btree - t.index ["last_repository_check_at"], name: "index_projects_on_last_repository_check_at", where: "(last_repository_check_at IS NOT NULL)", using: :btree - t.index ["last_repository_check_failed"], name: "index_projects_on_last_repository_check_failed", using: :btree - t.index ["last_repository_updated_at"], name: "index_projects_on_last_repository_updated_at", using: :btree - t.index ["mirror_last_successful_update_at"], name: "index_projects_on_mirror_last_successful_update_at", using: :btree - t.index ["mirror_user_id"], name: "index_projects_on_mirror_user_id", using: :btree - t.index ["name"], name: "index_projects_on_name_trigram", using: :gin, opclasses: {"name"=>"gin_trgm_ops"} - t.index ["namespace_id"], name: "index_projects_on_namespace_id", using: :btree - t.index ["path"], name: "index_projects_on_path", using: :btree - t.index ["path"], name: "index_projects_on_path_trigram", using: :gin, opclasses: {"path"=>"gin_trgm_ops"} - t.index ["pending_delete"], name: "index_projects_on_pending_delete", using: :btree - t.index ["pool_repository_id"], name: "index_projects_on_pool_repository_id", where: "(pool_repository_id IS NOT NULL)", using: :btree - t.index ["repository_storage", "created_at"], name: "idx_project_repository_check_partial", where: "(last_repository_check_at IS NULL)", using: :btree - t.index ["repository_storage"], name: "index_projects_on_repository_storage", using: :btree - t.index ["runners_token"], name: "index_projects_on_runners_token", using: :btree - t.index ["runners_token_encrypted"], name: "index_projects_on_runners_token_encrypted", using: :btree - t.index ["star_count"], name: "index_projects_on_star_count", using: :btree - t.index ["visibility_level"], name: "index_projects_on_visibility_level", using: :btree + t.boolean "emails_disabled" + t.index ["archived", "pending_delete", "merge_requests_require_code_owner_approval"], name: "projects_requiring_code_owner_approval", where: "((pending_delete = false) AND (archived = false) AND (merge_requests_require_code_owner_approval = true))" + t.index ["created_at"], name: "index_projects_on_created_at" + t.index ["creator_id"], name: "index_projects_on_creator_id" + t.index ["description"], name: "index_projects_on_description_trigram", opclass: :gin_trgm_ops, using: :gin + t.index ["id", "repository_storage", "last_repository_updated_at"], name: "idx_projects_on_repository_storage_last_repository_updated_at" + t.index ["id"], name: "index_projects_on_id_partial_for_visibility", unique: true, where: "(visibility_level = ANY (ARRAY[10, 20]))" + t.index ["id"], name: "index_projects_on_mirror_and_mirror_trigger_builds_both_true", where: "((mirror IS TRUE) AND (mirror_trigger_builds IS TRUE))" + t.index ["last_activity_at"], name: "index_projects_on_last_activity_at" + t.index ["last_repository_check_at"], name: "index_projects_on_last_repository_check_at", where: "(last_repository_check_at IS NOT NULL)" + t.index ["last_repository_check_failed"], name: "index_projects_on_last_repository_check_failed" + t.index ["last_repository_updated_at"], name: "index_projects_on_last_repository_updated_at" + t.index ["mirror_last_successful_update_at"], name: "index_projects_on_mirror_last_successful_update_at" + t.index ["mirror_user_id"], name: "index_projects_on_mirror_user_id" + t.index ["name"], name: "index_projects_on_name_trigram", opclass: :gin_trgm_ops, using: :gin + t.index ["namespace_id"], name: "index_projects_on_namespace_id" + t.index ["path"], name: "index_projects_on_path" + t.index ["path"], name: "index_projects_on_path_trigram", opclass: :gin_trgm_ops, using: :gin + t.index ["pending_delete"], name: "index_projects_on_pending_delete" + t.index ["pool_repository_id"], name: "index_projects_on_pool_repository_id", where: "(pool_repository_id IS NOT NULL)" + t.index ["repository_storage", "created_at"], name: "idx_project_repository_check_partial", where: "(last_repository_check_at IS NULL)" + t.index ["repository_storage"], name: "index_projects_on_repository_storage" + t.index ["runners_token"], name: "index_projects_on_runners_token" + t.index ["runners_token_encrypted"], name: "index_projects_on_runners_token_encrypted" + t.index ["star_count"], name: "index_projects_on_star_count" + t.index ["visibility_level"], name: "index_projects_on_visibility_level" end create_table "prometheus_alert_events", force: :cascade do |t| @@ -2721,8 +2829,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime_with_timezone "ended_at" t.integer "status", limit: 2 t.string "payload_key" - t.index ["project_id", "status"], name: "index_prometheus_alert_events_on_project_id_and_status", using: :btree - t.index ["prometheus_alert_id", "payload_key"], name: "index_prometheus_alert_event_scoped_payload_key", unique: true, using: :btree + t.index ["project_id", "status"], name: "index_prometheus_alert_events_on_project_id_and_status" + t.index ["prometheus_alert_id", "payload_key"], name: "index_prometheus_alert_event_scoped_payload_key", unique: true end create_table "prometheus_alerts", id: :serial, force: :cascade do |t| @@ -2733,9 +2841,9 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "environment_id", null: false t.integer "project_id", null: false t.integer "prometheus_metric_id", null: false - t.index ["environment_id"], name: "index_prometheus_alerts_on_environment_id", using: :btree - t.index ["project_id", "prometheus_metric_id", "environment_id"], name: "index_prometheus_alerts_metric_environment", unique: true, using: :btree - t.index ["prometheus_metric_id"], name: "index_prometheus_alerts_on_prometheus_metric_id", using: :btree + t.index ["environment_id"], name: "index_prometheus_alerts_on_environment_id" + t.index ["project_id", "prometheus_metric_id", "environment_id"], name: "index_prometheus_alerts_metric_environment", unique: true + t.index ["prometheus_metric_id"], name: "index_prometheus_alerts_on_prometheus_metric_id" end create_table "prometheus_metrics", id: :serial, force: :cascade do |t| @@ -2750,10 +2858,10 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime_with_timezone "updated_at", null: false t.boolean "common", default: false, null: false t.string "identifier" - t.index ["common"], name: "index_prometheus_metrics_on_common", using: :btree - t.index ["group"], name: "index_prometheus_metrics_on_group", using: :btree - t.index ["identifier"], name: "index_prometheus_metrics_on_identifier", unique: true, using: :btree - t.index ["project_id"], name: "index_prometheus_metrics_on_project_id", using: :btree + t.index ["common"], name: "index_prometheus_metrics_on_common" + t.index ["group"], name: "index_prometheus_metrics_on_group" + t.index ["identifier"], name: "index_prometheus_metrics_on_identifier", unique: true + t.index ["project_id"], name: "index_prometheus_metrics_on_project_id" end create_table "protected_branch_merge_access_levels", id: :serial, force: :cascade do |t| @@ -2763,9 +2871,9 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime "updated_at", null: false t.integer "group_id" t.integer "user_id" - t.index ["group_id"], name: "index_protected_branch_merge_access_levels_on_group_id", using: :btree - t.index ["protected_branch_id"], name: "index_protected_branch_merge_access", using: :btree - t.index ["user_id"], name: "index_protected_branch_merge_access_levels_on_user_id", using: :btree + t.index ["group_id"], name: "index_protected_branch_merge_access_levels_on_group_id" + t.index ["protected_branch_id"], name: "index_protected_branch_merge_access" + t.index ["user_id"], name: "index_protected_branch_merge_access_levels_on_user_id" end create_table "protected_branch_push_access_levels", id: :serial, force: :cascade do |t| @@ -2775,9 +2883,9 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime "updated_at", null: false t.integer "group_id" t.integer "user_id" - t.index ["group_id"], name: "index_protected_branch_push_access_levels_on_group_id", using: :btree - t.index ["protected_branch_id"], name: "index_protected_branch_push_access", using: :btree - t.index ["user_id"], name: "index_protected_branch_push_access_levels_on_user_id", using: :btree + t.index ["group_id"], name: "index_protected_branch_push_access_levels_on_group_id" + t.index ["protected_branch_id"], name: "index_protected_branch_push_access" + t.index ["user_id"], name: "index_protected_branch_push_access_levels_on_user_id" end create_table "protected_branch_unprotect_access_levels", id: :serial, force: :cascade do |t| @@ -2785,9 +2893,9 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "access_level", default: 40 t.integer "user_id" t.integer "group_id" - t.index ["group_id"], name: "index_protected_branch_unprotect_access_levels_on_group_id", using: :btree - t.index ["protected_branch_id"], name: "index_protected_branch_unprotect_access", using: :btree - t.index ["user_id"], name: "index_protected_branch_unprotect_access_levels_on_user_id", using: :btree + t.index ["group_id"], name: "index_protected_branch_unprotect_access_levels_on_group_id" + t.index ["protected_branch_id"], name: "index_protected_branch_unprotect_access" + t.index ["user_id"], name: "index_protected_branch_unprotect_access_levels_on_user_id" end create_table "protected_branches", id: :serial, force: :cascade do |t| @@ -2795,7 +2903,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "name", null: false t.datetime "created_at" t.datetime "updated_at" - t.index ["project_id"], name: "index_protected_branches_on_project_id", using: :btree + t.index ["project_id"], name: "index_protected_branches_on_project_id" end create_table "protected_environment_deploy_access_levels", id: :serial, force: :cascade do |t| @@ -2805,9 +2913,9 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "protected_environment_id", null: false t.integer "user_id" t.integer "group_id" - t.index ["group_id"], name: "index_protected_environment_deploy_access_levels_on_group_id", using: :btree - t.index ["protected_environment_id"], name: "index_protected_environment_deploy_access", using: :btree - t.index ["user_id"], name: "index_protected_environment_deploy_access_levels_on_user_id", using: :btree + t.index ["group_id"], name: "index_protected_environment_deploy_access_levels_on_group_id" + t.index ["protected_environment_id"], name: "index_protected_environment_deploy_access" + t.index ["user_id"], name: "index_protected_environment_deploy_access_levels_on_user_id" end create_table "protected_environments", id: :serial, force: :cascade do |t| @@ -2815,8 +2923,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime_with_timezone "created_at", null: false t.datetime_with_timezone "updated_at", null: false t.string "name", null: false - t.index ["project_id", "name"], name: "index_protected_environments_on_project_id_and_name", unique: true, using: :btree - t.index ["project_id"], name: "index_protected_environments_on_project_id", using: :btree + t.index ["project_id", "name"], name: "index_protected_environments_on_project_id_and_name", unique: true + t.index ["project_id"], name: "index_protected_environments_on_project_id" end create_table "protected_tag_create_access_levels", id: :serial, force: :cascade do |t| @@ -2826,9 +2934,9 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "group_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.index ["group_id"], name: "index_protected_tag_create_access_levels_on_group_id", using: :btree - t.index ["protected_tag_id"], name: "index_protected_tag_create_access", using: :btree - t.index ["user_id"], name: "index_protected_tag_create_access_levels_on_user_id", using: :btree + t.index ["group_id"], name: "index_protected_tag_create_access_levels_on_group_id" + t.index ["protected_tag_id"], name: "index_protected_tag_create_access" + t.index ["user_id"], name: "index_protected_tag_create_access_levels_on_user_id" end create_table "protected_tags", id: :serial, force: :cascade do |t| @@ -2836,8 +2944,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "name", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.index ["project_id", "name"], name: "index_protected_tags_on_project_id_and_name", unique: true, using: :btree - t.index ["project_id"], name: "index_protected_tags_on_project_id", using: :btree + t.index ["project_id", "name"], name: "index_protected_tags_on_project_id_and_name", unique: true + t.index ["project_id"], name: "index_protected_tags_on_project_id" end create_table "push_event_payloads", id: false, force: :cascade do |t| @@ -2849,7 +2957,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.binary "commit_to" t.text "ref" t.string "commit_title", limit: 70 - t.index ["event_id"], name: "index_push_event_payloads_on_event_id", unique: true, using: :btree + t.index ["event_id"], name: "index_push_event_payloads_on_event_id", unique: true end create_table "push_rules", id: :serial, force: :cascade do |t| @@ -2871,8 +2979,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.boolean "commit_committer_check" t.boolean "regexp_uses_re2", default: true t.string "commit_message_negative_regex" - t.index ["is_sample"], name: "index_push_rules_on_is_sample", where: "is_sample", using: :btree - t.index ["project_id"], name: "index_push_rules_on_project_id", using: :btree + t.index ["is_sample"], name: "index_push_rules_on_is_sample", where: "is_sample" + t.index ["project_id"], name: "index_push_rules_on_project_id" end create_table "redirect_routes", id: :serial, force: :cascade do |t| @@ -2881,8 +2989,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "path", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.index ["path"], name: "index_redirect_routes_on_path", unique: true, using: :btree - t.index ["source_type", "source_id"], name: "index_redirect_routes_on_source_type_and_source_id", using: :btree + t.index ["path"], name: "index_redirect_routes_on_path", unique: true + t.index ["source_type", "source_id"], name: "index_redirect_routes_on_source_type_and_source_id" end create_table "release_links", force: :cascade do |t| @@ -2891,8 +2999,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "name", null: false t.datetime_with_timezone "created_at", null: false t.datetime_with_timezone "updated_at", null: false - t.index ["release_id", "name"], name: "index_release_links_on_release_id_and_name", unique: true, using: :btree - t.index ["release_id", "url"], name: "index_release_links_on_release_id_and_url", unique: true, using: :btree + t.index ["release_id", "name"], name: "index_release_links_on_release_id_and_name", unique: true + t.index ["release_id", "url"], name: "index_release_links_on_release_id_and_url", unique: true end create_table "releases", id: :serial, force: :cascade do |t| @@ -2907,9 +3015,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "name" t.string "sha" t.datetime_with_timezone "released_at", null: false - t.index ["author_id"], name: "index_releases_on_author_id", using: :btree - t.index ["project_id", "tag"], name: "index_releases_on_project_id_and_tag", using: :btree - t.index ["project_id"], name: "index_releases_on_project_id", using: :btree + t.index ["author_id"], name: "index_releases_on_author_id" + t.index ["project_id", "tag"], name: "index_releases_on_project_id_and_tag" end create_table "remote_mirrors", id: :serial, force: :cascade do |t| @@ -2929,15 +3036,15 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime "created_at", null: false t.datetime "updated_at", null: false t.boolean "error_notification_sent" - t.index ["last_successful_update_at"], name: "index_remote_mirrors_on_last_successful_update_at", using: :btree - t.index ["project_id"], name: "index_remote_mirrors_on_project_id", using: :btree + t.index ["last_successful_update_at"], name: "index_remote_mirrors_on_last_successful_update_at" + t.index ["project_id"], name: "index_remote_mirrors_on_project_id" end create_table "repository_languages", id: false, force: :cascade do |t| t.integer "project_id", null: false t.integer "programming_language_id", null: false t.float "share", null: false - t.index ["project_id", "programming_language_id"], name: "index_repository_languages_on_project_and_languages_id", unique: true, using: :btree + t.index ["project_id", "programming_language_id"], name: "index_repository_languages_on_project_and_languages_id", unique: true end create_table "resource_label_events", force: :cascade do |t| @@ -2951,11 +3058,11 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.text "reference" t.text "reference_html" t.integer "epic_id" - t.index ["epic_id"], name: "index_resource_label_events_on_epic_id", using: :btree - t.index ["issue_id"], name: "index_resource_label_events_on_issue_id", using: :btree - t.index ["label_id"], name: "index_resource_label_events_on_label_id", using: :btree - t.index ["merge_request_id"], name: "index_resource_label_events_on_merge_request_id", using: :btree - t.index ["user_id"], name: "index_resource_label_events_on_user_id", using: :btree + t.index ["epic_id"], name: "index_resource_label_events_on_epic_id" + t.index ["issue_id"], name: "index_resource_label_events_on_issue_id" + t.index ["label_id"], name: "index_resource_label_events_on_label_id" + t.index ["merge_request_id"], name: "index_resource_label_events_on_merge_request_id" + t.index ["user_id"], name: "index_resource_label_events_on_user_id" end create_table "reviews", force: :cascade do |t| @@ -2963,9 +3070,9 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "merge_request_id", null: false t.integer "project_id", null: false t.datetime_with_timezone "created_at", null: false - t.index ["author_id"], name: "index_reviews_on_author_id", using: :btree - t.index ["merge_request_id"], name: "index_reviews_on_merge_request_id", using: :btree - t.index ["project_id"], name: "index_reviews_on_project_id", using: :btree + t.index ["author_id"], name: "index_reviews_on_author_id" + t.index ["merge_request_id"], name: "index_reviews_on_merge_request_id" + t.index ["project_id"], name: "index_reviews_on_project_id" end create_table "routes", id: :serial, force: :cascade do |t| @@ -2975,9 +3082,9 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime "created_at" t.datetime "updated_at" t.string "name" - t.index ["path"], name: "index_routes_on_path", unique: true, using: :btree - t.index ["path"], name: "index_routes_on_path_text_pattern_ops", using: :btree, opclasses: {"path"=>"varchar_pattern_ops"} - t.index ["source_type", "source_id"], name: "index_routes_on_source_type_and_source_id", unique: true, using: :btree + t.index ["path"], name: "index_routes_on_path", unique: true + t.index ["path"], name: "index_routes_on_path_text_pattern_ops", opclass: :varchar_pattern_ops + t.index ["source_type", "source_id"], name: "index_routes_on_source_type_and_source_id", unique: true end create_table "saml_providers", id: :serial, force: :cascade do |t| @@ -2987,7 +3094,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "sso_url", null: false t.boolean "enforced_sso", default: false, null: false t.boolean "enforced_group_managed_accounts", default: false, null: false - t.index ["group_id"], name: "index_saml_providers_on_group_id", using: :btree + t.index ["group_id"], name: "index_saml_providers_on_group_id" end create_table "scim_oauth_access_tokens", id: :serial, force: :cascade do |t| @@ -2995,7 +3102,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime_with_timezone "updated_at", null: false t.integer "group_id", null: false t.string "token_encrypted", null: false - t.index ["group_id", "token_encrypted"], name: "index_scim_oauth_access_tokens_on_group_id_and_token_encrypted", unique: true, using: :btree + t.index ["group_id", "token_encrypted"], name: "index_scim_oauth_access_tokens_on_group_id_and_token_encrypted", unique: true end create_table "sent_notifications", id: :serial, force: :cascade do |t| @@ -3009,7 +3116,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "note_type" t.text "position" t.string "in_reply_to_discussion_id" - t.index ["reply_key"], name: "index_sent_notifications_on_reply_key", unique: true, using: :btree + t.index ["reply_key"], name: "index_sent_notifications_on_reply_key", unique: true end create_table "services", id: :serial, force: :cascade do |t| @@ -3036,14 +3143,14 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.boolean "confidential_note_events", default: true t.boolean "deployment_events", default: false, null: false t.string "description", limit: 500 - t.index ["project_id"], name: "index_services_on_project_id", using: :btree - t.index ["template"], name: "index_services_on_template", using: :btree - t.index ["type"], name: "index_services_on_type", using: :btree + t.index ["project_id"], name: "index_services_on_project_id" + t.index ["template"], name: "index_services_on_template" + t.index ["type"], name: "index_services_on_type" end create_table "shards", id: :serial, force: :cascade do |t| t.string "name", null: false - t.index ["name"], name: "index_shards_on_name", unique: true, using: :btree + t.index ["name"], name: "index_shards_on_name", unique: true end create_table "slack_integrations", id: :serial, force: :cascade do |t| @@ -3054,16 +3161,16 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "user_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.index ["service_id"], name: "index_slack_integrations_on_service_id", using: :btree - t.index ["team_id", "alias"], name: "index_slack_integrations_on_team_id_and_alias", unique: true, using: :btree + t.index ["service_id"], name: "index_slack_integrations_on_service_id" + t.index ["team_id", "alias"], name: "index_slack_integrations_on_team_id_and_alias", unique: true end create_table "smartcard_identities", force: :cascade do |t| t.integer "user_id", null: false t.string "subject", null: false t.string "issuer", null: false - t.index ["subject", "issuer"], name: "index_smartcard_identities_on_subject_and_issuer", unique: true, using: :btree - t.index ["user_id"], name: "index_smartcard_identities_on_user_id", using: :btree + t.index ["subject", "issuer"], name: "index_smartcard_identities_on_subject_and_issuer", unique: true + t.index ["user_id"], name: "index_smartcard_identities_on_user_id" end create_table "snippets", id: :serial, force: :cascade do |t| @@ -3081,25 +3188,25 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "cached_markdown_version" t.text "description" t.text "description_html" - t.index ["author_id"], name: "index_snippets_on_author_id", using: :btree - t.index ["file_name"], name: "index_snippets_on_file_name_trigram", using: :gin, opclasses: {"file_name"=>"gin_trgm_ops"} - t.index ["project_id"], name: "index_snippets_on_project_id", using: :btree - t.index ["title"], name: "index_snippets_on_title_trigram", using: :gin, opclasses: {"title"=>"gin_trgm_ops"} - t.index ["updated_at"], name: "index_snippets_on_updated_at", using: :btree - t.index ["visibility_level"], name: "index_snippets_on_visibility_level", using: :btree + t.index ["author_id"], name: "index_snippets_on_author_id" + t.index ["file_name"], name: "index_snippets_on_file_name_trigram", opclass: :gin_trgm_ops, using: :gin + t.index ["project_id"], name: "index_snippets_on_project_id" + t.index ["title"], name: "index_snippets_on_title_trigram", opclass: :gin_trgm_ops, using: :gin + t.index ["updated_at"], name: "index_snippets_on_updated_at" + t.index ["visibility_level"], name: "index_snippets_on_visibility_level" end create_table "software_license_policies", id: :serial, force: :cascade do |t| t.integer "project_id", null: false t.integer "software_license_id", null: false t.integer "approval_status", default: 0, null: false - t.index ["project_id", "software_license_id"], name: "index_software_license_policies_unique_per_project", unique: true, using: :btree - t.index ["software_license_id"], name: "index_software_license_policies_on_software_license_id", using: :btree + t.index ["project_id", "software_license_id"], name: "index_software_license_policies_unique_per_project", unique: true + t.index ["software_license_id"], name: "index_software_license_policies_on_software_license_id" end create_table "software_licenses", id: :serial, force: :cascade do |t| t.string "name", null: false - t.index ["name"], name: "index_software_licenses_on_name", using: :btree + t.index ["name"], name: "index_software_licenses_on_name" end create_table "spam_logs", id: :serial, force: :cascade do |t| @@ -3124,8 +3231,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime "created_at" t.datetime "updated_at" t.integer "project_id" - t.index ["project_id"], name: "index_subscriptions_on_project_id", using: :btree - t.index ["subscribable_id", "subscribable_type", "user_id", "project_id"], name: "index_subscriptions_on_subscribable_and_user_id_and_project_id", unique: true, using: :btree + t.index ["project_id"], name: "index_subscriptions_on_project_id" + t.index ["subscribable_id", "subscribable_type", "user_id", "project_id"], name: "index_subscriptions_on_subscribable_and_user_id_and_project_id", unique: true end create_table "suggestions", force: :cascade do |t| @@ -3138,7 +3245,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "lines_above", default: 0, null: false t.integer "lines_below", default: 0, null: false t.boolean "outdated", default: false, null: false - t.index ["note_id", "relative_order"], name: "index_suggestions_on_note_id_and_relative_order", unique: true, using: :btree + t.index ["note_id", "relative_order"], name: "index_suggestions_on_note_id_and_relative_order", unique: true end create_table "system_note_metadata", id: :serial, force: :cascade do |t| @@ -3147,7 +3254,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "action" t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.index ["note_id"], name: "index_system_note_metadata_on_note_id", unique: true, using: :btree + t.index ["note_id"], name: "index_system_note_metadata_on_note_id", unique: true end create_table "taggings", id: :serial, force: :cascade do |t| @@ -3158,17 +3265,17 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "tagger_type" t.string "context" t.datetime "created_at" - t.index ["tag_id", "taggable_id", "taggable_type", "context", "tagger_id", "tagger_type"], name: "taggings_idx", unique: true, using: :btree - t.index ["tag_id"], name: "index_taggings_on_tag_id", using: :btree - t.index ["taggable_id", "taggable_type", "context"], name: "index_taggings_on_taggable_id_and_taggable_type_and_context", using: :btree - t.index ["taggable_id", "taggable_type"], name: "index_taggings_on_taggable_id_and_taggable_type", using: :btree + t.index ["tag_id", "taggable_id", "taggable_type", "context", "tagger_id", "tagger_type"], name: "taggings_idx", unique: true + t.index ["tag_id"], name: "index_taggings_on_tag_id" + t.index ["taggable_id", "taggable_type", "context"], name: "index_taggings_on_taggable_id_and_taggable_type_and_context" + t.index ["taggable_id", "taggable_type"], name: "index_taggings_on_taggable_id_and_taggable_type" end create_table "tags", id: :serial, force: :cascade do |t| t.string "name" t.integer "taggings_count", default: 0 - t.index ["name"], name: "index_tags_on_name", unique: true, using: :btree - t.index ["name"], name: "index_tags_on_name_trigram", using: :gin, opclasses: {"name"=>"gin_trgm_ops"} + t.index ["name"], name: "index_tags_on_name", unique: true + t.index ["name"], name: "index_tags_on_name_trigram", opclass: :gin_trgm_ops, using: :gin end create_table "term_agreements", id: :serial, force: :cascade do |t| @@ -3177,9 +3284,9 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.boolean "accepted", default: false, null: false t.datetime_with_timezone "created_at", null: false t.datetime_with_timezone "updated_at", null: false - t.index ["term_id"], name: "index_term_agreements_on_term_id", using: :btree - t.index ["user_id", "term_id"], name: "term_agreements_unique_index", unique: true, using: :btree - t.index ["user_id"], name: "index_term_agreements_on_user_id", using: :btree + t.index ["term_id"], name: "index_term_agreements_on_term_id" + t.index ["user_id", "term_id"], name: "term_agreements_unique_index", unique: true + t.index ["user_id"], name: "index_term_agreements_on_user_id" end create_table "timelogs", id: :serial, force: :cascade do |t| @@ -3190,9 +3297,9 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "issue_id" t.integer "merge_request_id" t.datetime_with_timezone "spent_at" - t.index ["issue_id"], name: "index_timelogs_on_issue_id", using: :btree - t.index ["merge_request_id"], name: "index_timelogs_on_merge_request_id", using: :btree - t.index ["user_id"], name: "index_timelogs_on_user_id", using: :btree + t.index ["issue_id"], name: "index_timelogs_on_issue_id" + t.index ["merge_request_id"], name: "index_timelogs_on_merge_request_id" + t.index ["user_id"], name: "index_timelogs_on_user_id" end create_table "todos", id: :serial, force: :cascade do |t| @@ -3208,20 +3315,20 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "note_id" t.string "commit_id" t.integer "group_id" - t.index ["author_id"], name: "index_todos_on_author_id", using: :btree - t.index ["commit_id"], name: "index_todos_on_commit_id", using: :btree - t.index ["group_id"], name: "index_todos_on_group_id", using: :btree - t.index ["note_id"], name: "index_todos_on_note_id", using: :btree - t.index ["project_id"], name: "index_todos_on_project_id", using: :btree - t.index ["target_type", "target_id"], name: "index_todos_on_target_type_and_target_id", using: :btree - t.index ["user_id", "id"], name: "index_todos_on_user_id_and_id_done", where: "((state)::text = 'done'::text)", using: :btree - t.index ["user_id", "id"], name: "index_todos_on_user_id_and_id_pending", where: "((state)::text = 'pending'::text)", using: :btree - t.index ["user_id"], name: "index_todos_on_user_id", using: :btree + t.index ["author_id"], name: "index_todos_on_author_id" + t.index ["commit_id"], name: "index_todos_on_commit_id" + t.index ["group_id"], name: "index_todos_on_group_id" + t.index ["note_id"], name: "index_todos_on_note_id" + t.index ["project_id"], name: "index_todos_on_project_id" + t.index ["target_type", "target_id"], name: "index_todos_on_target_type_and_target_id" + t.index ["user_id", "id"], name: "index_todos_on_user_id_and_id_done", where: "((state)::text = 'done'::text)" + t.index ["user_id", "id"], name: "index_todos_on_user_id_and_id_pending", where: "((state)::text = 'pending'::text)" + t.index ["user_id"], name: "index_todos_on_user_id" end create_table "trending_projects", id: :serial, force: :cascade do |t| t.integer "project_id", null: false - t.index ["project_id"], name: "index_trending_projects_on_project_id", unique: true, using: :btree + t.index ["project_id"], name: "index_trending_projects_on_project_id", unique: true end create_table "u2f_registrations", id: :serial, force: :cascade do |t| @@ -3233,8 +3340,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime "created_at", null: false t.datetime "updated_at", null: false t.string "name" - t.index ["key_handle"], name: "index_u2f_registrations_on_key_handle", using: :btree - t.index ["user_id"], name: "index_u2f_registrations_on_user_id", using: :btree + t.index ["key_handle"], name: "index_u2f_registrations_on_key_handle" + t.index ["user_id"], name: "index_u2f_registrations_on_user_id" end create_table "uploads", id: :serial, force: :cascade do |t| @@ -3248,10 +3355,10 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "mount_point" t.string "secret" t.integer "store" - t.index ["checksum"], name: "index_uploads_on_checksum", using: :btree - t.index ["model_id", "model_type"], name: "index_uploads_on_model_id_and_model_type", using: :btree - t.index ["store"], name: "index_uploads_on_store", using: :btree - t.index ["uploader", "path"], name: "index_uploads_on_uploader_and_path", using: :btree + t.index ["checksum"], name: "index_uploads_on_checksum" + t.index ["model_id", "model_type"], name: "index_uploads_on_model_id_and_model_type" + t.index ["store"], name: "index_uploads_on_store" + t.index ["uploader", "path"], name: "index_uploads_on_uploader_and_path" end create_table "user_agent_details", id: :serial, force: :cascade do |t| @@ -3262,14 +3369,14 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.boolean "submitted", default: false, null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.index ["subject_id", "subject_type"], name: "index_user_agent_details_on_subject_id_and_subject_type", using: :btree + t.index ["subject_id", "subject_type"], name: "index_user_agent_details_on_subject_id_and_subject_type" end create_table "user_callouts", id: :serial, force: :cascade do |t| t.integer "feature_name", null: false t.integer "user_id", null: false - t.index ["user_id", "feature_name"], name: "index_user_callouts_on_user_id_and_feature_name", unique: true, using: :btree - t.index ["user_id"], name: "index_user_callouts_on_user_id", using: :btree + t.index ["user_id", "feature_name"], name: "index_user_callouts_on_user_id_and_feature_name", unique: true + t.index ["user_id"], name: "index_user_callouts_on_user_id" end create_table "user_custom_attributes", id: :serial, force: :cascade do |t| @@ -3278,15 +3385,15 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "user_id", null: false t.string "key", null: false t.string "value", null: false - t.index ["key", "value"], name: "index_user_custom_attributes_on_key_and_value", using: :btree - t.index ["user_id", "key"], name: "index_user_custom_attributes_on_user_id_and_key", unique: true, using: :btree + t.index ["key", "value"], name: "index_user_custom_attributes_on_key_and_value" + t.index ["user_id", "key"], name: "index_user_custom_attributes_on_user_id_and_key", unique: true end create_table "user_interacted_projects", id: false, force: :cascade do |t| t.integer "user_id", null: false t.integer "project_id", null: false - t.index ["project_id", "user_id"], name: "index_user_interacted_projects_on_project_id_and_user_id", unique: true, using: :btree - t.index ["user_id"], name: "index_user_interacted_projects_on_user_id", using: :btree + t.index ["project_id", "user_id"], name: "index_user_interacted_projects_on_project_id_and_user_id", unique: true + t.index ["user_id"], name: "index_user_interacted_projects_on_user_id" end create_table "user_preferences", id: :serial, force: :cascade do |t| @@ -3305,7 +3412,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "epics_sort" t.integer "roadmap_epics_state" t.string "roadmaps_sort" - t.index ["user_id"], name: "index_user_preferences_on_user_id", unique: true, using: :btree + t.string "projects_sort", limit: 64 + t.index ["user_id"], name: "index_user_preferences_on_user_id", unique: true end create_table "user_statuses", primary_key: "user_id", id: :serial, force: :cascade do |t| @@ -3313,7 +3421,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "emoji", default: "speech_balloon", null: false t.string "message", limit: 100 t.string "message_html" - t.index ["user_id"], name: "index_user_statuses_on_user_id", using: :btree + t.index ["user_id"], name: "index_user_statuses_on_user_id" end create_table "user_synced_attributes_metadata", id: :serial, force: :cascade do |t| @@ -3322,7 +3430,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.boolean "location_synced", default: false t.integer "user_id", null: false t.string "provider" - t.index ["user_id"], name: "index_user_synced_attributes_metadata_on_user_id", unique: true, using: :btree + t.index ["user_id"], name: "index_user_synced_attributes_metadata_on_user_id", unique: true end create_table "users", id: :serial, force: :cascade do |t| @@ -3391,7 +3499,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "theme_id", limit: 2 t.integer "accepted_term_id" t.string "feed_token" - t.boolean "private_profile" + t.boolean "private_profile", default: false t.boolean "include_private_contributions" t.string "commit_email" t.boolean "auditor", default: false, null: false @@ -3405,26 +3513,28 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.text "note" t.integer "roadmap_layout", limit: 2 t.integer "bot_type", limit: 2 - t.index ["accepted_term_id"], name: "index_users_on_accepted_term_id", using: :btree - t.index ["admin"], name: "index_users_on_admin", using: :btree - t.index ["bot_type"], name: "index_users_on_bot_type", using: :btree - t.index ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true, using: :btree - t.index ["created_at"], name: "index_users_on_created_at", using: :btree - t.index ["email"], name: "index_users_on_email", unique: true, using: :btree - t.index ["email"], name: "index_users_on_email_trigram", using: :gin, opclasses: {"email"=>"gin_trgm_ops"} - t.index ["feed_token"], name: "index_users_on_feed_token", using: :btree - t.index ["ghost"], name: "index_users_on_ghost", using: :btree - t.index ["group_view"], name: "index_users_on_group_view", using: :btree - t.index ["incoming_email_token"], name: "index_users_on_incoming_email_token", using: :btree - t.index ["managing_group_id"], name: "index_users_on_managing_group_id", using: :btree - t.index ["name"], name: "index_users_on_name", using: :btree - t.index ["name"], name: "index_users_on_name_trigram", using: :gin, opclasses: {"name"=>"gin_trgm_ops"} - t.index ["public_email"], name: "index_users_on_public_email", where: "((public_email)::text <> ''::text)", using: :btree - t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree - t.index ["state"], name: "index_users_on_state", using: :btree - t.index ["state"], name: "index_users_on_state_and_internal", where: "((ghost <> true) AND (bot_type IS NULL))", using: :btree - t.index ["username"], name: "index_users_on_username", using: :btree - t.index ["username"], name: "index_users_on_username_trigram", using: :gin, opclasses: {"username"=>"gin_trgm_ops"} + t.string "first_name", limit: 255 + t.string "last_name", limit: 255 + t.index ["accepted_term_id"], name: "index_users_on_accepted_term_id" + t.index ["admin"], name: "index_users_on_admin" + t.index ["bot_type"], name: "index_users_on_bot_type" + t.index ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true + t.index ["created_at"], name: "index_users_on_created_at" + t.index ["email"], name: "index_users_on_email", unique: true + t.index ["email"], name: "index_users_on_email_trigram", opclass: :gin_trgm_ops, using: :gin + t.index ["feed_token"], name: "index_users_on_feed_token" + t.index ["ghost"], name: "index_users_on_ghost" + t.index ["group_view"], name: "index_users_on_group_view" + t.index ["incoming_email_token"], name: "index_users_on_incoming_email_token" + t.index ["managing_group_id"], name: "index_users_on_managing_group_id" + t.index ["name"], name: "index_users_on_name" + t.index ["name"], name: "index_users_on_name_trigram", opclass: :gin_trgm_ops, using: :gin + t.index ["public_email"], name: "index_users_on_public_email", where: "((public_email)::text <> ''::text)" + t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true + t.index ["state"], name: "index_users_on_state" + t.index ["state"], name: "index_users_on_state_and_internal", where: "((ghost <> true) AND (bot_type IS NULL))" + t.index ["username"], name: "index_users_on_username" + t.index ["username"], name: "index_users_on_username_trigram", opclass: :gin_trgm_ops, using: :gin end create_table "users_ops_dashboard_projects", force: :cascade do |t| @@ -3432,8 +3542,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime_with_timezone "updated_at", null: false t.integer "user_id", null: false t.integer "project_id", null: false - t.index ["project_id"], name: "index_users_ops_dashboard_projects_on_project_id", using: :btree - t.index ["user_id", "project_id"], name: "index_users_ops_dashboard_projects_on_user_id_and_project_id", unique: true, using: :btree + t.index ["project_id"], name: "index_users_ops_dashboard_projects_on_project_id" + t.index ["user_id", "project_id"], name: "index_users_ops_dashboard_projects_on_user_id_and_project_id", unique: true end create_table "users_star_projects", id: :serial, force: :cascade do |t| @@ -3441,8 +3551,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "user_id", null: false t.datetime "created_at" t.datetime "updated_at" - t.index ["project_id"], name: "index_users_star_projects_on_project_id", using: :btree - t.index ["user_id", "project_id"], name: "index_users_star_projects_on_user_id_and_project_id", unique: true, using: :btree + t.index ["project_id"], name: "index_users_star_projects_on_project_id" + t.index ["user_id", "project_id"], name: "index_users_star_projects_on_user_id_and_project_id", unique: true end create_table "vulnerability_feedback", id: :serial, force: :cascade do |t| @@ -3459,12 +3569,12 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "comment_author_id" t.text "comment" t.datetime_with_timezone "comment_timestamp" - t.index ["author_id"], name: "index_vulnerability_feedback_on_author_id", using: :btree - t.index ["comment_author_id"], name: "index_vulnerability_feedback_on_comment_author_id", using: :btree - t.index ["issue_id"], name: "index_vulnerability_feedback_on_issue_id", using: :btree - t.index ["merge_request_id"], name: "index_vulnerability_feedback_on_merge_request_id", using: :btree - t.index ["pipeline_id"], name: "index_vulnerability_feedback_on_pipeline_id", using: :btree - t.index ["project_id", "category", "feedback_type", "project_fingerprint"], name: "vulnerability_feedback_unique_idx", unique: true, using: :btree + t.index ["author_id"], name: "index_vulnerability_feedback_on_author_id" + t.index ["comment_author_id"], name: "index_vulnerability_feedback_on_comment_author_id" + t.index ["issue_id"], name: "index_vulnerability_feedback_on_issue_id" + t.index ["merge_request_id"], name: "index_vulnerability_feedback_on_merge_request_id" + t.index ["pipeline_id"], name: "index_vulnerability_feedback_on_pipeline_id" + t.index ["project_id", "category", "feedback_type", "project_fingerprint"], name: "vulnerability_feedback_unique_idx", unique: true end create_table "vulnerability_identifiers", force: :cascade do |t| @@ -3476,7 +3586,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "external_id", null: false t.string "name", null: false t.text "url" - t.index ["project_id", "fingerprint"], name: "index_vulnerability_identifiers_on_project_id_and_fingerprint", unique: true, using: :btree + t.index ["project_id", "fingerprint"], name: "index_vulnerability_identifiers_on_project_id_and_fingerprint", unique: true end create_table "vulnerability_occurrence_identifiers", force: :cascade do |t| @@ -3484,8 +3594,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime_with_timezone "updated_at", null: false t.bigint "occurrence_id", null: false t.bigint "identifier_id", null: false - t.index ["identifier_id"], name: "index_vulnerability_occurrence_identifiers_on_identifier_id", using: :btree - t.index ["occurrence_id", "identifier_id"], name: "index_vulnerability_occurrence_identifiers_on_unique_keys", unique: true, using: :btree + t.index ["identifier_id"], name: "index_vulnerability_occurrence_identifiers_on_identifier_id" + t.index ["occurrence_id", "identifier_id"], name: "index_vulnerability_occurrence_identifiers_on_unique_keys", unique: true end create_table "vulnerability_occurrence_pipelines", force: :cascade do |t| @@ -3493,8 +3603,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.datetime_with_timezone "updated_at", null: false t.bigint "occurrence_id", null: false t.integer "pipeline_id", null: false - t.index ["occurrence_id", "pipeline_id"], name: "vulnerability_occurrence_pipelines_on_unique_keys", unique: true, using: :btree - t.index ["pipeline_id"], name: "index_vulnerability_occurrence_pipelines_on_pipeline_id", using: :btree + t.index ["occurrence_id", "pipeline_id"], name: "vulnerability_occurrence_pipelines_on_unique_keys", unique: true + t.index ["pipeline_id"], name: "index_vulnerability_occurrence_pipelines_on_pipeline_id" end create_table "vulnerability_occurrences", force: :cascade do |t| @@ -3512,10 +3622,10 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "name", null: false t.string "metadata_version", null: false t.text "raw_metadata", null: false - t.index ["primary_identifier_id"], name: "index_vulnerability_occurrences_on_primary_identifier_id", using: :btree - t.index ["project_id", "primary_identifier_id", "location_fingerprint", "scanner_id"], name: "index_vulnerability_occurrences_on_unique_keys", unique: true, using: :btree - t.index ["scanner_id"], name: "index_vulnerability_occurrences_on_scanner_id", using: :btree - t.index ["uuid"], name: "index_vulnerability_occurrences_on_uuid", unique: true, using: :btree + t.index ["primary_identifier_id"], name: "index_vulnerability_occurrences_on_primary_identifier_id" + t.index ["project_id", "primary_identifier_id", "location_fingerprint", "scanner_id"], name: "index_vulnerability_occurrences_on_unique_keys", unique: true + t.index ["scanner_id"], name: "index_vulnerability_occurrences_on_scanner_id" + t.index ["uuid"], name: "index_vulnerability_occurrences_on_uuid", unique: true end create_table "vulnerability_scanners", force: :cascade do |t| @@ -3524,7 +3634,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.integer "project_id", null: false t.string "external_id", null: false t.string "name", null: false - t.index ["project_id", "external_id"], name: "index_vulnerability_scanners_on_project_id_and_external_id", unique: true, using: :btree + t.index ["project_id", "external_id"], name: "index_vulnerability_scanners_on_project_id_and_external_id", unique: true end create_table "web_hook_logs", id: :serial, force: :cascade do |t| @@ -3540,8 +3650,8 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "internal_error_message" t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.index ["created_at", "web_hook_id"], name: "index_web_hook_logs_on_created_at_and_web_hook_id", using: :btree - t.index ["web_hook_id"], name: "index_web_hook_logs_on_web_hook_id", using: :btree + t.index ["created_at", "web_hook_id"], name: "index_web_hook_logs_on_created_at_and_web_hook_id" + t.index ["web_hook_id"], name: "index_web_hook_logs_on_web_hook_id" end create_table "web_hooks", id: :serial, force: :cascade do |t| @@ -3568,12 +3678,20 @@ ActiveRecord::Schema.define(version: 20190703130053) do t.string "encrypted_url" t.string "encrypted_url_iv" t.integer "group_id" - t.index ["project_id"], name: "index_web_hooks_on_project_id", using: :btree - t.index ["type"], name: "index_web_hooks_on_type", using: :btree + t.index ["project_id"], name: "index_web_hooks_on_project_id" + t.index ["type"], name: "index_web_hooks_on_type" end + add_foreign_key "allowed_email_domains", "namespaces", column: "group_id", on_delete: :cascade + add_foreign_key "analytics_cycle_analytics_group_stages", "labels", column: "end_event_label_id", on_delete: :cascade + add_foreign_key "analytics_cycle_analytics_group_stages", "labels", column: "start_event_label_id", on_delete: :cascade + add_foreign_key "analytics_cycle_analytics_group_stages", "namespaces", column: "group_id", on_delete: :cascade + add_foreign_key "analytics_cycle_analytics_project_stages", "labels", column: "end_event_label_id", on_delete: :cascade + add_foreign_key "analytics_cycle_analytics_project_stages", "labels", column: "start_event_label_id", on_delete: :cascade + add_foreign_key "analytics_cycle_analytics_project_stages", "projects", on_delete: :cascade add_foreign_key "application_settings", "namespaces", column: "custom_project_templates_group_id", on_delete: :nullify add_foreign_key "application_settings", "projects", column: "file_template_project_id", name: "fk_ec757bd087", on_delete: :nullify + add_foreign_key "application_settings", "projects", column: "instance_administration_project_id", on_delete: :nullify add_foreign_key "application_settings", "users", column: "usage_stats_set_by_user_id", name: "fk_964370041d", on_delete: :nullify add_foreign_key "approval_merge_request_rule_sources", "approval_merge_request_rules", on_delete: :cascade add_foreign_key "approval_merge_request_rule_sources", "approval_project_rules", on_delete: :cascade @@ -3606,6 +3724,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do add_foreign_key "boards", "namespaces", column: "group_id", on_delete: :cascade add_foreign_key "boards", "projects", name: "fk_f15266b5f9", on_delete: :cascade add_foreign_key "chat_teams", "namespaces", on_delete: :cascade + add_foreign_key "ci_build_needs", "ci_builds", column: "build_id", on_delete: :cascade add_foreign_key "ci_build_trace_chunks", "ci_builds", column: "build_id", on_delete: :cascade add_foreign_key "ci_build_trace_section_names", "projects", on_delete: :cascade add_foreign_key "ci_build_trace_sections", "ci_build_trace_section_names", column: "section_name_id", name: "fk_264e112c66", on_delete: :cascade @@ -3622,6 +3741,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do add_foreign_key "ci_group_variables", "namespaces", column: "group_id", name: "fk_33ae4d58d8", on_delete: :cascade add_foreign_key "ci_job_artifacts", "ci_builds", column: "job_id", on_delete: :cascade add_foreign_key "ci_job_artifacts", "projects", on_delete: :cascade + add_foreign_key "ci_job_variables", "ci_builds", column: "job_id", on_delete: :cascade add_foreign_key "ci_pipeline_chat_data", "chat_names", on_delete: :cascade add_foreign_key "ci_pipeline_chat_data", "ci_pipelines", column: "pipeline_id", on_delete: :cascade add_foreign_key "ci_pipeline_schedule_variables", "ci_pipeline_schedules", column: "pipeline_schedule_id", name: "fk_41c35fda51", on_delete: :cascade @@ -3664,6 +3784,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do add_foreign_key "clusters_applications_runners", "clusters", on_delete: :cascade add_foreign_key "clusters_kubernetes_namespaces", "cluster_projects", on_delete: :nullify add_foreign_key "clusters_kubernetes_namespaces", "clusters", on_delete: :cascade + add_foreign_key "clusters_kubernetes_namespaces", "environments", on_delete: :nullify add_foreign_key "clusters_kubernetes_namespaces", "projects", on_delete: :nullify add_foreign_key "container_repositories", "projects" add_foreign_key "dependency_proxy_blobs", "namespaces", column: "group_id", name: "fk_db58bbc5d7", on_delete: :cascade @@ -3675,6 +3796,7 @@ ActiveRecord::Schema.define(version: 20190703130053) do add_foreign_key "design_management_designs", "projects", on_delete: :cascade add_foreign_key "design_management_designs_versions", "design_management_designs", column: "design_id", name: "fk_03c671965c", on_delete: :cascade add_foreign_key "design_management_designs_versions", "design_management_versions", column: "version_id", name: "fk_f4d25ba00c", on_delete: :cascade + add_foreign_key "design_management_versions", "issues", on_delete: :cascade add_foreign_key "draft_notes", "merge_requests", on_delete: :cascade add_foreign_key "draft_notes", "users", column: "author_id", on_delete: :cascade add_foreign_key "elasticsearch_indexed_namespaces", "namespaces", on_delete: :cascade @@ -3696,7 +3818,9 @@ ActiveRecord::Schema.define(version: 20190703130053) do add_foreign_key "fork_network_members", "projects", on_delete: :cascade add_foreign_key "fork_networks", "projects", column: "root_project_id", name: "fk_e7b436b2b5", on_delete: :nullify add_foreign_key "forked_project_links", "projects", column: "forked_to_project_id", name: "fk_434510edb0", on_delete: :cascade + add_foreign_key "geo_container_repository_updated_events", "container_repositories", name: "fk_212c89c706", on_delete: :cascade add_foreign_key "geo_event_log", "geo_cache_invalidation_events", column: "cache_invalidation_event_id", name: "fk_42c3b54bed", on_delete: :cascade + add_foreign_key "geo_event_log", "geo_container_repository_updated_events", column: "container_repository_updated_event_id", name: "fk_6ada82d42a", on_delete: :cascade add_foreign_key "geo_event_log", "geo_hashed_storage_migrated_events", column: "hashed_storage_migrated_event_id", name: "fk_27548c6db3", on_delete: :cascade add_foreign_key "geo_event_log", "geo_job_artifact_deleted_events", column: "job_artifact_deleted_event_id", name: "fk_176d3fbb5d", on_delete: :cascade add_foreign_key "geo_event_log", "geo_lfs_object_deleted_events", column: "lfs_object_deleted_event_id", name: "fk_d5af95fcd9", on_delete: :cascade |