activerecord-sqlserver-adapter 5.2.1 → 6.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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,29 +1,30 @@
1
- # encoding: UTF-8
2
- require 'cases/helper_sqlserver'
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper_sqlserver"
3
4
 
4
5
  class SQLServerTriggerTest < ActiveRecord::TestCase
5
- after { exclude_output_inserted_table_names.clear }
6
+ after { exclude_output_inserted_table_names.clear }
6
7
 
7
8
  let(:exclude_output_inserted_table_names) do
8
9
  ActiveRecord::ConnectionAdapters::SQLServerAdapter.exclude_output_inserted_table_names
9
10
  end
10
11
 
11
- it 'can insert into a table with output inserted - with a true setting for table name' do
12
- exclude_output_inserted_table_names['sst_table_with_trigger'] = true
12
+ it "can insert into a table with output inserted - with a true setting for table name" do
13
+ exclude_output_inserted_table_names["sst_table_with_trigger"] = true
13
14
  assert SSTestTriggerHistory.all.empty?
14
- obj = SSTestTrigger.create! event_name: 'test trigger'
15
- _(['Fixnum', 'Integer']).must_include obj.id.class.name
16
- _(obj.event_name).must_equal 'test trigger'
15
+ obj = SSTestTrigger.create! event_name: "test trigger"
16
+ _(["Fixnum", "Integer"]).must_include obj.id.class.name
17
+ _(obj.event_name).must_equal "test trigger"
17
18
  _(obj.id).must_be :present?
18
19
  _(obj.id.to_s).must_equal SSTestTriggerHistory.first.id_source
19
20
  end
20
21
 
21
- it 'can insert into a table with output inserted - with a uniqueidentifier value' do
22
- exclude_output_inserted_table_names['sst_table_with_uuid_trigger'] = 'uniqueidentifier'
22
+ it "can insert into a table with output inserted - with a uniqueidentifier value" do
23
+ exclude_output_inserted_table_names["sst_table_with_uuid_trigger"] = "uniqueidentifier"
23
24
  assert SSTestTriggerHistory.all.empty?
24
- obj = SSTestTriggerUuid.create! event_name: 'test uuid trigger'
25
- _(obj.id.class.name).must_equal 'String'
26
- _(obj.event_name).must_equal 'test uuid trigger'
25
+ obj = SSTestTriggerUuid.create! event_name: "test uuid trigger"
26
+ _(obj.id.class.name).must_equal "String"
27
+ _(obj.event_name).must_equal "test uuid trigger"
27
28
  _(obj.id).must_be :present?
28
29
  _(obj.id.to_s).must_equal SSTestTriggerHistory.first.id_source
29
30
  end
@@ -1,59 +1,62 @@
1
- require 'cases/helper_sqlserver'
1
+ # frozen_string_literal: true
2
2
 
3
- class UtilsTestSQLServer < ActiveRecord::TestCase
3
+ require "cases/helper_sqlserver"
4
4
 
5
- it '.quote_string' do
5
+ class UtilsTestSQLServer < ActiveRecord::TestCase
6
+ it ".quote_string" do
6
7
  _(SQLServer::Utils.quote_string("I'll store this in C:\\Users")).must_equal "I''ll store this in C:\\Users"
7
8
  end
8
9
 
9
- it '.unquote_string' do
10
+ it ".unquote_string" do
10
11
  _(SQLServer::Utils.unquote_string("I''ll store this in C:\\Users")).must_equal "I'll store this in C:\\Users"
11
12
  end
12
13
 
13
- it '.quoted_raw' do
14
+ it ".quoted_raw" do
14
15
  _(SQLServer::Utils.quoted_raw("some.Name")).must_equal "[some.Name]"
15
16
  end
16
17
 
17
- describe '.extract_identifiers constructor and thus SQLServer::Utils::Name value object' do
18
-
18
+ describe ".extract_identifiers constructor and thus SQLServer::Utils::Name value object" do
19
19
  let(:valid_names) { valid_names_unquoted + valid_names_quoted }
20
20
 
21
- let(:valid_names_unquoted) {[
22
- 'server.database.schema.object',
23
- 'server.database..object',
24
- 'server..schema.object',
25
- 'server...object',
26
- 'database.schema.object',
27
- 'database..object',
28
- 'schema.object',
29
- 'object'
30
- ]}
31
-
32
- let(:valid_names_quoted) {[
33
- '[server].[database].[schema].[object]',
34
- '[server].[database]..[object]',
35
- '[server]..[schema].[object]',
36
- '[server]...[object]',
37
- '[database].[schema].[object]',
38
- '[database]..[object]',
39
- '[schema].[object]',
40
- '[object]'
41
- ]}
21
+ let(:valid_names_unquoted) {
22
+ [
23
+ "server.database.schema.object",
24
+ "server.database..object",
25
+ "server..schema.object",
26
+ "server...object",
27
+ "database.schema.object",
28
+ "database..object",
29
+ "schema.object",
30
+ "object"
31
+ ]
32
+ }
33
+
34
+ let(:valid_names_quoted) {
35
+ [
36
+ "[server].[database].[schema].[object]",
37
+ "[server].[database]..[object]",
38
+ "[server]..[schema].[object]",
39
+ "[server]...[object]",
40
+ "[database].[schema].[object]",
41
+ "[database]..[object]",
42
+ "[schema].[object]",
43
+ "[object]"
44
+ ]
45
+ }
42
46
 
43
47
  let(:server_names) { valid_names.partition { |name| name =~ /server/ } }
44
48
  let(:database_names) { valid_names.partition { |name| name =~ /database/ } }
45
49
  let(:schema_names) { valid_names.partition { |name| name =~ /schema/ } }
46
50
 
47
- it 'extracts and returns #object identifier unquoted by default or quoted as needed' do
51
+ it "extracts and returns #object identifier unquoted by default or quoted as needed" do
48
52
  valid_names.each do |n|
49
53
  name = extract_identifiers(n)
50
- _(name.object).must_equal 'object', "With #{n.inspect} for #object"
51
- _(name.object_quoted).must_equal '[object]', "With #{n.inspect} for #object_quoted"
54
+ _(name.object).must_equal "object", "With #{n.inspect} for #object"
55
+ _(name.object_quoted).must_equal "[object]", "With #{n.inspect} for #object_quoted"
52
56
  end
53
57
  end
54
58
 
55
59
  [:schema, :database, :server].each do |part|
56
-
57
60
  it "extracts and returns #{part} identifier unquoted by default or quoted as needed" do
58
61
  present, blank = send(:"#{part}_names")
59
62
  present.each do |n|
@@ -67,57 +70,55 @@ class UtilsTestSQLServer < ActiveRecord::TestCase
67
70
  _(name.send(:"#{part}_quoted")).must_be_nil "With #{n.inspect} for ##{part}_quoted method"
68
71
  end
69
72
  end
70
-
71
73
  end
72
74
 
73
- it 'does not blow up on nil or blank string name' do
75
+ it "does not blow up on nil or blank string name" do
74
76
  _(extract_identifiers(nil).object).must_be_nil
75
- _(extract_identifiers(' ').object).must_be_nil
77
+ _(extract_identifiers(" ").object).must_be_nil
76
78
  end
77
79
 
78
- it 'has a #quoted that returns a fully quoted name with all identifiers as orginially passed in' do
79
- _(extract_identifiers('object').quoted).must_equal '[object]'
80
- _(extract_identifiers('server.database..object').quoted).must_equal '[server].[database]..[object]'
81
- _(extract_identifiers('[server]...[object]').quoted).must_equal '[server]...[object]'
80
+ it "has a #quoted that returns a fully quoted name with all identifiers as orginially passed in" do
81
+ _(extract_identifiers("object").quoted).must_equal "[object]"
82
+ _(extract_identifiers("server.database..object").quoted).must_equal "[server].[database]..[object]"
83
+ _(extract_identifiers("[server]...[object]").quoted).must_equal "[server]...[object]"
82
84
  end
83
85
 
84
- it 'can take a symbol argument' do
85
- _(extract_identifiers(:object).object).must_equal 'object'
86
+ it "can take a symbol argument" do
87
+ _(extract_identifiers(:object).object).must_equal "object"
86
88
  end
87
89
 
88
- it 'allows identifiers with periods to work' do
89
- _(extract_identifiers('[obj.name]').quoted).must_equal '[obj.name]'
90
- _(extract_identifiers('[obj.name].[foo]').quoted).must_equal '[obj.name].[foo]'
90
+ it "allows identifiers with periods to work" do
91
+ _(extract_identifiers("[obj.name]").quoted).must_equal "[obj.name]"
92
+ _(extract_identifiers("[obj.name].[foo]").quoted).must_equal "[obj.name].[foo]"
91
93
  end
92
94
 
93
- it 'should indicate if a name is fully qualitified' do
94
- _(extract_identifiers('object').fully_qualified?).must_equal false
95
- _(extract_identifiers('schema.object').fully_qualified?).must_equal false
96
- _(extract_identifiers('database.schema.object').fully_qualified?).must_equal false
97
- _(extract_identifiers('database.object').fully_qualified?).must_equal false
98
- _(extract_identifiers('server...object').fully_qualified?).must_equal false
99
- _(extract_identifiers('server.database..object').fully_qualified?).must_equal false
100
- _(extract_identifiers('server.database.schema.object').fully_qualified?).must_equal true
101
- _(extract_identifiers('server.database.schema.').fully_qualified?).must_equal true
102
- _(extract_identifiers('[obj.name]').fully_qualified?).must_equal false
103
- _(extract_identifiers('[schema].[obj.name]').fully_qualified?).must_equal false
104
- _(extract_identifiers('[database].[schema].[obj.name]').fully_qualified?).must_equal false
105
- _(extract_identifiers('[database].[obj.name]').fully_qualified?).must_equal false
106
- _(extract_identifiers('[server.name]...[obj.name]').fully_qualified?).must_equal false
107
- _(extract_identifiers('[server.name].[database]..[obj.name]').fully_qualified?).must_equal false
108
- _(extract_identifiers('[server.name].[database].[schema].[obj.name]').fully_qualified?).must_equal true
109
- _(extract_identifiers('[server.name].[database].[schema].').fully_qualified?).must_equal true
95
+ it "should indicate if a name is fully qualitified" do
96
+ _(extract_identifiers("object").fully_qualified?).must_equal false
97
+ _(extract_identifiers("schema.object").fully_qualified?).must_equal false
98
+ _(extract_identifiers("database.schema.object").fully_qualified?).must_equal false
99
+ _(extract_identifiers("database.object").fully_qualified?).must_equal false
100
+ _(extract_identifiers("server...object").fully_qualified?).must_equal false
101
+ _(extract_identifiers("server.database..object").fully_qualified?).must_equal false
102
+ _(extract_identifiers("server.database.schema.object").fully_qualified?).must_equal true
103
+ _(extract_identifiers("server.database.schema.").fully_qualified?).must_equal true
104
+ _(extract_identifiers("[obj.name]").fully_qualified?).must_equal false
105
+ _(extract_identifiers("[schema].[obj.name]").fully_qualified?).must_equal false
106
+ _(extract_identifiers("[database].[schema].[obj.name]").fully_qualified?).must_equal false
107
+ _(extract_identifiers("[database].[obj.name]").fully_qualified?).must_equal false
108
+ _(extract_identifiers("[server.name]...[obj.name]").fully_qualified?).must_equal false
109
+ _(extract_identifiers("[server.name].[database]..[obj.name]").fully_qualified?).must_equal false
110
+ _(extract_identifiers("[server.name].[database].[schema].[obj.name]").fully_qualified?).must_equal true
111
+ _(extract_identifiers("[server.name].[database].[schema].").fully_qualified?).must_equal true
110
112
  end
111
113
 
112
- it 'can return fully qualified quoted table name' do
113
- name = extract_identifiers('[my.server].db.schema.')
114
- _(name.fully_qualified_database_quoted).must_equal '[my.server].[db]'
115
- name = extract_identifiers('[server.name].[database].[schema].[object]')
116
- _(name.fully_qualified_database_quoted).must_equal '[server.name].[database]'
117
- name = extract_identifiers('server.database.schema.object')
118
- _(name.fully_qualified_database_quoted).must_equal '[server].[database]'
114
+ it "can return fully qualified quoted table name" do
115
+ name = extract_identifiers("[my.server].db.schema.")
116
+ _(name.fully_qualified_database_quoted).must_equal "[my.server].[db]"
117
+ name = extract_identifiers("[server.name].[database].[schema].[object]")
118
+ _(name.fully_qualified_database_quoted).must_equal "[server.name].[database]"
119
+ name = extract_identifiers("server.database.schema.object")
120
+ _(name.fully_qualified_database_quoted).must_equal "[server].[database]"
119
121
  end
120
-
121
122
  end
122
123
 
123
124
  private
@@ -125,5 +126,4 @@ class UtilsTestSQLServer < ActiveRecord::TestCase
125
126
  def extract_identifiers(name)
126
127
  SQLServer::Utils.extract_identifiers(name)
127
128
  end
128
-
129
129
  end
@@ -1,47 +1,46 @@
1
- # encoding: UTF-8
2
- require 'cases/helper_sqlserver'
1
+ # frozen_string_literal: true
3
2
 
4
- class SQLServerUuidTest < ActiveRecord::TestCase
3
+ require "cases/helper_sqlserver"
5
4
 
5
+ class SQLServerUuidTest < ActiveRecord::TestCase
6
6
  let(:acceptable_uuid) { ActiveRecord::ConnectionAdapters::SQLServer::Type::Uuid::ACCEPTABLE_UUID }
7
7
 
8
- it 'has a uuid primary key' do
9
- _(SSTestUuid.columns_hash['id'].type).must_equal :uuid
8
+ it "has a uuid primary key" do
9
+ _(SSTestUuid.columns_hash["id"].type).must_equal :uuid
10
10
  assert SSTestUuid.primary_key
11
11
  end
12
12
 
13
- it 'can create with a new pk' do
13
+ it "can create with a new pk" do
14
14
  obj = SSTestUuid.create!
15
15
  _(obj.id).must_be :present?
16
16
  _(obj.id).must_match acceptable_uuid
17
17
  end
18
18
 
19
- it 'can create other uuid column on reload' do
19
+ it "can create other uuid column on reload" do
20
20
  obj = SSTestUuid.create!
21
21
  obj.reload
22
22
  _(obj.other_uuid).must_match acceptable_uuid
23
23
  end
24
24
 
25
- it 'can find uuid pk via connection' do
26
- _(connection.primary_key(SSTestUuid.table_name)).must_equal 'id'
25
+ it "can find uuid pk via connection" do
26
+ _(connection.primary_key(SSTestUuid.table_name)).must_equal "id"
27
27
  end
28
28
 
29
- it 'changing column default' do
29
+ it "changing column default" do
30
30
  table_name = SSTestUuid.table_name
31
31
  connection.add_column table_name, :thingy, :uuid, null: false, default: "NEWSEQUENTIALID()"
32
32
  SSTestUuid.reset_column_information
33
- column = SSTestUuid.columns_hash['thingy']
33
+ column = SSTestUuid.columns_hash["thingy"]
34
34
  _(column.default_function).must_equal "newsequentialid()"
35
35
  # Now to a different function.
36
36
  connection.change_column table_name, :thingy, :uuid, null: false, default: "NEWID()"
37
37
  SSTestUuid.reset_column_information
38
- column = SSTestUuid.columns_hash['thingy']
38
+ column = SSTestUuid.columns_hash["thingy"]
39
39
  _(column.default_function).must_equal "newid()"
40
40
  end
41
41
 
42
- it 'can insert even when use_output_inserted to false ' do
42
+ it "can insert even when use_output_inserted to false " do
43
43
  obj = with_use_output_inserted_disabled { SSTestUuid.create!(name: "😢") }
44
44
  _(obj.id).must_be :nil?
45
45
  end
46
-
47
46
  end
data/test/debug.rb CHANGED
@@ -1,13 +1,15 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # require 'rails/all'
2
- require 'tiny_tds'
4
+ require "tiny_tds"
3
5
 
4
6
  c = TinyTds::Client.new(
5
- host: ENV['CI_AZURE_HOST'],
6
- username: 'rails',
7
- password: ENV['CI_AZURE_PASS'],
8
- database: 'activerecord_unittest',
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: '7.3'
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: 'n/a'
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
- class TableWillNeverBeCreated < ActiveRecord::Migration
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('HELL') }
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,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class SSTestBooking < ActiveRecord::Base
2
- self.table_name = 'sst_bookings'
4
+ self.table_name = "sst_bookings"
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class SSTestCustomersView < ActiveRecord::Base
2
- self.table_name = 'sst_customers_view'
4
+ self.table_name = "sst_customers_view"
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class SSTestDatatype < ActiveRecord::Base
2
4
  self.table_name = :sst_datatypes
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class SSTestDatatypeMigration < ActiveRecord::Base
2
4
  self.table_name = :sst_datatypes_migration
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class SSTestDollarTableName < ActiveRecord::Base
2
- self.table_name = 'sst_my$strange_table'
4
+ self.table_name = "sst_my$strange_table"
3
5
  end
@@ -1,6 +1,7 @@
1
- class SSTestEdgeSchema < ActiveRecord::Base
1
+ # frozen_string_literal: true
2
2
 
3
- self.table_name = 'sst_edge_schemas'
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,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class SSTestHasFk < ActiveRecord::Base
2
- self.table_name = 'sst_has_fks'
4
+ self.table_name = "sst_has_fks"
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class SSTestHasPk < ActiveRecord::Base
2
- self.table_name = 'sst_has_pks'
4
+ self.table_name = "sst_has_pks"
3
5
  end
@@ -1,4 +1,6 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class SSTestNaturalPkData < ActiveRecord::Base
2
- self.table_name = 'sst_natural_pk_data'
3
- self.primary_key = 'legacy_id'
4
+ self.table_name = "sst_natural_pk_data"
5
+ self.primary_key = "legacy_id"
4
6
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class SSTestNaturalPkIntData < ActiveRecord::Base
2
- self.table_name = 'sst_natural_pk_int_data'
4
+ self.table_name = "sst_natural_pk_int_data"
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class SSTestNoPkData < ActiveRecord::Base
2
- self.table_name = 'sst_no_pk_data'
4
+ self.table_name = "sst_no_pk_data"
3
5
  end