activerecord-jdbcsqlserver-adapter 50.0.0 → 52.0.0

Sign up to get free protection for your applications and to get access to all the features.
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