Skip to content

Commit 7c618b8

Browse files
committed
Optimize loop in insert_all
We can skip looping over timestamp_attributes_for_update_in_model entirely if the condition is false, instead of checking it for each attribute.
1 parent f2be2b0 commit 7c618b8

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

activerecord/lib/active_record/insert_all.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,8 @@ def updatable_columns
196196
end
197197

198198
def touch_model_timestamps_unless(&block)
199+
return "" unless update_duplicates?
200+
199201
model.timestamp_attributes_for_update_in_model.filter_map do |column_name|
200202
if touch_timestamp_attribute?(column_name)
201203
"#{column_name}=(CASE WHEN (#{updatable_columns.map(&block).join(" AND ")}) THEN #{model.quoted_table_name}.#{column_name} ELSE #{connection.high_precision_current_timestamp} END),"
@@ -213,7 +215,7 @@ def raw_update_sql
213215
attr_reader :connection, :insert_all
214216

215217
def touch_timestamp_attribute?(column_name)
216-
update_duplicates? && !insert_all.updatable_columns.include?(column_name)
218+
insert_all.updatable_columns.exclude?(column_name)
217219
end
218220

219221
def columns_list

0 commit comments

Comments
 (0)