667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
|
# File 'lib/mass_record.rb', line 667
def mass_insert hashes, into:nil
begin
return false if hashes.blank? or into.blank?
model = get_model from:into
concentrated_queries = {}
logger.debug "#{into}: Parsing #{hashes.count} hashes into a single query>".black.on_white
hashes.each do |hash|
logger << ".".black.on_white if logger.debug?
original_key_set = hash.keys.sort
sql = sql_for_insert hash, into:model
into_clause = sql.gsub /\s*VALUES.*$/,''
value_clause = sql.gsub(/^.*VALUES\s*/,'')
concentrated_queries[original_key_set] = {} unless concentrated_queries[original_key_set].is_a? Hash
concentrated_queries[original_key_set][:into] = into_clause
concentrated_queries[original_key_set][:values] = [] unless concentrated_queries[original_key_set][:values].is_a? Array
concentrated_queries[original_key_set][:values] << value_clause
end
errors = {}
concentrated_queries.each do |column_set,clauses|
final_query = "#{clauses[:into]} VALUES #{clauses[:values].join(", ")}"
begin
query final_query, connection:model
self.mass_count += 1
rescue Exception => e
logger.debug e.message
logger.info e.message.to_s[0..1000]
errors[column_set] = e
end
end
return errors
rescue Exception => e
logger.error e.message
return (defined? errors) ? (errors.merge!({run_time:e})) : {run_time:e}
end
end
|