Sha256: 819c8bb3c9184bab6baba513e9c718d1f204774eb1d084f8a1bac61cf248fda0
Contents?: true
Size: 1.53 KB
Versions: 1
Compression:
Stored size: 1.53 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 :mysql raise NotImplementedError, "Not implemented type '#{adapter_type}'" when :sqlite self.create(record_list) when :postgresql self.connection.execute(postgresql_bulk_insert_sql(record_list)) when :oracleenhanced self.connection.execute(oracle_bulk_insert_sql(record_list)) else raise NotImplementedError, "Unknown adapter type '#{adapter_type}' for ActiveRecord::Base.bulk_insert!" 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.oracle_bulk_insert_sql(record_list) key_list, value_list = convert_record_list(record_list) inserts = [] value_list.each do |rec| inserts << "INTO #{self.table_name} (#{key_list.join(", ")}) VALUES (#{rec.join(", ")})" end "INSERT ALL #{inserts.join(' ')} SELECT 1 FROM DUAL;" end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
notifiable-rails-0.19.5 | lib/notifiable/active_record.rb |