Sha256: 28580ee0e250ad41b986702b62212b35b298fe11429158fad4c5ded7e5777084

Contents?: true

Size: 1.64 KB

Versions: 9

Compression:

Stored size: 1.64 KB

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) # rubocop:disable Lint/MissingSuper
        @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)
        if current_adapter == 'postgresql'
          [].tap do |commands|
            if old_col_names
              drop_command = "ALTER TABLE #{ActiveRecord::Base.connection.quote_table_name(@table_name)} DROP CONSTRAINT #{@table_name}_pkey;"
              commands << "execute #{drop_command.inspect}"
            end
            if new_col_names
              add_command = "ALTER TABLE #{ActiveRecord::Base.connection.quote_table_name(@table_name)} ADD PRIMARY KEY (#{new_col_names.join(', ')});"
              commands << "execute #{add_command.inspect}"
            end
          end.join("\n")
        else
          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
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
declare_schema-2.3.2 lib/declare_schema/schema_change/primary_key_change.rb
declare_schema-2.3.1 lib/declare_schema/schema_change/primary_key_change.rb
declare_schema-2.3.0 lib/declare_schema/schema_change/primary_key_change.rb
declare_schema-2.3.0.pre.is.0 lib/declare_schema/schema_change/primary_key_change.rb
declare_schema-2.2.1 lib/declare_schema/schema_change/primary_key_change.rb
declare_schema-2.2.0.colin.1 lib/declare_schema/schema_change/primary_key_change.rb
declare_schema-2.2.0 lib/declare_schema/schema_change/primary_key_change.rb
declare_schema-2.1.0 lib/declare_schema/schema_change/primary_key_change.rb
declare_schema-2.1.0.pre.1 lib/declare_schema/schema_change/primary_key_change.rb