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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +34 -0
  3. data/Gemfile +9 -0
  4. data/README.md +40 -26
  5. data/VERSION +1 -0
  6. data/activerecord-sqlserver-adapter.gemspec +0 -10
  7. data/appveyor.yml +15 -3
  8. data/lib/active_record/connection_adapters/sqlserver/database_statements.rb +3 -3
  9. data/lib/active_record/connection_adapters/sqlserver/database_tasks.rb +35 -11
  10. data/lib/active_record/connection_adapters/sqlserver/quoting.rb +4 -16
  11. data/lib/active_record/connection_adapters/sqlserver/schema_statements.rb +12 -2
  12. data/lib/active_record/connection_adapters/sqlserver/table_definition.rb +8 -0
  13. data/lib/active_record/connection_adapters/sqlserver/type.rb +3 -1
  14. data/lib/active_record/connection_adapters/sqlserver/type/date.rb +9 -0
  15. data/lib/active_record/connection_adapters/sqlserver/type/datetime.rb +18 -12
  16. data/lib/active_record/connection_adapters/sqlserver/type/datetime2.rb +17 -0
  17. data/lib/active_record/connection_adapters/sqlserver/type/datetimeoffset.rb +31 -0
  18. data/lib/active_record/connection_adapters/sqlserver/type/smalldatetime.rb +6 -6
  19. data/lib/active_record/connection_adapters/sqlserver/type/time.rb +13 -29
  20. data/lib/active_record/connection_adapters/sqlserver/type/time_value_fractional.rb +72 -0
  21. data/lib/active_record/connection_adapters/sqlserver/utils.rb +12 -12
  22. data/lib/active_record/connection_adapters/sqlserver/version.rb +1 -1
  23. data/lib/active_record/connection_adapters/sqlserver_adapter.rb +41 -5
  24. data/lib/active_record/sqlserver_base.rb +2 -4
  25. data/lib/arel/visitors/sqlserver.rb +19 -0
  26. data/test/cases/adapter_test_sqlserver.rb +24 -0
  27. data/test/cases/coerced_tests.rb +14 -0
  28. data/test/cases/column_test_sqlserver.rb +120 -47
  29. data/test/cases/connection_test_sqlserver.rb +3 -3
  30. data/test/cases/fully_qualified_identifier_test_sqlserver.rb +76 -0
  31. data/test/cases/helper_sqlserver.rb +24 -16
  32. data/test/cases/migration_test_sqlserver.rb +0 -5
  33. data/test/cases/rake_test_sqlserver.rb +29 -10
  34. data/test/cases/schema_dumper_test_sqlserver.rb +28 -11
  35. data/test/cases/transaction_test_sqlserver.rb +2 -2
  36. data/test/cases/utils_test_sqlserver.rb +44 -14
  37. data/test/config.yml +2 -0
  38. data/test/debug.rb +14 -0
  39. data/test/schema/datatypes/2012.sql +8 -18
  40. data/test/schema/sqlserver_specific_schema.rb +14 -12
  41. data/test/support/connection_reflection.rb +37 -0
  42. metadata +13 -143
  43. 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: "'0001-01-01'"
28
- assert_line :datetime, type: 'datetime', limit: nil, precision: nil, scale: nil, default: "'1753-01-01 00:00:00'"
29
- assert_line :smalldatetime, type: 'datetime', limit: nil, precision: nil, scale: nil, default: "'1901-01-01 15:45:00'"
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
- assert_line :time_7, type: 'time', limit: nil, precision: nil, scale: nil, default: nil
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: nil, scale: nil, default: nil
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
- line.type_method.must_equal options[:type], "Type of #{options[:type].inspect} not found in:\n #{line}" if options.key?(:type)
149
- line.limit.must_equal options[:limit], "Limit of #{options[:limit].inspect} not found in:\n #{line}" if options.key?(:limit)
150
- line.precision.must_equal options[:precision], "Precision of #{options[:precision].inspect} not found in:\n #{line}" if options.key?(:precision)
151
- line.scale.must_equal options[:scale], "Scale of #{options[:scale].inspect} not found in:\n #{line}" if options.key?(:scale)
152
- line.default.must_equal options[:default], "Default of #{options[:default].inspect} not found in:\n #{line}" if options.key?(:default) && options[:default].is_a?(String)
153
- line.default.must_match options[:default], "Default of #{options[:default].inspect} not found in:\n #{line}" if options.key?(:default) && options[:default].is_a?(Regexp)
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 = SQLServer::Utils.extract_identifiers(n)
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 = SQLServer::Utils.extract_identifiers(n)
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 = SQLServer::Utils.extract_identifiers(n)
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
- SQLServer::Utils.extract_identifiers(nil).object.must_be_nil
71
- SQLServer::Utils.extract_identifiers(' ').object.must_be_nil
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
- SQLServer::Utils.extract_identifiers('object').quoted.must_equal '[object]'
76
- SQLServer::Utils.extract_identifiers('server.database..object').quoted.must_equal '[server].[database]..[object]'
77
- SQLServer::Utils.extract_identifiers('[server]...[object]').quoted.must_equal '[server]...[object]'
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
- SQLServer::Utils.extract_identifiers(:object).object.must_equal 'object'
85
+ extract_identifiers(:object).object.must_equal 'object'
82
86
  end
83
87
 
84
88
  it 'allows identifiers with periods to work' do
85
- SQLServer::Utils.extract_identifiers('[obj.name]').quoted.must_equal '[obj.name]'
86
- SQLServer::Utils.extract_identifiers('[obj.name].[foo]').quoted.must_equal '[obj.name].[foo]'
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 = SQLServer::Utils.extract_identifiers('[server.name].[database].[schema].[object]')
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
@@ -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:
@@ -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.000',
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 :real_col
23
- t.money :money_col
24
- t.smallmoney :smallmoney_col
25
- t.char :char_col
26
- t.varchar :varchar_col
27
- t.text_basic :text_basic_col
28
- t.nchar :nchar_col
29
- t.ntext :ntext_col
30
- t.binary_basic :binary_basic_col
31
- t.varbinary :varbinary_col
32
- t.uuid :uuid_col
33
- t.ss_timestamp :sstimestamp_col
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.6
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: 2015-11-23 00:00:00.000000000 Z
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: