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
上级 c99df461
......@@ -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
......
......@@ -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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册