Sha256: 4b1f59736a07fb04dc717bdd8396a09109df96851e363412668130ed53df972f

Contents?: true

Size: 1.08 KB

Versions: 23

Compression:

Stored size: 1.08 KB

Contents

class ActiveRecord::Base

  def self.bulk_insert!(record_list)
    return if record_list.empty?
    
    adapter_type = connection.adapter_name.downcase.to_sym
    case adapter_type
    when :postgresql
      self.connection.execute(postgresql_bulk_insert_sql(record_list))      
    else
      self.default_bulk_insert(record_list)
    end
  end
  
  protected  
  def self.convert_record_list(record_list)
    key_list = record_list.map(&:keys).flatten.uniq.sort

    value_list = record_list.map do |rec|
      list = []
      key_list.each {|key| list <<  ActiveRecord::Base.connection.quote(rec[key]) }
      list
    end

    return [key_list, value_list]
  end
  
  def self.postgresql_bulk_insert_sql(record_list)
    key_list, value_list = convert_record_list(record_list)        
    "INSERT INTO #{self.table_name} (#{key_list.join(", ")}) VALUES #{value_list.map {|rec| "(#{rec.join(", ")})" }.join(" ,")}"
  end
  
  def self.default_bulk_insert(record_list)
    ActiveRecord::Base.transaction do
      record_list.each{|record| Notifiable::NotificationStatus.create(record) }
    end
  end
  
end

Version data entries

23 entries across 23 versions & 1 rubygems

Version Path
notifiable-rails-0.29.0 lib/notifiable/active_record.rb
notifiable-rails-0.28.1 lib/notifiable/active_record.rb
notifiable-rails-0.28.0 lib/notifiable/active_record.rb
notifiable-rails-0.27.1 lib/notifiable/active_record.rb
notifiable-rails-0.27.0 lib/notifiable/active_record.rb
notifiable-rails-0.26.3 lib/notifiable/active_record.rb
notifiable-rails-0.26.1 lib/notifiable/active_record.rb
notifiable-rails-0.26.0 lib/notifiable/active_record.rb
notifiable-rails-0.24.3 lib/notifiable/active_record.rb
notifiable-rails-0.24.2 lib/notifiable/active_record.rb
notifiable-rails-0.24.1 lib/notifiable/active_record.rb
notifiable-rails-0.24.0 lib/notifiable/active_record.rb
notifiable-rails-0.23.0 lib/notifiable/active_record.rb
notifiable-rails-0.22.1 lib/notifiable/active_record.rb
notifiable-rails-0.22.0 lib/notifiable/active_record.rb
notifiable-rails-0.21.3 lib/notifiable/active_record.rb
notifiable-rails-0.21.2 lib/notifiable/active_record.rb
notifiable-rails-0.21.1 lib/notifiable/active_record.rb
notifiable-rails-0.21.0 lib/notifiable/active_record.rb
notifiable-rails-0.20.0 lib/notifiable/active_record.rb