Skip to content

Commit f69bbcb

Browse files
committed
MySQL2 and TrilogyAdapter: stop using #execute as internal API
`#execute` is a public method and using it internaly forces us to expose private arguments and other dirty things. Other adapters don't do this, so this bring MySQL in line with others.
1 parent e93bd8f commit f69bbcb

File tree

2 files changed

+37
-6
lines changed

2 files changed

+37
-6
lines changed

activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -225,18 +225,31 @@ def disable_referential_integrity # :nodoc:
225225
# Setting +allow_retry+ to true causes the db to reconnect and retry
226226
# executing the SQL statement in case of a connection-related exception.
227227
# This option should only be enabled for known idempotent queries.
228-
def execute(sql, name = nil, async: false, allow_retry: false)
228+
def execute(sql, name = nil, allow_retry: false)
229229
sql = transform_query(sql)
230230
check_if_write_query(sql)
231231

232-
raw_execute(sql, name, async: async, allow_retry: allow_retry)
232+
mark_transaction_written_if_write(sql)
233+
234+
log(sql, name) do
235+
with_raw_connection(allow_retry: allow_retry) do |conn|
236+
sync_timezone_changes(conn)
237+
result = conn.query(sql)
238+
handle_warnings(sql)
239+
result
240+
end
241+
end
233242
end
234243

235244
# Mysql2Adapter doesn't have to free a result after using it, but we use this method
236245
# to write stuff in an abstract way without concerning ourselves about whether it
237246
# needs to be explicitly freed or not.
238247
def execute_and_free(sql, name = nil, async: false) # :nodoc:
239-
yield execute(sql, name, async: async)
248+
sql = transform_query(sql)
249+
check_if_write_query(sql)
250+
251+
mark_transaction_written_if_write(sql)
252+
yield raw_execute(sql, name, async: async)
240253
end
241254

242255
def begin_db_transaction # :nodoc:
@@ -769,6 +782,8 @@ def sync_timezone_changes(raw_connection)
769782
end
770783

771784
def internal_execute(sql, name = "SCHEMA", allow_retry: true, uses_transaction: false)
785+
sql = transform_query(sql)
786+
check_if_write_query(sql)
772787
raw_execute(sql, name, allow_retry: allow_retry, uses_transaction: uses_transaction)
773788
end
774789

activerecord/lib/active_record/connection_adapters/trilogy_adapter.rb

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,18 +71,27 @@ def explain(arel, binds = [], options = [])
7171
end
7272

7373
def exec_query(sql, name = "SQL", binds = [], prepare: false, async: false)
74-
result = execute(sql, name, async: async)
74+
sql = transform_query(sql)
75+
check_if_write_query(sql)
76+
77+
result = raw_execute(sql, name, async: async)
7578
ActiveRecord::Result.new(result.fields, result.to_a)
7679
end
7780

7881
alias exec_without_stmt exec_query
7982

8083
def exec_insert(sql, name, binds, pk = nil, sequence_name = nil)
81-
execute(to_sql(sql, binds), name)
84+
sql = transform_query(sql)
85+
check_if_write_query(sql)
86+
87+
raw_execute(to_sql(sql, binds), name)
8288
end
8389

8490
def exec_delete(sql, name = nil, binds = [])
85-
result = execute(to_sql(sql, binds), name)
91+
sql = transform_query(sql)
92+
check_if_write_query(sql)
93+
94+
result = raw_execute(to_sql(sql, binds), name)
8695
result.affected_rows
8796
end
8897

@@ -214,6 +223,13 @@ def discard!
214223
end
215224
end
216225

226+
def execute(sql, name = nil, allow_retry: false)
227+
sql = transform_query(sql)
228+
check_if_write_query(sql)
229+
230+
raw_execute(sql, name, allow_retry: allow_retry)
231+
end
232+
217233
def each_hash(result)
218234
return to_enum(:each_hash, result) unless block_given?
219235

0 commit comments

Comments
 (0)