File tree Expand file tree Collapse file tree 2 files changed +6
-4
lines changed
lib/active_record/connection_adapters Expand file tree Collapse file tree 2 files changed +6
-4
lines changed Original file line number Diff line number Diff line change @@ -628,24 +628,26 @@ def default_index_type?(index) # :nodoc:
628
628
end
629
629
630
630
def build_insert_sql ( insert ) # :nodoc:
631
+ # Can use any column as it will be assigned to itself.
631
632
no_op_column = quote_column_name ( insert . keys . first ) if insert . keys . first
632
633
633
634
# MySQL 8.0.19 replaces `VALUES(<expression>)` clauses with row and column alias names, see https://dev.mysql.com/worklog/task/?id=6312 .
634
635
# then MySQL 8.0.20 deprecates the `VALUES(<expression>)` see https://dev.mysql.com/worklog/task/?id=13325 .
635
636
if supports_insert_raw_alias_syntax?
637
+ quoted_table_name = insert . model . quoted_table_name
636
638
values_alias = quote_table_name ( "#{ insert . model . table_name . parameterize } _values" )
637
639
sql = +"INSERT #{ insert . into } #{ insert . values_list } AS #{ values_alias } "
638
640
639
641
if insert . skip_duplicates?
640
642
if no_op_column
641
- sql << " ON DUPLICATE KEY UPDATE #{ no_op_column } =#{ values_alias } .#{ no_op_column } "
643
+ sql << " ON DUPLICATE KEY UPDATE #{ no_op_column } =#{ quoted_table_name } .#{ no_op_column } "
642
644
end
643
645
elsif insert . update_duplicates?
644
646
if insert . raw_update_sql?
645
647
sql = +"INSERT #{ insert . into } #{ insert . values_list } ON DUPLICATE KEY UPDATE #{ insert . raw_update_sql } "
646
648
else
647
649
sql << " ON DUPLICATE KEY UPDATE "
648
- sql << insert . touch_model_timestamps_unless { |column | "#{ insert . model . quoted_table_name } .#{ column } <=>#{ values_alias } .#{ column } " }
650
+ sql << insert . touch_model_timestamps_unless { |column | "#{ quoted_table_name } .#{ column } <=>#{ values_alias } .#{ column } " }
649
651
sql << insert . updatable_columns . map { |column | "#{ column } =#{ values_alias } .#{ column } " } . join ( "," )
650
652
end
651
653
end
Original file line number Diff line number Diff line change @@ -188,10 +188,10 @@ def test_insert_all_with_skip_duplicates_and_autonumber_id_given
188
188
def test_skip_duplicates_strategy_does_not_secretly_upsert
189
189
skip unless supports_insert_on_duplicate_skip?
190
190
191
- book = Book . create! ( author_id : 8 , name : "Refactoring" , format : "EXPECTED " )
191
+ book = Book . create! ( format : "EXPECTED" , author_id : 8 , name : "Refactoring " )
192
192
193
193
assert_no_difference "Book.count" do
194
- Book . insert ( { author_id : 8 , name : "Refactoring" , format : "UNEXPECTED" } )
194
+ Book . insert_all ( [ { format : "UNEXPECTED" , author_id : 8 , name : "Refactoring" } ] )
195
195
end
196
196
197
197
assert_equal "EXPECTED" , book . reload . format
You can’t perform that action at this time.
0 commit comments