@@ -109,6 +109,11 @@ def table_klass
109109 ( @table_klass && @table_klass < ActiveRecord ::Base ) ? @table_klass : nil
110110 end
111111
112+ def database_year
113+ @sqlserver_options [ :database_year ]
114+ end
115+
116+
112117 private
113118
114119 def extract_limit ( sql_type )
@@ -140,7 +145,9 @@ def simplified_type(field_type)
140145 end
141146
142147 def simplified_datetime
143- if table_klass && table_klass . coerced_sqlserver_date_columns . include? ( name )
148+ if database_year >= 2008
149+ :datetime
150+ elsif table_klass && table_klass . coerced_sqlserver_date_columns . include? ( name )
144151 :date
145152 elsif table_klass && table_klass . coerced_sqlserver_time_columns . include? ( name )
146153 :time
@@ -163,7 +170,7 @@ def simplified_datetime
163170 class SQLServerAdapter < AbstractAdapter
164171
165172 ADAPTER_NAME = 'SQLServer' . freeze
166- VERSION = '2.3.6 ' . freeze
173+ VERSION = '2.3.7 ' . freeze
167174 DATABASE_VERSION_REGEXP = /Microsoft SQL Server\s +(\d {4})/
168175 SUPPORTED_VERSIONS = [ 2000 , 2005 , 2008 ] . freeze
169176 LIMITABLE_TYPES = [ 'string' , 'integer' , 'float' , 'char' , 'nchar' , 'varchar' , 'nvarchar' ] . freeze
@@ -265,10 +272,19 @@ def native_text_database_type
265272 end
266273 end
267274
275+ def native_time_database_type
276+ sqlserver_2008? ? 'time' : 'datetime'
277+ end
278+
279+ def native_date_database_type
280+ sqlserver_2008? ? 'date' : 'datetime'
281+ end
282+
268283 def native_binary_database_type
269284 @@native_binary_database_type || ( ( sqlserver_2005? || sqlserver_2008? ) ? 'varbinary(max)' : 'image' )
270285 end
271286
287+
272288 # QUOTING ==================================================#
273289
274290 def quote ( value , column = nil )
@@ -533,8 +549,8 @@ def native_database_types
533549 :decimal => { :name => "decimal" } ,
534550 :datetime => { :name => "datetime" } ,
535551 :timestamp => { :name => "datetime" } ,
536- :time => { :name => "datetime" } ,
537- :date => { :name => "datetime" } ,
552+ :time => { :name => native_time_database_type } ,
553+ :date => { :name => native_date_database_type } ,
538554 :binary => { :name => native_binary_database_type } ,
539555 :boolean => { :name => "bit" } ,
540556 # These are custom types that may move somewhere else for good schema_dumper.rb hacking to output them.
@@ -606,7 +622,7 @@ def columns(table_name, name = nil)
606622 return [ ] if table_name . blank?
607623 cache_key = unqualify_table_name ( table_name )
608624 @sqlserver_columns_cache [ cache_key ] ||= column_definitions ( table_name ) . collect do |ci |
609- sqlserver_options = ci . except ( :name , :default_value , :type , :null )
625+ sqlserver_options = ci . except ( :name , :default_value , :type , :null ) . merge ( :database_year => database_year )
610626 SQLServerColumn . new ci [ :name ] , ci [ :default_value ] , ci [ :type ] , ci [ :null ] , sqlserver_options
611627 end
612628 end
0 commit comments