activerecord-sqlserver-adapter 5.2.1 → 7.0.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/.github/workflows/ci.yml +29 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +29 -0
- data/CHANGELOG.md +17 -27
- data/{Dockerfile → Dockerfile.ci} +1 -1
- data/Gemfile +49 -41
- data/Guardfile +9 -8
- data/MIT-LICENSE +1 -1
- data/README.md +65 -42
- 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 +22 -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 +5 -4
- data/lib/active_record/connection_adapters/sqlserver/core_ext/calculations.rb +10 -14
- data/lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb +12 -5
- 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 +10 -7
- data/lib/active_record/connection_adapters/sqlserver/core_ext/preloader.rb +30 -0
- data/lib/active_record/connection_adapters/sqlserver/database_limits.rb +9 -4
- data/lib/active_record/connection_adapters/sqlserver/database_statements.rb +117 -52
- 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 +51 -14
- data/lib/active_record/connection_adapters/sqlserver/schema_creation.rb +40 -6
- data/lib/active_record/connection_adapters/sqlserver/schema_dumper.rb +18 -10
- data/lib/active_record/connection_adapters/sqlserver/schema_statements.rb +235 -167
- 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 +36 -7
- data/lib/active_record/connection_adapters/sqlserver/table_definition.rb +43 -45
- data/lib/active_record/connection_adapters/sqlserver/transaction.rb +8 -10
- 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 +5 -3
- data/lib/active_record/connection_adapters/sqlserver/type/date.rb +7 -5
- 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/decimal_without_scale.rb +22 -0
- 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 +38 -35
- data/lib/active_record/connection_adapters/sqlserver/utils.rb +26 -12
- data/lib/active_record/connection_adapters/sqlserver/version.rb +2 -2
- data/lib/active_record/connection_adapters/sqlserver_adapter.rb +271 -180
- data/lib/active_record/connection_adapters/sqlserver_column.rb +76 -16
- data/lib/active_record/sqlserver_base.rb +11 -9
- data/lib/active_record/tasks/sqlserver_database_tasks.rb +38 -39
- data/lib/activerecord-sqlserver-adapter.rb +3 -1
- data/lib/arel/visitors/sqlserver.rb +177 -56
- data/lib/arel_sqlserver.rb +4 -2
- data/test/appveyor/dbsetup.ps1 +4 -4
- data/test/cases/active_schema_test_sqlserver.rb +55 -0
- data/test/cases/adapter_test_sqlserver.rb +258 -173
- data/test/cases/change_column_collation_test_sqlserver.rb +33 -0
- data/test/cases/change_column_null_test_sqlserver.rb +14 -12
- data/test/cases/coerced_tests.rb +1421 -397
- data/test/cases/column_test_sqlserver.rb +321 -315
- data/test/cases/connection_test_sqlserver.rb +17 -20
- data/test/cases/disconnected_test_sqlserver.rb +39 -0
- data/test/cases/eager_load_too_many_ids_test_sqlserver.rb +18 -0
- data/test/cases/execute_procedure_test_sqlserver.rb +28 -19
- data/test/cases/fetch_test_sqlserver.rb +33 -21
- 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 +63 -0
- data/test/cases/index_test_sqlserver.rb +15 -15
- data/test/cases/json_test_sqlserver.rb +25 -25
- data/test/cases/lateral_test_sqlserver.rb +35 -0
- data/test/cases/migration_test_sqlserver.rb +74 -27
- data/test/cases/optimizer_hints_test_sqlserver.rb +72 -0
- data/test/cases/order_test_sqlserver.rb +59 -53
- data/test/cases/pessimistic_locking_test_sqlserver.rb +27 -33
- data/test/cases/primary_keys_test_sqlserver.rb +103 -0
- data/test/cases/rake_test_sqlserver.rb +70 -45
- data/test/cases/schema_dumper_test_sqlserver.rb +124 -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_collation.rb +19 -0
- 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/composite_pk.rb +9 -0
- 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/sst_string_collation.rb +3 -0
- 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 +56 -21
- data/test/support/coerceable_test_sqlserver.rb +19 -13
- 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/marshal_compatibility_fixtures/SQLServer/rails_6_1_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/SQLServer/rails_6_1_topic_associations.dump +0 -0
- data/test/support/minitest_sqlserver.rb +3 -1
- data/test/support/paths_sqlserver.rb +11 -11
- data/test/support/rake_helpers.rb +15 -10
- data/test/support/sql_counter_sqlserver.rb +16 -15
- data/test/support/test_in_memory_oltp.rb +9 -7
- metadata +47 -13
- data/.travis.yml +0 -25
- data/lib/active_record/connection_adapters/sqlserver/core_ext/query_methods.rb +0 -26
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
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class CreateClientsAndChangeColumnCollation < ActiveRecord::Migration[5.2]
|
|
4
|
+
def up
|
|
5
|
+
create_table :clients do |t|
|
|
6
|
+
t.string :name
|
|
7
|
+
t.string :code, collation: :SQL_Latin1_General_CP1_CS_AS
|
|
8
|
+
|
|
9
|
+
t.timestamps
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
change_column :clients, :name, :string, collation: 'SQL_Latin1_General_CP1_CS_AS'
|
|
13
|
+
change_column :clients, :code, :string, collation: 'SQL_Latin1_General_CP1_CI_AS'
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def down
|
|
17
|
+
drop_table :clients
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -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[5.2]
|
|
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,34 @@ 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
|
|
|
98
|
+
create_table :sst_string_collation, collation: :SQL_Latin1_General_CP1_CI_AS, force: true do |t|
|
|
99
|
+
t.string :string_without_collation
|
|
100
|
+
t.varchar :string_default_collation, collation: :SQL_Latin1_General_CP1_CI_AS
|
|
101
|
+
t.varchar :string_with_collation, collation: :SQL_Latin1_General_CP1_CS_AS
|
|
102
|
+
t.varchar :varchar_with_collation, collation: :SQL_Latin1_General_CP1_CS_AS
|
|
103
|
+
end
|
|
104
|
+
|
|
97
105
|
create_table :sst_edge_schemas, force: true do |t|
|
|
98
106
|
t.string :description
|
|
99
|
-
t.column
|
|
100
|
-
t.column
|
|
107
|
+
t.column "crazy]]quote", :string
|
|
108
|
+
t.column "with spaces", :string
|
|
101
109
|
end
|
|
102
110
|
|
|
103
111
|
execute "IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'sst_natural_pk_data') DROP TABLE sst_natural_pk_data"
|
|
@@ -130,7 +138,7 @@ ActiveRecord::Schema.define do
|
|
|
130
138
|
|
|
131
139
|
execute "DROP DEFAULT [sst_getdateobject];" rescue nil
|
|
132
140
|
execute "CREATE DEFAULT [sst_getdateobject] AS getdate();" rescue nil
|
|
133
|
-
create_table
|
|
141
|
+
create_table "sst_defaultobjects", force: true do |t|
|
|
134
142
|
t.string :name
|
|
135
143
|
t.date :date
|
|
136
144
|
end
|
|
@@ -149,7 +157,7 @@ ActiveRecord::Schema.define do
|
|
|
149
157
|
t.column(:fk_id2, :bigint)
|
|
150
158
|
end
|
|
151
159
|
|
|
152
|
-
create_table(:sst_has_pks, force: true) {
|
|
160
|
+
create_table(:sst_has_pks, force: true) {}
|
|
153
161
|
execute <<-ADDFKSQL
|
|
154
162
|
ALTER TABLE sst_has_fks
|
|
155
163
|
ADD CONSTRAINT FK__sst_has_fks_id
|
|
@@ -181,7 +189,7 @@ ActiveRecord::Schema.define do
|
|
|
181
189
|
execute <<-STRINGDEFAULTSBIGVIEW
|
|
182
190
|
CREATE VIEW sst_string_defaults_big_view AS
|
|
183
191
|
SELECT id, string_with_pretend_null_one as pretend_null
|
|
184
|
-
/*#{'x'*4000}}*/
|
|
192
|
+
/*#{'x' * 4000}}*/
|
|
185
193
|
FROM sst_string_defaults
|
|
186
194
|
STRINGDEFAULTSBIGVIEW
|
|
187
195
|
|
|
@@ -226,7 +234,7 @@ ActiveRecord::Schema.define do
|
|
|
226
234
|
# Another schema.
|
|
227
235
|
|
|
228
236
|
create_table :sst_schema_columns, force: true do |t|
|
|
229
|
-
t.column :field1
|
|
237
|
+
t.column :field1, :integer
|
|
230
238
|
end
|
|
231
239
|
|
|
232
240
|
execute "IF NOT EXISTS(SELECT * FROM sys.schemas WHERE name = 'test') EXEC sp_executesql N'CREATE SCHEMA test'"
|
|
@@ -277,4 +285,31 @@ ActiveRecord::Schema.define do
|
|
|
277
285
|
)
|
|
278
286
|
SCHEMATESTMULTIPLESCHEMA
|
|
279
287
|
|
|
288
|
+
execute "IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'unique_key_dumped_table') DROP TABLE unique_key_dumped_table"
|
|
289
|
+
execute <<-SQLSERVERUNIQUEKEYS
|
|
290
|
+
CREATE TABLE unique_key_dumped_table (
|
|
291
|
+
id int IDENTITY(1,1) NOT NULL,
|
|
292
|
+
unique_field int DEFAULT 0 NOT NULL,
|
|
293
|
+
CONSTRAINT IX_UNIQUE_KEY UNIQUE (unique_field),
|
|
294
|
+
CONSTRAINT PK_UNIQUE_KEY PRIMARY KEY (id)
|
|
295
|
+
);
|
|
296
|
+
SQLSERVERUNIQUEKEYS
|
|
297
|
+
|
|
298
|
+
execute "IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'sst_composite_without_identity') DROP TABLE sst_composite_without_identity"
|
|
299
|
+
execute <<-COMPOSITE_WITHOUT_IDENTITY
|
|
300
|
+
CREATE TABLE sst_composite_without_identity (
|
|
301
|
+
pk_col_one int NOT NULL,
|
|
302
|
+
pk_col_two int NOT NULL,
|
|
303
|
+
CONSTRAINT PK_sst_composite_without_identity PRIMARY KEY (pk_col_one, pk_col_two)
|
|
304
|
+
);
|
|
305
|
+
COMPOSITE_WITHOUT_IDENTITY
|
|
306
|
+
|
|
307
|
+
execute "IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'sst_composite_with_identity') DROP TABLE sst_composite_with_identity"
|
|
308
|
+
execute <<-COMPOSITE_WITH_IDENTITY
|
|
309
|
+
CREATE TABLE sst_composite_with_identity (
|
|
310
|
+
pk_col_one int IDENTITY NOT NULL,
|
|
311
|
+
pk_col_two int NOT NULL,
|
|
312
|
+
CONSTRAINT PK_sst_composite_with_identity PRIMARY KEY (pk_col_one, pk_col_two)
|
|
313
|
+
);
|
|
314
|
+
COMPOSITE_WITH_IDENTITY
|
|
280
315
|
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,40 +11,45 @@ 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
|
+
coerced_tests.push(method)
|
|
17
17
|
coerced_test_warning(method)
|
|
18
18
|
end
|
|
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
|
-
STDOUT.puts "🙉 🙈 🙊 Undefined all tests: #{
|
|
27
|
+
STDOUT.puts "🙉 🙈 🙊 Undefined all tests: #{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
|
-
STDOUT.puts "🐳 Unfound coerced test: #{
|
|
46
|
+
STDOUT.puts "🐳 Unfound coerced test: #{name}##{m}"
|
|
39
47
|
else
|
|
40
|
-
STDOUT.puts "🐵 Undefined coerced test: #{
|
|
48
|
+
STDOUT.puts "🐵 Undefined coerced test: #{name}##{m}"
|
|
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
|
|
|
Binary file
|