activerecord-sqlserver-adapter 4.2.6 → 4.2.8
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 +34 -0
- data/Gemfile +9 -0
- data/README.md +40 -26
- data/VERSION +1 -0
- data/activerecord-sqlserver-adapter.gemspec +0 -10
- data/appveyor.yml +15 -3
- data/lib/active_record/connection_adapters/sqlserver/database_statements.rb +3 -3
- data/lib/active_record/connection_adapters/sqlserver/database_tasks.rb +35 -11
- data/lib/active_record/connection_adapters/sqlserver/quoting.rb +4 -16
- data/lib/active_record/connection_adapters/sqlserver/schema_statements.rb +12 -2
- data/lib/active_record/connection_adapters/sqlserver/table_definition.rb +8 -0
- data/lib/active_record/connection_adapters/sqlserver/type.rb +3 -1
- data/lib/active_record/connection_adapters/sqlserver/type/date.rb +9 -0
- data/lib/active_record/connection_adapters/sqlserver/type/datetime.rb +18 -12
- data/lib/active_record/connection_adapters/sqlserver/type/datetime2.rb +17 -0
- data/lib/active_record/connection_adapters/sqlserver/type/datetimeoffset.rb +31 -0
- data/lib/active_record/connection_adapters/sqlserver/type/smalldatetime.rb +6 -6
- data/lib/active_record/connection_adapters/sqlserver/type/time.rb +13 -29
- data/lib/active_record/connection_adapters/sqlserver/type/time_value_fractional.rb +72 -0
- data/lib/active_record/connection_adapters/sqlserver/utils.rb +12 -12
- data/lib/active_record/connection_adapters/sqlserver/version.rb +1 -1
- data/lib/active_record/connection_adapters/sqlserver_adapter.rb +41 -5
- data/lib/active_record/sqlserver_base.rb +2 -4
- data/lib/arel/visitors/sqlserver.rb +19 -0
- data/test/cases/adapter_test_sqlserver.rb +24 -0
- data/test/cases/coerced_tests.rb +14 -0
- data/test/cases/column_test_sqlserver.rb +120 -47
- data/test/cases/connection_test_sqlserver.rb +3 -3
- data/test/cases/fully_qualified_identifier_test_sqlserver.rb +76 -0
- data/test/cases/helper_sqlserver.rb +24 -16
- data/test/cases/migration_test_sqlserver.rb +0 -5
- data/test/cases/rake_test_sqlserver.rb +29 -10
- data/test/cases/schema_dumper_test_sqlserver.rb +28 -11
- data/test/cases/transaction_test_sqlserver.rb +2 -2
- data/test/cases/utils_test_sqlserver.rb +44 -14
- data/test/config.yml +2 -0
- data/test/debug.rb +14 -0
- data/test/schema/datatypes/2012.sql +8 -18
- data/test/schema/sqlserver_specific_schema.rb +14 -12
- data/test/support/connection_reflection.rb +37 -0
- metadata +13 -143
- data/lib/active_record/connection_adapters/sqlserver/type/quoter.rb +0 -32
@@ -24,11 +24,18 @@ class SchemaDumperTestSQLServer < ActiveRecord::TestCase
|
|
24
24
|
assert_line :float, type: 'float', limit: nil, precision: nil, scale: nil, default: '123.00000001'
|
25
25
|
assert_line :real, type: 'real', limit: nil, precision: nil, scale: nil, default: %r{123.4[45]}
|
26
26
|
# Date and Time
|
27
|
-
assert_line :date, type: 'date', limit: nil, precision: nil, scale: nil, default: "
|
28
|
-
assert_line :datetime, type: 'datetime', limit: nil, precision: nil, scale: nil, default: "
|
29
|
-
|
27
|
+
assert_line :date, type: 'date', limit: nil, precision: nil, scale: nil, default: "\"01-01-0001\""
|
28
|
+
assert_line :datetime, type: 'datetime', limit: nil, precision: nil, scale: nil, default: "\"01-01-1753 00:00:00.123\""
|
29
|
+
if connection_dblib_73?
|
30
|
+
assert_line :datetime2_7, type: 'datetime2', limit: nil, precision: '7', scale: nil, default: "\"12-31-9999 23:59:59.9999999\""
|
31
|
+
assert_line :datetime2_3, type: 'datetime2', limit: nil, precision: '3', scale: nil, default: nil
|
32
|
+
assert_line :datetime2_1, type: 'datetime2', limit: nil, precision: '1', scale: nil, default: nil
|
33
|
+
end
|
34
|
+
assert_line :smalldatetime, type: 'smalldatetime',limit: nil, precision: nil, scale: nil, default: "\"01-01-1901 15:45:00\""
|
35
|
+
if connection_dblib_73?
|
36
|
+
assert_line :time_7, type: 'time', limit: nil, precision: '7', scale: nil, default: "\"04:20:00.2883215\""
|
30
37
|
assert_line :time_2, type: 'time', limit: nil, precision: '2', scale: nil, default: nil
|
31
|
-
|
38
|
+
end
|
32
39
|
# Character Strings
|
33
40
|
assert_line :char_10, type: 'char', limit: '10', precision: nil, scale: nil, default: "\"1234567890\""
|
34
41
|
assert_line :varchar_50, type: 'varchar', limit: '50', precision: nil, scale: nil, default: "\"test varchar_50\""
|
@@ -73,12 +80,14 @@ class SchemaDumperTestSQLServer < ActiveRecord::TestCase
|
|
73
80
|
assert_line :text_col, type: 'text', limit: '2147483647', precision: nil, scale: nil, default: nil
|
74
81
|
assert_line :datetime_col, type: 'datetime', limit: nil, precision: nil, scale: nil, default: nil
|
75
82
|
assert_line :timestamp_col, type: 'datetime', limit: nil, precision: nil, scale: nil, default: nil
|
76
|
-
assert_line :time_col, type: 'time', limit: nil, precision:
|
83
|
+
assert_line :time_col, type: 'time', limit: nil, precision: '7', scale: nil, default: nil
|
77
84
|
assert_line :date_col, type: 'date', limit: nil, precision: nil, scale: nil, default: nil
|
78
85
|
assert_line :binary_col, type: 'binary', limit: '2147483647', precision: nil, scale: nil, default: nil
|
79
86
|
# Our type methods.
|
80
87
|
columns['real_col'].sql_type.must_equal 'real'
|
81
88
|
columns['money_col'].sql_type.must_equal 'money'
|
89
|
+
columns['datetime2_col'].sql_type.must_equal 'datetime2(7)'
|
90
|
+
columns['datetimeoffset'].sql_type.must_equal 'datetimeoffset(7)'
|
82
91
|
columns['smallmoney_col'].sql_type.must_equal 'smallmoney'
|
83
92
|
columns['char_col'].sql_type.must_equal 'char(1)'
|
84
93
|
columns['varchar_col'].sql_type.must_equal 'varchar(8000)'
|
@@ -91,6 +100,7 @@ class SchemaDumperTestSQLServer < ActiveRecord::TestCase
|
|
91
100
|
columns['sstimestamp_col'].sql_type.must_equal 'timestamp'
|
92
101
|
assert_line :real_col, type: 'real', limit: nil, precision: nil, scale: nil, default: nil
|
93
102
|
assert_line :money_col, type: 'money', limit: nil, precision: '19', scale: '4', default: nil
|
103
|
+
assert_line :datetime2_col, type: 'datetime2', limit: nil, precision: '7', scale: nil, default: nil
|
94
104
|
assert_line :smallmoney_col, type: 'smallmoney', limit: nil, precision: '10', scale: '4', default: nil
|
95
105
|
assert_line :char_col, type: 'char', limit: '1', precision: nil, scale: nil, default: nil
|
96
106
|
assert_line :varchar_col, type: 'varchar', limit: '8000', precision: nil, scale: nil, default: nil
|
@@ -145,12 +155,19 @@ class SchemaDumperTestSQLServer < ActiveRecord::TestCase
|
|
145
155
|
def assert_line(column_name, options={})
|
146
156
|
line = line(column_name)
|
147
157
|
assert line, "Count not find line with column name: #{column_name.inspect} in schema:\n#{schema}"
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
158
|
+
[:type, :limit, :precision, :scale, :default].each do |key|
|
159
|
+
next unless options.key?(key)
|
160
|
+
actual = key == :type ? line.send(:type_method) : line.send(key)
|
161
|
+
expected = options[key]
|
162
|
+
message = "#{key.to_s.titleize} of #{expected.inspect} not found in:\n#{line}"
|
163
|
+
if expected.nil?
|
164
|
+
actual.must_be_nil message
|
165
|
+
elsif expected.is_a?(Regexp)
|
166
|
+
actual.must_match expected, message
|
167
|
+
else
|
168
|
+
actual.must_equal expected, message
|
169
|
+
end
|
170
|
+
end
|
154
171
|
end
|
155
172
|
|
156
173
|
class SchemaLine
|
@@ -35,14 +35,14 @@ class TransactionTestSQLServer < ActiveRecord::TestCase
|
|
35
35
|
begin
|
36
36
|
in_level = nil
|
37
37
|
begin_level = connection.user_options_isolation_level
|
38
|
-
begin_level.must_match %r{read committed}
|
38
|
+
begin_level.must_match %r{read committed}i
|
39
39
|
Ship.transaction(isolation: :serializable) do
|
40
40
|
Ship.create! name: 'Black Pearl'
|
41
41
|
in_level = connection.user_options_isolation_level
|
42
42
|
end
|
43
43
|
after_level = connection.user_options_isolation_level
|
44
44
|
in_level.must_match %r{serializable}i
|
45
|
-
after_level.must_match %r{read committed}
|
45
|
+
after_level.must_match %r{read committed}i
|
46
46
|
ensure
|
47
47
|
connection.set_transaction_isolation_level 'READ COMMITTED'
|
48
48
|
end
|
@@ -10,6 +10,10 @@ class UtilsTestSQLServer < ActiveRecord::TestCase
|
|
10
10
|
SQLServer::Utils.unquote_string("I''ll store this in C:\\Users").must_equal "I'll store this in C:\\Users"
|
11
11
|
end
|
12
12
|
|
13
|
+
it '.quoted_raw' do
|
14
|
+
SQLServer::Utils.quoted_raw("some.Name").must_equal "[some.Name]"
|
15
|
+
end
|
16
|
+
|
13
17
|
describe '.extract_identifiers constructor and thus SQLServer::Utils::Name value object' do
|
14
18
|
|
15
19
|
let(:valid_names) { valid_names_unquoted + valid_names_quoted }
|
@@ -42,7 +46,7 @@ class UtilsTestSQLServer < ActiveRecord::TestCase
|
|
42
46
|
|
43
47
|
it 'extracts and returns #object identifier unquoted by default or quoted as needed' do
|
44
48
|
valid_names.each do |n|
|
45
|
-
name =
|
49
|
+
name = extract_identifiers(n)
|
46
50
|
name.object.must_equal 'object', "With #{n.inspect} for #object"
|
47
51
|
name.object_quoted.must_equal '[object]', "With #{n.inspect} for #object_quoted"
|
48
52
|
end
|
@@ -53,12 +57,12 @@ class UtilsTestSQLServer < ActiveRecord::TestCase
|
|
53
57
|
it "extracts and returns #{part} identifier unquoted by default or quoted as needed" do
|
54
58
|
present, blank = send(:"#{part}_names")
|
55
59
|
present.each do |n|
|
56
|
-
name =
|
60
|
+
name = extract_identifiers(n)
|
57
61
|
name.send(:"#{part}").must_equal "#{part}", "With #{n.inspect} for ##{part} method"
|
58
62
|
name.send(:"#{part}_quoted").must_equal "[#{part}]", "With #{n.inspect} for ##{part}_quoted method"
|
59
63
|
end
|
60
64
|
blank.each do |n|
|
61
|
-
name =
|
65
|
+
name = extract_identifiers(n)
|
62
66
|
name.send(:"#{part}").must_be_nil "With #{n.inspect} for ##{part} method"
|
63
67
|
name.send(:"#{part}_quoted").must_be_nil "With #{n.inspect} for ##{part}_quoted method"
|
64
68
|
end
|
@@ -67,33 +71,59 @@ class UtilsTestSQLServer < ActiveRecord::TestCase
|
|
67
71
|
end
|
68
72
|
|
69
73
|
it 'does not blow up on nil or blank string name' do
|
70
|
-
|
71
|
-
|
74
|
+
extract_identifiers(nil).object.must_be_nil
|
75
|
+
extract_identifiers(' ').object.must_be_nil
|
72
76
|
end
|
73
77
|
|
74
78
|
it 'has a #quoted that returns a fully quoted name with all identifiers as orginially passed in' do
|
75
|
-
|
76
|
-
|
77
|
-
|
79
|
+
extract_identifiers('object').quoted.must_equal '[object]'
|
80
|
+
extract_identifiers('server.database..object').quoted.must_equal '[server].[database]..[object]'
|
81
|
+
extract_identifiers('[server]...[object]').quoted.must_equal '[server]...[object]'
|
78
82
|
end
|
79
83
|
|
80
84
|
it 'can take a symbol argument' do
|
81
|
-
|
85
|
+
extract_identifiers(:object).object.must_equal 'object'
|
82
86
|
end
|
83
87
|
|
84
88
|
it 'allows identifiers with periods to work' do
|
85
|
-
|
86
|
-
|
89
|
+
extract_identifiers('[obj.name]').quoted.must_equal '[obj.name]'
|
90
|
+
extract_identifiers('[obj.name].[foo]').quoted.must_equal '[obj.name].[foo]'
|
91
|
+
end
|
92
|
+
|
93
|
+
it 'should indicate if a name is fully qualitified' do
|
94
|
+
extract_identifiers('object').fully_qualified?.must_equal false
|
95
|
+
extract_identifiers('schema.object').fully_qualified?.must_equal false
|
96
|
+
extract_identifiers('database.schema.object').fully_qualified?.must_equal false
|
97
|
+
extract_identifiers('database.object').fully_qualified?.must_equal false
|
98
|
+
extract_identifiers('server...object').fully_qualified?.must_equal false
|
99
|
+
extract_identifiers('server.database..object').fully_qualified?.must_equal false
|
100
|
+
extract_identifiers('server.database.schema.object').fully_qualified?.must_equal true
|
101
|
+
extract_identifiers('server.database.schema.').fully_qualified?.must_equal true
|
102
|
+
extract_identifiers('[obj.name]').fully_qualified?.must_equal false
|
103
|
+
extract_identifiers('[schema].[obj.name]').fully_qualified?.must_equal false
|
104
|
+
extract_identifiers('[database].[schema].[obj.name]').fully_qualified?.must_equal false
|
105
|
+
extract_identifiers('[database].[obj.name]').fully_qualified?.must_equal false
|
106
|
+
extract_identifiers('[server.name]...[obj.name]').fully_qualified?.must_equal false
|
107
|
+
extract_identifiers('[server.name].[database]..[obj.name]').fully_qualified?.must_equal false
|
108
|
+
extract_identifiers('[server.name].[database].[schema].[obj.name]').fully_qualified?.must_equal true
|
109
|
+
extract_identifiers('[server.name].[database].[schema].').fully_qualified?.must_equal true
|
87
110
|
end
|
88
111
|
|
89
112
|
it 'can return fully qualified quoted table name' do
|
90
|
-
name =
|
113
|
+
name = extract_identifiers('[my.server].db.schema.')
|
114
|
+
name.fully_qualified_database_quoted.must_equal '[my.server].[db]'
|
115
|
+
name = extract_identifiers('[server.name].[database].[schema].[object]')
|
91
116
|
name.fully_qualified_database_quoted.must_equal '[server.name].[database]'
|
92
|
-
|
93
|
-
name = SQLServer::Utils.extract_identifiers('server.database.schema.object')
|
117
|
+
name = extract_identifiers('server.database.schema.object')
|
94
118
|
name.fully_qualified_database_quoted.must_equal '[server].[database]'
|
95
119
|
end
|
96
120
|
|
97
121
|
end
|
98
122
|
|
123
|
+
private
|
124
|
+
|
125
|
+
def extract_identifiers(name)
|
126
|
+
SQLServer::Utils.extract_identifiers(name)
|
127
|
+
end
|
128
|
+
|
99
129
|
end
|
data/test/config.yml
CHANGED
@@ -20,6 +20,7 @@ connections:
|
|
20
20
|
dataserver: <%= ENV['ACTIVERECORD_UNITTEST_DATASERVER'] %>
|
21
21
|
tds_version: <%= ENV['ACTIVERECORD_UNITTEST_TDSVERSION'] %>
|
22
22
|
azure: <%= !ENV['ACTIVERECORD_UNITTEST_AZURE'].nil? %>
|
23
|
+
timeout: <%= ENV['ACTIVERECORD_UNITTEST_AZURE'].present? ? 20 : nil %>
|
23
24
|
arunit2:
|
24
25
|
<<: *default_connection_info
|
25
26
|
database: activerecord_unittest2
|
@@ -27,6 +28,7 @@ connections:
|
|
27
28
|
dataserver: <%= ENV['ACTIVERECORD_UNITTEST_DATASERVER'] %>
|
28
29
|
tds_version: <%= ENV['ACTIVERECORD_UNITTEST_TDSVERSION'] %>
|
29
30
|
azure: <%= !ENV['ACTIVERECORD_UNITTEST_AZURE'].nil? %>
|
31
|
+
timeout: <%= ENV['ACTIVERECORD_UNITTEST_AZURE'].present? ? 20 : nil %>
|
30
32
|
|
31
33
|
odbc:
|
32
34
|
arunit:
|
data/test/debug.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
# require 'rails/all'
|
2
|
+
require 'tiny_tds'
|
3
|
+
|
4
|
+
c = TinyTds::Client.new(
|
5
|
+
host: ENV['CI_AZURE_HOST'],
|
6
|
+
username: 'rails',
|
7
|
+
password: ENV['CI_AZURE_PASS'],
|
8
|
+
database: 'activerecord_unittest',
|
9
|
+
azure: true,
|
10
|
+
tds_version: '7.3'
|
11
|
+
)
|
12
|
+
|
13
|
+
puts c.execute("SELECT 1 AS [one]").each
|
14
|
+
c.close
|
@@ -24,10 +24,16 @@ CREATE TABLE [sst_datatypes] (
|
|
24
24
|
[real] [real] NULL DEFAULT 123.45,
|
25
25
|
-- Date and Time
|
26
26
|
[date] [date] NULL DEFAULT '0001-01-01',
|
27
|
-
[datetime] [datetime] NULL DEFAULT '1753-01-01T00:00:00.
|
27
|
+
[datetime] [datetime] NULL DEFAULT '1753-01-01T00:00:00.123',
|
28
|
+
[datetime2_7] [datetime2](7) NULL DEFAULT '9999-12-31 23:59:59.9999999',
|
29
|
+
[datetime2_3] [datetime2](3) NULL,
|
30
|
+
[datetime2_1] [datetime2](1) NULL,
|
31
|
+
[datetimeoffset_7] [datetimeoffset](7) NULL DEFAULT '1984-01-24 04:20:00.1234567 -08:00',
|
32
|
+
[datetimeoffset_3] [datetimeoffset](3) NULL,
|
33
|
+
[datetimeoffset_1] [datetimeoffset](1) NULL,
|
28
34
|
[smalldatetime] [smalldatetime] NULL DEFAULT '1901-01-01T15:45:00.000Z',
|
35
|
+
[time_7] [time](7) NULL DEFAULT '04:20:00.2883215',
|
29
36
|
[time_2] [time](2) NULL,
|
30
|
-
[time_7] [time](7) NULL,
|
31
37
|
-- Character Strings
|
32
38
|
[char_10] [char](10) NULL DEFAULT '1234567890',
|
33
39
|
[varchar_50] [varchar](50) NULL DEFAULT 'test varchar_50',
|
@@ -46,19 +52,3 @@ CREATE TABLE [sst_datatypes] (
|
|
46
52
|
[uniqueidentifier] [uniqueidentifier] NULL DEFAULT NEWID(),
|
47
53
|
[timestamp] [timestamp] NULL,
|
48
54
|
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
|
49
|
-
|
50
|
-
-- Date and Time (TODO)
|
51
|
-
-- --------------------
|
52
|
-
-- [datetime2_7] [datetime2](7) NULL,
|
53
|
-
-- [datetimeoffset_2] [datetimeoffset](2) NULL,
|
54
|
-
-- [datetimeoffset_7] [datetimeoffset](7) NULL,
|
55
|
-
--
|
56
|
-
-- INSERT INTO [sst_datatypes] ([id], [datetime2_7]) VALUES ( 71, '0001-01-01T00:00:00.0000000Z' )
|
57
|
-
-- INSERT INTO [sst_datatypes] ([id], [datetime2_7]) VALUES ( 72, '1984-01-24T04:20:00.0000000-08:00' )
|
58
|
-
-- INSERT INTO [sst_datatypes] ([id], [datetime2_7]) VALUES ( 73, '9999-12-31T23:59:59.9999999Z' )
|
59
|
-
-- INSERT INTO [sst_datatypes] ([id], [datetimeoffset_2]) VALUES ( 81, '1984-01-24T04:20:00.0000000-08:00' ) -- 1984-01-24 04:20:00.00 -08:00
|
60
|
-
-- INSERT INTO [sst_datatypes] ([id], [datetimeoffset_2]) VALUES ( 82, '1984-01-24T04:20:00.0000000Z' ) -- 1984-01-24 04:20:00.00 +00:00
|
61
|
-
-- INSERT INTO [sst_datatypes] ([id], [datetimeoffset_2]) VALUES ( 83, '9999-12-31T23:59:59.9999999Z' ) -- 9999-12-31 23:59:59.99 +00:00
|
62
|
-
-- INSERT INTO [sst_datatypes] ([id], [datetimeoffset_7]) VALUES ( 84, '1984-01-24T04:20:00.0000000-08:00' ) -- 1984-01-24 04:20:00.0000000 -08:00
|
63
|
-
-- INSERT INTO [sst_datatypes] ([id], [datetimeoffset_7]) VALUES ( 85, '1984-01-24T04:20:00.0000000Z' ) -- 1984-01-24 04:20:00.0000000 +00:00
|
64
|
-
-- INSERT INTO [sst_datatypes] ([id], [datetimeoffset_7]) VALUES ( 86, '9999-12-31T23:59:59.9999999Z' ) -- 9999-12-31 23:59:59.9999999 +00:00
|
@@ -19,18 +19,20 @@ ActiveRecord::Schema.define do
|
|
19
19
|
t.date :date_col
|
20
20
|
t.binary :binary_col
|
21
21
|
# Our type methods.
|
22
|
-
t.real
|
23
|
-
t.money
|
24
|
-
t.
|
25
|
-
t.
|
26
|
-
t.
|
27
|
-
t.
|
28
|
-
t.
|
29
|
-
t.
|
30
|
-
t.
|
31
|
-
t.
|
32
|
-
t.
|
33
|
-
t.
|
22
|
+
t.real :real_col
|
23
|
+
t.money :money_col
|
24
|
+
t.datetime2 :datetime2_col
|
25
|
+
t.datetimeoffset :datetimeoffset
|
26
|
+
t.smallmoney :smallmoney_col
|
27
|
+
t.char :char_col
|
28
|
+
t.varchar :varchar_col
|
29
|
+
t.text_basic :text_basic_col
|
30
|
+
t.nchar :nchar_col
|
31
|
+
t.ntext :ntext_col
|
32
|
+
t.binary_basic :binary_basic_col
|
33
|
+
t.varbinary :varbinary_col
|
34
|
+
t.uuid :uuid_col
|
35
|
+
t.ss_timestamp :sstimestamp_col
|
34
36
|
end
|
35
37
|
|
36
38
|
# Edge Cases
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module ARTest
|
2
|
+
module SQLServer
|
3
|
+
module ConnectionReflection
|
4
|
+
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
included { extend ConnectionReflection }
|
8
|
+
|
9
|
+
def connection
|
10
|
+
ActiveRecord::Base.connection
|
11
|
+
end
|
12
|
+
|
13
|
+
def connection_options
|
14
|
+
connection.instance_variable_get :@connection_options
|
15
|
+
end
|
16
|
+
|
17
|
+
def connection_dblib?
|
18
|
+
connection_options[:mode] == :dblib
|
19
|
+
end
|
20
|
+
|
21
|
+
def connection_dblib_73?
|
22
|
+
return false unless connection_dblib?
|
23
|
+
rc = connection.raw_connection
|
24
|
+
rc.respond_to?(:tds_73?) && rc.tds_73?
|
25
|
+
end
|
26
|
+
|
27
|
+
def connection_odbc?
|
28
|
+
connection_options[:mode] == :odbc
|
29
|
+
end
|
30
|
+
|
31
|
+
def connection_sqlserver_azure?
|
32
|
+
connection.sqlserver_azure?
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
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.8
|
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:
|
17
|
+
date: 2016-02-29 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: activerecord
|
@@ -30,146 +30,6 @@ dependencies:
|
|
30
30
|
- - "~>"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: 4.2.1
|
33
|
-
- !ruby/object:Gem::Dependency
|
34
|
-
name: bundler
|
35
|
-
requirement: !ruby/object:Gem::Requirement
|
36
|
-
requirements:
|
37
|
-
- - ">="
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
version: '0'
|
40
|
-
type: :development
|
41
|
-
prerelease: false
|
42
|
-
version_requirements: !ruby/object:Gem::Requirement
|
43
|
-
requirements:
|
44
|
-
- - ">="
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version: '0'
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: guard
|
49
|
-
requirement: !ruby/object:Gem::Requirement
|
50
|
-
requirements:
|
51
|
-
- - ">="
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '0'
|
54
|
-
type: :development
|
55
|
-
prerelease: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
requirements:
|
58
|
-
- - ">="
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
version: '0'
|
61
|
-
- !ruby/object:Gem::Dependency
|
62
|
-
name: guard-minitest
|
63
|
-
requirement: !ruby/object:Gem::Requirement
|
64
|
-
requirements:
|
65
|
-
- - ">="
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
version: '0'
|
68
|
-
type: :development
|
69
|
-
prerelease: false
|
70
|
-
version_requirements: !ruby/object:Gem::Requirement
|
71
|
-
requirements:
|
72
|
-
- - ">="
|
73
|
-
- !ruby/object:Gem::Version
|
74
|
-
version: '0'
|
75
|
-
- !ruby/object:Gem::Dependency
|
76
|
-
name: minitest
|
77
|
-
requirement: !ruby/object:Gem::Requirement
|
78
|
-
requirements:
|
79
|
-
- - "<"
|
80
|
-
- !ruby/object:Gem::Version
|
81
|
-
version: 5.3.4
|
82
|
-
type: :development
|
83
|
-
prerelease: false
|
84
|
-
version_requirements: !ruby/object:Gem::Requirement
|
85
|
-
requirements:
|
86
|
-
- - "<"
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
version: 5.3.4
|
89
|
-
- !ruby/object:Gem::Dependency
|
90
|
-
name: minitest-focus
|
91
|
-
requirement: !ruby/object:Gem::Requirement
|
92
|
-
requirements:
|
93
|
-
- - ">="
|
94
|
-
- !ruby/object:Gem::Version
|
95
|
-
version: '0'
|
96
|
-
type: :development
|
97
|
-
prerelease: false
|
98
|
-
version_requirements: !ruby/object:Gem::Requirement
|
99
|
-
requirements:
|
100
|
-
- - ">="
|
101
|
-
- !ruby/object:Gem::Version
|
102
|
-
version: '0'
|
103
|
-
- !ruby/object:Gem::Dependency
|
104
|
-
name: minitest-spec-rails
|
105
|
-
requirement: !ruby/object:Gem::Requirement
|
106
|
-
requirements:
|
107
|
-
- - ">="
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: '0'
|
110
|
-
type: :development
|
111
|
-
prerelease: false
|
112
|
-
version_requirements: !ruby/object:Gem::Requirement
|
113
|
-
requirements:
|
114
|
-
- - ">="
|
115
|
-
- !ruby/object:Gem::Version
|
116
|
-
version: '0'
|
117
|
-
- !ruby/object:Gem::Dependency
|
118
|
-
name: mocha
|
119
|
-
requirement: !ruby/object:Gem::Requirement
|
120
|
-
requirements:
|
121
|
-
- - ">="
|
122
|
-
- !ruby/object:Gem::Version
|
123
|
-
version: '0'
|
124
|
-
type: :development
|
125
|
-
prerelease: false
|
126
|
-
version_requirements: !ruby/object:Gem::Requirement
|
127
|
-
requirements:
|
128
|
-
- - ">="
|
129
|
-
- !ruby/object:Gem::Version
|
130
|
-
version: '0'
|
131
|
-
- !ruby/object:Gem::Dependency
|
132
|
-
name: nokogiri
|
133
|
-
requirement: !ruby/object:Gem::Requirement
|
134
|
-
requirements:
|
135
|
-
- - ">="
|
136
|
-
- !ruby/object:Gem::Version
|
137
|
-
version: '0'
|
138
|
-
type: :development
|
139
|
-
prerelease: false
|
140
|
-
version_requirements: !ruby/object:Gem::Requirement
|
141
|
-
requirements:
|
142
|
-
- - ">="
|
143
|
-
- !ruby/object:Gem::Version
|
144
|
-
version: '0'
|
145
|
-
- !ruby/object:Gem::Dependency
|
146
|
-
name: byebug
|
147
|
-
requirement: !ruby/object:Gem::Requirement
|
148
|
-
requirements:
|
149
|
-
- - ">="
|
150
|
-
- !ruby/object:Gem::Version
|
151
|
-
version: '0'
|
152
|
-
type: :development
|
153
|
-
prerelease: false
|
154
|
-
version_requirements: !ruby/object:Gem::Requirement
|
155
|
-
requirements:
|
156
|
-
- - ">="
|
157
|
-
- !ruby/object:Gem::Version
|
158
|
-
version: '0'
|
159
|
-
- !ruby/object:Gem::Dependency
|
160
|
-
name: rake
|
161
|
-
requirement: !ruby/object:Gem::Requirement
|
162
|
-
requirements:
|
163
|
-
- - ">="
|
164
|
-
- !ruby/object:Gem::Version
|
165
|
-
version: '0'
|
166
|
-
type: :development
|
167
|
-
prerelease: false
|
168
|
-
version_requirements: !ruby/object:Gem::Requirement
|
169
|
-
requirements:
|
170
|
-
- - ">="
|
171
|
-
- !ruby/object:Gem::Version
|
172
|
-
version: '0'
|
173
33
|
description: ActiveRecord SQL Server Adapter. SQL Server 2012 and upward.
|
174
34
|
email:
|
175
35
|
- ken@metaskills.net
|
@@ -187,6 +47,7 @@ files:
|
|
187
47
|
- README.md
|
188
48
|
- RUNNING_UNIT_TESTS.md
|
189
49
|
- Rakefile
|
50
|
+
- VERSION
|
190
51
|
- activerecord-sqlserver-adapter.gemspec
|
191
52
|
- appveyor.yml
|
192
53
|
- lib/active_record/connection_adapters/sqlserver/core_ext/active_record.rb
|
@@ -214,11 +75,12 @@ files:
|
|
214
75
|
- lib/active_record/connection_adapters/sqlserver/type/char.rb
|
215
76
|
- lib/active_record/connection_adapters/sqlserver/type/date.rb
|
216
77
|
- lib/active_record/connection_adapters/sqlserver/type/datetime.rb
|
78
|
+
- lib/active_record/connection_adapters/sqlserver/type/datetime2.rb
|
79
|
+
- lib/active_record/connection_adapters/sqlserver/type/datetimeoffset.rb
|
217
80
|
- lib/active_record/connection_adapters/sqlserver/type/decimal.rb
|
218
81
|
- lib/active_record/connection_adapters/sqlserver/type/float.rb
|
219
82
|
- lib/active_record/connection_adapters/sqlserver/type/integer.rb
|
220
83
|
- lib/active_record/connection_adapters/sqlserver/type/money.rb
|
221
|
-
- lib/active_record/connection_adapters/sqlserver/type/quoter.rb
|
222
84
|
- lib/active_record/connection_adapters/sqlserver/type/real.rb
|
223
85
|
- lib/active_record/connection_adapters/sqlserver/type/small_integer.rb
|
224
86
|
- lib/active_record/connection_adapters/sqlserver/type/small_money.rb
|
@@ -226,6 +88,7 @@ files:
|
|
226
88
|
- lib/active_record/connection_adapters/sqlserver/type/string.rb
|
227
89
|
- lib/active_record/connection_adapters/sqlserver/type/text.rb
|
228
90
|
- lib/active_record/connection_adapters/sqlserver/type/time.rb
|
91
|
+
- lib/active_record/connection_adapters/sqlserver/type/time_value_fractional.rb
|
229
92
|
- lib/active_record/connection_adapters/sqlserver/type/timestamp.rb
|
230
93
|
- lib/active_record/connection_adapters/sqlserver/type/tiny_integer.rb
|
231
94
|
- lib/active_record/connection_adapters/sqlserver/type/unicode_char.rb
|
@@ -255,6 +118,7 @@ files:
|
|
255
118
|
- test/cases/connection_test_sqlserver.rb
|
256
119
|
- test/cases/execute_procedure_test_sqlserver.rb
|
257
120
|
- test/cases/fetch_test_sqlserver.rb
|
121
|
+
- test/cases/fully_qualified_identifier_test_sqlserver.rb
|
258
122
|
- test/cases/helper_sqlserver.rb
|
259
123
|
- test/cases/migration_test_sqlserver.rb
|
260
124
|
- test/cases/order_test_sqlserver.rb
|
@@ -269,6 +133,7 @@ files:
|
|
269
133
|
- test/cases/utils_test_sqlserver.rb
|
270
134
|
- test/cases/uuid_test_sqlserver.rb
|
271
135
|
- test/config.yml
|
136
|
+
- test/debug.rb
|
272
137
|
- test/fixtures/1px.gif
|
273
138
|
- test/migrations/transaction_table/1_table_will_never_be_created.rb
|
274
139
|
- test/models/sqlserver/customers_view.rb
|
@@ -296,6 +161,7 @@ files:
|
|
296
161
|
- test/schema/datatypes/2012.sql
|
297
162
|
- test/schema/sqlserver_specific_schema.rb
|
298
163
|
- test/support/coerceable_test_sqlserver.rb
|
164
|
+
- test/support/connection_reflection.rb
|
299
165
|
- test/support/load_schema_sqlserver.rb
|
300
166
|
- test/support/minitest_sqlserver.rb
|
301
167
|
- test/support/paths_sqlserver.rb
|
@@ -334,6 +200,7 @@ test_files:
|
|
334
200
|
- test/cases/connection_test_sqlserver.rb
|
335
201
|
- test/cases/execute_procedure_test_sqlserver.rb
|
336
202
|
- test/cases/fetch_test_sqlserver.rb
|
203
|
+
- test/cases/fully_qualified_identifier_test_sqlserver.rb
|
337
204
|
- test/cases/helper_sqlserver.rb
|
338
205
|
- test/cases/migration_test_sqlserver.rb
|
339
206
|
- test/cases/order_test_sqlserver.rb
|
@@ -348,6 +215,7 @@ test_files:
|
|
348
215
|
- test/cases/utils_test_sqlserver.rb
|
349
216
|
- test/cases/uuid_test_sqlserver.rb
|
350
217
|
- test/config.yml
|
218
|
+
- test/debug.rb
|
351
219
|
- test/fixtures/1px.gif
|
352
220
|
- test/migrations/transaction_table/1_table_will_never_be_created.rb
|
353
221
|
- test/models/sqlserver/customers_view.rb
|
@@ -375,8 +243,10 @@ test_files:
|
|
375
243
|
- test/schema/datatypes/2012.sql
|
376
244
|
- test/schema/sqlserver_specific_schema.rb
|
377
245
|
- test/support/coerceable_test_sqlserver.rb
|
246
|
+
- test/support/connection_reflection.rb
|
378
247
|
- test/support/load_schema_sqlserver.rb
|
379
248
|
- test/support/minitest_sqlserver.rb
|
380
249
|
- test/support/paths_sqlserver.rb
|
381
250
|
- test/support/rake_helpers.rb
|
382
251
|
- test/support/sql_counter_sqlserver.rb
|
252
|
+
has_rdoc:
|