Sha256: f5b7198b0ef2386fe90c632b84192e6ac0faf41be5f069265d0c795066cbd015

Contents?: true

Size: 933 Bytes

Versions: 1

Compression:

Stored size: 933 Bytes

Contents

require 'activerecord_reset_pk_sequence/version'

module ActiveRecord
  class Base
    class << self
      def reset_pk_sequence
        case ActiveRecord::Base.connection.adapter_name
        when 'SQLite'
          ActiveRecord::Base.connection.execute(sqlite_update_seq_sql)
        when 'Mysql'
          ActiveRecord::Base.connection.execute(mysql_update_seq_sql)
        when 'PostgreSQL'
          ActiveRecord::Base.connection.reset_pk_sequence!(table_name)
        else
          raise 'Task not implemented for this DB adapter'
        end
      end

      private

      def sqlite_update_seq_sql
        new_max_id = maximum(primary_key) || 0
        "UPDATE sqlite_sequence SET seq = #{new_max_id} WHERE name = '#{table_name}';"
      end

      def mysql_update_seq_sql
        new_max_id = maximum(primary_key) + 1 || 1
        "ALTER TABLE '#{table_name}' AUTO_INCREMENT = #{new_max_id};"
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
activerecord_reset_pk_sequence-0.3.0 lib/activerecord_reset_pk_sequence.rb