# frozen_string_literal: true

class RemoveEpicIssuesDefaultRelativePosition < ActiveRecord::Migration[5.2]
  DOWNTIME = false

  include Gitlab::Database::MigrationHelpers

  disable_ddl_transaction!

  def up
    # The column won't exist if someone installed EE, downgraded to CE
    # before it was added in EE, then tries to upgrade CE.
    if column_exists?(:epic_issues, :relative_position)
      change_column_null :epic_issues, :relative_position, true
      change_column_default :epic_issues, :relative_position, from: 1073741823, to: nil
    else
      add_column_with_default(:epic_issues, :relative_position, :integer, default: nil, allow_null: true)
    end
  end

  def down
    change_column_default :epic_issues, :relative_position, from: nil, to: 1073741823
    change_column_null :epic_issues, :relative_position, false
  end
end

# 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

--- 
+++ 
@@ -3,8 +3,23 @@
 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
+  include Gitlab::Database::MigrationHelpers
+
+  disable_ddl_transaction!
+
+  def up
+    # The column won't exist if someone installed EE, downgraded to CE
+    # before it was added in EE, then tries to upgrade CE.
+    if column_exists?(:epic_issues, :relative_position)
+      change_column_null :epic_issues, :relative_position, true
+      change_column_default :epic_issues, :relative_position, from: 1073741823, to: nil
+    else
+      add_column_with_default(:epic_issues, :relative_position, :integer, default: nil, allow_null: true)
+    end
+  end
+
+  def down
+    change_column_default :epic_issues, :relative_position, from: nil, to: 1073741823
+    change_column_null :epic_issues, :relative_position, false
   end
 end
Make epic_issues relative_position migration more robust

If someone installed EE, then downgraded to CE before this column was
added, upgrading to the latest version of CE will fail:

1. We have a backport migration for the entire EE schema but the table
   `epic_issues` exists, just not the `relative_position` column.
2. The migration that changes the default (quite reasonably) didn't
   check if the column exists.

If the column doesn't exist, we can just create it with the correct
default.
