Skip to content

Commit ea87653

Browse files
committed
Version 2.3.7. Correctly use :date/:time SQL types in 2008. Endow SQLServerColumn with reflection for database_year.
1 parent 76c89f6 commit ea87653

File tree

4 files changed

+36
-10
lines changed

4 files changed

+36
-10
lines changed

CHANGELOG

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22
MASTER
33

44

5+
* 2.3.7
6+
7+
* Correctly use :date/:time SQL types in 2008 [Ken Collins]
8+
9+
510
* 2.3.6
611

712
* Allow DNS's to not contain a database and use what is in database.yml [Marco Mastrodonato]

activerecord-sqlserver-adapter.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Gem::Specification.new do |s|
22
s.name = "activerecord-sqlserver-adapter"
3-
s.version = "2.3.6"
3+
s.version = "2.3.7"
44
s.date = "2010-02-17"
55
s.summary = "SQL Server 2000, 2005 and 2008 Adapter For Rails."
66
s.email = "ken@metaskills.net"

lib/active_record/connection_adapters/sqlserver_adapter.rb

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

test/cases/column_test_sqlserver.rb

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -167,10 +167,15 @@ def setup
167167
assert_equal :datetime, @datetime.type
168168
end
169169

170-
should 'all be a datetime #sql_type' do
171-
assert_equal 'datetime', @date.sql_type
172-
assert_equal 'datetime', @time.sql_type
170+
should 'use correct #sql_type for different sql server versions' do
173171
assert_equal 'datetime', @datetime.sql_type
172+
if sqlserver_2000? || sqlserver_2005?
173+
assert_equal 'datetime', @date.sql_type
174+
assert_equal 'datetime', @time.sql_type
175+
else
176+
assert_equal 'date', @date.sql_type
177+
assert_equal 'time', @time.sql_type
178+
end
174179
end
175180

176181
should 'all be have nil #limit' do
@@ -206,7 +211,7 @@ def setup
206211
end
207212

208213
should 'have an inheritable attribute ' do
209-
assert SqlServerChronic.coerced_sqlserver_date_columns.include?('date')
214+
assert SqlServerChronic.coerced_sqlserver_date_columns.include?('date') unless sqlserver_2008?
210215
end
211216

212217
should 'have column and objects cast to date' do

0 commit comments

Comments
 (0)