@@ -13,47 +13,39 @@ def write_query?(sql) # :nodoc:
13
13
!READ_QUERY . match? ( sql . b )
14
14
end
15
15
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 )
28
35
end
29
36
end
30
37
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
36
41
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?
38
44
types , params = sp_executesql_types_and_parameters ( binds )
39
45
sql = sp_executesql_sql ( sql , types , params , name )
40
46
end
41
47
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
57
49
end
58
50
59
51
def internal_exec_sql_query ( sql , conn )
@@ -63,14 +55,14 @@ def internal_exec_sql_query(sql, conn)
63
55
finish_statement_handle ( handle )
64
56
end
65
57
66
- def exec_delete ( sql , name , binds )
58
+ def exec_delete ( sql , name = nil , binds = [ ] )
67
59
sql = sql . dup << "; SELECT @@ROWCOUNT AS AffectedRows"
68
- super ( sql , name , binds ) . rows . first . first
60
+ super ( sql , name , binds )
69
61
end
70
62
71
- def exec_update ( sql , name , binds )
63
+ def exec_update ( sql , name = nil , binds = [ ] )
72
64
sql = sql . dup << "; SELECT @@ROWCOUNT AS AffectedRows"
73
- super ( sql , name , binds ) . rows . first . first
65
+ super ( sql , name , binds )
74
66
end
75
67
76
68
def begin_db_transaction
@@ -378,6 +370,7 @@ def sp_executesql_sql(sql, types, params, name)
378
370
sql = "EXEC sp_executesql #{ quote ( sql ) } "
379
371
sql += ", #{ types } , #{ params } " unless params . empty?
380
372
end
373
+
381
374
sql . freeze
382
375
end
383
376
@@ -455,10 +448,9 @@ def finish_statement_handle(handle)
455
448
# TinyTDS returns false instead of raising an exception if connection fails.
456
449
# Getting around this by raising an exception ourselves while PR
457
450
# 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 )
462
454
463
455
perform_do ? result . do : result
464
456
end
0 commit comments