Skip to content

Commit 7f4b396

Browse files
committed
Parameterize table_name when constructing insert alias to avoid syntax error when table_name contains the database name
1 parent 5ade5d4 commit 7f4b396

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -644,7 +644,7 @@ def build_insert_sql(insert) # :nodoc:
644644
# MySQL 8.0.19 replaces `VALUES(<expression>)` clauses with row and column alias names, see https://dev.mysql.com/worklog/task/?id=6312 .
645645
# then MySQL 8.0.20 deprecates the `VALUES(<expression>)` see https://dev.mysql.com/worklog/task/?id=13325 .
646646
if supports_insert_raw_alias_syntax?
647-
values_alias = quote_table_name("#{insert.model.table_name}_values")
647+
values_alias = quote_table_name("#{insert.model.table_name.parameterize}_values")
648648
sql = +"INSERT #{insert.into} #{insert.values_list} AS #{values_alias}"
649649

650650
if insert.skip_duplicates?

activerecord/test/cases/insert_all_test.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -811,6 +811,18 @@ def test_upsert_all_with_unique_by_fails_cleanly_for_adapters_not_supporting_ins
811811
assert_match "#{ActiveRecord::Base.lease_connection.class} does not support :unique_by", error.message
812812
end
813813

814+
if current_adapter?(:Mysql2Adapter, :TrilogyAdapter)
815+
def test_insert_all_when_table_name_contains_database
816+
database_name = Book.connection_db_config.database
817+
Book.table_name = "#{database_name}.books"
818+
819+
assert_nothing_raised do
820+
Book.insert_all! [{ name: "Rework", author_id: 1 }]
821+
end
822+
Book.table_name = "books"
823+
end
824+
end
825+
814826
private
815827
def capture_log_output
816828
output = StringIO.new

0 commit comments

Comments
 (0)