@@ -13,47 +13,39 @@ def write_query?(sql) # :nodoc:
1313 !READ_QUERY . match? ( sql . b )
1414 end
1515
16- def raw_execute ( sql , name , async : false , allow_retry : false , materialize_transactions : true )
17- log ( sql , name , async : async ) do |notification_payload |
18- with_raw_connection ( allow_retry : allow_retry , materialize_transactions : materialize_transactions ) do |conn |
19- result = if id_insert_table_name = query_requires_identity_insert? ( sql )
20- with_identity_insert_enabled ( id_insert_table_name , conn ) { internal_raw_execute ( sql , conn , perform_do : true ) }
21- else
22- internal_raw_execute ( sql , conn , perform_do : true )
23- end
24- verified!
25- notification_payload [ :row_count ] = result
26- result
27- end
16+ def perform_query ( raw_connection , sql , binds , type_casted_binds , prepare :, notification_payload :, batch :)
17+ result = if id_insert_table_name = query_requires_identity_insert? ( sql )
18+ with_identity_insert_enabled ( id_insert_table_name , raw_connection ) do
19+ internal_exec_sql_query ( sql , raw_connection )
20+ end
21+ else
22+ internal_exec_sql_query ( sql , raw_connection )
23+ end
24+
25+ verified!
26+ notification_payload [ :row_count ] = result . count
27+ result
28+ end
29+
30+ def cast_result ( raw_result )
31+ if raw_result . columns . empty?
32+ ActiveRecord ::Result . empty
33+ else
34+ ActiveRecord ::Result . new ( raw_result . columns , raw_result . rows )
2835 end
2936 end
3037
31- def internal_exec_query ( sql , name = "SQL" , binds = [ ] , prepare : false , async : false , allow_retry : false )
32- sql = transform_query ( sql )
33-
34- check_if_write_query ( sql )
35- mark_transaction_written_if_write ( sql )
38+ def affected_rows ( raw_result )
39+ raw_result . first [ 'AffectedRows' ]
40+ end
3641
37- unless without_prepared_statement? ( binds )
42+ def raw_execute ( sql , name = nil , binds = [ ] , prepare : false , async : false , allow_retry : false , materialize_transactions : true , batch : false )
43+ unless binds . nil? || binds . empty?
3844 types , params = sp_executesql_types_and_parameters ( binds )
3945 sql = sp_executesql_sql ( sql , types , params , name )
4046 end
4147
42- log ( sql , name , binds , async : async ) do |notification_payload |
43- with_raw_connection do |conn |
44- result = if id_insert_table_name = query_requires_identity_insert? ( sql )
45- with_identity_insert_enabled ( id_insert_table_name , conn ) do
46- internal_exec_sql_query ( sql , conn )
47- end
48- else
49- internal_exec_sql_query ( sql , conn )
50- end
51-
52- verified!
53- notification_payload [ :row_count ] = result . count
54- result
55- end
56- end
48+ super
5749 end
5850
5951 def internal_exec_sql_query ( sql , conn )
@@ -63,14 +55,14 @@ def internal_exec_sql_query(sql, conn)
6355 finish_statement_handle ( handle )
6456 end
6557
66- def exec_delete ( sql , name , binds )
58+ def exec_delete ( sql , name = nil , binds = [ ] )
6759 sql = sql . dup << "; SELECT @@ROWCOUNT AS AffectedRows"
68- super ( sql , name , binds ) . rows . first . first
60+ super ( sql , name , binds )
6961 end
7062
71- def exec_update ( sql , name , binds )
63+ def exec_update ( sql , name = nil , binds = [ ] )
7264 sql = sql . dup << "; SELECT @@ROWCOUNT AS AffectedRows"
73- super ( sql , name , binds ) . rows . first . first
65+ super ( sql , name , binds )
7466 end
7567
7668 def begin_db_transaction
@@ -378,6 +370,7 @@ def sp_executesql_sql(sql, types, params, name)
378370 sql = "EXEC sp_executesql #{ quote ( sql ) } "
379371 sql += ", #{ types } , #{ params } " unless params . empty?
380372 end
373+
381374 sql . freeze
382375 end
383376
@@ -455,10 +448,9 @@ def finish_statement_handle(handle)
455448 # TinyTDS returns false instead of raising an exception if connection fails.
456449 # Getting around this by raising an exception ourselves while PR
457450 # https://github.com/rails-sqlserver/tiny_tds/pull/469 is not released.
458- def internal_raw_execute ( sql , conn , perform_do : false )
459- result = conn . execute ( sql ) . tap do |_result |
460- raise TinyTds ::Error , "failed to execute statement" if _result . is_a? ( FalseClass )
461- end
451+ def internal_raw_execute ( sql , raw_connection , perform_do : false )
452+ result = raw_connection . execute ( sql )
453+ raise TinyTds ::Error , "failed to execute statement" if result . is_a? ( FalseClass )
462454
463455 perform_do ? result . do : result
464456 end
0 commit comments