activerecord-sqlserver-adapter 4.2.10 → 4.2.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +15 -0
- data/Gemfile +6 -2
- data/README.md +1 -1
- data/VERSION +1 -1
- data/appveyor.yml +1 -1
- data/lib/active_record/connection_adapters/sqlserver/quoting.rb +3 -5
- data/lib/active_record/connection_adapters/sqlserver/schema_statements.rb +1 -0
- data/lib/active_record/connection_adapters/sqlserver/type/char.rb +18 -0
- data/lib/active_record/connection_adapters/sqlserver/type/time_value_fractional.rb +7 -3
- data/lib/arel/visitors/sqlserver.rb +4 -1
- data/test/cases/column_test_sqlserver.rb +7 -0
- data/test/cases/specific_schema_test_sqlserver.rb +18 -0
- data/test/schema/datatypes/2012.sql +1 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5645093f45bc28adecc3cc3a38fdb886f6683a9c
|
4
|
+
data.tar.gz: bddd84dff29484133c22f905f3c75439a68cbbe5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e2e9df466a158a7a1d35860e6c32c75b4e9f46774122b7cfcf8f43c1d9f770cb1a723cedf92f30ec9d06ec39501be10a018bbd0f6ffcff1257160127de7fa3f3
|
7
|
+
data.tar.gz: d24d8c79658031f51266734f5648af3cf5dc3e47911a245774f2a9dd32aecfbb25407703758ef707140507af7ab632dac93ccf193f9c30dd3c74543b5b6ef025
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
## v4.2.11
|
2
|
+
|
3
|
+
#### Fixed
|
4
|
+
|
5
|
+
* Undefined method `database_prefix_remote_server?' Fixes #450. Thanks @jippeholwerda
|
6
|
+
* Document two methods for avoiding N'' quoting on char/varchar columns.
|
7
|
+
* First run failure of `change_column` while dropping constraint. Fixes #420. Thanks @GrumpyRainbow @rkr090
|
8
|
+
* Rounding errors w/datetime2(0) types having no fractional seconds. Fixes #465. Thanks @alawton
|
9
|
+
|
10
|
+
#### Changed
|
11
|
+
|
12
|
+
* Supporting escape hatch for N'' quoting. Remove `#is_utf8` string check in `#_quote` method.
|
13
|
+
This duplicated strings and forced encoding which was actually wasteful.
|
14
|
+
|
15
|
+
|
1
16
|
## v4.2.10
|
2
17
|
|
3
18
|
#### Fixed
|
data/Gemfile
CHANGED
@@ -49,9 +49,13 @@ group :odbc do
|
|
49
49
|
end
|
50
50
|
|
51
51
|
group :development do
|
52
|
-
gem 'guard'
|
53
|
-
gem 'guard-minitest'
|
54
52
|
gem 'mocha'
|
55
53
|
gem 'minitest', '< 5.3.4' # PENDING: [Rails5.x] Remove test order constraint.
|
56
54
|
gem 'minitest-spec-rails'
|
55
|
+
gem 'pry'
|
56
|
+
end
|
57
|
+
|
58
|
+
group :guard do
|
59
|
+
gem 'guard'
|
60
|
+
gem 'guard-minitest'
|
57
61
|
end
|
data/README.md
CHANGED
@@ -197,5 +197,5 @@ Up-to-date list of contributors: http://github.com/rails-sqlserver/activerecord-
|
|
197
197
|
|
198
198
|
## License
|
199
199
|
|
200
|
-
Copyright © 2008-
|
200
|
+
Copyright © 2008-2016. It is free software, and may be redistributed under the terms specified in the MIT-LICENSE file.
|
201
201
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
4.2.
|
1
|
+
4.2.11
|
data/appveyor.yml
CHANGED
@@ -11,7 +11,7 @@ install:
|
|
11
11
|
- ps: Update-AppveyorBuild -Version "$(Get-Content $env:appveyor_build_folder\VERSION).$env:appveyor_build_number"
|
12
12
|
- ruby --version
|
13
13
|
- gem --version
|
14
|
-
- bundle install --without odbc
|
14
|
+
- bundle install --without odbc guard
|
15
15
|
build: off
|
16
16
|
test_script:
|
17
17
|
- powershell -File "%APPVEYOR_BUILD_FOLDER%\test\appveyor\dbsetup.ps1"
|
@@ -54,12 +54,10 @@ module ActiveRecord
|
|
54
54
|
case value
|
55
55
|
when Type::Binary::Data
|
56
56
|
"0x#{value.hex}"
|
57
|
+
when ActiveRecord::Type::SQLServer::Char::Data
|
58
|
+
value.quoted
|
57
59
|
when String, ActiveSupport::Multibyte::Chars
|
58
|
-
|
59
|
-
"#{QUOTED_STRING_PREFIX}#{super}"
|
60
|
-
else
|
61
|
-
super
|
62
|
-
end
|
60
|
+
"#{QUOTED_STRING_PREFIX}#{super}"
|
63
61
|
else
|
64
62
|
super
|
65
63
|
end
|
@@ -96,6 +96,7 @@ module ActiveRecord
|
|
96
96
|
end
|
97
97
|
|
98
98
|
def change_column_default(table_name, column_name, default)
|
99
|
+
schema_cache.clear_table_cache!(table_name)
|
99
100
|
remove_default_constraint(table_name, column_name)
|
100
101
|
column_object = schema_cache.columns(table_name).find { |c| c.name.to_s == column_name.to_s }
|
101
102
|
do_execute "ALTER TABLE #{quote_table_name(table_name)} ADD CONSTRAINT #{default_constraint_name(table_name, column_name)} DEFAULT #{quote_default_value(default, column_object)} FOR #{quote_column_name(column_name)}"
|
@@ -8,6 +8,24 @@ module ActiveRecord
|
|
8
8
|
:char
|
9
9
|
end
|
10
10
|
|
11
|
+
def type_cast_for_database(value)
|
12
|
+
return if value.nil?
|
13
|
+
return value if value.is_a?(Data)
|
14
|
+
Data.new(super)
|
15
|
+
end
|
16
|
+
|
17
|
+
class Data
|
18
|
+
|
19
|
+
def initialize(value)
|
20
|
+
@value = value.to_s
|
21
|
+
end
|
22
|
+
|
23
|
+
def quoted
|
24
|
+
"'#{@value}'"
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
11
29
|
end
|
12
30
|
end
|
13
31
|
end
|
@@ -9,9 +9,13 @@ module ActiveRecord
|
|
9
9
|
|
10
10
|
def cast_fractional(value)
|
11
11
|
return value if !value.respond_to?(fractional_property) || value.send(fractional_property).zero?
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
frac_seconds = if fractional_scale == 0
|
13
|
+
0
|
14
|
+
else
|
15
|
+
seconds = value.send(fractional_property).to_f / fractional_operator.to_f
|
16
|
+
seconds = ((seconds * (1 / fractional_precision)).round / (1 / fractional_precision)).round(fractional_scale)
|
17
|
+
(seconds * fractional_operator).to_i
|
18
|
+
end
|
15
19
|
value.change fractional_property => frac_seconds
|
16
20
|
end
|
17
21
|
|
@@ -74,7 +74,10 @@ module Arel
|
|
74
74
|
end
|
75
75
|
|
76
76
|
def visit_Arel_Table o, collector
|
77
|
-
|
77
|
+
# Apparently, o.engine.connection can actually be a different adapter
|
78
|
+
# than sqlserver. Can be removed if fixed in ActiveRecord. See:
|
79
|
+
# github.com/rails-sqlserver/activerecord-sqlserver-adapter/issues/450
|
80
|
+
table_name = if o.engine.connection.respond_to?(:sqlserver?) && o.engine.connection.database_prefix_remote_server?
|
78
81
|
remote_server_table_name(o)
|
79
82
|
else
|
80
83
|
quote_table_name(o.name)
|
@@ -373,6 +373,13 @@ class ColumnTestSQLServer < ActiveRecord::TestCase
|
|
373
373
|
obj.datetime2_1.must_equal time.change(nsec: 100000000), "Nanoseconds were <#{obj.datetime2_1.nsec}> vs <100000000>"
|
374
374
|
obj.save! ; obj.reload
|
375
375
|
obj.datetime2_1.must_equal time.change(nsec: 100000000), "Nanoseconds were <#{obj.datetime2_1.nsec}> vs <100000000>"
|
376
|
+
col = column('datetime2_0')
|
377
|
+
col.cast_type.precision.must_equal 0
|
378
|
+
time = Time.utc 2016, 4, 19, 16, 45, 40, 771036
|
379
|
+
obj.datetime2_0 = time
|
380
|
+
obj.datetime2_0.must_equal time.change(nsec: 0), "Nanoseconds were <#{obj.datetime2_0.nsec}> vs <0>"
|
381
|
+
obj.save! ; obj.reload
|
382
|
+
obj.datetime2_0.must_equal time.change(nsec: 0), "Nanoseconds were <#{obj.datetime2_0.nsec}> vs <0>"
|
376
383
|
end
|
377
384
|
|
378
385
|
it 'datetimeoffset' do
|
@@ -107,6 +107,24 @@ class SpecificSchemaTestSQLServer < ActiveRecord::TestCase
|
|
107
107
|
assert_equal r, SSTestEdgeSchema.where('crazy]]quote' => 'crazyqoute').first
|
108
108
|
end
|
109
109
|
|
110
|
+
it 'various methods to bypass national quoted columns for any column, but primarily useful for char/varchar' do
|
111
|
+
value = Class.new do
|
112
|
+
def quoted_id
|
113
|
+
"'T'"
|
114
|
+
end
|
115
|
+
end
|
116
|
+
# Using ActiveRecord's quoted_id feature for objects.
|
117
|
+
assert_sql(/@0 = 'T'/) { SSTestDatatypeMigration.where(char_col: value.new).first }
|
118
|
+
assert_sql(/@0 = 'T'/) { SSTestDatatypeMigration.where(varchar_col: value.new).first }
|
119
|
+
# Using our custom char type data.
|
120
|
+
data = ActiveRecord::Type::SQLServer::Char::Data
|
121
|
+
assert_sql(/@0 = 'T'/) { SSTestDatatypeMigration.where(char_col: data.new('T')).first }
|
122
|
+
assert_sql(/@0 = 'T'/) { SSTestDatatypeMigration.where(varchar_col: data.new('T')).first }
|
123
|
+
# Taking care of everything.
|
124
|
+
assert_sql(/@0 = 'T'/) { SSTestDatatypeMigration.where(char_col: 'T').first }
|
125
|
+
assert_sql(/@0 = 'T'/) { SSTestDatatypeMigration.where(varchar_col: 'T').first }
|
126
|
+
end
|
127
|
+
|
110
128
|
# With column names that have spaces
|
111
129
|
|
112
130
|
it 'create record using a custom attribute reader and be able to load it back in' do
|
@@ -28,6 +28,7 @@ CREATE TABLE [sst_datatypes] (
|
|
28
28
|
[datetime2_7] [datetime2](7) NULL DEFAULT '9999-12-31 23:59:59.9999999',
|
29
29
|
[datetime2_3] [datetime2](3) NULL,
|
30
30
|
[datetime2_1] [datetime2](1) NULL,
|
31
|
+
[datetime2_0] [datetime2](0) NULL,
|
31
32
|
[datetimeoffset_7] [datetimeoffset](7) NULL DEFAULT '1984-01-24 04:20:00.1234567 -08:00',
|
32
33
|
[datetimeoffset_3] [datetimeoffset](3) NULL,
|
33
34
|
[datetimeoffset_1] [datetimeoffset](1) NULL,
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-sqlserver-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.2.
|
4
|
+
version: 4.2.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ken Collins
|
@@ -14,7 +14,7 @@ authors:
|
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
|
-
date: 2016-
|
17
|
+
date: 2016-04-24 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: activerecord
|