Skip to content

Commit ef97131

Browse files
committed
Core extensions for ActiveRecord now reflect on the connection before doing SQL Server things. Now this adapter is compatible for using with other adapters.
1 parent 65c6681 commit ef97131

File tree

3 files changed

+34
-25
lines changed

3 files changed

+34
-25
lines changed

CHANGELOG

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11

22
MASTER
33

4-
*
4+
* Core extensions for ActiveRecord now reflect on the connection before doing SQL Server things. Now
5+
this adapter is compatible for using with other adapters. [Ken Collins]
56

67

78
* 2.2.4 (December 5th, 2008)

lib/active_record/connection_adapters/sqlserver_adapter.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,10 @@ def database_year
196196
DATABASE_VERSION_REGEXP.match(database_version)[1].to_i
197197
end
198198

199+
def sqlserver?
200+
true
201+
end
202+
199203
def sqlserver_2000?
200204
database_year == 2000
201205
end

lib/core_ext/active_record.rb

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -29,36 +29,40 @@ def coerced_sqlserver_time_columns
2929
end
3030

3131
def reset_column_information_with_sqlserver_cache_support
32-
connection.send(:initialize_sqlserver_caches)
32+
connection.send(:initialize_sqlserver_caches) if connection.respond_to?(:sqlserver?)
3333
reset_column_information_without_sqlserver_cache_support
3434
end
3535

3636
private
3737

3838
def add_order_with_sqlserver_unique_checking!(sql, order, scope = :auto)
39-
order_sql = ''
40-
add_order_without_sqlserver_unique_checking!(order_sql, order, scope)
41-
unless order_sql.blank?
42-
unique_order_hash = {}
43-
select_table_name = connection.send(:get_table_name,sql)
44-
select_table_name.tr!('[]','') if select_table_name
45-
orders_and_dirs_set = connection.send(:orders_and_dirs_set,order_sql)
46-
unique_order_sql = orders_and_dirs_set.inject([]) do |array,order_dir|
47-
ord, dir = order_dir
48-
ord_tn_and_cn = ord.to_s.split('.').map{|o|o.tr('[]','')}
49-
ord_table_name, ord_column_name = if ord_tn_and_cn.size > 1
50-
ord_tn_and_cn
51-
else
52-
[nil, ord_tn_and_cn.first]
53-
end
54-
if (ord_table_name && ord_table_name == select_table_name && unique_order_hash[ord_column_name]) || unique_order_hash[ord_column_name]
55-
array
56-
else
57-
unique_order_hash[ord_column_name] = true
58-
array << "#{ord} #{dir}".strip
59-
end
60-
end.join(', ')
61-
sql << " ORDER BY #{unique_order_sql}"
39+
if connection.respond_to?(:sqlserver?)
40+
order_sql = ''
41+
add_order_without_sqlserver_unique_checking!(order_sql, order, scope)
42+
unless order_sql.blank?
43+
unique_order_hash = {}
44+
select_table_name = connection.send(:get_table_name,sql)
45+
select_table_name.tr!('[]','') if select_table_name
46+
orders_and_dirs_set = connection.send(:orders_and_dirs_set,order_sql)
47+
unique_order_sql = orders_and_dirs_set.inject([]) do |array,order_dir|
48+
ord, dir = order_dir
49+
ord_tn_and_cn = ord.to_s.split('.').map{|o|o.tr('[]','')}
50+
ord_table_name, ord_column_name = if ord_tn_and_cn.size > 1
51+
ord_tn_and_cn
52+
else
53+
[nil, ord_tn_and_cn.first]
54+
end
55+
if (ord_table_name && ord_table_name == select_table_name && unique_order_hash[ord_column_name]) || unique_order_hash[ord_column_name]
56+
array
57+
else
58+
unique_order_hash[ord_column_name] = true
59+
array << "#{ord} #{dir}".strip
60+
end
61+
end.join(', ')
62+
sql << " ORDER BY #{unique_order_sql}"
63+
end
64+
else
65+
add_order_without_sqlserver_unique_checking!(order_sql, order, scope)
6266
end
6367
end
6468

0 commit comments

Comments
 (0)