@@ -10,8 +10,6 @@ module DatabaseStatements
1010 NO_BINDS = [ ] . freeze
1111
1212 def exec_insert ( sql , name = nil , binds = NO_BINDS , pk = nil , sequence_name = nil , returning : nil )
13- sql = transform_query ( sql )
14-
1513 if preventing_writes?
1614 raise ActiveRecord ::ReadOnlyError , "Write query attempted while in readonly mode: #{ sql } "
1715 end
@@ -34,8 +32,6 @@ def exec_insert(sql, name = nil, binds = NO_BINDS, pk = nil, sequence_name = nil
3432 # It appears that at this point (AR 5.0) "prepare" should only ever be true
3533 # if prepared statements are enabled
3634 def internal_exec_query ( sql , name = nil , binds = NO_BINDS , prepare : false , async : false , allow_retry : false , materialize_transactions : true )
37- sql = transform_query ( sql )
38-
3935 if preventing_writes? && write_query? ( sql )
4036 raise ActiveRecord ::ReadOnlyError , "Write query attempted while in readonly mode: #{ sql } "
4137 end
@@ -58,8 +54,6 @@ def internal_exec_query(sql, name = nil, binds = NO_BINDS, prepare: false, async
5854 end
5955
6056 def exec_update ( sql , name = 'SQL' , binds = NO_BINDS )
61- sql = transform_query ( sql )
62-
6357 if preventing_writes?
6458 raise ActiveRecord ::ReadOnlyError , "Write query attempted while in readonly mode: #{ sql } "
6559 end
@@ -86,13 +80,23 @@ def select_all(arel, name = nil, binds = NO_BINDS, preparable: nil, async: false
8680
8781 private
8882
83+ def without_prepared_statement? ( binds )
84+ !prepared_statements || binds . empty?
85+ end
86+
8987 def convert_legacy_binds_to_attributes ( binds )
9088 binds . map do |column , value |
9189 ActiveRecord ::Relation ::QueryAttribute . new ( nil , type_cast ( value , column ) , ActiveModel ::Type ::Value . new )
9290 end
9391 end
9492
95- def raw_execute ( sql , name , async : false , allow_retry : false , materialize_transactions : true )
93+ def preprocess_query ( sql )
94+ check_if_write_query ( sql ) if respond_to? ( :check_if_write_query , true )
95+ mark_transaction_written_if_write ( sql ) if respond_to? ( :mark_transaction_written_if_write , true )
96+ sql
97+ end
98+
99+ def raw_execute ( sql , name , binds = [ ] , prepare : false , async : false , allow_retry : false , materialize_transactions : true )
96100 log ( sql , name , async : async ) do
97101 with_raw_connection ( allow_retry : allow_retry , materialize_transactions : materialize_transactions ) do |conn |
98102 result = conn . execute ( sql )
0 commit comments