activerecord-jdbcsqlserver-adapter 50.0.0 → 52.0.0

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 (72) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -1
  3. data/.travis.yml +4 -5
  4. data/CHANGELOG.md +22 -101
  5. data/{Dockerfile → Dockerfile.ci} +0 -0
  6. data/Gemfile +1 -3
  7. data/README.md +5 -9
  8. data/VERSION +1 -1
  9. data/activerecord-jdbcsqlserver-adapter.gemspec +2 -2
  10. data/appveyor.yml +1 -1
  11. data/docker-compose.ci.yml +7 -5
  12. data/lib/active_record/connection_adapters/sqlserver/core_ext/active_record.rb +3 -1
  13. data/lib/active_record/connection_adapters/sqlserver/core_ext/attribute_methods.rb +3 -1
  14. data/lib/active_record/connection_adapters/sqlserver/core_ext/calculations.rb +51 -0
  15. data/lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb +18 -20
  16. data/lib/active_record/connection_adapters/sqlserver/core_ext/explain_subscriber.rb +5 -3
  17. data/lib/active_record/connection_adapters/sqlserver/core_ext/finder_methods.rb +43 -0
  18. data/lib/active_record/connection_adapters/sqlserver/core_ext/query_methods.rb +26 -0
  19. data/lib/active_record/connection_adapters/sqlserver/database_limits.rb +13 -2
  20. data/lib/active_record/connection_adapters/sqlserver/database_statements.rb +94 -28
  21. data/lib/active_record/connection_adapters/sqlserver/database_tasks.rb +1 -0
  22. data/lib/active_record/connection_adapters/sqlserver/jdbc_overrides.rb +5 -25
  23. data/lib/active_record/connection_adapters/sqlserver/schema_creation.rb +24 -1
  24. data/lib/active_record/connection_adapters/sqlserver/schema_dumper.rb +23 -2
  25. data/lib/active_record/connection_adapters/sqlserver/schema_statements.rb +110 -74
  26. data/lib/active_record/connection_adapters/sqlserver/table_definition.rb +15 -7
  27. data/lib/active_record/connection_adapters/sqlserver/transaction.rb +3 -4
  28. data/lib/active_record/connection_adapters/sqlserver/type/big_integer.rb +0 -4
  29. data/lib/active_record/connection_adapters/sqlserver/type/data.rb +5 -0
  30. data/lib/active_record/connection_adapters/sqlserver/type/datetime.rb +3 -6
  31. data/lib/active_record/connection_adapters/sqlserver/type/json.rb +1 -1
  32. data/lib/active_record/connection_adapters/sqlserver/type/string.rb +7 -0
  33. data/lib/active_record/connection_adapters/sqlserver/type/time.rb +1 -0
  34. data/lib/active_record/connection_adapters/sqlserver_adapter.rb +47 -24
  35. data/lib/active_record/tasks/sqlserver_database_tasks.rb +5 -3
  36. data/lib/activerecord-jdbcsqlserver-adapter.rb +4 -1
  37. data/lib/arel/visitors/sqlserver.rb +17 -4
  38. data/lib/arel_sqlserver.rb +0 -1
  39. data/lib/jdbc_mssql_driver_loader.rb +22 -0
  40. data/test/bin/install-freetds.sh +18 -0
  41. data/test/bin/setup.sh +19 -0
  42. data/test/cases/adapter_test_sqlserver.rb +43 -39
  43. data/test/cases/change_column_null_test_sqlserver.rb +42 -0
  44. data/test/cases/coerced_tests.rb +419 -39
  45. data/test/cases/column_test_sqlserver.rb +496 -462
  46. data/test/cases/connection_test_sqlserver.rb +2 -2
  47. data/test/cases/fetch_test_sqlserver.rb +5 -5
  48. data/test/cases/helper_sqlserver.rb +12 -1
  49. data/test/cases/json_test_sqlserver.rb +6 -6
  50. data/test/cases/migration_test_sqlserver.rb +13 -3
  51. data/test/cases/order_test_sqlserver.rb +19 -19
  52. data/test/cases/pessimistic_locking_test_sqlserver.rb +37 -20
  53. data/test/cases/rake_test_sqlserver.rb +20 -20
  54. data/test/cases/schema_dumper_test_sqlserver.rb +44 -43
  55. data/test/cases/schema_test_sqlserver.rb +2 -2
  56. data/test/cases/showplan_test_sqlserver.rb +25 -10
  57. data/test/cases/specific_schema_test_sqlserver.rb +11 -17
  58. data/test/cases/transaction_test_sqlserver.rb +9 -9
  59. data/test/cases/trigger_test_sqlserver.rb +31 -0
  60. data/test/cases/utils_test_sqlserver.rb +36 -36
  61. data/test/cases/uuid_test_sqlserver.rb +8 -8
  62. data/test/config.yml +2 -2
  63. data/test/migrations/create_clients_and_change_column_null.rb +23 -0
  64. data/test/models/sqlserver/trigger.rb +7 -0
  65. data/test/models/sqlserver/trigger_history.rb +3 -0
  66. data/test/schema/datatypes/2012.sql +1 -0
  67. data/test/schema/sqlserver_specific_schema.rb +47 -5
  68. data/test/support/core_ext/query_cache.rb +29 -0
  69. data/test/support/sql_counter_sqlserver.rb +1 -1
  70. metadata +32 -15
  71. data/RAILS5-TODO.md +0 -5
  72. data/test/models/sqlserver/dot_table_name.rb +0 -3
@@ -0,0 +1,7 @@
1
+ class SSTestTrigger < ActiveRecord::Base
2
+ self.table_name = 'sst_table_with_trigger'
3
+ end
4
+
5
+ class SSTestTriggerUuid < ActiveRecord::Base
6
+ self.table_name = 'sst_table_with_uuid_trigger'
7
+ end
@@ -0,0 +1,3 @@
1
+ class SSTestTriggerHistory < ActiveRecord::Base
2
+ self.table_name = 'sst_table_with_trigger_history'
3
+ end
@@ -35,6 +35,7 @@ CREATE TABLE [sst_datatypes] (
35
35
  [smalldatetime] [smalldatetime] NULL DEFAULT '1901-01-01T15:45:00.000Z',
36
36
  [time_7] [time](7) NULL DEFAULT '04:20:00.2883215',
37
37
  [time_2] [time](2) NULL,
38
+ [time_default] [time] NULL DEFAULT '15:03:42.0621978',
38
39
  -- Character Strings
39
40
  [char_10] [char](10) NULL DEFAULT '1234567890',
40
41
  [varchar_50] [varchar](50) NULL DEFAULT 'test varchar_50',
@@ -64,10 +64,6 @@ ActiveRecord::Schema.define do
64
64
  t.uuid :uuid_nil_default, default: nil
65
65
  end
66
66
 
67
- create_table '[some.Name]', force: true do |t|
68
- t.varchar :name
69
- end
70
-
71
67
  create_table 'sst_my$strange_table', force: true do |t|
72
68
  t.string :name
73
69
  end
@@ -148,12 +144,20 @@ ActiveRecord::Schema.define do
148
144
 
149
145
  # Constraints
150
146
 
151
- create_table(:sst_has_fks, force: true) { |t| t.column(:fk_id, :integer, null: false) }
147
+ create_table(:sst_has_fks, force: true) do |t|
148
+ t.column(:fk_id, :bigint, null: false)
149
+ t.column(:fk_id2, :bigint)
150
+ end
151
+
152
152
  create_table(:sst_has_pks, force: true) { }
153
153
  execute <<-ADDFKSQL
154
154
  ALTER TABLE sst_has_fks
155
155
  ADD CONSTRAINT FK__sst_has_fks_id
156
156
  FOREIGN KEY ([fk_id])
157
+ REFERENCES [sst_has_pks] ([id]),
158
+
159
+ CONSTRAINT FK__sst_has_fks_id2
160
+ FOREIGN KEY ([fk_id2])
157
161
  REFERENCES [sst_has_pks] ([id])
158
162
  ADDFKSQL
159
163
 
@@ -181,6 +185,44 @@ ActiveRecord::Schema.define do
181
185
  FROM sst_string_defaults
182
186
  STRINGDEFAULTSBIGVIEW
183
187
 
188
+ # Trigger
189
+
190
+ execute "IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'sst_table_with_trigger') DROP TABLE sst_table_with_trigger"
191
+ execute "IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'sst_table_with_trigger_history') DROP TABLE sst_table_with_trigger_history"
192
+ execute <<-SQL
193
+ CREATE TABLE sst_table_with_trigger(
194
+ id bigint IDENTITY NOT NULL PRIMARY KEY,
195
+ event_name nvarchar(255)
196
+ )
197
+ CREATE TABLE sst_table_with_trigger_history(
198
+ id bigint IDENTITY NOT NULL PRIMARY KEY,
199
+ id_source nvarchar(36),
200
+ event_name nvarchar(255)
201
+ )
202
+ SQL
203
+ execute <<-SQL
204
+ CREATE TRIGGER sst_table_with_trigger_t ON sst_table_with_trigger
205
+ FOR INSERT
206
+ AS
207
+ INSERT INTO sst_table_with_trigger_history (id_source, event_name)
208
+ SELECT id AS id_source, event_name FROM INSERTED
209
+ SQL
210
+
211
+ execute "IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'sst_table_with_uuid_trigger') DROP TABLE sst_table_with_uuid_trigger"
212
+ execute <<-SQL
213
+ CREATE TABLE sst_table_with_uuid_trigger(
214
+ id uniqueidentifier DEFAULT NEWID() PRIMARY KEY,
215
+ event_name nvarchar(255)
216
+ )
217
+ SQL
218
+ execute <<-SQL
219
+ CREATE TRIGGER sst_table_with_uuid_trigger_t ON sst_table_with_uuid_trigger
220
+ FOR INSERT
221
+ AS
222
+ INSERT INTO sst_table_with_trigger_history (id_source, event_name)
223
+ SELECT id AS id_source, event_name FROM INSERTED
224
+ SQL
225
+
184
226
  # Another schema.
185
227
 
186
228
  create_table :sst_schema_columns, force: true do |t|
@@ -0,0 +1,29 @@
1
+ require 'active_record/connection_adapters/sqlserver_adapter'
2
+
3
+ module SqlIgnoredCache
4
+ extend ActiveSupport::Concern
5
+
6
+ IGNORED_SQL = [
7
+ /INFORMATION_SCHEMA\.(TABLES|VIEWS|COLUMNS|KEY_COLUMN_USAGE)/im,
8
+ /SELECT @@version/,
9
+ /SELECT @@TRANCOUNT/,
10
+ /(BEGIN|COMMIT|ROLLBACK|SAVE) TRANSACTION/,
11
+ /SELECT CAST\(.* AS .*\) AS value/,
12
+ /SELECT DATABASEPROPERTYEX/im
13
+ ]
14
+
15
+ # We don't want to coerce every ActiveRecord test that relies on `query_cache`
16
+ # just because we do more queries than the other adapters.
17
+ #
18
+ # Removing internal queries from the cache will make AR tests pass without
19
+ # compromising cache outside tests.
20
+ def cache_sql(sql, name, binds)
21
+ result = super
22
+ @query_cache.delete_if { |k, v| k =~ Regexp.union(IGNORED_SQL) }
23
+ result
24
+ end
25
+ end
26
+
27
+ ActiveSupport.on_load(:active_record) do
28
+ ActiveRecord::ConnectionAdapters::SQLServerAdapter.prepend(SqlIgnoredCache)
29
+ end
@@ -13,7 +13,7 @@ module ARTest
13
13
  end
14
14
 
15
15
  ignored_sql = [
16
- /INFORMATION_SCHEMA\.(TABLES|VIEWS|COLUMNS)/im,
16
+ /INFORMATION_SCHEMA\.(TABLES|VIEWS|COLUMNS|KEY_COLUMN_USAGE)/im,
17
17
  /SELECT @@version/,
18
18
  /SELECT @@TRANCOUNT/,
19
19
  /(BEGIN|COMMIT|ROLLBACK|SAVE) TRANSACTION/,
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-jdbcsqlserver-adapter
3
3
  version: !ruby/object:Gem::Version
4
- version: 50.0.0
4
+ version: 52.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ken Collins
@@ -15,42 +15,42 @@ authors:
15
15
  autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
- date: 2019-11-01 00:00:00.000000000 Z
18
+ date: 2021-01-05 00:00:00.000000000 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  requirement: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - "~>"
24
24
  - !ruby/object:Gem::Version
25
- version: 5.0.0
25
+ version: 5.2.0
26
26
  - - ">="
27
27
  - !ruby/object:Gem::Version
28
- version: 5.0.6
28
+ version: 5.2.3
29
29
  name: activerecord
30
- prerelease: false
31
30
  type: :runtime
31
+ prerelease: false
32
32
  version_requirements: !ruby/object:Gem::Requirement
33
33
  requirements:
34
34
  - - "~>"
35
35
  - !ruby/object:Gem::Version
36
- version: 5.0.0
36
+ version: 5.2.0
37
37
  - - ">="
38
38
  - !ruby/object:Gem::Version
39
- version: 5.0.6
39
+ version: 5.2.3
40
40
  - !ruby/object:Gem::Dependency
41
41
  requirement: !ruby/object:Gem::Requirement
42
42
  requirements:
43
43
  - - "~>"
44
44
  - !ruby/object:Gem::Version
45
- version: '50.5'
45
+ version: '52.7'
46
46
  name: activerecord-jdbc-adapter
47
- prerelease: false
48
47
  type: :runtime
48
+ prerelease: false
49
49
  version_requirements: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '50.5'
53
+ version: '52.7'
54
54
  - !ruby/object:Gem::Dependency
55
55
  requirement: !ruby/object:Gem::Requirement
56
56
  requirements:
@@ -58,8 +58,8 @@ dependencies:
58
58
  - !ruby/object:Gem::Version
59
59
  version: 0.6.0
60
60
  name: jdbc-mssql
61
- prerelease: false
62
61
  type: :runtime
62
+ prerelease: false
63
63
  version_requirements: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - ">="
@@ -78,11 +78,10 @@ files:
78
78
  - ".travis.yml"
79
79
  - CHANGELOG.md
80
80
  - CODE_OF_CONDUCT.md
81
- - Dockerfile
81
+ - Dockerfile.ci
82
82
  - Gemfile
83
83
  - Guardfile
84
84
  - MIT-LICENSE
85
- - RAILS5-TODO.md
86
85
  - README.md
87
86
  - RUNNING_UNIT_TESTS.md
88
87
  - Rakefile
@@ -92,9 +91,12 @@ files:
92
91
  - docker-compose.ci.yml
93
92
  - lib/active_record/connection_adapters/sqlserver/core_ext/active_record.rb
94
93
  - lib/active_record/connection_adapters/sqlserver/core_ext/attribute_methods.rb
94
+ - lib/active_record/connection_adapters/sqlserver/core_ext/calculations.rb
95
95
  - lib/active_record/connection_adapters/sqlserver/core_ext/date_time.rb
96
96
  - lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb
97
97
  - lib/active_record/connection_adapters/sqlserver/core_ext/explain_subscriber.rb
98
+ - lib/active_record/connection_adapters/sqlserver/core_ext/finder_methods.rb
99
+ - lib/active_record/connection_adapters/sqlserver/core_ext/query_methods.rb
98
100
  - lib/active_record/connection_adapters/sqlserver/database_limits.rb
99
101
  - lib/active_record/connection_adapters/sqlserver/database_statements.rb
100
102
  - lib/active_record/connection_adapters/sqlserver/database_tasks.rb
@@ -156,10 +158,14 @@ files:
156
158
  - lib/activerecord-sqlserver-adapter.rb
157
159
  - lib/arel/visitors/sqlserver.rb
158
160
  - lib/arel_sqlserver.rb
161
+ - lib/jdbc_mssql_driver_loader.rb
159
162
  - test/appveyor/dbsetup.ps1
160
163
  - test/appveyor/dbsetup.sql
164
+ - test/bin/install-freetds.sh
165
+ - test/bin/setup.sh
161
166
  - test/bin/wait-for.sh
162
167
  - test/cases/adapter_test_sqlserver.rb
168
+ - test/cases/change_column_null_test_sqlserver.rb
163
169
  - test/cases/coerced_tests.rb
164
170
  - test/cases/column_test_sqlserver.rb
165
171
  - test/cases/connection_test_sqlserver.rb
@@ -179,18 +185,19 @@ files:
179
185
  - test/cases/showplan_test_sqlserver.rb
180
186
  - test/cases/specific_schema_test_sqlserver.rb
181
187
  - test/cases/transaction_test_sqlserver.rb
188
+ - test/cases/trigger_test_sqlserver.rb
182
189
  - test/cases/utils_test_sqlserver.rb
183
190
  - test/cases/uuid_test_sqlserver.rb
184
191
  - test/config.yml
185
192
  - test/debug.rb
186
193
  - test/fixtures/1px.gif
194
+ - test/migrations/create_clients_and_change_column_null.rb
187
195
  - test/migrations/transaction_table/1_table_will_never_be_created.rb
188
196
  - test/models/sqlserver/booking.rb
189
197
  - test/models/sqlserver/customers_view.rb
190
198
  - test/models/sqlserver/datatype.rb
191
199
  - test/models/sqlserver/datatype_migration.rb
192
200
  - test/models/sqlserver/dollar_table_name.rb
193
- - test/models/sqlserver/dot_table_name.rb
194
201
  - test/models/sqlserver/edge_schema.rb
195
202
  - test/models/sqlserver/fk_has_fk.rb
196
203
  - test/models/sqlserver/fk_has_pk.rb
@@ -206,6 +213,8 @@ files:
206
213
  - test/models/sqlserver/string_defaults_big_view.rb
207
214
  - test/models/sqlserver/string_defaults_view.rb
208
215
  - test/models/sqlserver/tinyint_pk.rb
216
+ - test/models/sqlserver/trigger.rb
217
+ - test/models/sqlserver/trigger_history.rb
209
218
  - test/models/sqlserver/upper.rb
210
219
  - test/models/sqlserver/uppered.rb
211
220
  - test/models/sqlserver/uuid.rb
@@ -214,6 +223,7 @@ files:
214
223
  - test/schema/sqlserver_specific_schema.rb
215
224
  - test/support/coerceable_test_sqlserver.rb
216
225
  - test/support/connection_reflection.rb
226
+ - test/support/core_ext/query_cache.rb
217
227
  - test/support/load_schema_sqlserver.rb
218
228
  - test/support/minitest_sqlserver.rb
219
229
  - test/support/paths_sqlserver.rb
@@ -246,8 +256,11 @@ summary: ActiveRecord JDBC SQL Server Adapter.
246
256
  test_files:
247
257
  - test/appveyor/dbsetup.ps1
248
258
  - test/appveyor/dbsetup.sql
259
+ - test/bin/install-freetds.sh
260
+ - test/bin/setup.sh
249
261
  - test/bin/wait-for.sh
250
262
  - test/cases/adapter_test_sqlserver.rb
263
+ - test/cases/change_column_null_test_sqlserver.rb
251
264
  - test/cases/coerced_tests.rb
252
265
  - test/cases/column_test_sqlserver.rb
253
266
  - test/cases/connection_test_sqlserver.rb
@@ -267,18 +280,19 @@ test_files:
267
280
  - test/cases/showplan_test_sqlserver.rb
268
281
  - test/cases/specific_schema_test_sqlserver.rb
269
282
  - test/cases/transaction_test_sqlserver.rb
283
+ - test/cases/trigger_test_sqlserver.rb
270
284
  - test/cases/utils_test_sqlserver.rb
271
285
  - test/cases/uuid_test_sqlserver.rb
272
286
  - test/config.yml
273
287
  - test/debug.rb
274
288
  - test/fixtures/1px.gif
289
+ - test/migrations/create_clients_and_change_column_null.rb
275
290
  - test/migrations/transaction_table/1_table_will_never_be_created.rb
276
291
  - test/models/sqlserver/booking.rb
277
292
  - test/models/sqlserver/customers_view.rb
278
293
  - test/models/sqlserver/datatype.rb
279
294
  - test/models/sqlserver/datatype_migration.rb
280
295
  - test/models/sqlserver/dollar_table_name.rb
281
- - test/models/sqlserver/dot_table_name.rb
282
296
  - test/models/sqlserver/edge_schema.rb
283
297
  - test/models/sqlserver/fk_has_fk.rb
284
298
  - test/models/sqlserver/fk_has_pk.rb
@@ -294,6 +308,8 @@ test_files:
294
308
  - test/models/sqlserver/string_defaults_big_view.rb
295
309
  - test/models/sqlserver/string_defaults_view.rb
296
310
  - test/models/sqlserver/tinyint_pk.rb
311
+ - test/models/sqlserver/trigger.rb
312
+ - test/models/sqlserver/trigger_history.rb
297
313
  - test/models/sqlserver/upper.rb
298
314
  - test/models/sqlserver/uppered.rb
299
315
  - test/models/sqlserver/uuid.rb
@@ -302,6 +318,7 @@ test_files:
302
318
  - test/schema/sqlserver_specific_schema.rb
303
319
  - test/support/coerceable_test_sqlserver.rb
304
320
  - test/support/connection_reflection.rb
321
+ - test/support/core_ext/query_cache.rb
305
322
  - test/support/load_schema_sqlserver.rb
306
323
  - test/support/minitest_sqlserver.rb
307
324
  - test/support/paths_sqlserver.rb
@@ -1,5 +0,0 @@
1
-
2
- ## Rails v5.1
3
-
4
- * BIGINT PK support. https://github.com/rails/rails/pull/26266
5
-
@@ -1,3 +0,0 @@
1
- class SSTestDotTableName < ActiveRecord::Base
2
- self.table_name = '[dbo].[some.Name]'
3
- end