Sha256: 0da920d5f202203071cea1bfd179a4d6717e11d3ebd415f0ca9d056675d81271

Contents?: true

Size: 1009 Bytes

Versions: 62

Compression:

Stored size: 1009 Bytes

Contents

# frozen_string_literal: true

require_relative 'base'

module DeclareSchema
  module SchemaChange
    class PrimaryKeyChange < Base
      def initialize(table_name, old_column_names, new_column_names)
        @table_name = table_name
        @old_column_names = old_column_names.presence
        @new_column_names = new_column_names.presence
      end

      def up_command
        alter_primary_key(@old_column_names, @new_column_names)
      end

      def down_command
        alter_primary_key(@new_column_names, @old_column_names)
      end

      private

      def alter_primary_key(old_col_names, new_col_names)
        drop_command = "DROP PRIMARY KEY" if old_col_names
        add_command = "ADD PRIMARY KEY (#{new_col_names.join(', ')})" if new_col_names
        commands = [drop_command, add_command].compact.join(', ')
        statement = "ALTER TABLE #{ActiveRecord::Base.connection.quote_table_name(@table_name)} #{commands}"
        "execute #{statement.inspect}"
      end
    end
  end
end

Version data entries

62 entries across 62 versions & 1 rubygems

Version Path
declare_schema-1.4.0 lib/declare_schema/schema_change/primary_key_change.rb
declare_schema-1.4.0.colin.11 lib/declare_schema/schema_change/primary_key_change.rb
declare_schema-1.3.6 lib/declare_schema/schema_change/primary_key_change.rb
declare_schema-1.3.6.colin.1 lib/declare_schema/schema_change/primary_key_change.rb
declare_schema-1.3.5 lib/declare_schema/schema_change/primary_key_change.rb
declare_schema-1.3.5.colin.1 lib/declare_schema/schema_change/primary_key_change.rb
declare_schema-1.4.0.colin.9 lib/declare_schema/schema_change/primary_key_change.rb
declare_schema-1.3.4 lib/declare_schema/schema_change/primary_key_change.rb
declare_schema-1.3.4.colin.1 lib/declare_schema/schema_change/primary_key_change.rb
declare_schema-1.4.0.colin.8 lib/declare_schema/schema_change/primary_key_change.rb
declare_schema-1.3.3 lib/declare_schema/schema_change/primary_key_change.rb
declare_schema-1.3.3.colin.1 lib/declare_schema/schema_change/primary_key_change.rb
declare_schema-1.4.0.colin.7 lib/declare_schema/schema_change/primary_key_change.rb
declare_schema-1.4.0.colin.6 lib/declare_schema/schema_change/primary_key_change.rb
declare_schema-1.4.0.colin.5 lib/declare_schema/schema_change/primary_key_change.rb
declare_schema-1.4.0.colin.4 lib/declare_schema/schema_change/primary_key_change.rb
declare_schema-1.4.0.colin.3 lib/declare_schema/schema_change/primary_key_change.rb
declare_schema-1.4.0.colin.2 lib/declare_schema/schema_change/primary_key_change.rb
declare_schema-1.4.0.colin.1 lib/declare_schema/schema_change/primary_key_change.rb
declare_schema-1.3.2 lib/declare_schema/schema_change/primary_key_change.rb