summaryrefslogtreecommitdiff
path: root/db/migrate/20170608152748_create_push_event_payloads_tables.rb
blob: 292d9e3ca06e208f7d62c8d78721d28a2a36c33d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# See http://doc.gitlab.com/ce/development/migration_style_guide.html
# for more information on how to write migrations for GitLab.

class CreatePushEventPayloadsTables < ActiveRecord::Migration[4.2]
  include Gitlab::Database::MigrationHelpers

  # Set this constant to true if this migration requires downtime.
  DOWNTIME = false

  disable_ddl_transaction!

  def up
    create_table :push_event_payloads, id: false do |t|
      t.bigint :commit_count, null: false

      t.integer :event_id, null: false
      t.integer :action, null: false, limit: 2
      t.integer :ref_type, null: false, limit: 2

      t.binary :commit_from
      t.binary :commit_to

      t.text :ref
      t.string :commit_title, limit: 70

      t.index :event_id, unique: true
    end

    # We're adding a foreign key to the _shadow_ table, and this is deliberate.
    # By using the shadow table we don't have to recreate/revalidate this
    # foreign key after swapping the "events_for_migration" and "events" tables.
    #
    # The "events_for_migration" table has a foreign key to "projects.id"
    # ensuring that project removals also remove events from the shadow table
    # (and thus also from this table).
    add_concurrent_foreign_key(
      :push_event_payloads,
      :events_for_migration,
      column: :event_id
    )
  end

  def down
    drop_table :push_event_payloads
  end
end