activerecord-sqlserver-adapter 6.0.0.rc1 → 6.0.0.rc2

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 (134) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +29 -0
  4. data/CHANGELOG.md +20 -0
  5. data/Gemfile +11 -5
  6. data/Guardfile +9 -8
  7. data/Rakefile +12 -16
  8. data/VERSION +1 -1
  9. data/activerecord-sqlserver-adapter.gemspec +3 -3
  10. data/lib/active_record/connection_adapters/sqlserver/core_ext/active_record.rb +0 -4
  11. data/lib/active_record/connection_adapters/sqlserver/core_ext/attribute_methods.rb +1 -4
  12. data/lib/active_record/connection_adapters/sqlserver/core_ext/calculations.rb +3 -4
  13. data/lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb +1 -3
  14. data/lib/active_record/connection_adapters/sqlserver/core_ext/finder_methods.rb +2 -3
  15. data/lib/active_record/connection_adapters/sqlserver/core_ext/query_methods.rb +2 -3
  16. data/lib/active_record/connection_adapters/sqlserver/database_statements.rb +35 -32
  17. data/lib/active_record/connection_adapters/sqlserver/database_tasks.rb +7 -12
  18. data/lib/active_record/connection_adapters/sqlserver/errors.rb +0 -3
  19. data/lib/active_record/connection_adapters/sqlserver/quoting.rb +8 -8
  20. data/lib/active_record/connection_adapters/sqlserver/schema_creation.rb +0 -2
  21. data/lib/active_record/connection_adapters/sqlserver/schema_dumper.rb +7 -7
  22. data/lib/active_record/connection_adapters/sqlserver/schema_statements.rb +106 -103
  23. data/lib/active_record/connection_adapters/sqlserver/showplan.rb +6 -8
  24. data/lib/active_record/connection_adapters/sqlserver/showplan/printer_table.rb +2 -2
  25. data/lib/active_record/connection_adapters/sqlserver/showplan/printer_xml.rb +1 -1
  26. data/lib/active_record/connection_adapters/sqlserver/sql_type_metadata.rb +0 -2
  27. data/lib/active_record/connection_adapters/sqlserver/table_definition.rb +1 -4
  28. data/lib/active_record/connection_adapters/sqlserver/transaction.rb +4 -8
  29. data/lib/active_record/connection_adapters/sqlserver/type.rb +35 -35
  30. data/lib/active_record/connection_adapters/sqlserver/type/big_integer.rb +0 -2
  31. data/lib/active_record/connection_adapters/sqlserver/type/binary.rb +0 -2
  32. data/lib/active_record/connection_adapters/sqlserver/type/boolean.rb +0 -2
  33. data/lib/active_record/connection_adapters/sqlserver/type/char.rb +2 -2
  34. data/lib/active_record/connection_adapters/sqlserver/type/data.rb +0 -2
  35. data/lib/active_record/connection_adapters/sqlserver/type/date.rb +2 -3
  36. data/lib/active_record/connection_adapters/sqlserver/type/datetime.rb +2 -3
  37. data/lib/active_record/connection_adapters/sqlserver/type/datetime2.rb +0 -2
  38. data/lib/active_record/connection_adapters/sqlserver/type/datetimeoffset.rb +0 -2
  39. data/lib/active_record/connection_adapters/sqlserver/type/decimal.rb +0 -2
  40. data/lib/active_record/connection_adapters/sqlserver/type/float.rb +0 -2
  41. data/lib/active_record/connection_adapters/sqlserver/type/integer.rb +0 -2
  42. data/lib/active_record/connection_adapters/sqlserver/type/json.rb +0 -1
  43. data/lib/active_record/connection_adapters/sqlserver/type/money.rb +0 -2
  44. data/lib/active_record/connection_adapters/sqlserver/type/real.rb +0 -2
  45. data/lib/active_record/connection_adapters/sqlserver/type/small_integer.rb +0 -2
  46. data/lib/active_record/connection_adapters/sqlserver/type/small_money.rb +0 -2
  47. data/lib/active_record/connection_adapters/sqlserver/type/smalldatetime.rb +0 -2
  48. data/lib/active_record/connection_adapters/sqlserver/type/string.rb +0 -2
  49. data/lib/active_record/connection_adapters/sqlserver/type/text.rb +0 -2
  50. data/lib/active_record/connection_adapters/sqlserver/type/time.rb +2 -3
  51. data/lib/active_record/connection_adapters/sqlserver/type/time_value_fractional.rb +6 -9
  52. data/lib/active_record/connection_adapters/sqlserver/type/timestamp.rb +0 -2
  53. data/lib/active_record/connection_adapters/sqlserver/type/tiny_integer.rb +0 -2
  54. data/lib/active_record/connection_adapters/sqlserver/type/unicode_char.rb +1 -3
  55. data/lib/active_record/connection_adapters/sqlserver/type/unicode_string.rb +0 -2
  56. data/lib/active_record/connection_adapters/sqlserver/type/unicode_text.rb +0 -2
  57. data/lib/active_record/connection_adapters/sqlserver/type/unicode_varchar.rb +0 -2
  58. data/lib/active_record/connection_adapters/sqlserver/type/unicode_varchar_max.rb +0 -2
  59. data/lib/active_record/connection_adapters/sqlserver/type/uuid.rb +1 -2
  60. data/lib/active_record/connection_adapters/sqlserver/type/varbinary.rb +1 -3
  61. data/lib/active_record/connection_adapters/sqlserver/type/varbinary_max.rb +0 -2
  62. data/lib/active_record/connection_adapters/sqlserver/type/varchar.rb +1 -3
  63. data/lib/active_record/connection_adapters/sqlserver/type/varchar_max.rb +0 -2
  64. data/lib/active_record/connection_adapters/sqlserver/utils.rb +8 -11
  65. data/lib/active_record/connection_adapters/sqlserver/version.rb +0 -2
  66. data/lib/active_record/connection_adapters/sqlserver_adapter.rb +85 -83
  67. data/lib/active_record/connection_adapters/sqlserver_column.rb +0 -2
  68. data/lib/active_record/sqlserver_base.rb +1 -1
  69. data/lib/active_record/tasks/sqlserver_database_tasks.rb +26 -32
  70. data/lib/activerecord-sqlserver-adapter.rb +1 -1
  71. data/lib/arel/visitors/sqlserver.rb +18 -14
  72. data/lib/arel_sqlserver.rb +2 -2
  73. data/test/cases/adapter_test_sqlserver.rb +161 -182
  74. data/test/cases/change_column_null_test_sqlserver.rb +12 -12
  75. data/test/cases/coerced_tests.rb +88 -270
  76. data/test/cases/column_test_sqlserver.rb +281 -283
  77. data/test/cases/connection_test_sqlserver.rb +15 -20
  78. data/test/cases/execute_procedure_test_sqlserver.rb +18 -20
  79. data/test/cases/fetch_test_sqlserver.rb +14 -22
  80. data/test/cases/fully_qualified_identifier_test_sqlserver.rb +12 -18
  81. data/test/cases/helper_sqlserver.rb +13 -15
  82. data/test/cases/in_clause_test_sqlserver.rb +9 -9
  83. data/test/cases/index_test_sqlserver.rb +13 -15
  84. data/test/cases/json_test_sqlserver.rb +23 -25
  85. data/test/cases/migration_test_sqlserver.rb +22 -28
  86. data/test/cases/order_test_sqlserver.rb +51 -54
  87. data/test/cases/pessimistic_locking_test_sqlserver.rb +25 -33
  88. data/test/cases/rake_test_sqlserver.rb +31 -45
  89. data/test/cases/schema_dumper_test_sqlserver.rb +104 -108
  90. data/test/cases/schema_test_sqlserver.rb +18 -26
  91. data/test/cases/scratchpad_test_sqlserver.rb +2 -4
  92. data/test/cases/showplan_test_sqlserver.rb +24 -33
  93. data/test/cases/specific_schema_test_sqlserver.rb +66 -65
  94. data/test/cases/transaction_test_sqlserver.rb +16 -19
  95. data/test/cases/trigger_test_sqlserver.rb +12 -12
  96. data/test/cases/utils_test_sqlserver.rb +68 -70
  97. data/test/cases/uuid_test_sqlserver.rb +11 -13
  98. data/test/debug.rb +6 -6
  99. data/test/migrations/create_clients_and_change_column_null.rb +1 -1
  100. data/test/migrations/transaction_table/1_table_will_never_be_created.rb +2 -4
  101. data/test/models/sqlserver/booking.rb +1 -1
  102. data/test/models/sqlserver/customers_view.rb +1 -1
  103. data/test/models/sqlserver/dollar_table_name.rb +1 -1
  104. data/test/models/sqlserver/edge_schema.rb +1 -3
  105. data/test/models/sqlserver/fk_has_fk.rb +1 -1
  106. data/test/models/sqlserver/fk_has_pk.rb +1 -1
  107. data/test/models/sqlserver/natural_pk_data.rb +2 -2
  108. data/test/models/sqlserver/natural_pk_int_data.rb +1 -1
  109. data/test/models/sqlserver/no_pk_data.rb +1 -1
  110. data/test/models/sqlserver/object_default.rb +1 -1
  111. data/test/models/sqlserver/quoted_table.rb +2 -2
  112. data/test/models/sqlserver/quoted_view_1.rb +1 -1
  113. data/test/models/sqlserver/quoted_view_2.rb +1 -1
  114. data/test/models/sqlserver/sst_memory.rb +1 -1
  115. data/test/models/sqlserver/string_default.rb +1 -1
  116. data/test/models/sqlserver/string_defaults_big_view.rb +1 -1
  117. data/test/models/sqlserver/string_defaults_view.rb +1 -1
  118. data/test/models/sqlserver/tinyint_pk.rb +1 -1
  119. data/test/models/sqlserver/trigger.rb +2 -2
  120. data/test/models/sqlserver/trigger_history.rb +1 -1
  121. data/test/models/sqlserver/upper.rb +1 -1
  122. data/test/models/sqlserver/uppered.rb +1 -1
  123. data/test/models/sqlserver/uuid.rb +1 -1
  124. data/test/schema/sqlserver_specific_schema.rb +20 -22
  125. data/test/support/coerceable_test_sqlserver.rb +1 -4
  126. data/test/support/connection_reflection.rb +1 -2
  127. data/test/support/core_ext/query_cache.rb +1 -1
  128. data/test/support/load_schema_sqlserver.rb +3 -5
  129. data/test/support/minitest_sqlserver.rb +1 -1
  130. data/test/support/paths_sqlserver.rb +9 -11
  131. data/test/support/rake_helpers.rb +12 -10
  132. data/test/support/sql_counter_sqlserver.rb +0 -4
  133. data/test/support/test_in_memory_oltp.rb +7 -7
  134. metadata +5 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e38e0db2e61f2a8afd9e9068d13927a6bf2f326b765fe60acf2251740dc1fd2c
4
- data.tar.gz: 5775ca711d927153804e9f6e7bce85af0c55a312268e49b7cb70aec1b9c153ca
3
+ metadata.gz: ae90a6f8498d914a0cff5b47bf56fe4eacf67fa771b4f89b06fb3c97683cf6ec
4
+ data.tar.gz: 3bcba233d32f874bc4914886d257f32cb45b06eec83a395cec9d0d4876c59bbb
5
5
  SHA512:
6
- metadata.gz: d94c57956ff87d407273cdd9fc2c1277be9238ef4c46631b3a1489875a9d1e719d7350afa5c6a7df1b7cce914c7e434ea00605c6269c1a27e881b0abf7c8fa12
7
- data.tar.gz: cbacfa3df2a3005463c3d39686914fa7f2b5d517a06f177287f20f703d0b195ffdc1037b94cee70458c9fcaada7f45b8c84abc8e81cd78aff7a9ff6e3535eb19
6
+ metadata.gz: 8fda1468adae0fe9a8de40c33abbcd34c4364b441e3ea55724130c1a871999e2985e7c7183a03534c0361b8d89f7f150be17ca30f98a3d4ac1d36dbe956e8174
7
+ data.tar.gz: a893c81ab5b00204c9014aba27cab25bee3513001043e71132e00938534d7c0ca0b7ea1cd1b8b10b347c97ece39e29a30ebdfbf85ed748f983b159573f0e1836
data/.gitignore CHANGED
@@ -3,6 +3,7 @@ debug.log
3
3
  .DS_Store
4
4
  pkg/
5
5
  doc/
6
+ db/
6
7
  *.gem
7
8
  .bundle
8
9
  Gemfile.lock
@@ -0,0 +1,29 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.5
3
+
4
+ Layout/LineLength:
5
+ Max: 120
6
+
7
+ Naming/AccessorMethodName:
8
+ Enabled: false
9
+
10
+ Naming/FileName:
11
+ Exclude:
12
+ - lib/activerecord-sqlserver-adapter.rb
13
+
14
+ Naming/MethodName:
15
+ IgnoredPatterns:
16
+ - visit_.*
17
+ - primary_Key_From_Table
18
+ - table_From_Statement
19
+ - distinct_One_As_One_Is_So_Not_Fetch
20
+ - make_Fetch_Possible_And_Deterministic
21
+
22
+ Naming/MethodParameterName:
23
+ Enabled: false
24
+
25
+ Naming/PredicateName:
26
+ Enabled: false
27
+
28
+ Style/StringLiterals:
29
+ EnforcedStyle: double_quotes
@@ -1,3 +1,23 @@
1
+ ## v6.0.0.rc2
2
+
3
+ #### Fixed
4
+
5
+ - [#639](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/639) Primary key should be lowercase if schema forced to lowercase
6
+ - [#720](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/720) quoted_date doesn't work for Type::DateTime
7
+
8
+ #### Changed
9
+
10
+ - [#826](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/826) Rubocop: Enable Style/StringLiterals cop
11
+ - [#827](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/827) Rubocop: Enable Layout/EmptyLinesAroundClassBody cop
12
+ - [#828](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/828) Rubocop: Enable Layout/EmptyLines cop
13
+ - [#829](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/829) Rubocop: Enable Layout/Layout/EmptyLinesAround* cops
14
+ - [#830](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/830) Rubocop: Enable Layout/IndentationWidth and Layout/TrailingWhitespace cops
15
+ - [#831](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/831) Rubocop: Enable Spacing cops
16
+ - [#832](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/832) Rubocop: Enable Bundler cops
17
+ - [#833](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/833) Rubocop: Enable Layout/* cops
18
+ - [#834](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/834) Rubocop: Enable Lint/UselessAssignment cop
19
+ - [#835](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/835) Rubocop: Configure Naming cops
20
+
1
21
  ## v6.0.0.rc1
2
22
 
3
23
  #### Fixed
data/Gemfile CHANGED
@@ -21,8 +21,8 @@ else
21
21
  require "yaml"
22
22
 
23
23
  spec = eval(File.read("activerecord-sqlserver-adapter.gemspec"))
24
- ver = spec.dependencies.detect{ |d|d.name == "activerecord" }.requirement.requirements.first.last.version
25
- major, minor, tiny, pre = ver.split(".")
24
+ ver = spec.dependencies.detect { |d| d.name == "activerecord" }.requirement.requirements.first.last.version
25
+ major, minor, _tiny, pre = ver.split(".")
26
26
 
27
27
  if pre
28
28
  ver
@@ -32,7 +32,7 @@ else
32
32
  http.use_ssl = true
33
33
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE
34
34
  YAML.load(http.request(Net::HTTP::Get.new(uri.request_uri)).body).find do |data|
35
- a, b, c = data["number"].split(".")
35
+ a, b, = data["number"].split(".")
36
36
  !data["prerelease"] && major == a && (minor.nil? || minor == b)
37
37
  end["number"]
38
38
  end
@@ -40,6 +40,7 @@ else
40
40
  gem "rails", github: "rails/rails", tag: "v#{version}"
41
41
  end
42
42
 
43
+ # rubocop:disable Bundler/DuplicatedGem
43
44
  group :tinytds do
44
45
  if ENV["TINYTDS_SOURCE"]
45
46
  gem "tiny_tds", path: ENV["TINYTDS_SOURCE"]
@@ -49,11 +50,12 @@ group :tinytds do
49
50
  gem "tiny_tds"
50
51
  end
51
52
  end
53
+ # rubocop:enable Bundler/DuplicatedGem
52
54
 
53
55
  group :development do
54
- gem "pry-byebug", platform: [:mri, :mingw, :x64_mingw]
55
- gem "mocha"
56
56
  gem "minitest-spec-rails"
57
+ gem "mocha"
58
+ gem "pry-byebug", platform: [:mri, :mingw, :x64_mingw]
57
59
  end
58
60
 
59
61
  group :guard do
@@ -61,3 +63,7 @@ group :guard do
61
63
  gem "guard-minitest"
62
64
  gem "terminal-notifier-guard" if RbConfig::CONFIG["host_os"] =~ /darwin/
63
65
  end
66
+
67
+ group :rubocop do
68
+ gem "rubocop", require: false
69
+ end
data/Guardfile CHANGED
@@ -1,29 +1,30 @@
1
+ # frozen_string_literal: true
1
2
 
2
- require_relative 'test/support/paths_sqlserver'
3
+ require_relative "test/support/paths_sqlserver"
3
4
 
4
5
  clearing :on
5
6
  notification :terminal_notifier if defined?(TerminalNotifier)
6
7
  ignore %r{debug\.log}
7
8
 
8
- ar_lib = File.join ARTest::SQLServer.root_activerecord, 'lib'
9
- ar_test = File.join ARTest::SQLServer.root_activerecord, 'test'
9
+ ar_lib = File.join ARTest::SQLServer.root_activerecord, "lib"
10
+ ar_test = File.join ARTest::SQLServer.root_activerecord, "test"
10
11
 
11
12
  guard :minitest, {
12
13
  all_on_start: false,
13
14
  autorun: false,
14
- include: ['lib', 'test', ar_lib, ar_test],
15
- test_folders: ['test'],
15
+ include: ["lib", "test", ar_lib, ar_test],
16
+ test_folders: ["test"],
16
17
  test_file_patterns: ["*_test.rb", "*_test_sqlserver.rb"]
17
18
  } do
18
19
  # Our project watchers.
19
- if ENV['TEST_FILES']
20
- ENV['TEST_FILES'].split(',').map(&:strip).each do |file|
20
+ if ENV["TEST_FILES"]
21
+ ENV["TEST_FILES"].split(",").map(&:strip).each do |file|
21
22
  watch(%r{.*}) { file }
22
23
  end
23
24
  else
24
25
  watch(%r{^test/cases/\w+_test_sqlserver\.rb$})
25
26
  watch(%r{^test/cases/coerced_tests\.rb$}) { "test/cases/coerced_tests.rb" }
26
27
  watch(%r{^lib/active_record/connection_adapters/sqlserver/([^/]+)\.rb$}) { |m| "test/cases/#{m[1]}_test_sqlserver.rb" }
27
- watch(%r{^test/cases/helper_sqlserver\.rb$}) { 'test' }
28
+ watch(%r{^test/cases/helper_sqlserver\.rb$}) { "test" }
28
29
  end
29
30
  end
data/Rakefile CHANGED
@@ -1,39 +1,35 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'bundler/gem_tasks'
4
- require 'rake/testtask'
5
- require_relative 'test/support/paths_sqlserver'
6
- require_relative 'test/support/rake_helpers'
3
+ require "bundler/gem_tasks"
4
+ require "rake/testtask"
5
+ require_relative "test/support/paths_sqlserver"
6
+ require_relative "test/support/rake_helpers"
7
7
 
8
- task test: ['test:dblib']
8
+ task test: ["test:dblib"]
9
9
  task default: [:test]
10
10
 
11
11
  namespace :test do
12
-
13
12
  %w(dblib).each do |mode|
14
-
15
13
  Rake::TestTask.new(mode) do |t|
16
14
  t.libs = ARTest::SQLServer.test_load_paths
17
15
  t.test_files = test_files
18
- t.warning = !!ENV['WARNING']
16
+ t.warning = !!ENV["WARNING"]
19
17
  t.verbose = false
20
18
  end
21
-
22
19
  end
23
20
 
24
- task 'dblib:env' do
25
- ENV['ARCONN'] = 'dblib'
21
+ task "dblib:env" do
22
+ ENV["ARCONN"] = "dblib"
26
23
  end
27
-
28
24
  end
29
25
 
30
- task 'test:dblib' => 'test:dblib:env'
26
+ task "test:dblib" => "test:dblib:env"
31
27
 
32
28
  namespace :profile do
33
- ['dblib'].each do |mode|
29
+ ["dblib"].each do |mode|
34
30
  namespace mode.to_sym do
35
- Dir.glob('test/profile/*_profile_case.rb').sort.each do |test_file|
36
- profile_case = File.basename(test_file).sub('_profile_case.rb', '')
31
+ Dir.glob("test/profile/*_profile_case.rb").sort.each do |test_file|
32
+ profile_case = File.basename(test_file).sub("_profile_case.rb", "")
37
33
  Rake::TestTask.new(profile_case) do |t|
38
34
  t.libs = ARTest::SQLServer.test_load_paths
39
35
  t.test_files = [test_file]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 6.0.0.rc1
1
+ 6.0.0.rc2
@@ -17,9 +17,9 @@ Gem::Specification.new do |spec|
17
17
  spec.description = "ActiveRecord SQL Server Adapter. SQL Server 2012 and upward."
18
18
 
19
19
  spec.metadata = {
20
- "bug_tracker_uri" => "https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/issues",
21
- "changelog_uri" => "https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/blob/v#{version}/CHANGELOG.md",
22
- "source_code_uri" => "https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/v#{version}",
20
+ "bug_tracker_uri" => "https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/issues",
21
+ "changelog_uri" => "https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/blob/v#{version}/CHANGELOG.md",
22
+ "source_code_uri" => "https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/v#{version}",
23
23
  }
24
24
 
25
25
  spec.files = `git ls-files -z`.split("\x0")
@@ -5,11 +5,9 @@ module ActiveRecord
5
5
  module SQLServer
6
6
  module CoreExt
7
7
  module ActiveRecord
8
-
9
8
  extend ActiveSupport::Concern
10
9
 
11
10
  module ClassMethods
12
-
13
11
  def execute_procedure(proc_name, *variables)
14
12
  if connection.respond_to?(:execute_procedure)
15
13
  connection.execute_procedure(proc_name, *variables)
@@ -17,9 +15,7 @@ module ActiveRecord
17
15
  []
18
16
  end
19
17
  end
20
-
21
18
  end
22
-
23
19
  end
24
20
  end
25
21
  end
@@ -1,14 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'active_record/attribute_methods'
3
+ require "active_record/attribute_methods"
4
4
 
5
5
  module ActiveRecord
6
6
  module ConnectionAdapters
7
7
  module SQLServer
8
8
  module CoreExt
9
9
  module AttributeMethods
10
-
11
-
12
10
  private
13
11
 
14
12
  def attributes_for_update(attribute_names)
@@ -17,7 +15,6 @@ module ActiveRecord
17
15
  column && column.respond_to?(:is_identity?) && column.is_identity?
18
16
  end
19
17
  end
20
-
21
18
  end
22
19
  end
23
20
  end
@@ -1,14 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'active_record/relation'
4
- require 'active_record/version'
3
+ require "active_record/relation"
4
+ require "active_record/version"
5
5
 
6
6
  module ActiveRecord
7
7
  module ConnectionAdapters
8
8
  module SQLServer
9
9
  module CoreExt
10
10
  module Calculations
11
-
12
11
  # Same as original except we don't perform PostgreSQL hack that removes ordering.
13
12
  def calculate(operation, column_name)
14
13
  if has_include?(column_name)
@@ -17,7 +16,7 @@ module ActiveRecord
17
16
  if operation.to_s.downcase == "count"
18
17
  unless distinct_value || distinct_select?(column_name || select_for_count)
19
18
  relation.distinct!
20
- relation.select_values = [ klass.primary_key || table[Arel.star] ]
19
+ relation.select_values = [klass.primary_key || table[Arel.star]]
21
20
  end
22
21
  end
23
22
 
@@ -5,8 +5,7 @@ module ActiveRecord
5
5
  module SQLServer
6
6
  module CoreExt
7
7
  module Explain
8
-
9
- SQLSERVER_STATEMENT_PREFIX = 'EXEC sp_executesql '
8
+ SQLSERVER_STATEMENT_PREFIX = "EXEC sp_executesql "
10
9
  SQLSERVER_STATEMENT_REGEXP = /N'(.+)', N'(.+)', (.+)/
11
10
 
12
11
  def exec_explain(queries)
@@ -34,7 +33,6 @@ module ActiveRecord
34
33
 
35
34
  executesql
36
35
  end
37
-
38
36
  end
39
37
  end
40
38
  end
@@ -1,14 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'active_record/relation'
4
- require 'active_record/version'
3
+ require "active_record/relation"
4
+ require "active_record/version"
5
5
 
6
6
  module ActiveRecord
7
7
  module ConnectionAdapters
8
8
  module SQLServer
9
9
  module CoreExt
10
10
  module FinderMethods
11
-
12
11
  private
13
12
 
14
13
  # Same as original except we order by values in distinct select if present.
@@ -1,14 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'active_record/relation'
4
- require 'active_record/version'
3
+ require "active_record/relation"
4
+ require "active_record/version"
5
5
 
6
6
  module ActiveRecord
7
7
  module ConnectionAdapters
8
8
  module SQLServer
9
9
  module CoreExt
10
10
  module QueryMethods
11
-
12
11
  private
13
12
 
14
13
  # Copy of original from Rails master.
@@ -25,7 +25,7 @@ module ActiveRecord
25
25
  end
26
26
  end
27
27
 
28
- def exec_query(sql, name = 'SQL', binds = [], prepare: false)
28
+ def exec_query(sql, name = "SQL", binds = [], prepare: false)
29
29
  if preventing_writes? && write_query?(sql)
30
30
  raise ActiveRecord::ReadOnlyError, "Write query attempted while in readonly mode: #{sql}"
31
31
  end
@@ -44,17 +44,17 @@ module ActiveRecord
44
44
  end
45
45
 
46
46
  def exec_delete(sql, name, binds)
47
- sql = sql.dup << '; SELECT @@ROWCOUNT AS AffectedRows'
47
+ sql = sql.dup << "; SELECT @@ROWCOUNT AS AffectedRows"
48
48
  super(sql, name, binds).rows.first.first
49
49
  end
50
50
 
51
51
  def exec_update(sql, name, binds)
52
- sql = sql.dup << '; SELECT @@ROWCOUNT AS AffectedRows'
52
+ sql = sql.dup << "; SELECT @@ROWCOUNT AS AffectedRows"
53
53
  super(sql, name, binds).rows.first.first
54
54
  end
55
55
 
56
56
  def begin_db_transaction
57
- do_execute 'BEGIN TRANSACTION'
57
+ do_execute "BEGIN TRANSACTION"
58
58
  end
59
59
 
60
60
  def transaction_isolation_levels
@@ -71,11 +71,11 @@ module ActiveRecord
71
71
  end
72
72
 
73
73
  def commit_db_transaction
74
- do_execute 'COMMIT TRANSACTION'
74
+ do_execute "COMMIT TRANSACTION"
75
75
  end
76
76
 
77
77
  def exec_rollback_db_transaction
78
- do_execute 'IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION'
78
+ do_execute "IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION"
79
79
  end
80
80
 
81
81
  include Savepoints
@@ -143,7 +143,7 @@ module ActiveRecord
143
143
  sql = +"INSERT #{insert.into}"
144
144
 
145
145
  if returning = insert.send(:insert_all).returning
146
- sql << " OUTPUT " << returning.map {|column| "INSERTED.#{quote_column_name(column)}" }.join(", ")
146
+ sql << " OUTPUT " << returning.map { |column| "INSERTED.#{quote_column_name(column)}" }.join(", ")
147
147
  end
148
148
 
149
149
  sql << " #{insert.values_list}"
@@ -159,9 +159,9 @@ module ActiveRecord
159
159
  variables.first.map { |k, v| "@#{k} = #{quote(v)}" }
160
160
  else
161
161
  variables.map { |v| quote(v) }
162
- end.join(', ')
162
+ end.join(", ")
163
163
  sql = "EXEC #{proc_name} #{vars}".strip
164
- name = 'Execute Procedure'
164
+ name = "Execute Procedure"
165
165
  log(sql, name) do
166
166
  case @connection_options[:mode]
167
167
  when :dblib
@@ -186,20 +186,22 @@ module ActiveRecord
186
186
 
187
187
  def use_database(database = nil)
188
188
  return if sqlserver_azure?
189
+
189
190
  name = SQLServer::Utils.extract_identifiers(database || @connection_options[:database]).quoted
190
191
  do_execute "USE #{name}" unless name.blank?
191
192
  end
192
193
 
193
194
  def user_options
194
195
  return {} if sqlserver_azure?
195
- rows = select_rows('DBCC USEROPTIONS WITH NO_INFOMSGS', 'SCHEMA')
196
+
197
+ rows = select_rows("DBCC USEROPTIONS WITH NO_INFOMSGS", "SCHEMA")
196
198
  rows = rows.first if rows.size == 2 && rows.last.empty?
197
199
  rows.reduce(HashWithIndifferentAccess.new) do |values, row|
198
200
  if row.instance_of? Hash
199
- set_option = row.values[0].gsub(/\s+/, '_')
201
+ set_option = row.values[0].gsub(/\s+/, "_")
200
202
  user_value = row.values[1]
201
- elsif row.instance_of? Array
202
- set_option = row[0].gsub(/\s+/, '_')
203
+ elsif row.instance_of? Array
204
+ set_option = row[0].gsub(/\s+/, "_")
203
205
  user_value = row[1]
204
206
  end
205
207
  values[set_option] = user_value
@@ -209,9 +211,9 @@ module ActiveRecord
209
211
 
210
212
  def user_options_dateformat
211
213
  if sqlserver_azure?
212
- select_value 'SELECT [dateformat] FROM [sys].[syslanguages] WHERE [langid] = @@LANGID', 'SCHEMA'
214
+ select_value "SELECT [dateformat] FROM [sys].[syslanguages] WHERE [langid] = @@LANGID", "SCHEMA"
213
215
  else
214
- user_options['dateformat']
216
+ user_options["dateformat"]
215
217
  end
216
218
  end
217
219
 
@@ -226,29 +228,28 @@ module ActiveRecord
226
228
  WHEN 5 THEN 'SNAPSHOT' END AS [isolation_level]
227
229
  FROM [sys].[dm_exec_sessions]
228
230
  WHERE [session_id] = @@SPID).squish
229
- select_value sql, 'SCHEMA'
231
+ select_value sql, "SCHEMA"
230
232
  else
231
- user_options['isolation_level']
233
+ user_options["isolation_level"]
232
234
  end
233
235
  end
234
236
 
235
237
  def user_options_language
236
238
  if sqlserver_azure?
237
- select_value 'SELECT @@LANGUAGE AS [language]', 'SCHEMA'
239
+ select_value "SELECT @@LANGUAGE AS [language]", "SCHEMA"
238
240
  else
239
- user_options['language']
241
+ user_options["language"]
240
242
  end
241
243
  end
242
244
 
243
245
  def newid_function
244
- select_value 'SELECT NEWID()'
246
+ select_value "SELECT NEWID()"
245
247
  end
246
248
 
247
249
  def newsequentialid_function
248
- select_value 'SELECT NEWSEQUENTIALID()'
250
+ select_value "SELECT NEWSEQUENTIALID()"
249
251
  end
250
252
 
251
-
252
253
  protected
253
254
 
254
255
  def sql_for_insert(sql, pk, binds)
@@ -263,7 +264,7 @@ module ActiveRecord
263
264
  exclude_output_inserted = exclude_output_inserted_table_name?(table_name, sql)
264
265
 
265
266
  if exclude_output_inserted
266
- id_sql_type = exclude_output_inserted.is_a?(TrueClass) ? 'bigint' : exclude_output_inserted
267
+ id_sql_type = exclude_output_inserted.is_a?(TrueClass) ? "bigint" : exclude_output_inserted
267
268
  <<~SQL.squish
268
269
  DECLARE @ssaIdInsertTable table (#{quoted_pk} #{id_sql_type});
269
270
  #{sql.dup.insert sql.index(/ (DEFAULT )?VALUES/), " OUTPUT INSERTED.#{quoted_pk} INTO @ssaIdInsertTable"}
@@ -288,7 +289,7 @@ module ActiveRecord
288
289
 
289
290
  # === SQLServer Specific (Executing) ============================ #
290
291
 
291
- def do_execute(sql, name = 'SQL')
292
+ def do_execute(sql, name = "SQL")
292
293
  materialize_transactions
293
294
 
294
295
  log(sql, name) { raw_connection_do(sql) }
@@ -316,11 +317,12 @@ module ActiveRecord
316
317
 
317
318
  def sp_executesql_sql_type(attr)
318
319
  return attr.type.sqlserver_type if attr.type.respond_to?(:sqlserver_type)
320
+
319
321
  case value = attr.value_for_database
320
322
  when Numeric
321
- value > 2_147_483_647 ? 'bigint'.freeze : 'int'.freeze
323
+ value > 2_147_483_647 ? "bigint".freeze : "int".freeze
322
324
  else
323
- 'nvarchar(max)'.freeze
325
+ "nvarchar(max)".freeze
324
326
  end
325
327
  end
326
328
 
@@ -335,14 +337,14 @@ module ActiveRecord
335
337
  end
336
338
 
337
339
  def sp_executesql_sql(sql, types, params, name)
338
- if name == 'EXPLAIN'
340
+ if name == "EXPLAIN"
339
341
  params.each.with_index do |param, index|
340
342
  substitute_at_finder = /(@#{index})(?=(?:[^']|'[^']*')*$)/ # Finds unquoted @n values.
341
343
  sql = sql.sub substitute_at_finder, param.to_s
342
344
  end
343
345
  else
344
- types = quote(types.join(', '))
345
- params = params.map.with_index{ |p, i| "@#{i} = #{p}" }.join(', ') # Only p is needed, but with @i helps explain regexp.
346
+ types = quote(types.join(", "))
347
+ params = params.map.with_index { |p, i| "@#{i} = #{p}" }.join(", ") # Only p is needed, but with @i helps explain regexp.
346
348
  sql = "EXEC sp_executesql #{quote(sql)}"
347
349
  sql += ", #{types}, #{params}" unless params.empty?
348
350
  end
@@ -357,7 +359,7 @@ module ActiveRecord
357
359
  # TinyTDS returns false instead of raising an exception if connection fails.
358
360
  # Getting around this by raising an exception ourselves while this PR
359
361
  # https://github.com/rails-sqlserver/tiny_tds/pull/469 is not released.
360
- raise TinyTds::Error, 'failed to execute statement' if result.is_a?(FalseClass)
362
+ raise TinyTds::Error, "failed to execute statement" if result.is_a?(FalseClass)
361
363
 
362
364
  result.do
363
365
  end
@@ -377,8 +379,10 @@ module ActiveRecord
377
379
 
378
380
  def exclude_output_inserted_table_name?(table_name, sql)
379
381
  return false unless exclude_output_inserted_table_names?
382
+
380
383
  table_name ||= get_table_name(sql)
381
384
  return false unless table_name
385
+
382
386
  self.class.exclude_output_inserted_table_names[table_name]
383
387
  end
384
388
 
@@ -407,7 +411,7 @@ module ActiveRecord
407
411
 
408
412
  # === SQLServer Specific (Selecting) ============================ #
409
413
 
410
- def raw_select(sql, name = 'SQL', binds = [], options = {})
414
+ def raw_select(sql, name = "SQL", binds = [], options = {})
411
415
  log(sql, name, binds) { _raw_select(sql, options) }
412
416
  end
413
417
 
@@ -455,7 +459,6 @@ module ActiveRecord
455
459
  end
456
460
  handle
457
461
  end
458
-
459
462
  end
460
463
  end
461
464
  end