@@ -639,18 +639,37 @@ def default_index_type?(index) # :nodoc:
639
639
end
640
640
641
641
def build_insert_sql ( insert ) # :nodoc:
642
- sql = +"INSERT #{ insert . into } #{ insert . values_list } "
643
-
644
- if insert . skip_duplicates?
645
- no_op_column = quote_column_name ( insert . keys . first )
646
- sql << " ON DUPLICATE KEY UPDATE #{ no_op_column } =#{ no_op_column } "
647
- elsif insert . update_duplicates?
648
- sql << " ON DUPLICATE KEY UPDATE "
649
- if insert . raw_update_sql?
650
- sql << insert . raw_update_sql
651
- else
652
- sql << insert . touch_model_timestamps_unless { |column | "#{ column } <=>VALUES(#{ column } )" }
653
- sql << insert . updatable_columns . map { |column | "#{ column } =VALUES(#{ column } )" } . join ( "," )
642
+ no_op_column = quote_column_name ( insert . keys . first )
643
+
644
+ # Avoid MySQL 8.0 deprecation warning, see https://dev.mysql.com/worklog/task/?id=13325.
645
+ if !mariadb? && database_version >= "8.0.0"
646
+ values_alias = quote_table_name ( "#{ insert . model . table_name } _values" )
647
+ sql = +"INSERT #{ insert . into } #{ insert . values_list } AS #{ values_alias } "
648
+
649
+ if insert . skip_duplicates?
650
+ sql << " ON DUPLICATE KEY UPDATE #{ no_op_column } =#{ values_alias } .#{ no_op_column } "
651
+ elsif insert . update_duplicates?
652
+ sql << " ON DUPLICATE KEY UPDATE "
653
+ if insert . raw_update_sql?
654
+ sql << insert . raw_update_sql
655
+ else
656
+ sql << insert . touch_model_timestamps_unless { |column | "#{ insert . model . quoted_table_name } .#{ column } <=>#{ values_alias } .#{ column } " }
657
+ sql << insert . updatable_columns . map { |column | "#{ column } =#{ values_alias } .#{ column } " } . join ( "," )
658
+ end
659
+ end
660
+ else
661
+ sql = +"INSERT #{ insert . into } #{ insert . values_list } "
662
+
663
+ if insert . skip_duplicates?
664
+ sql << " ON DUPLICATE KEY UPDATE #{ no_op_column } =#{ no_op_column } "
665
+ elsif insert . update_duplicates?
666
+ sql << " ON DUPLICATE KEY UPDATE "
667
+ if insert . raw_update_sql?
668
+ sql << insert . raw_update_sql
669
+ else
670
+ sql << insert . touch_model_timestamps_unless { |column | "#{ column } <=>VALUES(#{ column } )" }
671
+ sql << insert . updatable_columns . map { |column | "#{ column } =VALUES(#{ column } )" } . join ( "," )
672
+ end
654
673
end
655
674
end
656
675
0 commit comments