Skip to content

Commit 7d0a082

Browse files
committed
More passing tests.
TransactionTest#test_releasing_named_savepoints DefaultScopingTest#test_order_in_default_scope_should_not_prevail RelationTest#test_order_using_scoping: SchemaDumperDefaultsTest#test_schema_dump_defaults_with_universally_supported_types SchemaDumperTest#test_types_line_up SchemaDumperTest#test_schema_dump_keeps_large_precision_integer_columns_as_decimal 16 failures, 11 errors, 2 skips
1 parent d885a9e commit 7d0a082

File tree

5 files changed

+68
-5
lines changed

5 files changed

+68
-5
lines changed

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

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

77
include Castable
88

9+
def type_cast_for_schema(value)
10+
value.acts_like?(:string) ? "'#{value}'" : super
11+
end
12+
913

1014
private
1115

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@ module SQLServer
66
module Type
77
class Time < ActiveRecord::Type::Time
88

9+
def initialize(options = {})
10+
super
11+
@precision = nil if @precision == 7
12+
end
13+
914
# When FreeTDS/TinyTDS casts this data type natively.
1015
# include Castable
1116

@@ -14,7 +19,13 @@ def type_cast_for_database(value)
1419
Quoter.new super, self
1520
end
1621

22+
def type_cast_for_schema(value)
23+
value.acts_like?(:string) ? "'#{value}'" : super
24+
end
25+
1726
def quote_ss(value)
27+
return unless value
28+
value = cast_value(value) if value.acts_like?(:string)
1829
date = value.to_s(:_sqlserver_time)
1930
frac = quote_usec(value)
2031
"'#{date}.#{frac}'"
@@ -34,7 +45,7 @@ def cast_usec(value)
3445
end
3546

3647
def usec_to_seconds_frction(value)
37-
(value.usec.to_f / 1_000_000.0).round(precision)
48+
(value.usec.to_f / 1_000_000.0).round(precision || 7)
3849
end
3950

4051
def quote_usec(value)

test/cases/coerced_tests.rb

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,16 @@ module ConnectionAdapters
147147

148148

149149

150+
class DefaultScopingTest < ActiveRecord::TestCase
151+
152+
# We are not doing order duplicate removal anymore.
153+
coerce_tests! :test_order_in_default_scope_should_not_prevail
154+
155+
end
156+
157+
158+
159+
150160
require 'models/post'
151161
require 'models/subscriber'
152162
class EachTest < ActiveRecord::TestCase
@@ -304,7 +314,11 @@ def test_registering_new_handlers_coerced
304314

305315
class RelationTest < ActiveRecord::TestCase
306316

307-
coerce_tests! %r{doesn't have implicit ordering} # We have implicit ordering, via FETCH.
317+
# We have implicit ordering, via FETCH.
318+
coerce_tests! %r{doesn't have implicit ordering}
319+
320+
# We are not doing order duplicate removal anymore.
321+
coerce_tests! :test_order_using_scoping
308322

309323
end
310324

@@ -331,7 +345,41 @@ def self.search(term)
331345

332346

333347

348+
class SchemaDumperTest < ActiveRecord::TestCase
349+
350+
# We have precision to 38.
351+
coerce_tests! :test_schema_dump_keeps_large_precision_integer_columns_as_decimal
352+
def test_schema_dump_keeps_large_precision_integer_columns_as_decimal_coerced
353+
output = standard_dump
354+
assert_match %r{t.integer\s+"atoms_in_universe",\s+precision: 38}, output
355+
end
356+
357+
# This accidently returns the wrong number because of our tables too.
358+
coerce_tests! :test_types_line_up
359+
360+
end
361+
362+
363+
364+
require 'models/topic'
365+
class TransactionTest < ActiveRecord::TestCase
366+
367+
coerce_tests! :test_releasing_named_savepoints
368+
def test_releasing_named_savepoints_coerced
369+
Topic.transaction do
370+
Topic.connection.create_savepoint("another")
371+
Topic.connection.release_savepoint("another")
372+
# We do not have a notion of releasing, so this does nothing vs raise an error.
373+
Topic.connection.release_savepoint("another")
374+
end
375+
end
376+
377+
end
378+
379+
380+
334381

382+
require 'models/tag'
335383
class TransactionIsolationTest < ActiveRecord::TestCase
336384

337385
# SQL Server will lock the table for counts even when both

test/cases/column_test_sqlserver.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,7 @@ def assert_obj_set_and_save(attribute, value)
414414
type.type.must_equal :time
415415
type.wont_be :number?
416416
type.limit.must_equal nil
417-
type.precision.must_equal 7
417+
type.precision.must_equal nil, 'so it is clean in schema dumper'
418418
type.scale.must_equal nil
419419
# Time's #usec precision (low)
420420
obj.time_7 = Time.utc(2000, 01, 01, 15, 45, 00, 300)

test/cases/schema_dumper_test_sqlserver.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class SchemaDumperTestSQLServer < ActiveRecord::TestCase
2828
assert_line :datetime, type: 'datetime', limit: nil, precision: nil, scale: nil, default: "'1753-01-01 00:00:00'"
2929
assert_line :smalldatetime, type: 'datetime', limit: nil, precision: nil, scale: nil, default: "'1901-01-01 15:45:00'"
3030
assert_line :time_2, type: 'time', limit: nil, precision: '2', scale: nil, default: nil
31-
assert_line :time_7, type: 'time', limit: nil, precision: '7', scale: nil, default: nil
31+
assert_line :time_7, type: 'time', limit: nil, precision: nil, scale: nil, default: nil
3232
# Character Strings
3333
assert_line :char_10, type: 'char', limit: '10', precision: nil, scale: nil, default: "\"1234567890\""
3434
assert_line :varchar_50, type: 'varchar', limit: '50', precision: nil, scale: nil, default: "\"test varchar_50\""
@@ -72,7 +72,7 @@ class SchemaDumperTestSQLServer < ActiveRecord::TestCase
7272
assert_line :text_col, type: 'text', limit: '2147483647', precision: nil, scale: nil, default: nil
7373
assert_line :datetime_col, type: 'datetime', limit: nil, precision: nil, scale: nil, default: nil
7474
assert_line :timestamp_col, type: 'datetime', limit: nil, precision: nil, scale: nil, default: nil
75-
assert_line :time_col, type: 'time', limit: nil, precision: '7', scale: nil, default: nil
75+
assert_line :time_col, type: 'time', limit: nil, precision: nil, scale: nil, default: nil
7676
assert_line :date_col, type: 'date', limit: nil, precision: nil, scale: nil, default: nil
7777
assert_line :binary_col, type: 'binary', limit: '2147483647', precision: nil, scale: nil, default: nil
7878
# Our type methods.

0 commit comments

Comments
 (0)