Skip to content

Commit 22ed615

Browse files
committed
[Rails5] Simplify Date/Time Types.
* Use simple :datetime type name so we are included in `time_zone_aware_attributes` checks. * Pass: BasicsTest#test_preserving_time_objects_with_time_with_zone_conversion_to_default_timezone_utc * Pass: AttributeMethodsTest#test_setting_time_zone_aware_time_with_dst
1 parent fb99e74 commit 22ed615

File tree

7 files changed

+10
-46
lines changed

7 files changed

+10
-46
lines changed

lib/active_record/connection_adapters/sqlserver/type/datetime.rb

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,6 @@ def quoted(value)
3434

3535
private
3636

37-
def cast_value(value)
38-
is_utc? ? super.try(:in_time_zone) : super
39-
end
40-
4137
def fast_string_to_time(string)
4238
fast_string_to_time_zone.strptime(string, fast_string_to_time_format).time
4339
rescue ArgumentError
@@ -49,21 +45,7 @@ def fast_string_to_time_format
4945
end
5046

5147
def fast_string_to_time_zone
52-
::Time.zone || ActiveSupport::TimeZone.new('UTC')
53-
end
54-
55-
# Copy of module ActiveModel::Type::Helpers::TimeValue with
56-
# else condition using a zone for local parsing.
57-
def new_time(year, mon, mday, hour, min, sec, microsec, offset = nil)
58-
return if year.nil? || (year == 0 && mon == 0 && mday == 0)
59-
if offset
60-
time = ::Time.utc(year, mon, mday, hour, min, sec, microsec) rescue nil
61-
return unless time
62-
time -= offset
63-
is_utc? ? time : time.getlocal
64-
else
65-
fast_string_to_time_zone.local(year, mon, mday, hour, min, sec, microsec) rescue nil
66-
end
48+
::Time.zone || ActiveSupport::TimeZone['UTC']
6749
end
6850

6951
end

lib/active_record/connection_adapters/sqlserver/type/datetime2.rb

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,6 @@ class DateTime2 < DateTime
66

77
include TimeValueFractional2
88

9-
def type
10-
:datetime2
11-
end
12-
139
def sqlserver_type
1410
"datetime2(#{precision.to_i})"
1511
end

lib/active_record/connection_adapters/sqlserver/type/datetimeoffset.rb

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,6 @@ module SQLServer
44
module Type
55
class DateTimeOffset < DateTime2
66

7-
def type
8-
:datetimeoffset
9-
end
10-
117
def sqlserver_type
128
"datetimeoffset(#{precision.to_i})"
139
end

lib/active_record/connection_adapters/sqlserver/type/time.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ class Time < ActiveRecord::Type::Time
77
include TimeValueFractional2
88

99
def serialize(value)
10-
return super unless value.acts_like?(:time)
10+
value = super
11+
return value unless value.acts_like?(:time)
1112
time = value.to_s(:_sqlserver_time).tap do |v|
1213
fraction = quote_fractional(value)
1314
v << ".#{fraction}"
@@ -34,7 +35,7 @@ def quoted(value)
3435
private
3536

3637
def cast_value(value)
37-
value = value.acts_like?(:time) ? value : super
38+
value = super
3839
return if value.blank?
3940
value = value.change year: 2000, month: 01, day: 01
4041
apply_seconds_precision(value)

test/cases/coerced_tests.rb

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -745,17 +745,6 @@ def test_invalid_datetime_precision_raises_error_coerced
745745
end
746746
end
747747
end
748-
749-
# Original test uses `datetime` vs `datetime2` type which we dynamically use.
750-
coerce_tests! :test_schema_dump_includes_datetime_precision
751-
def test_schema_dump_includes_datetime_precision_coerced
752-
@connection.create_table(:foos, force: true) do |t|
753-
t.timestamps precision: 6
754-
end
755-
output = dump_table_schema("foos")
756-
assert_match %r{t\.datetime2\s+"created_at",\s+precision: 6,\s+null: false$}, output
757-
assert_match %r{t\.datetime2\s+"updated_at",\s+precision: 6,\s+null: false$}, output
758-
end
759748
end
760749

761750

test/cases/column_test_sqlserver.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ def assert_obj_set_and_save(attribute, value)
352352
skip 'datetime2 not supported in this protocal version' unless connection_dblib_73?
353353
col = column('datetime2_7')
354354
col.sql_type.must_equal 'datetime2(7)'
355-
col.type.must_equal :datetime2
355+
col.type.must_equal :datetime
356356
col.null.must_equal true
357357
time = Time.utc 9999, 12, 31, 23, 59, 59, Rational(999999900, 1000)
358358
col.default.must_equal time, "Nanoseconds were <#{col.default.nsec}> vs <999999900>"
@@ -417,7 +417,7 @@ def assert_obj_set_and_save(attribute, value)
417417
skip 'datetimeoffset not supported in this protocal version' unless connection_dblib_73?
418418
col = column('datetimeoffset_7')
419419
col.sql_type.must_equal 'datetimeoffset(7)'
420-
col.type.must_equal :datetimeoffset
420+
col.type.must_equal :datetime
421421
col.null.must_equal true
422422
col.default.must_equal Time.new(1984, 01, 24, 04, 20, 00, -28800).change(nsec: 123456700), "Nanoseconds <#{col.default.nsec}> vs <123456700>"
423423
obj.datetimeoffset_7.must_equal Time.new(1984, 01, 24, 04, 20, 00, -28800).change(nsec: 123456700), "Nanoseconds were <#{obj.datetimeoffset_7.nsec}> vs <999999900>"

test/cases/schema_dumper_test_sqlserver.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ class SchemaDumperTestSQLServer < ActiveRecord::TestCase
2626
assert_line :date, type: 'date', limit: nil, precision: nil, scale: nil, default: "01-01-0001"
2727
assert_line :datetime, type: 'datetime', limit: nil, precision: nil, scale: nil, default: "01-01-1753 00:00:00.123"
2828
if connection_dblib_73?
29-
assert_line :datetime2_7, type: 'datetime2', limit: nil, precision: 7, scale: nil, default: "12-31-9999 23:59:59.9999999"
30-
assert_line :datetime2_3, type: 'datetime2', limit: nil, precision: 3, scale: nil, default: nil
31-
assert_line :datetime2_1, type: 'datetime2', limit: nil, precision: 1, scale: nil, default: nil
29+
assert_line :datetime2_7, type: 'datetime', limit: nil, precision: 7, scale: nil, default: "12-31-9999 23:59:59.9999999"
30+
assert_line :datetime2_3, type: 'datetime', limit: nil, precision: 3, scale: nil, default: nil
31+
assert_line :datetime2_1, type: 'datetime', limit: nil, precision: 1, scale: nil, default: nil
3232
end
3333
assert_line :smalldatetime, type: 'smalldatetime',limit: nil, precision: nil, scale: nil, default: "01-01-1901 15:45:00.0"
3434
if connection_dblib_73?
@@ -99,7 +99,7 @@ class SchemaDumperTestSQLServer < ActiveRecord::TestCase
9999
columns['sstimestamp_col'].sql_type.must_equal 'timestamp'
100100
assert_line :real_col, type: 'real', limit: nil, precision: nil, scale: nil, default: nil
101101
assert_line :money_col, type: 'money', limit: nil, precision: 19, scale: 4, default: nil
102-
assert_line :datetime2_col, type: 'datetime2', limit: nil, precision: 7, scale: nil, default: nil
102+
assert_line :datetime2_col, type: 'datetime', limit: nil, precision: 7, scale: nil, default: nil
103103
assert_line :smallmoney_col, type: 'smallmoney', limit: nil, precision: 10, scale: 4, default: nil
104104
assert_line :char_col, type: 'char', limit: 1, precision: nil, scale: nil, default: nil
105105
assert_line :varchar_col, type: 'varchar', limit: nil, precision: nil, scale: nil, default: nil

0 commit comments

Comments
 (0)