activerecord-sqlserver-adapter 5.2.1 → 6.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (149) hide show
  1. checksums.yaml +4 -4
  2. data/.editorconfig +9 -0
  3. data/.github/issue_template.md +23 -0
  4. data/.gitignore +1 -0
  5. data/.rubocop.yml +29 -0
  6. data/.travis.yml +6 -8
  7. data/CHANGELOG.md +38 -24
  8. data/{Dockerfile → Dockerfile.ci} +1 -1
  9. data/Gemfile +48 -41
  10. data/Guardfile +9 -8
  11. data/README.md +9 -30
  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 +190 -164
  35. data/lib/active_record/connection_adapters/sqlserver/showplan/printer_table.rb +4 -2
  36. data/lib/active_record/connection_adapters/sqlserver/showplan/printer_xml.rb +3 -1
  37. data/lib/active_record/connection_adapters/sqlserver/showplan.rb +8 -8
  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/big_integer.rb +3 -3
  42. data/lib/active_record/connection_adapters/sqlserver/type/binary.rb +5 -4
  43. data/lib/active_record/connection_adapters/sqlserver/type/boolean.rb +3 -3
  44. data/lib/active_record/connection_adapters/sqlserver/type/char.rb +7 -4
  45. data/lib/active_record/connection_adapters/sqlserver/type/data.rb +2 -2
  46. data/lib/active_record/connection_adapters/sqlserver/type/date.rb +4 -3
  47. data/lib/active_record/connection_adapters/sqlserver/type/datetime.rb +8 -8
  48. data/lib/active_record/connection_adapters/sqlserver/type/datetime2.rb +2 -2
  49. data/lib/active_record/connection_adapters/sqlserver/type/datetimeoffset.rb +2 -2
  50. data/lib/active_record/connection_adapters/sqlserver/type/decimal.rb +5 -4
  51. data/lib/active_record/connection_adapters/sqlserver/type/float.rb +3 -3
  52. data/lib/active_record/connection_adapters/sqlserver/type/integer.rb +3 -3
  53. data/lib/active_record/connection_adapters/sqlserver/type/json.rb +2 -1
  54. data/lib/active_record/connection_adapters/sqlserver/type/money.rb +4 -4
  55. data/lib/active_record/connection_adapters/sqlserver/type/real.rb +3 -3
  56. data/lib/active_record/connection_adapters/sqlserver/type/small_integer.rb +3 -3
  57. data/lib/active_record/connection_adapters/sqlserver/type/small_money.rb +4 -4
  58. data/lib/active_record/connection_adapters/sqlserver/type/smalldatetime.rb +3 -3
  59. data/lib/active_record/connection_adapters/sqlserver/type/string.rb +2 -2
  60. data/lib/active_record/connection_adapters/sqlserver/type/text.rb +3 -3
  61. data/lib/active_record/connection_adapters/sqlserver/type/time.rb +6 -6
  62. data/lib/active_record/connection_adapters/sqlserver/type/time_value_fractional.rb +8 -9
  63. data/lib/active_record/connection_adapters/sqlserver/type/timestamp.rb +3 -3
  64. data/lib/active_record/connection_adapters/sqlserver/type/tiny_integer.rb +3 -3
  65. data/lib/active_record/connection_adapters/sqlserver/type/unicode_char.rb +5 -4
  66. data/lib/active_record/connection_adapters/sqlserver/type/unicode_string.rb +2 -2
  67. data/lib/active_record/connection_adapters/sqlserver/type/unicode_text.rb +3 -3
  68. data/lib/active_record/connection_adapters/sqlserver/type/unicode_varchar.rb +6 -5
  69. data/lib/active_record/connection_adapters/sqlserver/type/unicode_varchar_max.rb +4 -4
  70. data/lib/active_record/connection_adapters/sqlserver/type/uuid.rb +4 -3
  71. data/lib/active_record/connection_adapters/sqlserver/type/varbinary.rb +6 -5
  72. data/lib/active_record/connection_adapters/sqlserver/type/varbinary_max.rb +4 -4
  73. data/lib/active_record/connection_adapters/sqlserver/type/varchar.rb +6 -5
  74. data/lib/active_record/connection_adapters/sqlserver/type/varchar_max.rb +4 -4
  75. data/lib/active_record/connection_adapters/sqlserver/type.rb +37 -35
  76. data/lib/active_record/connection_adapters/sqlserver/utils.rb +10 -11
  77. data/lib/active_record/connection_adapters/sqlserver/version.rb +2 -2
  78. data/lib/active_record/connection_adapters/sqlserver_adapter.rb +128 -92
  79. data/lib/active_record/connection_adapters/sqlserver_column.rb +9 -5
  80. data/lib/active_record/sqlserver_base.rb +9 -1
  81. data/lib/active_record/tasks/sqlserver_database_tasks.rb +28 -32
  82. data/lib/activerecord-sqlserver-adapter.rb +3 -1
  83. data/lib/arel/visitors/sqlserver.rb +58 -24
  84. data/lib/arel_sqlserver.rb +4 -2
  85. data/test/appveyor/dbsetup.ps1 +4 -4
  86. data/test/cases/adapter_test_sqlserver.rb +214 -171
  87. data/test/cases/change_column_null_test_sqlserver.rb +14 -12
  88. data/test/cases/coerced_tests.rb +631 -356
  89. data/test/cases/column_test_sqlserver.rb +283 -284
  90. data/test/cases/connection_test_sqlserver.rb +17 -20
  91. data/test/cases/execute_procedure_test_sqlserver.rb +20 -20
  92. data/test/cases/fetch_test_sqlserver.rb +16 -22
  93. data/test/cases/fully_qualified_identifier_test_sqlserver.rb +15 -19
  94. data/test/cases/helper_sqlserver.rb +15 -15
  95. data/test/cases/in_clause_test_sqlserver.rb +36 -0
  96. data/test/cases/index_test_sqlserver.rb +15 -15
  97. data/test/cases/json_test_sqlserver.rb +25 -25
  98. data/test/cases/migration_test_sqlserver.rb +25 -29
  99. data/test/cases/order_test_sqlserver.rb +53 -54
  100. data/test/cases/pessimistic_locking_test_sqlserver.rb +27 -33
  101. data/test/cases/rake_test_sqlserver.rb +33 -45
  102. data/test/cases/schema_dumper_test_sqlserver.rb +107 -109
  103. data/test/cases/schema_test_sqlserver.rb +20 -26
  104. data/test/cases/scratchpad_test_sqlserver.rb +4 -4
  105. data/test/cases/showplan_test_sqlserver.rb +28 -35
  106. data/test/cases/specific_schema_test_sqlserver.rb +68 -65
  107. data/test/cases/transaction_test_sqlserver.rb +18 -20
  108. data/test/cases/trigger_test_sqlserver.rb +14 -13
  109. data/test/cases/utils_test_sqlserver.rb +70 -70
  110. data/test/cases/uuid_test_sqlserver.rb +13 -14
  111. data/test/debug.rb +8 -6
  112. data/test/migrations/create_clients_and_change_column_null.rb +3 -1
  113. data/test/migrations/transaction_table/1_table_will_never_be_created.rb +4 -4
  114. data/test/models/sqlserver/booking.rb +3 -1
  115. data/test/models/sqlserver/customers_view.rb +3 -1
  116. data/test/models/sqlserver/datatype.rb +2 -0
  117. data/test/models/sqlserver/datatype_migration.rb +2 -0
  118. data/test/models/sqlserver/dollar_table_name.rb +3 -1
  119. data/test/models/sqlserver/edge_schema.rb +3 -3
  120. data/test/models/sqlserver/fk_has_fk.rb +3 -1
  121. data/test/models/sqlserver/fk_has_pk.rb +3 -1
  122. data/test/models/sqlserver/natural_pk_data.rb +4 -2
  123. data/test/models/sqlserver/natural_pk_int_data.rb +3 -1
  124. data/test/models/sqlserver/no_pk_data.rb +3 -1
  125. data/test/models/sqlserver/object_default.rb +3 -1
  126. data/test/models/sqlserver/quoted_table.rb +4 -2
  127. data/test/models/sqlserver/quoted_view_1.rb +3 -1
  128. data/test/models/sqlserver/quoted_view_2.rb +3 -1
  129. data/test/models/sqlserver/sst_memory.rb +3 -1
  130. data/test/models/sqlserver/string_default.rb +3 -1
  131. data/test/models/sqlserver/string_defaults_big_view.rb +3 -1
  132. data/test/models/sqlserver/string_defaults_view.rb +3 -1
  133. data/test/models/sqlserver/tinyint_pk.rb +3 -1
  134. data/test/models/sqlserver/trigger.rb +4 -2
  135. data/test/models/sqlserver/trigger_history.rb +3 -1
  136. data/test/models/sqlserver/upper.rb +3 -1
  137. data/test/models/sqlserver/uppered.rb +3 -1
  138. data/test/models/sqlserver/uuid.rb +3 -1
  139. data/test/schema/sqlserver_specific_schema.rb +22 -22
  140. data/test/support/coerceable_test_sqlserver.rb +15 -9
  141. data/test/support/connection_reflection.rb +3 -2
  142. data/test/support/core_ext/query_cache.rb +4 -1
  143. data/test/support/load_schema_sqlserver.rb +5 -5
  144. data/test/support/minitest_sqlserver.rb +3 -1
  145. data/test/support/paths_sqlserver.rb +11 -11
  146. data/test/support/rake_helpers.rb +13 -10
  147. data/test/support/sql_counter_sqlserver.rb +3 -4
  148. data/test/support/test_in_memory_oltp.rb +9 -7
  149. metadata +17 -7
@@ -1,15 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveRecord
2
4
  module ConnectionAdapters
3
5
  module SQLServer
4
6
  module Type
5
7
  class SmallDateTime < DateTime
6
-
7
8
  def type
8
9
  :smalldatetime
9
10
  end
10
11
 
11
12
  def sqlserver_type
12
- 'smalldatetime'.freeze
13
+ "smalldatetime"
13
14
  end
14
15
 
15
16
  private
@@ -21,7 +22,6 @@ module ActiveRecord
21
22
  def apply_seconds_precision(value)
22
23
  value.change usec: 0 if value
23
24
  end
24
-
25
25
  end
26
26
  end
27
27
  end
@@ -1,9 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveRecord
2
4
  module ConnectionAdapters
3
5
  module SQLServer
4
6
  module Type
5
7
  class String < ActiveRecord::Type::String
6
-
7
8
  def changed_in_place?(raw_old_value, new_value)
8
9
  if raw_old_value.is_a?(Data)
9
10
  raw_old_value.value != new_value
@@ -11,7 +12,6 @@ module ActiveRecord
11
12
  super
12
13
  end
13
14
  end
14
-
15
15
  end
16
16
  end
17
17
  end
@@ -1,17 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveRecord
2
4
  module ConnectionAdapters
3
5
  module SQLServer
4
6
  module Type
5
7
  class Text < VarcharMax
6
-
7
8
  def type
8
9
  :text_basic
9
10
  end
10
11
 
11
12
  def sqlserver_type
12
- 'text'.freeze
13
+ "text"
13
14
  end
14
-
15
15
  end
16
16
  end
17
17
  end
@@ -1,18 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveRecord
2
4
  module ConnectionAdapters
3
5
  module SQLServer
4
6
  module Type
5
7
  class Time < ActiveRecord::Type::Time
6
-
7
8
  include TimeValueFractional2
8
9
 
9
10
  def serialize(value)
10
11
  value = super
11
12
  return value unless value.acts_like?(:time)
12
- time = value.to_s(:_sqlserver_time).tap do |v|
13
- fraction = quote_fractional(value)
14
- v << ".#{fraction}"
15
- end
13
+
14
+ time = "#{value.to_s(:_sqlserver_time)}.#{quote_fractional(value)}"
15
+
16
16
  Data.new time, self
17
17
  end
18
18
 
@@ -37,6 +37,7 @@ module ActiveRecord
37
37
  def cast_value(value)
38
38
  value = super
39
39
  return if value.blank?
40
+
40
41
  value = value.change year: 2000, month: 01, day: 01
41
42
  apply_seconds_precision(value)
42
43
  end
@@ -44,7 +45,6 @@ module ActiveRecord
44
45
  def fractional_scale
45
46
  precision
46
47
  end
47
-
48
48
  end
49
49
  end
50
50
  end
@@ -1,19 +1,21 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveRecord
2
4
  module ConnectionAdapters
3
5
  module SQLServer
4
6
  module Type
5
-
6
7
  module TimeValueFractional
7
-
8
8
  private
9
9
 
10
10
  def apply_seconds_precision(value)
11
11
  return value if !value.respond_to?(fractional_property) || value.send(fractional_property).zero?
12
+
12
13
  value.change fractional_property => seconds_precision(value)
13
14
  end
14
15
 
15
16
  def seconds_precision(value)
16
17
  return 0 if fractional_scale == 0
18
+
17
19
  seconds = value.send(fractional_property).to_f / fractional_operator.to_f
18
20
  seconds = ((seconds * (1 / fractional_precision)).round / (1 / fractional_precision)).round(fractional_scale)
19
21
  (seconds * fractional_operator).round(0).to_i
@@ -21,9 +23,10 @@ module ActiveRecord
21
23
 
22
24
  def quote_fractional(value)
23
25
  return 0 if fractional_scale == 0
26
+
24
27
  frac_seconds = seconds_precision(value)
25
28
  seconds = (frac_seconds.to_f / fractional_operator.to_f).round(fractional_scale)
26
- seconds.to_d.to_s.split('.').last.to(fractional_scale-1)
29
+ seconds.to_d.to_s.split(".").last.to(fractional_scale - 1)
27
30
  end
28
31
 
29
32
  def fractional_property
@@ -35,7 +38,7 @@ module ActiveRecord
35
38
  end
36
39
 
37
40
  def fractional_operator
38
- 10 ** fractional_digits
41
+ 10**fractional_digits
39
42
  end
40
43
 
41
44
  def fractional_precision
@@ -45,11 +48,9 @@ module ActiveRecord
45
48
  def fractional_scale
46
49
  3
47
50
  end
48
-
49
51
  end
50
52
 
51
53
  module TimeValueFractional2
52
-
53
54
  include TimeValueFractional
54
55
 
55
56
  private
@@ -80,11 +81,9 @@ module ActiveRecord
80
81
  end
81
82
 
82
83
  def fractional_scale_max
83
- ('9' * fractional_scale) + ('0' * (fractional_digits - fractional_scale))
84
+ ("9" * fractional_scale) + ("0" * (fractional_digits - fractional_scale))
84
85
  end
85
-
86
86
  end
87
-
88
87
  end
89
88
  end
90
89
  end
@@ -1,17 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveRecord
2
4
  module ConnectionAdapters
3
5
  module SQLServer
4
6
  module Type
5
7
  class Timestamp < Binary
6
-
7
8
  def type
8
9
  :ss_timestamp
9
10
  end
10
11
 
11
12
  def sqlserver_type
12
- 'timestamp'.freeze
13
+ "timestamp"
13
14
  end
14
-
15
15
  end
16
16
  end
17
17
  end
@@ -1,11 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveRecord
2
4
  module ConnectionAdapters
3
5
  module SQLServer
4
6
  module Type
5
7
  class TinyInteger < Integer
6
-
7
8
  def sqlserver_type
8
- 'tinyint'.freeze
9
+ "tinyint"
9
10
  end
10
11
 
11
12
  private
@@ -17,7 +18,6 @@ module ActiveRecord
17
18
  def min_value
18
19
  0
19
20
  end
20
-
21
21
  end
22
22
  end
23
23
  end
@@ -1,19 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveRecord
2
4
  module ConnectionAdapters
3
5
  module SQLServer
4
6
  module Type
5
7
  class UnicodeChar < UnicodeString
6
-
7
8
  def type
8
9
  :nchar
9
10
  end
10
11
 
11
12
  def sqlserver_type
12
- 'nchar'.tap do |type|
13
- type << "(#{limit})" if limit
13
+ "nchar".yield_self do |type|
14
+ type += "(#{limit})" if limit
15
+ type
14
16
  end
15
17
  end
16
-
17
18
  end
18
19
  end
19
20
  end
@@ -1,10 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveRecord
2
4
  module ConnectionAdapters
3
5
  module SQLServer
4
6
  module Type
5
7
  class UnicodeString < String
6
-
7
-
8
8
  end
9
9
  end
10
10
  end
@@ -1,17 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveRecord
2
4
  module ConnectionAdapters
3
5
  module SQLServer
4
6
  module Type
5
7
  class UnicodeText < UnicodeVarcharMax
6
-
7
8
  def type
8
9
  :ntext
9
10
  end
10
11
 
11
12
  def sqlserver_type
12
- 'ntext'.freeze
13
+ "ntext"
13
14
  end
14
-
15
15
  end
16
16
  end
17
17
  end
@@ -1,10 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveRecord
2
4
  module ConnectionAdapters
3
5
  module SQLServer
4
6
  module Type
5
7
  class UnicodeVarchar < UnicodeChar
6
-
7
- def initialize(*args)
8
+ def initialize(**args)
8
9
  super
9
10
  @limit = 4000 if @limit.to_i == 0
10
11
  end
@@ -14,11 +15,11 @@ module ActiveRecord
14
15
  end
15
16
 
16
17
  def sqlserver_type
17
- 'nvarchar'.tap do |type|
18
- type << "(#{limit})" if limit
18
+ "nvarchar".yield_self do |type|
19
+ type += "(#{limit})" if limit
20
+ type
19
21
  end
20
22
  end
21
-
22
23
  end
23
24
  end
24
25
  end
@@ -1,10 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveRecord
2
4
  module ConnectionAdapters
3
5
  module SQLServer
4
6
  module Type
5
7
  class UnicodeVarcharMax < UnicodeVarchar
6
-
7
- def initialize(*args)
8
+ def initialize(**args)
8
9
  super
9
10
  @limit = 2_147_483_647
10
11
  end
@@ -14,9 +15,8 @@ module ActiveRecord
14
15
  end
15
16
 
16
17
  def sqlserver_type
17
- 'nvarchar(max)'.freeze
18
+ "nvarchar(max)"
18
19
  end
19
-
20
20
  end
21
21
  end
22
22
  end
@@ -1,9 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveRecord
2
4
  module ConnectionAdapters
3
5
  module SQLServer
4
6
  module Type
5
7
  class Uuid < String
6
-
7
8
  ACCEPTABLE_UUID = %r{\A\{?([a-fA-F0-9]{4}-?){8}\}?\z}x
8
9
 
9
10
  alias_method :serialize, :deserialize
@@ -13,11 +14,12 @@ module ActiveRecord
13
14
  end
14
15
 
15
16
  def sqlserver_type
16
- 'uniqueidentifier'.freeze
17
+ "uniqueidentifier"
17
18
  end
18
19
 
19
20
  def serialize(value)
20
21
  return unless value
22
+
21
23
  Data.new super, self
22
24
  end
23
25
 
@@ -28,7 +30,6 @@ module ActiveRecord
28
30
  def quoted(value)
29
31
  Utils.quote_string_single(value) if value
30
32
  end
31
-
32
33
  end
33
34
  end
34
35
  end
@@ -1,10 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveRecord
2
4
  module ConnectionAdapters
3
5
  module SQLServer
4
6
  module Type
5
7
  class Varbinary < Binary
6
-
7
- def initialize(*args)
8
+ def initialize(**args)
8
9
  super
9
10
  @limit = 8000 if @limit.to_i == 0
10
11
  end
@@ -14,11 +15,11 @@ module ActiveRecord
14
15
  end
15
16
 
16
17
  def sqlserver_type
17
- 'varbinary'.tap do |type|
18
- type << "(#{limit})" if limit
18
+ "varbinary".yield_self do |type|
19
+ type += "(#{limit})" if limit
20
+ type
19
21
  end
20
22
  end
21
-
22
23
  end
23
24
  end
24
25
  end
@@ -1,10 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveRecord
2
4
  module ConnectionAdapters
3
5
  module SQLServer
4
6
  module Type
5
7
  class VarbinaryMax < Varbinary
6
-
7
- def initialize(*args)
8
+ def initialize(**args)
8
9
  super
9
10
  @limit = 2_147_483_647
10
11
  end
@@ -14,9 +15,8 @@ module ActiveRecord
14
15
  end
15
16
 
16
17
  def sqlserver_type
17
- 'varbinary(max)'.freeze
18
+ "varbinary(max)"
18
19
  end
19
-
20
20
  end
21
21
  end
22
22
  end
@@ -1,10 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveRecord
2
4
  module ConnectionAdapters
3
5
  module SQLServer
4
6
  module Type
5
7
  class Varchar < Char
6
-
7
- def initialize(*args)
8
+ def initialize(**args)
8
9
  super
9
10
  @limit = 8000 if @limit.to_i == 0
10
11
  end
@@ -14,11 +15,11 @@ module ActiveRecord
14
15
  end
15
16
 
16
17
  def sqlserver_type
17
- 'varchar'.tap do |type|
18
- type << "(#{limit})" if limit
18
+ "varchar".yield_self do |type|
19
+ type += "(#{limit})" if limit
20
+ type
19
21
  end
20
22
  end
21
-
22
23
  end
23
24
  end
24
25
  end
@@ -1,10 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveRecord
2
4
  module ConnectionAdapters
3
5
  module SQLServer
4
6
  module Type
5
7
  class VarcharMax < Varchar
6
-
7
- def initialize(*args)
8
+ def initialize(**args)
8
9
  super
9
10
  @limit = 2_147_483_647
10
11
  end
@@ -14,9 +15,8 @@ module ActiveRecord
14
15
  end
15
16
 
16
17
  def sqlserver_type
17
- 'varchar(max)'.freeze
18
+ "varchar(max)"
18
19
  end
19
-
20
20
  end
21
21
  end
22
22
  end
@@ -1,46 +1,48 @@
1
- require 'active_record/type'
1
+ # frozen_string_literal: true
2
+
3
+ require "active_record/type"
2
4
  # Behaviors
3
- require 'active_record/connection_adapters/sqlserver/type/data'
4
- require 'active_record/connection_adapters/sqlserver/type/time_value_fractional'
5
+ require "active_record/connection_adapters/sqlserver/type/data"
6
+ require "active_record/connection_adapters/sqlserver/type/time_value_fractional"
5
7
  # Exact Numerics
6
- require 'active_record/connection_adapters/sqlserver/type/integer'
7
- require 'active_record/connection_adapters/sqlserver/type/big_integer'
8
- require 'active_record/connection_adapters/sqlserver/type/small_integer'
9
- require 'active_record/connection_adapters/sqlserver/type/tiny_integer'
10
- require 'active_record/connection_adapters/sqlserver/type/boolean'
11
- require 'active_record/connection_adapters/sqlserver/type/decimal'
12
- require 'active_record/connection_adapters/sqlserver/type/money'
13
- require 'active_record/connection_adapters/sqlserver/type/small_money'
8
+ require "active_record/connection_adapters/sqlserver/type/integer"
9
+ require "active_record/connection_adapters/sqlserver/type/big_integer"
10
+ require "active_record/connection_adapters/sqlserver/type/small_integer"
11
+ require "active_record/connection_adapters/sqlserver/type/tiny_integer"
12
+ require "active_record/connection_adapters/sqlserver/type/boolean"
13
+ require "active_record/connection_adapters/sqlserver/type/decimal"
14
+ require "active_record/connection_adapters/sqlserver/type/money"
15
+ require "active_record/connection_adapters/sqlserver/type/small_money"
14
16
  # Approximate Numerics
15
- require 'active_record/connection_adapters/sqlserver/type/float'
16
- require 'active_record/connection_adapters/sqlserver/type/real'
17
+ require "active_record/connection_adapters/sqlserver/type/float"
18
+ require "active_record/connection_adapters/sqlserver/type/real"
17
19
  # Date and Time
18
- require 'active_record/connection_adapters/sqlserver/type/date'
19
- require 'active_record/connection_adapters/sqlserver/type/datetime'
20
- require 'active_record/connection_adapters/sqlserver/type/datetime2'
21
- require 'active_record/connection_adapters/sqlserver/type/datetimeoffset'
22
- require 'active_record/connection_adapters/sqlserver/type/smalldatetime'
23
- require 'active_record/connection_adapters/sqlserver/type/time'
20
+ require "active_record/connection_adapters/sqlserver/type/date"
21
+ require "active_record/connection_adapters/sqlserver/type/datetime"
22
+ require "active_record/connection_adapters/sqlserver/type/datetime2"
23
+ require "active_record/connection_adapters/sqlserver/type/datetimeoffset"
24
+ require "active_record/connection_adapters/sqlserver/type/smalldatetime"
25
+ require "active_record/connection_adapters/sqlserver/type/time"
24
26
  # Character Strings
25
- require 'active_record/connection_adapters/sqlserver/type/string'
26
- require 'active_record/connection_adapters/sqlserver/type/char'
27
- require 'active_record/connection_adapters/sqlserver/type/varchar'
28
- require 'active_record/connection_adapters/sqlserver/type/varchar_max'
29
- require 'active_record/connection_adapters/sqlserver/type/text'
27
+ require "active_record/connection_adapters/sqlserver/type/string"
28
+ require "active_record/connection_adapters/sqlserver/type/char"
29
+ require "active_record/connection_adapters/sqlserver/type/varchar"
30
+ require "active_record/connection_adapters/sqlserver/type/varchar_max"
31
+ require "active_record/connection_adapters/sqlserver/type/text"
30
32
  # Unicode Character Strings
31
- require 'active_record/connection_adapters/sqlserver/type/unicode_string'
32
- require 'active_record/connection_adapters/sqlserver/type/unicode_char'
33
- require 'active_record/connection_adapters/sqlserver/type/unicode_varchar'
34
- require 'active_record/connection_adapters/sqlserver/type/unicode_varchar_max'
35
- require 'active_record/connection_adapters/sqlserver/type/unicode_text'
33
+ require "active_record/connection_adapters/sqlserver/type/unicode_string"
34
+ require "active_record/connection_adapters/sqlserver/type/unicode_char"
35
+ require "active_record/connection_adapters/sqlserver/type/unicode_varchar"
36
+ require "active_record/connection_adapters/sqlserver/type/unicode_varchar_max"
37
+ require "active_record/connection_adapters/sqlserver/type/unicode_text"
36
38
  # Binary Strings
37
- require 'active_record/connection_adapters/sqlserver/type/binary'
38
- require 'active_record/connection_adapters/sqlserver/type/varbinary'
39
- require 'active_record/connection_adapters/sqlserver/type/varbinary_max'
39
+ require "active_record/connection_adapters/sqlserver/type/binary"
40
+ require "active_record/connection_adapters/sqlserver/type/varbinary"
41
+ require "active_record/connection_adapters/sqlserver/type/varbinary_max"
40
42
  # Other Data Types
41
- require 'active_record/connection_adapters/sqlserver/type/uuid'
42
- require 'active_record/connection_adapters/sqlserver/type/timestamp'
43
- require 'active_record/connection_adapters/sqlserver/type/json'
43
+ require "active_record/connection_adapters/sqlserver/type/uuid"
44
+ require "active_record/connection_adapters/sqlserver/type/timestamp"
45
+ require "active_record/connection_adapters/sqlserver/type/json"
44
46
 
45
47
  module ActiveRecord
46
48
  module Type
@@ -1,17 +1,17 @@
1
- require 'strscan'
1
+ # frozen_string_literal: true
2
+
3
+ require "strscan"
2
4
 
3
5
  module ActiveRecord
4
6
  module ConnectionAdapters
5
7
  module SQLServer
6
8
  module Utils
7
-
8
- QUOTED_STRING_PREFIX = 'N'
9
+ QUOTED_STRING_PREFIX = "N"
9
10
 
10
11
  # Value object to return identifiers from SQL Server names http://bit.ly/1CZ3EiL
11
12
  # Inspiried from Rails PostgreSQL::Name adapter object in their own Utils.
12
13
  #
13
14
  class Name
14
-
15
15
  SEPARATOR = "."
16
16
  UNQUOTED_SCANNER = /\]?\./
17
17
  QUOTED_SCANNER = /\A\[.*?\]\./
@@ -54,15 +54,15 @@ module ActiveRecord
54
54
  end
55
55
 
56
56
  def quoted
57
- parts.map{ |p| quote(p) if p }.join SEPARATOR
57
+ parts.map { |p| quote(p) if p }.join SEPARATOR
58
58
  end
59
59
 
60
60
  def quoted_raw
61
61
  quote @raw_name
62
62
  end
63
63
 
64
- def ==(o)
65
- o.class == self.class && o.parts == parts
64
+ def ==(other)
65
+ other.class == self.class && other.parts == parts
66
66
  end
67
67
  alias_method :eql?, :==
68
68
 
@@ -75,6 +75,7 @@ module ActiveRecord
75
75
  def parse_raw_name
76
76
  @parts = []
77
77
  return if raw_name.blank?
78
+
78
79
  scanner = StringScanner.new(raw_name)
79
80
  matched = scanner.exist?(QUOTED_CHECKER) ? scanner.scan_until(QUOTED_SCANNER) : scanner.scan_until(UNQUOTED_SCANNER)
80
81
  while matched
@@ -91,7 +92,7 @@ module ActiveRecord
91
92
  @schema = @parts.first
92
93
  end
93
94
  rest = scanner.rest
94
- rest = rest.starts_with?('.') ? rest[1..-1] : rest[0..-1]
95
+ rest = rest.starts_with?(".") ? rest[1..-1] : rest[0..-1]
95
96
  @object = unquote(rest)
96
97
  @parts << @object
97
98
  end
@@ -101,7 +102,7 @@ module ActiveRecord
101
102
  end
102
103
 
103
104
  def unquote(part)
104
- if part && part.start_with?('[')
105
+ if part && part.start_with?("[")
105
106
  part[1..-2]
106
107
  else
107
108
  part
@@ -111,7 +112,6 @@ module ActiveRecord
111
112
  def parts
112
113
  @parts
113
114
  end
114
-
115
115
  end
116
116
 
117
117
  extend self
@@ -139,7 +139,6 @@ module ActiveRecord
139
139
  def extract_identifiers(name)
140
140
  SQLServer::Utils::Name.new(name)
141
141
  end
142
-
143
142
  end
144
143
  end
145
144
  end
@@ -1,10 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveRecord
2
4
  module ConnectionAdapters
3
5
  module SQLServer
4
6
  module Version
5
-
6
7
  VERSION = File.read(File.expand_path("../../../../../VERSION", __FILE__)).chomp
7
-
8
8
  end
9
9
  end
10
10
  end