Skip to content

Commit 3865f87

Browse files
committed
Fix prepared statements on mysql2 adapter
1 parent 8cab71c commit 3865f87

File tree

1 file changed

+20
-7
lines changed

1 file changed

+20
-7
lines changed

activerecord/lib/active_record/connection_adapters/mysql2/database_statements.rb

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,26 +48,39 @@ def perform_query(raw_connection, sql, binds, type_casted_binds, prepare:, notif
4848
# made since we established the connection
4949
raw_connection.query_options[:database_timezone] = default_timezone
5050

51-
result = if prepare
52-
stmt = @statements[sql] ||= raw_connection.prepare(sql)
51+
result = if !prepared_statements || binds.nil? || binds.empty?
52+
ActiveSupport::Dependencies.interlock.permit_concurrent_loads do
53+
result = raw_connection.query(sql)
54+
@affected_rows_before_warnings = raw_connection.affected_rows
55+
result
56+
end
57+
result
58+
else
59+
if prepare
60+
stmt = @statements[sql] ||= raw_connection.prepare(sql)
61+
else
62+
stmt = raw_connection.prepare(sql)
63+
end
5364

5465
begin
5566
ActiveSupport::Dependencies.interlock.permit_concurrent_loads do
5667
result = stmt.execute(*type_casted_binds)
68+
@affected_rows_before_warnings = stmt.affected_rows
69+
result
5770
end
5871
rescue ::Mysql2::Error
59-
@statements.delete(sql)
60-
stmt.close
72+
if prepare
73+
@statements.delete(sql)
74+
else
75+
stmt.close
76+
end
6177
raise
6278
end
6379
verified!
6480

6581
result
66-
else
67-
raw_connection.query(sql)
6882
end
6983

70-
@affected_rows_before_warnings = raw_connection.affected_rows
7184

7285
notification_payload[:affected_rows] = @affected_rows_before_warnings
7386
notification_payload[:row_count] = result&.size || 0

0 commit comments

Comments
 (0)