@@ -10,12 +10,12 @@ module DatabaseStatements
10
10
# TODO: replace `internal_exec_query` by `perform_query`.
11
11
12
12
def perform_query ( raw_connection , sql , binds , type_casted_binds , prepare :, notification_payload :, batch :)
13
- unless binds . nil? || binds . empty?
14
- types , params = sp_executesql_types_and_parameters ( binds )
15
-
16
- # TODO: `name` parameter does not exist.
17
- sql = sp_executesql_sql ( sql , types , params )
18
- end
13
+ # unless binds.nil? || binds.empty?
14
+ # types, params = sp_executesql_types_and_parameters(binds)
15
+ #
16
+ # # TODO: `name` parameter does not exist.
17
+ # sql = sp_executesql_sql(sql, types, params)
18
+ # end
19
19
20
20
21
21
result = if id_insert_table_name = query_requires_identity_insert? ( sql )
@@ -73,6 +73,8 @@ def cast_result(raw_result)
73
73
# binding.pry
74
74
end
75
75
76
+
77
+
76
78
def affected_rows ( raw_result )
77
79
78
80
raw_result . first [ 'AffectedRows' ]
@@ -112,6 +114,19 @@ def write_query?(sql) # :nodoc:
112
114
# end
113
115
114
116
117
+ def raw_execute ( sql , name = nil , binds = [ ] , prepare : false , async : false , allow_retry : false , materialize_transactions : true , batch : false )
118
+
119
+ unless binds . nil? || binds . empty?
120
+ types , params = sp_executesql_types_and_parameters ( binds )
121
+
122
+
123
+ sql = sp_executesql_sql ( sql , types , params , name )
124
+ end
125
+
126
+
127
+ super
128
+ end
129
+
115
130
116
131
def internal_exec_sql_query ( sql , conn )
117
132
handle = internal_raw_execute ( sql , conn )
@@ -425,19 +440,20 @@ def basic_attribute_type?(type)
425
440
type . is_a? ( NilClass )
426
441
end
427
442
428
- # TODO: `name` was removed from the method signature.
429
- def sp_executesql_sql ( sql , types , params )
430
- # if name == "EXPLAIN"
431
- # params.each.with_index do |param, index|
432
- # substitute_at_finder = /(@#{index})(?=(?:[^']|'[^']*')*$)/ # Finds unquoted @n values.
433
- # sql = sql.sub substitute_at_finder, param.to_s
434
- # end
435
- # else
443
+
444
+ def sp_executesql_sql ( sql , types , params , name )
445
+ if name == "EXPLAIN"
446
+ params . each . with_index do |param , index |
447
+ substitute_at_finder = /(@#{ index } )(?=(?:[^']|'[^']*')*$)/ # Finds unquoted @n values.
448
+ sql = sql . sub substitute_at_finder , param . to_s
449
+ end
450
+ else
436
451
types = quote ( types . join ( ", " ) )
437
452
params = params . map . with_index { |p , i | "@#{ i } = #{ p } " } . join ( ", " ) # Only p is needed, but with @i helps explain regexp.
438
453
sql = "EXEC sp_executesql #{ quote ( sql ) } "
439
454
sql += ", #{ types } , #{ params } " unless params . empty?
440
- # end
455
+ end
456
+
441
457
sql . freeze
442
458
end
443
459
0 commit comments