activerecord-sqlserver-adapter 5.2.1 → 6.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (153) hide show
  1. checksums.yaml +4 -4
  2. data/.editorconfig +9 -0
  3. data/.github/issue_template.md +23 -0
  4. data/.github/workflows/ci.yml +26 -0
  5. data/.gitignore +1 -0
  6. data/.rubocop.yml +29 -0
  7. data/CHANGELOG.md +58 -20
  8. data/{Dockerfile → Dockerfile.ci} +1 -1
  9. data/Gemfile +48 -41
  10. data/Guardfile +9 -8
  11. data/README.md +28 -31
  12. data/RUNNING_UNIT_TESTS.md +3 -0
  13. data/Rakefile +14 -16
  14. data/VERSION +1 -1
  15. data/activerecord-sqlserver-adapter.gemspec +25 -14
  16. data/appveyor.yml +24 -17
  17. data/docker-compose.ci.yml +7 -5
  18. data/guides/RELEASING.md +11 -0
  19. data/lib/active_record/connection_adapters/sqlserver/core_ext/active_record.rb +2 -4
  20. data/lib/active_record/connection_adapters/sqlserver/core_ext/attribute_methods.rb +3 -4
  21. data/lib/active_record/connection_adapters/sqlserver/core_ext/calculations.rb +5 -4
  22. data/lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb +3 -3
  23. data/lib/active_record/connection_adapters/sqlserver/core_ext/explain_subscriber.rb +2 -0
  24. data/lib/active_record/connection_adapters/sqlserver/core_ext/finder_methods.rb +8 -7
  25. data/lib/active_record/connection_adapters/sqlserver/core_ext/preloader.rb +36 -0
  26. data/lib/active_record/connection_adapters/sqlserver/core_ext/query_methods.rb +6 -4
  27. data/lib/active_record/connection_adapters/sqlserver/database_limits.rb +9 -0
  28. data/lib/active_record/connection_adapters/sqlserver/database_statements.rb +88 -44
  29. data/lib/active_record/connection_adapters/sqlserver/database_tasks.rb +9 -12
  30. data/lib/active_record/connection_adapters/sqlserver/errors.rb +2 -3
  31. data/lib/active_record/connection_adapters/sqlserver/quoting.rb +46 -8
  32. data/lib/active_record/connection_adapters/sqlserver/schema_creation.rb +16 -5
  33. data/lib/active_record/connection_adapters/sqlserver/schema_dumper.rb +9 -7
  34. data/lib/active_record/connection_adapters/sqlserver/schema_statements.rb +210 -163
  35. data/lib/active_record/connection_adapters/sqlserver/showplan.rb +8 -8
  36. data/lib/active_record/connection_adapters/sqlserver/showplan/printer_table.rb +4 -2
  37. data/lib/active_record/connection_adapters/sqlserver/showplan/printer_xml.rb +3 -1
  38. data/lib/active_record/connection_adapters/sqlserver/sql_type_metadata.rb +2 -2
  39. data/lib/active_record/connection_adapters/sqlserver/table_definition.rb +43 -44
  40. data/lib/active_record/connection_adapters/sqlserver/transaction.rb +7 -9
  41. data/lib/active_record/connection_adapters/sqlserver/type.rb +38 -35
  42. data/lib/active_record/connection_adapters/sqlserver/type/big_integer.rb +3 -3
  43. data/lib/active_record/connection_adapters/sqlserver/type/binary.rb +5 -4
  44. data/lib/active_record/connection_adapters/sqlserver/type/boolean.rb +3 -3
  45. data/lib/active_record/connection_adapters/sqlserver/type/char.rb +7 -4
  46. data/lib/active_record/connection_adapters/sqlserver/type/data.rb +2 -2
  47. data/lib/active_record/connection_adapters/sqlserver/type/date.rb +4 -3
  48. data/lib/active_record/connection_adapters/sqlserver/type/datetime.rb +8 -8
  49. data/lib/active_record/connection_adapters/sqlserver/type/datetime2.rb +2 -2
  50. data/lib/active_record/connection_adapters/sqlserver/type/datetimeoffset.rb +2 -2
  51. data/lib/active_record/connection_adapters/sqlserver/type/decimal.rb +5 -4
  52. data/lib/active_record/connection_adapters/sqlserver/type/decimal_without_scale.rb +22 -0
  53. data/lib/active_record/connection_adapters/sqlserver/type/float.rb +3 -3
  54. data/lib/active_record/connection_adapters/sqlserver/type/integer.rb +3 -3
  55. data/lib/active_record/connection_adapters/sqlserver/type/json.rb +2 -1
  56. data/lib/active_record/connection_adapters/sqlserver/type/money.rb +4 -4
  57. data/lib/active_record/connection_adapters/sqlserver/type/real.rb +3 -3
  58. data/lib/active_record/connection_adapters/sqlserver/type/small_integer.rb +3 -3
  59. data/lib/active_record/connection_adapters/sqlserver/type/small_money.rb +4 -4
  60. data/lib/active_record/connection_adapters/sqlserver/type/smalldatetime.rb +3 -3
  61. data/lib/active_record/connection_adapters/sqlserver/type/string.rb +2 -2
  62. data/lib/active_record/connection_adapters/sqlserver/type/text.rb +3 -3
  63. data/lib/active_record/connection_adapters/sqlserver/type/time.rb +6 -6
  64. data/lib/active_record/connection_adapters/sqlserver/type/time_value_fractional.rb +8 -9
  65. data/lib/active_record/connection_adapters/sqlserver/type/timestamp.rb +3 -3
  66. data/lib/active_record/connection_adapters/sqlserver/type/tiny_integer.rb +3 -3
  67. data/lib/active_record/connection_adapters/sqlserver/type/unicode_char.rb +5 -4
  68. data/lib/active_record/connection_adapters/sqlserver/type/unicode_string.rb +2 -2
  69. data/lib/active_record/connection_adapters/sqlserver/type/unicode_text.rb +3 -3
  70. data/lib/active_record/connection_adapters/sqlserver/type/unicode_varchar.rb +6 -5
  71. data/lib/active_record/connection_adapters/sqlserver/type/unicode_varchar_max.rb +4 -4
  72. data/lib/active_record/connection_adapters/sqlserver/type/uuid.rb +4 -3
  73. data/lib/active_record/connection_adapters/sqlserver/type/varbinary.rb +6 -5
  74. data/lib/active_record/connection_adapters/sqlserver/type/varbinary_max.rb +4 -4
  75. data/lib/active_record/connection_adapters/sqlserver/type/varchar.rb +6 -5
  76. data/lib/active_record/connection_adapters/sqlserver/type/varchar_max.rb +4 -4
  77. data/lib/active_record/connection_adapters/sqlserver/utils.rb +10 -11
  78. data/lib/active_record/connection_adapters/sqlserver/version.rb +2 -2
  79. data/lib/active_record/connection_adapters/sqlserver_adapter.rb +145 -94
  80. data/lib/active_record/connection_adapters/sqlserver_column.rb +9 -5
  81. data/lib/active_record/sqlserver_base.rb +9 -1
  82. data/lib/active_record/tasks/sqlserver_database_tasks.rb +28 -32
  83. data/lib/activerecord-sqlserver-adapter.rb +3 -1
  84. data/lib/arel/visitors/sqlserver.rb +108 -34
  85. data/lib/arel_sqlserver.rb +4 -2
  86. data/test/appveyor/dbsetup.ps1 +4 -4
  87. data/test/cases/adapter_test_sqlserver.rb +246 -171
  88. data/test/cases/change_column_null_test_sqlserver.rb +14 -12
  89. data/test/cases/coerced_tests.rb +722 -381
  90. data/test/cases/column_test_sqlserver.rb +287 -285
  91. data/test/cases/connection_test_sqlserver.rb +17 -20
  92. data/test/cases/execute_procedure_test_sqlserver.rb +20 -20
  93. data/test/cases/fetch_test_sqlserver.rb +16 -22
  94. data/test/cases/fully_qualified_identifier_test_sqlserver.rb +15 -19
  95. data/test/cases/helper_sqlserver.rb +15 -15
  96. data/test/cases/in_clause_test_sqlserver.rb +36 -0
  97. data/test/cases/index_test_sqlserver.rb +15 -15
  98. data/test/cases/json_test_sqlserver.rb +25 -25
  99. data/test/cases/lateral_test_sqlserver.rb +35 -0
  100. data/test/cases/migration_test_sqlserver.rb +67 -27
  101. data/test/cases/optimizer_hints_test_sqlserver.rb +72 -0
  102. data/test/cases/order_test_sqlserver.rb +53 -54
  103. data/test/cases/pessimistic_locking_test_sqlserver.rb +27 -33
  104. data/test/cases/rake_test_sqlserver.rb +33 -45
  105. data/test/cases/schema_dumper_test_sqlserver.rb +115 -109
  106. data/test/cases/schema_test_sqlserver.rb +20 -26
  107. data/test/cases/scratchpad_test_sqlserver.rb +4 -4
  108. data/test/cases/showplan_test_sqlserver.rb +28 -35
  109. data/test/cases/specific_schema_test_sqlserver.rb +68 -65
  110. data/test/cases/transaction_test_sqlserver.rb +18 -20
  111. data/test/cases/trigger_test_sqlserver.rb +14 -13
  112. data/test/cases/utils_test_sqlserver.rb +70 -70
  113. data/test/cases/uuid_test_sqlserver.rb +13 -14
  114. data/test/debug.rb +8 -6
  115. data/test/migrations/create_clients_and_change_column_null.rb +3 -1
  116. data/test/migrations/transaction_table/1_table_will_never_be_created.rb +4 -4
  117. data/test/models/sqlserver/booking.rb +3 -1
  118. data/test/models/sqlserver/customers_view.rb +3 -1
  119. data/test/models/sqlserver/datatype.rb +2 -0
  120. data/test/models/sqlserver/datatype_migration.rb +2 -0
  121. data/test/models/sqlserver/dollar_table_name.rb +3 -1
  122. data/test/models/sqlserver/edge_schema.rb +3 -3
  123. data/test/models/sqlserver/fk_has_fk.rb +3 -1
  124. data/test/models/sqlserver/fk_has_pk.rb +3 -1
  125. data/test/models/sqlserver/natural_pk_data.rb +4 -2
  126. data/test/models/sqlserver/natural_pk_int_data.rb +3 -1
  127. data/test/models/sqlserver/no_pk_data.rb +3 -1
  128. data/test/models/sqlserver/object_default.rb +3 -1
  129. data/test/models/sqlserver/quoted_table.rb +4 -2
  130. data/test/models/sqlserver/quoted_view_1.rb +3 -1
  131. data/test/models/sqlserver/quoted_view_2.rb +3 -1
  132. data/test/models/sqlserver/sst_memory.rb +3 -1
  133. data/test/models/sqlserver/string_default.rb +3 -1
  134. data/test/models/sqlserver/string_defaults_big_view.rb +3 -1
  135. data/test/models/sqlserver/string_defaults_view.rb +3 -1
  136. data/test/models/sqlserver/tinyint_pk.rb +3 -1
  137. data/test/models/sqlserver/trigger.rb +4 -2
  138. data/test/models/sqlserver/trigger_history.rb +3 -1
  139. data/test/models/sqlserver/upper.rb +3 -1
  140. data/test/models/sqlserver/uppered.rb +3 -1
  141. data/test/models/sqlserver/uuid.rb +3 -1
  142. data/test/schema/sqlserver_specific_schema.rb +31 -21
  143. data/test/support/coerceable_test_sqlserver.rb +15 -9
  144. data/test/support/connection_reflection.rb +3 -2
  145. data/test/support/core_ext/query_cache.rb +4 -1
  146. data/test/support/load_schema_sqlserver.rb +5 -5
  147. data/test/support/minitest_sqlserver.rb +3 -1
  148. data/test/support/paths_sqlserver.rb +11 -11
  149. data/test/support/rake_helpers.rb +13 -10
  150. data/test/support/sql_counter_sqlserver.rb +3 -4
  151. data/test/support/test_in_memory_oltp.rb +9 -7
  152. metadata +27 -12
  153. data/.travis.yml +0 -25
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class SSTestObjectDefault < ActiveRecord::Base
2
- self.table_name = 'sst_defaultobjects'
4
+ self.table_name = "sst_defaultobjects"
3
5
  end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class SSTestQuotedTable < ActiveRecord::Base
2
- self.table_name = '[sst_quoted-table]'
4
+ self.table_name = "[sst_quoted-table]"
3
5
  end
4
6
 
5
7
  class SSTestQuotedTableUser < ActiveRecord::Base
6
- self.table_name = '[dbo].[sst_quoted-table]'
8
+ self.table_name = "[dbo].[sst_quoted-table]"
7
9
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class SSTestQuotedView1 < ActiveRecord::Base
2
- self.table_name = 'sst_quoted-view1'
4
+ self.table_name = "sst_quoted-view1"
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class SSTestQuotedView2 < ActiveRecord::Base
2
- self.table_name = 'sst_quoted-view2'
4
+ self.table_name = "sst_quoted-view2"
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class SSTMemory < ActiveRecord::Base
2
- self.table_name = 'sst_memory'
4
+ self.table_name = "sst_memory"
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class SSTestStringDefault < ActiveRecord::Base
2
- self.table_name = 'sst_string_defaults'
4
+ self.table_name = "sst_string_defaults"
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class SSTestStringDefaultsBigView < ActiveRecord::Base
2
- self.table_name = 'sst_string_defaults_big_view'
4
+ self.table_name = "sst_string_defaults_big_view"
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class SSTestStringDefaultsView < ActiveRecord::Base
2
- self.table_name = 'sst_string_defaults_view'
4
+ self.table_name = "sst_string_defaults_view"
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class SSTestTinyintPk < ActiveRecord::Base
2
- self.table_name = 'sst_tinyint_pk'
4
+ self.table_name = "sst_tinyint_pk"
3
5
  end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class SSTestTrigger < ActiveRecord::Base
2
- self.table_name = 'sst_table_with_trigger'
4
+ self.table_name = "sst_table_with_trigger"
3
5
  end
4
6
 
5
7
  class SSTestTriggerUuid < ActiveRecord::Base
6
- self.table_name = 'sst_table_with_uuid_trigger'
8
+ self.table_name = "sst_table_with_uuid_trigger"
7
9
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class SSTestTriggerHistory < ActiveRecord::Base
2
- self.table_name = 'sst_table_with_trigger_history'
4
+ self.table_name = "sst_table_with_trigger_history"
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class SSTestUpper < ActiveRecord::Base
2
- self.table_name = 'sst_upper_tests'
4
+ self.table_name = "sst_upper_tests"
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class SSTestUppered < ActiveRecord::Base
2
- self.table_name = 'SST_UPPER_TESTS'
4
+ self.table_name = "SST_UPPER_TESTS"
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class SSTestUuid < ActiveRecord::Base
2
- self.table_name = 'sst_uuids'
4
+ self.table_name = "sst_uuids"
3
5
  end
@@ -1,5 +1,6 @@
1
- ActiveRecord::Schema.define do
1
+ # frozen_string_literal: true
2
2
 
3
+ ActiveRecord::Schema.define do
3
4
  # Exhaustive Data Types
4
5
 
5
6
  execute File.read(ARTest::SQLServer.schema_datatypes_2012_file)
@@ -43,28 +44,28 @@ ActiveRecord::Schema.define do
43
44
 
44
45
  # Edge Cases
45
46
 
46
- if ENV['IN_MEMORY_OLTP'] && supports_in_memory_oltp?
47
- create_table 'sst_memory', force: true, id: false,
48
- options: 'WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA)' do |t|
47
+ if ENV["IN_MEMORY_OLTP"] && supports_in_memory_oltp?
48
+ create_table "sst_memory", force: true, id: false,
49
+ options: "WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA)" do |t|
49
50
  t.primary_key_nonclustered :id
50
51
  t.string :name
51
52
  t.timestamps
52
53
  end
53
54
  end
54
55
 
55
- create_table 'sst_bookings', force: true do |t|
56
+ create_table "sst_bookings", force: true do |t|
56
57
  t.string :name
57
58
  t.datetime2 :created_at, null: false
58
59
  t.datetime2 :updated_at, null: false
59
60
  end
60
61
 
61
- create_table 'sst_uuids', force: true, id: :uuid do |t|
62
+ create_table "sst_uuids", force: true, id: :uuid do |t|
62
63
  t.string :name
63
- t.uuid :other_uuid, default: 'NEWID()'
64
+ t.uuid :other_uuid, default: "NEWID()"
64
65
  t.uuid :uuid_nil_default, default: nil
65
66
  end
66
67
 
67
- create_table 'sst_my$strange_table', force: true do |t|
68
+ create_table "sst_my$strange_table", force: true do |t|
68
69
  t.string :name
69
70
  end
70
71
 
@@ -77,27 +78,27 @@ ActiveRecord::Schema.define do
77
78
  t.string :name
78
79
  end
79
80
 
80
- create_table 'sst_quoted-table', force: true do |t|
81
+ create_table "sst_quoted-table", force: true do |t|
81
82
  end
82
83
  execute "IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'sst_quoted-view1') DROP VIEW [sst_quoted-view1]"
83
84
  execute "CREATE VIEW [sst_quoted-view1] AS SELECT * FROM [sst_quoted-table]"
84
85
  execute "IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'sst_quoted-view2') DROP VIEW [sst_quoted-view2]"
85
- execute "CREATE VIEW [sst_quoted-view2] AS \n /*#{'x'*4000}}*/ \n SELECT * FROM [sst_quoted-table]"
86
+ execute "CREATE VIEW [sst_quoted-view2] AS \n /*#{'x' * 4000}}*/ \n SELECT * FROM [sst_quoted-table]"
86
87
 
87
88
  create_table :sst_string_defaults, force: true do |t|
88
89
  t.column :string_with_null_default, :string, default: nil
89
- t.column :string_with_pretend_null_one, :string, default: 'null'
90
- t.column :string_with_pretend_null_two, :string, default: '(null)'
91
- t.column :string_with_pretend_null_three, :string, default: 'NULL'
92
- t.column :string_with_pretend_null_four, :string, default: '(NULL)'
93
- t.column :string_with_pretend_paren_three, :string, default: '(3)'
90
+ t.column :string_with_pretend_null_one, :string, default: "null"
91
+ t.column :string_with_pretend_null_two, :string, default: "(null)"
92
+ t.column :string_with_pretend_null_three, :string, default: "NULL"
93
+ t.column :string_with_pretend_null_four, :string, default: "(NULL)"
94
+ t.column :string_with_pretend_paren_three, :string, default: "(3)"
94
95
  t.column :string_with_multiline_default, :string, default: "Some long default with a\nnew line."
95
96
  end
96
97
 
97
98
  create_table :sst_edge_schemas, force: true do |t|
98
99
  t.string :description
99
- t.column 'crazy]]quote', :string
100
- t.column 'with spaces', :string
100
+ t.column "crazy]]quote", :string
101
+ t.column "with spaces", :string
101
102
  end
102
103
 
103
104
  execute "IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'sst_natural_pk_data') DROP TABLE sst_natural_pk_data"
@@ -130,7 +131,7 @@ ActiveRecord::Schema.define do
130
131
 
131
132
  execute "DROP DEFAULT [sst_getdateobject];" rescue nil
132
133
  execute "CREATE DEFAULT [sst_getdateobject] AS getdate();" rescue nil
133
- create_table 'sst_defaultobjects', force: true do |t|
134
+ create_table "sst_defaultobjects", force: true do |t|
134
135
  t.string :name
135
136
  t.date :date
136
137
  end
@@ -149,7 +150,7 @@ ActiveRecord::Schema.define do
149
150
  t.column(:fk_id2, :bigint)
150
151
  end
151
152
 
152
- create_table(:sst_has_pks, force: true) { }
153
+ create_table(:sst_has_pks, force: true) {}
153
154
  execute <<-ADDFKSQL
154
155
  ALTER TABLE sst_has_fks
155
156
  ADD CONSTRAINT FK__sst_has_fks_id
@@ -181,7 +182,7 @@ ActiveRecord::Schema.define do
181
182
  execute <<-STRINGDEFAULTSBIGVIEW
182
183
  CREATE VIEW sst_string_defaults_big_view AS
183
184
  SELECT id, string_with_pretend_null_one as pretend_null
184
- /*#{'x'*4000}}*/
185
+ /*#{'x' * 4000}}*/
185
186
  FROM sst_string_defaults
186
187
  STRINGDEFAULTSBIGVIEW
187
188
 
@@ -226,7 +227,7 @@ ActiveRecord::Schema.define do
226
227
  # Another schema.
227
228
 
228
229
  create_table :sst_schema_columns, force: true do |t|
229
- t.column :field1 , :integer
230
+ t.column :field1, :integer
230
231
  end
231
232
 
232
233
  execute "IF NOT EXISTS(SELECT * FROM sys.schemas WHERE name = 'test') EXEC sp_executesql N'CREATE SCHEMA test'"
@@ -277,4 +278,13 @@ ActiveRecord::Schema.define do
277
278
  )
278
279
  SCHEMATESTMULTIPLESCHEMA
279
280
 
281
+ execute "IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'unique_key_dumped_table') DROP TABLE unique_key_dumped_table"
282
+ execute <<-SQLSERVERUNIQUEKEYS
283
+ CREATE TABLE unique_key_dumped_table (
284
+ id int IDENTITY(1,1) NOT NULL,
285
+ unique_field int DEFAULT 0 NOT NULL,
286
+ CONSTRAINT IX_UNIQUE_KEY UNIQUE (unique_field),
287
+ CONSTRAINT PK_UNIQUE_KEY PRIMARY KEY (id)
288
+ );
289
+ SQLSERVERUNIQUEKEYS
280
290
  end
@@ -1,7 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ARTest
2
4
  module SQLServer
3
5
  module CoerceableTest
4
-
5
6
  extend ActiveSupport::Concern
6
7
 
7
8
  included do
@@ -10,7 +11,6 @@ module ARTest
10
11
  end
11
12
 
12
13
  module ClassMethods
13
-
14
14
  def coerce_tests!(*methods)
15
15
  methods.each do |method|
16
16
  self.coerced_tests.push(method)
@@ -19,21 +19,29 @@ module ARTest
19
19
  end
20
20
 
21
21
  def coerce_all_tests!
22
- once = false
23
22
  instance_methods(false).each do |method|
24
23
  next unless method.to_s =~ /\Atest/
24
+
25
25
  undef_method(method)
26
- once = true
27
26
  end
28
27
  STDOUT.puts "🙉 🙈 🙊 Undefined all tests: #{self.name}"
29
28
  end
30
29
 
31
30
  private
32
31
 
33
- def coerced_test_warning(method)
34
- method = instance_methods(false).select { |m| m =~ method } if method.is_a?(Regexp)
32
+ def coerced_test_warning(test_to_coerce)
33
+ if test_to_coerce.is_a?(Regexp)
34
+ method = instance_methods(false).select { |m| m =~ test_to_coerce }
35
+ else
36
+ method = test_to_coerce
37
+ end
38
+
35
39
  Array(method).each do |m|
36
- result = undef_method(m) if m && method_defined?(m)
40
+ result = if m && method_defined?(m)
41
+ alias_method("original_#{test_to_coerce.inspect.tr('/\:"', '')}", m)
42
+ undef_method(m)
43
+ end
44
+
37
45
  if result.blank?
38
46
  STDOUT.puts "🐳 Unfound coerced test: #{self.name}##{m}"
39
47
  else
@@ -41,9 +49,7 @@ module ARTest
41
49
  end
42
50
  end
43
51
  end
44
-
45
52
  end
46
-
47
53
  end
48
54
  end
49
55
  end
@@ -1,7 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ARTest
2
4
  module SQLServer
3
5
  module ConnectionReflection
4
-
5
6
  extend ActiveSupport::Concern
6
7
 
7
8
  included { extend ConnectionReflection }
@@ -20,6 +21,7 @@ module ARTest
20
21
 
21
22
  def connection_dblib_73?
22
23
  return false unless connection_dblib?
24
+
23
25
  rc = connection.raw_connection
24
26
  rc.respond_to?(:tds_73?) && rc.tds_73?
25
27
  end
@@ -27,7 +29,6 @@ module ARTest
27
29
  def connection_sqlserver_azure?
28
30
  connection.sqlserver_azure?
29
31
  end
30
-
31
32
  end
32
33
  end
33
34
  end
@@ -1,10 +1,13 @@
1
- require 'active_record/connection_adapters/sqlserver_adapter'
1
+ # frozen_string_literal: true
2
+
3
+ require "active_record/connection_adapters/sqlserver_adapter"
2
4
 
3
5
  module SqlIgnoredCache
4
6
  extend ActiveSupport::Concern
5
7
 
6
8
  IGNORED_SQL = [
7
9
  /INFORMATION_SCHEMA\.(TABLES|VIEWS|COLUMNS|KEY_COLUMN_USAGE)/im,
10
+ /sys.columns/i,
8
11
  /SELECT @@version/,
9
12
  /SELECT @@TRANCOUNT/,
10
13
  /(BEGIN|COMMIT|ROLLBACK|SAVE) TRANSACTION/,
@@ -1,18 +1,19 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ARTest
2
4
  module SQLServer
3
-
4
5
  extend self
5
6
 
6
7
  def schema_root
7
- File.join ARTest::SQLServer.test_root_sqlserver, 'schema'
8
+ File.join ARTest::SQLServer.test_root_sqlserver, "schema"
8
9
  end
9
10
 
10
11
  def schema_file
11
- File.join schema_root, 'sqlserver_specific_schema.rb'
12
+ File.join schema_root, "sqlserver_specific_schema.rb"
12
13
  end
13
14
 
14
15
  def schema_datatypes_2012_file
15
- File.join schema_root, 'datatypes', '2012.sql'
16
+ File.join schema_root, "datatypes", "2012.sql"
16
17
  end
17
18
 
18
19
  def load_schema
@@ -22,7 +23,6 @@ module ARTest
22
23
  ensure
23
24
  $stdout = original_stdout
24
25
  end
25
-
26
26
  end
27
27
  end
28
28
 
@@ -1 +1,3 @@
1
- require 'minitest-spec-rails/init/active_support'
1
+ # frozen_string_literal: true
2
+
3
+ require "minitest-spec-rails/init/active_support"
@@ -1,30 +1,31 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ARTest
2
4
  module SQLServer
3
-
4
5
  extend self
5
6
 
6
7
  def root_sqlserver
7
- File.expand_path File.join(File.dirname(__FILE__), '..', '..')
8
+ File.expand_path File.join(File.dirname(__FILE__), "..", "..")
8
9
  end
9
10
 
10
11
  def test_root_sqlserver
11
- File.join root_sqlserver, 'test'
12
+ File.join root_sqlserver, "test"
12
13
  end
13
14
 
14
15
  def root_activerecord
15
- File.join Gem.loaded_specs['rails'].full_gem_path, 'activerecord'
16
+ File.join Gem.loaded_specs["rails"].full_gem_path, "activerecord"
16
17
  end
17
18
 
18
19
  def root_activerecord_lib
19
- File.join root_activerecord, 'lib'
20
+ File.join root_activerecord, "lib"
20
21
  end
21
22
 
22
23
  def root_activerecord_test
23
- File.join root_activerecord, 'test'
24
+ File.join root_activerecord, "test"
24
25
  end
25
26
 
26
27
  def test_load_paths
27
- ['lib', 'test', root_activerecord_lib, root_activerecord_test]
28
+ ["lib", "test", root_activerecord_lib, root_activerecord_test]
28
29
  end
29
30
 
30
31
  def add_to_load_paths!
@@ -32,17 +33,16 @@ module ARTest
32
33
  end
33
34
 
34
35
  def migrations_root
35
- File.join test_root_sqlserver, 'migrations'
36
+ File.join test_root_sqlserver, "migrations"
36
37
  end
37
38
 
38
39
  def arconfig_file
39
- File.join test_root_sqlserver, 'config.yml'
40
+ File.join test_root_sqlserver, "config.yml"
40
41
  end
41
42
 
42
43
  def arconfig_file_env!
43
- ENV['ARCONFIG'] = arconfig_file
44
+ ENV["ARCONFIG"] = arconfig_file
44
45
  end
45
-
46
46
  end
47
47
  end
48
48