Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Refactored select routing for SQL Server adapter (closes #5683) [tom@…

…popdog.net]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4671 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
commit 5779deb88d3dae9658cdd508dbde079acd68c2fb 1 parent c99df46
@dhh dhh authored
View
22 activerecord/lib/active_record/connection_adapters/sqlserver_adapter.rb
@@ -504,22 +504,22 @@ def remove_index(table_name, options = {})
private
def select(sql, name = nil)
- rows = []
repair_special_columns(sql)
- log(sql, name) do
- @connection.select_all(sql) do |row|
- record = {}
- row.column_names.each do |col|
- record[col] = row[col]
- if record[col].is_a? DBI::Timestamp
- ts = record[col]
- record[col] = DateTime.new(ts.year, ts.month, ts.day, ts.hour, ts.minute, ts.sec)
+
+ result = []
+ execute(sql) do |handle|
+ handle.each do |row|
+ row_hash = {}
+ row.each_with_index do |value, i|
+ if value.is_a? DBI::Timestamp
+ value = DateTime.new(value.year, value.month, value.day, value.hour, value.minute, value.sec)
end
+ row_hash[handle.column_names[i]] = value
end
- rows << record
+ result << row_hash
end
end
- rows
+ result
end
# Turns IDENTITY_INSERT ON for table during execution of the block
View
6 activerecord/test/abstract_unit.rb
@@ -60,12 +60,12 @@ def current_adapter?(*types)
cattr_accessor :query_count
# Array of regexes of queries that are not counted against query_count
- @@ignore_list = [/^SELECT currval/, /^SELECT CAST/]
+ @@ignore_list = [/^SELECT currval/, /^SELECT CAST/, /^SELECT @@IDENTITY/]
alias_method :execute_without_query_counting, :execute
- def execute_with_query_counting(sql, name = nil)
+ def execute_with_query_counting(sql, name = nil, &block)
self.query_count += 1 unless @@ignore_list.any? { |r| sql =~ r }
- execute_without_query_counting(sql, name)
+ execute_without_query_counting(sql, name, &block)
end
end
Please sign in to comment.
Something went wrong with that request. Please try again.