95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
# File 'lib/active_record/connection_adapters/sqlserver/database_statements.rb', line 95
def execute_procedure(proc_name, *variables)
vars = if variables.any? && variables.first.is_a?(Hash)
variables.first.map { |k,v| "@#{k} = #{quote(v)}" }
else
variables.map { |v| quote(v) }
end.join(', ')
sql = "EXEC #{proc_name} #{vars}".strip
name = 'Execute Procedure'
log(sql, name) do
case @connection_options[:mode]
when :dblib
result = @connection.execute(sql)
result.each(:as => :hash, :cache_rows => true) do |row|
r = row.with_indifferent_access
yield(r) if block_given?
end
result.each.map{ |row| row.is_a?(Hash) ? row.with_indifferent_access : row }
when :odbc
results = []
raw_connection_run(sql) do |handle|
get_rows = lambda {
rows = handle_to_names_and_values handle, :fetch => :all
rows.each_with_index { |r,i| rows[i] = r.with_indifferent_access }
results << rows
}
get_rows.call
while handle_more_results?(handle)
get_rows.call
end
end
results.many? ? results : results.first
end
end
end
|