activerecord-sqlserver-adapter 5.2.1 → 6.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.
- checksums.yaml +4 -4
- data/.editorconfig +9 -0
- data/.github/issue_template.md +23 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +29 -0
- data/.travis.yml +6 -8
- data/CHANGELOG.md +38 -24
- data/{Dockerfile → Dockerfile.ci} +1 -1
- data/Gemfile +48 -41
- data/Guardfile +9 -8
- data/README.md +9 -30
- data/RUNNING_UNIT_TESTS.md +3 -0
- data/Rakefile +14 -16
- data/VERSION +1 -1
- data/activerecord-sqlserver-adapter.gemspec +25 -14
- data/appveyor.yml +24 -17
- data/docker-compose.ci.yml +7 -5
- data/guides/RELEASING.md +11 -0
- data/lib/active_record/connection_adapters/sqlserver/core_ext/active_record.rb +2 -4
- data/lib/active_record/connection_adapters/sqlserver/core_ext/attribute_methods.rb +3 -4
- data/lib/active_record/connection_adapters/sqlserver/core_ext/calculations.rb +5 -4
- data/lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb +3 -3
- data/lib/active_record/connection_adapters/sqlserver/core_ext/explain_subscriber.rb +2 -0
- data/lib/active_record/connection_adapters/sqlserver/core_ext/finder_methods.rb +8 -7
- data/lib/active_record/connection_adapters/sqlserver/core_ext/preloader.rb +36 -0
- data/lib/active_record/connection_adapters/sqlserver/core_ext/query_methods.rb +6 -4
- data/lib/active_record/connection_adapters/sqlserver/database_limits.rb +9 -0
- data/lib/active_record/connection_adapters/sqlserver/database_statements.rb +88 -44
- data/lib/active_record/connection_adapters/sqlserver/database_tasks.rb +9 -12
- data/lib/active_record/connection_adapters/sqlserver/errors.rb +2 -3
- data/lib/active_record/connection_adapters/sqlserver/quoting.rb +46 -8
- data/lib/active_record/connection_adapters/sqlserver/schema_creation.rb +16 -5
- data/lib/active_record/connection_adapters/sqlserver/schema_dumper.rb +9 -7
- data/lib/active_record/connection_adapters/sqlserver/schema_statements.rb +190 -164
- data/lib/active_record/connection_adapters/sqlserver/showplan/printer_table.rb +4 -2
- data/lib/active_record/connection_adapters/sqlserver/showplan/printer_xml.rb +3 -1
- data/lib/active_record/connection_adapters/sqlserver/showplan.rb +8 -8
- data/lib/active_record/connection_adapters/sqlserver/sql_type_metadata.rb +2 -2
- data/lib/active_record/connection_adapters/sqlserver/table_definition.rb +43 -44
- data/lib/active_record/connection_adapters/sqlserver/transaction.rb +7 -9
- data/lib/active_record/connection_adapters/sqlserver/type/big_integer.rb +3 -3
- data/lib/active_record/connection_adapters/sqlserver/type/binary.rb +5 -4
- data/lib/active_record/connection_adapters/sqlserver/type/boolean.rb +3 -3
- data/lib/active_record/connection_adapters/sqlserver/type/char.rb +7 -4
- data/lib/active_record/connection_adapters/sqlserver/type/data.rb +2 -2
- data/lib/active_record/connection_adapters/sqlserver/type/date.rb +4 -3
- data/lib/active_record/connection_adapters/sqlserver/type/datetime.rb +8 -8
- data/lib/active_record/connection_adapters/sqlserver/type/datetime2.rb +2 -2
- data/lib/active_record/connection_adapters/sqlserver/type/datetimeoffset.rb +2 -2
- data/lib/active_record/connection_adapters/sqlserver/type/decimal.rb +5 -4
- data/lib/active_record/connection_adapters/sqlserver/type/float.rb +3 -3
- data/lib/active_record/connection_adapters/sqlserver/type/integer.rb +3 -3
- data/lib/active_record/connection_adapters/sqlserver/type/json.rb +2 -1
- data/lib/active_record/connection_adapters/sqlserver/type/money.rb +4 -4
- data/lib/active_record/connection_adapters/sqlserver/type/real.rb +3 -3
- data/lib/active_record/connection_adapters/sqlserver/type/small_integer.rb +3 -3
- data/lib/active_record/connection_adapters/sqlserver/type/small_money.rb +4 -4
- data/lib/active_record/connection_adapters/sqlserver/type/smalldatetime.rb +3 -3
- data/lib/active_record/connection_adapters/sqlserver/type/string.rb +2 -2
- data/lib/active_record/connection_adapters/sqlserver/type/text.rb +3 -3
- data/lib/active_record/connection_adapters/sqlserver/type/time.rb +6 -6
- data/lib/active_record/connection_adapters/sqlserver/type/time_value_fractional.rb +8 -9
- data/lib/active_record/connection_adapters/sqlserver/type/timestamp.rb +3 -3
- data/lib/active_record/connection_adapters/sqlserver/type/tiny_integer.rb +3 -3
- data/lib/active_record/connection_adapters/sqlserver/type/unicode_char.rb +5 -4
- data/lib/active_record/connection_adapters/sqlserver/type/unicode_string.rb +2 -2
- data/lib/active_record/connection_adapters/sqlserver/type/unicode_text.rb +3 -3
- data/lib/active_record/connection_adapters/sqlserver/type/unicode_varchar.rb +6 -5
- data/lib/active_record/connection_adapters/sqlserver/type/unicode_varchar_max.rb +4 -4
- data/lib/active_record/connection_adapters/sqlserver/type/uuid.rb +4 -3
- data/lib/active_record/connection_adapters/sqlserver/type/varbinary.rb +6 -5
- data/lib/active_record/connection_adapters/sqlserver/type/varbinary_max.rb +4 -4
- data/lib/active_record/connection_adapters/sqlserver/type/varchar.rb +6 -5
- data/lib/active_record/connection_adapters/sqlserver/type/varchar_max.rb +4 -4
- data/lib/active_record/connection_adapters/sqlserver/type.rb +37 -35
- data/lib/active_record/connection_adapters/sqlserver/utils.rb +10 -11
- data/lib/active_record/connection_adapters/sqlserver/version.rb +2 -2
- data/lib/active_record/connection_adapters/sqlserver_adapter.rb +128 -92
- data/lib/active_record/connection_adapters/sqlserver_column.rb +9 -5
- data/lib/active_record/sqlserver_base.rb +9 -1
- data/lib/active_record/tasks/sqlserver_database_tasks.rb +28 -32
- data/lib/activerecord-sqlserver-adapter.rb +3 -1
- data/lib/arel/visitors/sqlserver.rb +58 -24
- data/lib/arel_sqlserver.rb +4 -2
- data/test/appveyor/dbsetup.ps1 +4 -4
- data/test/cases/adapter_test_sqlserver.rb +214 -171
- data/test/cases/change_column_null_test_sqlserver.rb +14 -12
- data/test/cases/coerced_tests.rb +631 -356
- data/test/cases/column_test_sqlserver.rb +283 -284
- data/test/cases/connection_test_sqlserver.rb +17 -20
- data/test/cases/execute_procedure_test_sqlserver.rb +20 -20
- data/test/cases/fetch_test_sqlserver.rb +16 -22
- data/test/cases/fully_qualified_identifier_test_sqlserver.rb +15 -19
- data/test/cases/helper_sqlserver.rb +15 -15
- data/test/cases/in_clause_test_sqlserver.rb +36 -0
- data/test/cases/index_test_sqlserver.rb +15 -15
- data/test/cases/json_test_sqlserver.rb +25 -25
- data/test/cases/migration_test_sqlserver.rb +25 -29
- data/test/cases/order_test_sqlserver.rb +53 -54
- data/test/cases/pessimistic_locking_test_sqlserver.rb +27 -33
- data/test/cases/rake_test_sqlserver.rb +33 -45
- data/test/cases/schema_dumper_test_sqlserver.rb +107 -109
- data/test/cases/schema_test_sqlserver.rb +20 -26
- data/test/cases/scratchpad_test_sqlserver.rb +4 -4
- data/test/cases/showplan_test_sqlserver.rb +28 -35
- data/test/cases/specific_schema_test_sqlserver.rb +68 -65
- data/test/cases/transaction_test_sqlserver.rb +18 -20
- data/test/cases/trigger_test_sqlserver.rb +14 -13
- data/test/cases/utils_test_sqlserver.rb +70 -70
- data/test/cases/uuid_test_sqlserver.rb +13 -14
- data/test/debug.rb +8 -6
- data/test/migrations/create_clients_and_change_column_null.rb +3 -1
- data/test/migrations/transaction_table/1_table_will_never_be_created.rb +4 -4
- data/test/models/sqlserver/booking.rb +3 -1
- data/test/models/sqlserver/customers_view.rb +3 -1
- data/test/models/sqlserver/datatype.rb +2 -0
- data/test/models/sqlserver/datatype_migration.rb +2 -0
- data/test/models/sqlserver/dollar_table_name.rb +3 -1
- data/test/models/sqlserver/edge_schema.rb +3 -3
- data/test/models/sqlserver/fk_has_fk.rb +3 -1
- data/test/models/sqlserver/fk_has_pk.rb +3 -1
- data/test/models/sqlserver/natural_pk_data.rb +4 -2
- data/test/models/sqlserver/natural_pk_int_data.rb +3 -1
- data/test/models/sqlserver/no_pk_data.rb +3 -1
- data/test/models/sqlserver/object_default.rb +3 -1
- data/test/models/sqlserver/quoted_table.rb +4 -2
- data/test/models/sqlserver/quoted_view_1.rb +3 -1
- data/test/models/sqlserver/quoted_view_2.rb +3 -1
- data/test/models/sqlserver/sst_memory.rb +3 -1
- data/test/models/sqlserver/string_default.rb +3 -1
- data/test/models/sqlserver/string_defaults_big_view.rb +3 -1
- data/test/models/sqlserver/string_defaults_view.rb +3 -1
- data/test/models/sqlserver/tinyint_pk.rb +3 -1
- data/test/models/sqlserver/trigger.rb +4 -2
- data/test/models/sqlserver/trigger_history.rb +3 -1
- data/test/models/sqlserver/upper.rb +3 -1
- data/test/models/sqlserver/uppered.rb +3 -1
- data/test/models/sqlserver/uuid.rb +3 -1
- data/test/schema/sqlserver_specific_schema.rb +22 -22
- data/test/support/coerceable_test_sqlserver.rb +15 -9
- data/test/support/connection_reflection.rb +3 -2
- data/test/support/core_ext/query_cache.rb +4 -1
- data/test/support/load_schema_sqlserver.rb +5 -5
- data/test/support/minitest_sqlserver.rb +3 -1
- data/test/support/paths_sqlserver.rb +11 -11
- data/test/support/rake_helpers.rb +13 -10
- data/test/support/sql_counter_sqlserver.rb +3 -4
- data/test/support/test_in_memory_oltp.rb +9 -7
- metadata +17 -7
data/test/debug.rb
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# require 'rails/all'
|
|
2
|
-
require
|
|
4
|
+
require "tiny_tds"
|
|
3
5
|
|
|
4
6
|
c = TinyTds::Client.new(
|
|
5
|
-
host: ENV[
|
|
6
|
-
username:
|
|
7
|
-
password: ENV[
|
|
8
|
-
database:
|
|
7
|
+
host: ENV["CI_AZURE_HOST"],
|
|
8
|
+
username: "rails",
|
|
9
|
+
password: ENV["CI_AZURE_PASS"],
|
|
10
|
+
database: "activerecord_unittest",
|
|
9
11
|
azure: true,
|
|
10
|
-
tds_version:
|
|
12
|
+
tds_version: "7.3"
|
|
11
13
|
)
|
|
12
14
|
|
|
13
15
|
puts c.execute("SELECT 1 AS [one]").each
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
class CreateClientsAndChangeColumnNull < ActiveRecord::Migration[5.2]
|
|
2
4
|
def up
|
|
3
5
|
create_table :clients do |t|
|
|
@@ -9,7 +11,7 @@ class CreateClientsAndChangeColumnNull < ActiveRecord::Migration[5.2]
|
|
|
9
11
|
end
|
|
10
12
|
|
|
11
13
|
change_column :clients, :name, :string, limit: 15
|
|
12
|
-
change_column :clients, :code, :string, default:
|
|
14
|
+
change_column :clients, :code, :string, default: "n/a"
|
|
13
15
|
change_column :clients, :value, :decimal, precision: 32, scale: 8
|
|
14
16
|
|
|
15
17
|
change_column_null :clients, :name, false
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
class TableWillNeverBeCreated < ActiveRecord::Migration
|
|
3
4
|
def self.up
|
|
4
|
-
create_table(:sqlserver_trans_table1) {
|
|
5
|
-
create_table(:sqlserver_trans_table2) { raise(
|
|
5
|
+
create_table(:sqlserver_trans_table1) {}
|
|
6
|
+
create_table(:sqlserver_trans_table2) { raise("HELL") }
|
|
6
7
|
end
|
|
7
8
|
|
|
8
9
|
def self.down
|
|
9
10
|
end
|
|
10
|
-
|
|
11
11
|
end
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
class SSTestEdgeSchema < ActiveRecord::Base
|
|
4
|
+
self.table_name = "sst_edge_schemas"
|
|
4
5
|
|
|
5
6
|
def with_spaces
|
|
6
7
|
read_attribute :'with spaces'
|
|
@@ -9,5 +10,4 @@ class SSTestEdgeSchema < ActiveRecord::Base
|
|
|
9
10
|
def with_spaces=(value)
|
|
10
11
|
write_attribute :'with spaces', value
|
|
11
12
|
end
|
|
12
|
-
|
|
13
13
|
end
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
class SSTestQuotedTable < ActiveRecord::Base
|
|
2
|
-
self.table_name =
|
|
4
|
+
self.table_name = "[sst_quoted-table]"
|
|
3
5
|
end
|
|
4
6
|
|
|
5
7
|
class SSTestQuotedTableUser < ActiveRecord::Base
|
|
6
|
-
self.table_name =
|
|
8
|
+
self.table_name = "[dbo].[sst_quoted-table]"
|
|
7
9
|
end
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
class SSTestTrigger < ActiveRecord::Base
|
|
2
|
-
self.table_name =
|
|
4
|
+
self.table_name = "sst_table_with_trigger"
|
|
3
5
|
end
|
|
4
6
|
|
|
5
7
|
class SSTestTriggerUuid < ActiveRecord::Base
|
|
6
|
-
self.table_name =
|
|
8
|
+
self.table_name = "sst_table_with_uuid_trigger"
|
|
7
9
|
end
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
|
|
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[
|
|
47
|
-
create_table
|
|
48
|
-
|
|
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
|
|
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
|
|
62
|
+
create_table "sst_uuids", force: true, id: :uuid do |t|
|
|
62
63
|
t.string :name
|
|
63
|
-
t.uuid :other_uuid, default:
|
|
64
|
+
t.uuid :other_uuid, default: "NEWID()"
|
|
64
65
|
t.uuid :uuid_nil_default, default: nil
|
|
65
66
|
end
|
|
66
67
|
|
|
67
|
-
create_table
|
|
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
|
|
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:
|
|
90
|
-
t.column :string_with_pretend_null_two, :string, default:
|
|
91
|
-
t.column :string_with_pretend_null_three, :string, default:
|
|
92
|
-
t.column :string_with_pretend_null_four, :string, default:
|
|
93
|
-
t.column :string_with_pretend_paren_three, :string, default:
|
|
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
|
|
100
|
-
t.column
|
|
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
|
|
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
|
|
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'"
|
|
@@ -276,5 +277,4 @@ ActiveRecord::Schema.define do
|
|
|
276
277
|
field_2 int NOT NULL PRIMARY KEY,
|
|
277
278
|
)
|
|
278
279
|
SCHEMATESTMULTIPLESCHEMA
|
|
279
|
-
|
|
280
280
|
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(
|
|
34
|
-
|
|
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 =
|
|
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
|
-
|
|
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,
|
|
8
|
+
File.join ARTest::SQLServer.test_root_sqlserver, "schema"
|
|
8
9
|
end
|
|
9
10
|
|
|
10
11
|
def schema_file
|
|
11
|
-
File.join schema_root,
|
|
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,
|
|
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,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,
|
|
12
|
+
File.join root_sqlserver, "test"
|
|
12
13
|
end
|
|
13
14
|
|
|
14
15
|
def root_activerecord
|
|
15
|
-
File.join Gem.loaded_specs[
|
|
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,
|
|
20
|
+
File.join root_activerecord, "lib"
|
|
20
21
|
end
|
|
21
22
|
|
|
22
23
|
def root_activerecord_test
|
|
23
|
-
File.join root_activerecord,
|
|
24
|
+
File.join root_activerecord, "test"
|
|
24
25
|
end
|
|
25
26
|
|
|
26
27
|
def test_load_paths
|
|
27
|
-
[
|
|
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,
|
|
36
|
+
File.join test_root_sqlserver, "migrations"
|
|
36
37
|
end
|
|
37
38
|
|
|
38
39
|
def arconfig_file
|
|
39
|
-
File.join test_root_sqlserver,
|
|
40
|
+
File.join test_root_sqlserver, "config.yml"
|
|
40
41
|
end
|
|
41
42
|
|
|
42
43
|
def arconfig_file_env!
|
|
43
|
-
ENV[
|
|
44
|
+
ENV["ARCONFIG"] = arconfig_file
|
|
44
45
|
end
|
|
45
|
-
|
|
46
46
|
end
|
|
47
47
|
end
|
|
48
48
|
|
|
@@ -1,28 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
|
|
2
|
-
SQLSERVER_HELPER =
|
|
3
|
-
SQLSERVER_COERCED =
|
|
3
|
+
SQLSERVER_HELPER = "test/cases/helper_sqlserver.rb"
|
|
4
|
+
SQLSERVER_COERCED = "test/cases/coerced_tests.rb"
|
|
4
5
|
|
|
5
6
|
def env_ar_test_files
|
|
6
|
-
return unless ENV[
|
|
7
|
+
return unless ENV["TEST_FILES_AR"] && !ENV["TEST_FILES_AR"].empty?
|
|
8
|
+
|
|
7
9
|
@env_ar_test_files ||= begin
|
|
8
|
-
ENV[
|
|
10
|
+
ENV["TEST_FILES_AR"].split(",").map { |file|
|
|
9
11
|
File.join ARTest::SQLServer.root_activerecord, file.strip
|
|
10
12
|
}.sort
|
|
11
13
|
end
|
|
12
14
|
end
|
|
13
15
|
|
|
14
16
|
def env_test_files
|
|
15
|
-
return unless ENV[
|
|
16
|
-
|
|
17
|
+
return unless ENV["TEST_FILES"] && !ENV["TEST_FILES"].empty?
|
|
18
|
+
|
|
19
|
+
@env_test_files ||= ENV["TEST_FILES"].split(",").map(&:strip)
|
|
17
20
|
end
|
|
18
21
|
|
|
19
22
|
def sqlserver_cases
|
|
20
|
-
@sqlserver_cases ||= Dir.glob(
|
|
23
|
+
@sqlserver_cases ||= Dir.glob("test/cases/*_test_sqlserver.rb")
|
|
21
24
|
end
|
|
22
25
|
|
|
23
26
|
def ar_cases
|
|
24
27
|
@ar_cases ||= begin
|
|
25
|
-
Dir.glob("#{ARTest::SQLServer.root_activerecord}/test/cases/**/*_test.rb").reject{ |x| x =~ /\/adapters\// }.sort
|
|
28
|
+
Dir.glob("#{ARTest::SQLServer.root_activerecord}/test/cases/**/*_test.rb").reject { |x| x =~ /\/adapters\// }.sort
|
|
26
29
|
end
|
|
27
30
|
end
|
|
28
31
|
|
|
@@ -31,9 +34,9 @@ def test_files
|
|
|
31
34
|
[SQLSERVER_HELPER] + env_ar_test_files
|
|
32
35
|
elsif env_test_files
|
|
33
36
|
env_test_files
|
|
34
|
-
elsif ENV[
|
|
37
|
+
elsif ENV["ONLY_SQLSERVER"]
|
|
35
38
|
sqlserver_cases
|
|
36
|
-
elsif ENV[
|
|
39
|
+
elsif ENV["ONLY_ACTIVERECORD"]
|
|
37
40
|
[SQLSERVER_HELPER] + (ar_cases + [SQLSERVER_COERCED])
|
|
38
41
|
else
|
|
39
42
|
[SQLSERVER_HELPER] + (ar_cases + [SQLSERVER_COERCED] + sqlserver_cases)
|