aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--activerecord/CHANGELOG10
-rw-r--r--activerecord/lib/active_record/connection_adapters/sqlserver_adapter.rb12
2 files changed, 18 insertions, 4 deletions
diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG
index 9005ca62d7..d80a8af16d 100644
--- a/activerecord/CHANGELOG
+++ b/activerecord/CHANGELOG
@@ -1,5 +1,15 @@
*SVN*
+* SQLServer: fix obscure optimistic locking bug. #3068 [kajism@yahoo.com]
+
+* SQLServer: support uniqueidentifier columns. #2930 [keithm@infused.org]
+
+* SQLServer: cope with tables names qualified by owner. #3067 [jeff@ministrycentered.com]
+
+* SQLServer: cope with columns with "desc" in the name. #1950 [Ron Lusk, Ryan Tomayko]
+
+* SQLServer: cope with primary keys with "select" in the name. #3057 [rdifrango@captechventures.com]
+
* Oracle: active? performs a select instead of a commit. #3133 [Michael Schoen]
* MySQL: more robust test for nullified result hashes. #3124 [Stefan Kaes]
diff --git a/activerecord/lib/active_record/connection_adapters/sqlserver_adapter.rb b/activerecord/lib/active_record/connection_adapters/sqlserver_adapter.rb
index c3fdebfd72..9d7174007c 100644
--- a/activerecord/lib/active_record/connection_adapters/sqlserver_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/sqlserver_adapter.rb
@@ -68,6 +68,7 @@ module ActiveRecord
when /binary|image|varbinary/i then :binary
when /char|nchar|nvarchar|string|varchar/i then :string
when /bit/i then :boolean
+ when /uniqueidentifier/i then :string
end
end
@@ -233,6 +234,9 @@ module ActiveRecord
end
def columns(table_name, name = nil)
+ return [] if table_name.blank?
+ table_name = table_name.to_s if table_name.is_a?(Symbol)
+ table_name = table_name.split('.')[-1] unless table_name.nil?
sql = "SELECT COLUMN_NAME as ColName, COLUMN_DEFAULT as DefaultValue, DATA_TYPE as ColType, COL_LENGTH('#{table_name}', COLUMN_NAME) as Length, COLUMNPROPERTY(OBJECT_ID('#{table_name}'), COLUMN_NAME, 'IsIdentity') as IsIdentity, NUMERIC_SCALE as Scale FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '#{table_name}'"
# Comment out if you want to have the Columns select statment logged.
# Personnally, I think it adds unneccessary bloat to the log.
@@ -347,7 +351,7 @@ module ActiveRecord
def add_limit_offset!(sql, options)
if options[:limit] and options[:offset]
- total_rows = @connection.select_all("SELECT count(*) as TotalRows from (#{sql.gsub(/SELECT/i, "SELECT TOP 1000000000")}) tally")[0][:TotalRows].to_i
+ total_rows = @connection.select_all("SELECT count(*) as TotalRows from (#{sql.gsub(/\bSELECT\b/i, "SELECT TOP 1000000000")}) tally")[0][:TotalRows].to_i
if (options[:limit] + options[:offset]) >= total_rows
options[:limit] = (total_rows - options[:offset] >= 0) ? (total_rows - options[:offset]) : 0
end
@@ -509,9 +513,9 @@ module ActiveRecord
def change_order_direction(order)
case order
- when /DESC/i then order.gsub(/DESC/i, "ASC")
- when /ASC/i then order.gsub(/ASC/i, "DESC")
- else String.new(order).split(',').join(' DESC,') + ' DESC'
+ when /\bDESC\b/i then order.gsub(/\bDESC\b/i, "ASC")
+ when /\bASC\b/i then order.gsub(/\bASC\b/i, "DESC")
+ else String.new(order).split(',').join(' DESC,') + ' DESC'
end
end