activerecord-sqlserver-adapter 8.0.10 → 8.1.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.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/.devcontainer/Dockerfile +1 -1
  3. data/.github/workflows/ci.yml +34 -3
  4. data/CHANGELOG.md +14 -68
  5. data/Dockerfile.ci +1 -1
  6. data/Gemfile +7 -9
  7. data/Guardfile +2 -2
  8. data/README.md +33 -13
  9. data/Rakefile +1 -1
  10. data/VERSION +1 -1
  11. data/activerecord-sqlserver-adapter.gemspec +15 -16
  12. data/compose.ci.yaml +8 -1
  13. data/lib/active_record/connection_adapters/sqlserver/core_ext/attribute_methods.rb +1 -1
  14. data/lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb +1 -2
  15. data/lib/active_record/connection_adapters/sqlserver/core_ext/explain_subscriber.rb +1 -1
  16. data/lib/active_record/connection_adapters/sqlserver/core_ext/finder_methods.rb +4 -4
  17. data/lib/active_record/connection_adapters/sqlserver/database_statements.rb +118 -83
  18. data/lib/active_record/connection_adapters/sqlserver/database_tasks.rb +3 -4
  19. data/lib/active_record/connection_adapters/sqlserver/quoting.rb +7 -7
  20. data/lib/active_record/connection_adapters/sqlserver/schema_creation.rb +24 -12
  21. data/lib/active_record/connection_adapters/sqlserver/schema_dumper.rb +17 -8
  22. data/lib/active_record/connection_adapters/sqlserver/schema_statements.rb +162 -156
  23. data/lib/active_record/connection_adapters/sqlserver/showplan/printer_table.rb +2 -2
  24. data/lib/active_record/connection_adapters/sqlserver/showplan.rb +5 -5
  25. data/lib/active_record/connection_adapters/sqlserver/sql_type_metadata.rb +2 -7
  26. data/lib/active_record/connection_adapters/sqlserver/table_definition.rb +3 -1
  27. data/lib/active_record/connection_adapters/sqlserver/type/data.rb +3 -3
  28. data/lib/active_record/connection_adapters/sqlserver/type/date.rb +3 -3
  29. data/lib/active_record/connection_adapters/sqlserver/type/datetime.rb +3 -4
  30. data/lib/active_record/connection_adapters/sqlserver/type/smalldatetime.rb +1 -1
  31. data/lib/active_record/connection_adapters/sqlserver/type/time.rb +4 -6
  32. data/lib/active_record/connection_adapters/sqlserver/type/time_value_fractional.rb +1 -1
  33. data/lib/active_record/connection_adapters/sqlserver/type/uuid.rb +0 -2
  34. data/lib/active_record/connection_adapters/sqlserver/utils.rb +10 -12
  35. data/lib/active_record/connection_adapters/sqlserver_adapter.rb +118 -66
  36. data/lib/active_record/connection_adapters/sqlserver_column.rb +17 -9
  37. data/lib/active_record/tasks/sqlserver_database_tasks.rb +5 -5
  38. data/lib/arel/visitors/sqlserver.rb +55 -26
  39. data/test/cases/active_schema_test_sqlserver.rb +45 -23
  40. data/test/cases/adapter_test_sqlserver.rb +72 -59
  41. data/test/cases/coerced_tests.rb +365 -161
  42. data/test/cases/column_test_sqlserver.rb +328 -316
  43. data/test/cases/connection_test_sqlserver.rb +15 -11
  44. data/test/cases/enum_test_sqlserver.rb +8 -9
  45. data/test/cases/execute_procedure_test_sqlserver.rb +1 -1
  46. data/test/cases/fetch_test_sqlserver.rb +1 -1
  47. data/test/cases/helper_sqlserver.rb +7 -3
  48. data/test/cases/index_test_sqlserver.rb +8 -6
  49. data/test/cases/insert_all_test_sqlserver.rb +3 -28
  50. data/test/cases/json_test_sqlserver.rb +8 -8
  51. data/test/cases/lateral_test_sqlserver.rb +2 -2
  52. data/test/cases/migration_test_sqlserver.rb +12 -12
  53. data/test/cases/pessimistic_locking_test_sqlserver.rb +6 -6
  54. data/test/cases/primary_keys_test_sqlserver.rb +4 -4
  55. data/test/cases/rake_test_sqlserver.rb +15 -7
  56. data/test/cases/schema_dumper_test_sqlserver.rb +109 -113
  57. data/test/cases/schema_test_sqlserver.rb +7 -7
  58. data/test/cases/transaction_test_sqlserver.rb +6 -8
  59. data/test/cases/trigger_test_sqlserver.rb +1 -1
  60. data/test/cases/utils_test_sqlserver.rb +3 -3
  61. data/test/cases/view_test_sqlserver.rb +12 -8
  62. data/test/cases/virtual_column_test_sqlserver.rb +113 -0
  63. data/test/migrations/create_clients_and_change_column_collation.rb +2 -2
  64. data/test/models/sqlserver/edge_schema.rb +2 -2
  65. data/test/schema/sqlserver_specific_schema.rb +49 -37
  66. data/test/support/coerceable_test_sqlserver.rb +10 -10
  67. data/test/support/connection_reflection.rb +0 -5
  68. data/test/support/core_ext/backtrace_cleaner.rb +36 -0
  69. data/test/support/query_assertions.rb +6 -6
  70. data/test/support/rake_helpers.rb +6 -10
  71. metadata +12 -107
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e6c3e4f4ea64ada810516060935068217cc32d43b160f33fec283e6a81889168
4
- data.tar.gz: efa5b8818e45ca35a610a850ed44253f4682f83267a46822b23604fd78655e94
3
+ metadata.gz: faf6670e4b55968e4dcfcb37340d733dc8db5a21fbd3b43b5f717183a6240dd8
4
+ data.tar.gz: d3eab140bf29dcdc1907415414e93e74eeb3d561758fc53f8457af83f5b8ec7d
5
5
  SHA512:
6
- metadata.gz: 9e8f1d1a400b6a624d22ae77f6b8d70a31e967790cdd30be86d476f94af7e45ea913d5278a02fddebcd4ee30749c0277c4624e61b6f4ec521403a966f5dc2f96
7
- data.tar.gz: 78ff679e5aea744e81da238916812c364b7fef69e6b7e4cc2bbb4a59f96d256cd62f70ca886504fe815723aa12d2e91efef88793c92cbe6c494f58dc78f3c041
6
+ metadata.gz: f2659c6511ccf88935c1992f6a485bde6e75e4a4010222f3cbcaf2f4c90353eda7c4fff92fcc599d04cd8df1bffa6830e1691a7660d4f3e2c21dd058a3eda456
7
+ data.tar.gz: 5c28518313d0718e690b82be108c97a2f237a1cf4445c117a25c8d8b8ed6d0b05a5d09b46164fc5734b407728ed18878f39fe2a75b6ff0f47918e775a306eef2
@@ -25,6 +25,6 @@ RUN curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/t
25
25
  RUN mkdir -p /tmp/activerecord-sqlserver-adapter
26
26
  COPY Gemfile VERSION activerecord-sqlserver-adapter.gemspec /tmp/activerecord-sqlserver-adapter/
27
27
  RUN cd /tmp/activerecord-sqlserver-adapter \
28
- && bundle install \
28
+ && RAILS_BRANCH=8-1-stable bundle install \
29
29
  && rm -rf /tmp/activerecord-sqlserver-adapter
30
30
  RUN chown -R vscode:vscode /usr/local/rvm
@@ -1,6 +1,12 @@
1
1
  name: CI
2
2
 
3
- on: [push, pull_request]
3
+ on:
4
+ push:
5
+ branches: [ main ]
6
+ pull_request:
7
+ branches: [ main ]
8
+ schedule:
9
+ - cron: '0 4 * * 0'
4
10
 
5
11
  jobs:
6
12
  test:
@@ -15,8 +21,9 @@ jobs:
15
21
  fail-fast: false
16
22
  matrix:
17
23
  ruby:
18
- - 3.3.6
19
- - 3.2.6
24
+ - 3.4.7
25
+ - 3.3.9
26
+ - 3.2.9
20
27
 
21
28
  steps:
22
29
  - name: Checkout code
@@ -27,3 +34,27 @@ jobs:
27
34
 
28
35
  - name: Run tests
29
36
  run: docker compose run ci
37
+
38
+
39
+ standardrb:
40
+ name: Code linting and formatting
41
+ runs-on: ubuntu-latest
42
+
43
+ env:
44
+ COMPOSE_FILE: compose.ci.yaml
45
+
46
+ strategy:
47
+ fail-fast: false
48
+ matrix:
49
+ ruby:
50
+ - 3.4.1
51
+
52
+ steps:
53
+ - name: Checkout code
54
+ uses: actions/checkout@v2
55
+
56
+ - name: Build docker images
57
+ run: docker compose build --build-arg TARGET_VERSION=${{ matrix.ruby }}
58
+
59
+ - name: Run standardrb
60
+ run: docker compose run standardrb
data/CHANGELOG.md CHANGED
@@ -1,78 +1,24 @@
1
- ## v8.0.10
2
-
3
- #### Fixed
4
-
5
- - [#1370](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1370) Fixed query logging so that filter parameters are respected.
6
-
7
- ## v8.0.9
8
-
9
- #### Fixed
10
-
11
- - [#1366](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1366) Correctly retrieve the SQL Server database version.
12
-
13
- ## v8.0.8
14
-
15
- #### Changed
16
-
17
- - [#1342](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1342) Support more Azure services by changing language source.
18
-
19
- #### Fixed
20
- - [#1345](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1345) Maintain index options during `change_column` operations.
21
- - [#1357](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1357) Support cross database inserts.
22
-
23
- ## v8.0.7
24
-
25
- #### Fixed
26
-
27
- - [#1334](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1334) Enable identity insert on view's base table for fixtures.
28
- - [#1339](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1339) Fix `insert_all`/`upsert_all` for table names containing numbers.
29
-
30
- ## v8.0.6
31
-
32
- #### Fixed
33
-
34
- - [#1318](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1318) Reverse order of values when upserting
35
- - [#1321](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1321) Fix SQL statement to calculate `updated_at` when upserting
36
-
37
- ## v8.0.5
1
+ ## v8.1.0
38
2
 
39
3
  #### Added
40
4
 
41
- - [#1315](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1315) Add support for `insert_all` and `upsert_all`
42
-
43
- ## v8.0.4
44
-
45
- #### Fixed
46
-
47
- - [#1308](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1308) Fix retrieval of temporary table's column information.
48
-
49
- ## v8.0.3
50
-
51
- #### Fixed
52
-
53
- - [#1306](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1306) Fix affected rows count when lowercase schema reflection enabled
54
-
55
- ## v8.0.2
56
-
57
- #### Fixed
58
-
59
- - [#1272](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1272) Fix parsing of raw table name from SQL with extra parentheses
60
-
61
- ## v8.0.1
62
-
63
- #### Fixed
64
-
65
- - [#1262](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1262) Fix distinct alias when multiple databases used.
66
-
67
- ## v8.0.0
5
+ - [#1301](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1301) Add support for `INDEX INCLUDE`.
6
+ - [#1312](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1312) Add support for `insert_all` and `upsert_all`.
7
+ - [#1367](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1367) Added support for computed columns.
68
8
 
69
9
  #### Changed
70
10
 
71
- - [#1216](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1216) Refactor adapter interface to match abstract adapter.
72
- - [#1225](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1225) Drop support to Ruby 3.1.
11
+ - [#1273](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1273) TinyTDS v3+ is now required.
12
+ - [#1317](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1317) Reverse order of values when upserting.
13
+ - [#1343](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1343) Support more Azure services by changing language source.
73
14
 
74
15
  #### Fixed
75
16
 
76
- - [#1215](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1215) Fix mismatched foreign key errors.
17
+ - [#1313](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1313) Correctly retrieve the SQL Server database version.
18
+ - [#1320](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1320) Fix SQL statement to calculate `updated_at` when upserting.
19
+ - [#1327](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1327) Fix multiple `nil` identity columns for merge insert.
20
+ - [#1338](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1338) Fix `insert_all`/`upsert_all` for table names containing numbers.
21
+ - [#1345](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1345) Maintain index options during `change_column` operations.
22
+ - [#1357](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1357) Support cross database inserts.
77
23
 
78
- Please check [7-2-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/blob/7-2-stable/CHANGELOG.md) for previous changes.
24
+ Please check [8-0-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/blob/8-0-stable/CHANGELOG.md) for previous changes.
data/Dockerfile.ci CHANGED
@@ -9,6 +9,6 @@ WORKDIR $WORKDIR
9
9
 
10
10
  COPY . $WORKDIR
11
11
 
12
- RUN bundle install --jobs `expr $(cat /proc/cpuinfo | grep -c "cpu cores") - 1` --retry 3
12
+ RUN RAILS_BRANCH=8-1-stable bundle install --jobs `expr $(cat /proc/cpuinfo | grep -c "cpu cores") - 1` --retry 3
13
13
 
14
14
  CMD ["sh"]
data/Gemfile CHANGED
@@ -7,8 +7,8 @@ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
7
7
  gemspec
8
8
 
9
9
  gem "bcrypt"
10
- gem "pg", ">= 0.18.0"
11
- gem "sqlite3", ">= 1.6.6"
10
+ gem "pg", "1.5.9"
11
+ gem "sqlite3", ">= 2.1"
12
12
  gem "tzinfo-data", platforms: [:mingw, :mswin, :x64_mingw, :jruby]
13
13
  gem "benchmark-ips"
14
14
  gem "minitest", ">= 5.15.0"
@@ -27,14 +27,14 @@ else
27
27
  require "net/http"
28
28
  require "yaml"
29
29
 
30
- spec = eval(File.read("activerecord-sqlserver-adapter.gemspec"))
31
- ver = spec.dependencies.detect { |d| d.name == "activerecord" }.requirement.requirements.first.last.version
30
+ spec = Gem::Specification.load("activerecord-sqlserver-adapter.gemspec")
31
+ ver = spec.dependencies.detect { |d| d.name == "activerecord" }.requirement.requirements.first.last.version
32
32
  major, minor, _tiny, pre = ver.split(".")
33
33
 
34
34
  if pre
35
35
  ver
36
36
  else
37
- uri = URI.parse("https://rubygems.org/api/v1/versions/activerecord.yaml")
37
+ uri = URI.parse("https://rubygems.org/api/v1/versions/activerecord.yaml")
38
38
  http = Net::HTTP.new(uri.host, uri.port)
39
39
  http.use_ssl = true
40
40
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE
@@ -68,9 +68,7 @@ end
68
68
  group :guard do
69
69
  gem "guard"
70
70
  gem "guard-minitest"
71
- gem "terminal-notifier-guard" if RbConfig::CONFIG["host_os"] =~ /darwin/
71
+ gem "terminal-notifier-guard" if /darwin/.match?(RbConfig::CONFIG["host_os"])
72
72
  end
73
73
 
74
- group :rubocop do
75
- gem "rubocop", require: false
76
- end
74
+ gem "standard", require: false
data/Guardfile CHANGED
@@ -6,7 +6,7 @@ clearing :on
6
6
  notification :terminal_notifier if defined?(TerminalNotifier)
7
7
  ignore %r{debug\.log}
8
8
 
9
- ar_lib = File.join ARTest::SQLServer.root_activerecord, "lib"
9
+ ar_lib = File.join ARTest::SQLServer.root_activerecord, "lib"
10
10
  ar_test = File.join ARTest::SQLServer.root_activerecord, "test"
11
11
 
12
12
  guard :minitest, {
@@ -24,7 +24,7 @@ guard :minitest, {
24
24
  else
25
25
  watch(%r{^test/cases/\w+_test_sqlserver\.rb$})
26
26
  watch(%r{^test/cases/coerced_tests\.rb$}) { "test/cases/coerced_tests.rb" }
27
- watch(%r{^lib/active_record/connection_adapters/sqlserver/([^/]+)\.rb$}) { |m| "test/cases/#{m[1]}_test_sqlserver.rb" }
27
+ watch(%r{^lib/active_record/connection_adapters/sqlserver/([^/]+)\.rb$}) { |m| "test/cases/#{m[1]}_test_sqlserver.rb" }
28
28
  watch(%r{^test/cases/helper_sqlserver\.rb$}) { "test" }
29
29
  end
30
30
  end
data/README.md CHANGED
@@ -16,23 +16,24 @@ maintenance group.
16
16
 
17
17
  See [Rubygems](https://rubygems.org/gems/activerecord-sqlserver-adapter/versions) for the latest version of the adapter for each Rails release.
18
18
 
19
- | Adapter Version | Rails Version | Support | Branch |
20
- |-----------------|---------------|----------------|-------------------------------------------------------------------------------------------------|
21
- | `8.0.x` | `8.0.x` | Active | [main](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/main) |
22
- | `7.2.x` | `7.2.x` | Active | [7-2-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/7-2-stable) |
23
- | `7.1.x` | `7.1.x` | Active | [7-1-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/7-1-stable) |
24
- | `7.0.x` | `7.0.x` | Ended | [7-0-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/7-0-stable) |
25
- | `6.1.x` | `6.1.x` | Ended | [6-1-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/6-1-stable) |
26
- | `6.0.x` | `6.0.x` | Ended | [6-0-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/6-0-stable) |
27
- | `5.2.x` | `5.2.x` | Ended | [5-2-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/5-2-stable) |
28
- | `5.1.x` | `5.1.x` | Ended | [5-1-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/5-1-stable) |
29
- | `4.2.x` | `4.2.x` | Ended | [4-2-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/4-2-stable) |
30
- | `4.1.x` | `4.1.x` | Ended | [4-1-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/4-1-stable) |
19
+ | Adapter Version | Rails Version | Support | Branch |
20
+ |-----------------|---------------|----------------|----------------------------------------------------------------------------------------------------|
21
+ | Unreleased | `8.1.x` | In Development | [main](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/main) |
22
+ | `8.0.x` | `8.0.x` | Active | [8-0-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/8-0-stable) |
23
+ | `7.2.x` | `7.2.x` | Ended | [7-2-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/7-2-stable) |
24
+ | `7.1.x` | `7.1.x` | Ended | [7-1-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/7-1-stable) |
25
+ | `7.0.x` | `7.0.x` | Ended | [7-0-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/7-0-stable) |
26
+ | `6.1.x` | `6.1.x` | Ended | [6-1-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/6-1-stable) |
27
+ | `6.0.x` | `6.0.x` | Ended | [6-0-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/6-0-stable) |
28
+ | `5.2.x` | `5.2.x` | Ended | [5-2-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/5-2-stable) |
29
+ | `5.1.x` | `5.1.x` | Ended | [5-1-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/5-1-stable) |
30
+ | `4.2.x` | `4.2.x` | Ended | [4-2-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/4-2-stable) |
31
+ | `4.1.x` | `4.1.x` | Ended | [4-1-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/4-1-stable) |
31
32
 
32
33
 
33
34
  #### Native Data Type Support
34
35
 
35
- We support every data type supported by FreeTDS. All simplified Rails types in migrations will correspond to a matching SQL Server national (unicode) data type. Always check the `initialize_native_database_types` [(here)](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/blob/master/lib/active_record/connection_adapters/sqlserver/schema_statements.rb) for an updated list.
36
+ We support every data type supported by FreeTDS. All simplified Rails types in migrations will correspond to a matching SQL Server national (unicode) data type. Always check the `NATIVE_DATABASE_TYPES` [(here)](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/blob/master/lib/active_record/connection_adapters/sqlserver_adapter.rb) for an updated list.
36
37
 
37
38
  The following types (`date`, `datetime2`, `datetimeoffset`, `time`) all require TDS version `7.3` with TinyTDS. We recommend using FreeTDS 1.0 or higher which default to using `TDSVER` to `7.3`. The adapter also sets TinyTDS's `tds_version` to this as well if non is specified.
38
39
 
@@ -185,6 +186,19 @@ The removal of duplicates happens during the SQL query.
185
186
 
186
187
  Because of this implementation, if you pass `on_duplicate` to `upsert_all`, make sure to assign your value to `target.[column_name]` (e.g. `target.status = GREATEST(target.status, 1)`). To access the values that you want to upsert, use `source.[column_name]`.
187
188
 
189
+ #### Computed Columns
190
+
191
+ The adapter supports computed columns. They can either be virtual `stored: false` (default) and persisted `stored: true`. You can create a computed column in a migration like so:
192
+
193
+ ```ruby
194
+ create_table :users do |t|
195
+ t.string :name
196
+ t.virtual :lower_name, as: "LOWER(name)", stored: false
197
+ t.virtual :upper_name, as: "UPPER(name)", stored: true
198
+ t.virtual :name_length, as: "LEN(name)"
199
+ end
200
+ ```
201
+
188
202
  ## New Rails Applications
189
203
 
190
204
  When creating a new Rails application you need to perform the following steps to connect a Rails application to a
@@ -226,6 +240,12 @@ The adapter has no strict gem dependencies outside of `ActiveRecord` and
226
240
  gem 'activerecord-sqlserver-adapter'
227
241
  ```
228
242
 
243
+ ## Reporting an Issue
244
+
245
+ Having a way to reproduce your issue will help people confirm, investigate, and ultimately fix your issue. You
246
+ can do this by providing an executable test case. To make this process easier, we have prepared a bug report template
247
+ for you to use as a starting point at [How to report a bug](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/wiki/How-to-report-a-bug).
248
+
229
249
  ## Contributing
230
250
 
231
251
  Please contribute to the project by submitting bug fixes and features. To make sure your fix/feature has
data/Rakefile CHANGED
@@ -11,7 +11,7 @@ task default: [:test]
11
11
  namespace :test do
12
12
  ENV["ARCONN"] = "sqlserver"
13
13
 
14
- %w(dblib).each do |mode|
14
+ %w[dblib].each do |mode|
15
15
  Rake::TestTask.new(mode) do |t|
16
16
  t.libs = ARTest::SQLServer.test_load_paths
17
17
  t.test_files = test_files
data/VERSION CHANGED
@@ -1 +1 @@
1
- 8.0.10
1
+ 8.1.0
@@ -3,30 +3,29 @@
3
3
  version = File.read(File.expand_path("VERSION", __dir__)).strip
4
4
 
5
5
  Gem::Specification.new do |spec|
6
- spec.name = "activerecord-sqlserver-adapter"
7
- spec.platform = Gem::Platform::RUBY
8
- spec.version = version
6
+ spec.name = "activerecord-sqlserver-adapter"
7
+ spec.platform = Gem::Platform::RUBY
8
+ spec.version = version
9
9
 
10
10
  spec.required_ruby_version = ">= 3.2.0"
11
11
 
12
- spec.license = "MIT"
13
- spec.authors = ["Ken Collins", "Anna Carey", "Will Bond", "Murray Steele", "Shawn Balestracci", "Joe Rafaniello", "Tom Ward", "Aidan Haran"]
14
- spec.email = ["ken@metaskills.net", "will@wbond.net"]
15
- spec.homepage = "http://github.com/rails-sqlserver/activerecord-sqlserver-adapter"
16
- spec.summary = "ActiveRecord SQL Server Adapter."
17
- spec.description = "ActiveRecord SQL Server Adapter. SQL Server 2012 and upward."
12
+ spec.license = "MIT"
13
+ spec.authors = ["Ken Collins", "Anna Carey", "Will Bond", "Murray Steele", "Shawn Balestracci", "Joe Rafaniello", "Tom Ward", "Aidan Haran"]
14
+ spec.email = ["ken@metaskills.net", "will@wbond.net"]
15
+ spec.homepage = "http://github.com/rails-sqlserver/activerecord-sqlserver-adapter"
16
+ spec.summary = "ActiveRecord SQL Server Adapter."
17
+ spec.description = "ActiveRecord SQL Server Adapter. SQL Server 2012 and upward."
18
18
 
19
- spec.metadata = {
19
+ spec.metadata = {
20
20
  "bug_tracker_uri" => "https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/issues",
21
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}",
22
+ "source_code_uri" => "https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/v#{version}"
23
23
  }
24
24
 
25
- spec.files = `git ls-files -z`.split("\x0")
26
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
27
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
25
+ spec.files = `git ls-files -z`.split("\x0")
26
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
28
27
  spec.require_paths = ["lib"]
29
28
 
30
- spec.add_dependency "activerecord", "~> 8.0.0"
31
- spec.add_dependency "tiny_tds"
29
+ spec.add_dependency "activerecord", "~> 8.1.0.rc1"
30
+ spec.add_dependency "tiny_tds", "~> 3.0"
32
31
  end
data/compose.ci.yaml CHANGED
@@ -1,13 +1,20 @@
1
- version: "2.2"
2
1
  services:
3
2
  sqlserver:
4
3
  image: ghcr.io/rails-sqlserver/mssql-server-linux-rails
5
4
  ci:
6
5
  environment:
7
6
  - ACTIVERECORD_UNITTEST_HOST=sqlserver
7
+ - RAILS_BRANCH=8-1-stable
8
8
  build:
9
9
  context: .
10
10
  dockerfile: Dockerfile.ci
11
11
  command: wait-for sqlserver:1433 -- bundle exec rake test
12
12
  depends_on:
13
13
  - "sqlserver"
14
+ standardrb:
15
+ environment:
16
+ - RAILS_BRANCH=8-1-stable
17
+ build:
18
+ context: .
19
+ dockerfile: Dockerfile.ci
20
+ command: bundle exec standardrb
@@ -15,7 +15,7 @@ module ActiveRecord
15
15
 
16
16
  super(attribute_names).reject do |name|
17
17
  column = self.class.columns_hash[name]
18
- column && column.respond_to?(:is_identity?) && column.is_identity?
18
+ column&.respond_to?(:is_identity?) && column.is_identity?
19
19
  end
20
20
  end
21
21
  end
@@ -32,8 +32,7 @@ module ActiveRecord
32
32
  executesql = executesql.match(SQLSERVER_STATEMENT_REGEXP).to_a[1]
33
33
 
34
34
  binds.each_with_index do |bind, index|
35
-
36
- value = if bind.is_a?(::ActiveModel::Attribute) then
35
+ value = if bind.is_a?(::ActiveModel::Attribute)
37
36
  connection.quote(bind.value_for_database)
38
37
  else
39
38
  connection.quote(bind)
@@ -5,6 +5,6 @@ require "active_support/core_ext/kernel/reporting"
5
5
  ActiveSupport.on_load(:active_record) do
6
6
  silence_warnings do
7
7
  # Already defined in Rails
8
- ActiveRecord::ExplainSubscriber::EXPLAINED_SQLS = /(select|update|delete|insert)\b/i
8
+ ActiveRecord::ExplainRegistry::Subscriber::EXPLAINED_SQLS = /(select|update|delete|insert)\b/i
9
9
  end
10
10
  end
@@ -24,16 +24,16 @@ module ActiveRecord
24
24
  def _construct_relation_for_exists(conditions)
25
25
  conditions = sanitize_forbidden_attributes(conditions)
26
26
 
27
- if distinct_value && offset_value
27
+ relation = if distinct_value && offset_value
28
28
  # Start of monkey-patch
29
29
  if select_values.present?
30
- relation = order(*select_values).limit!(1)
30
+ order(*select_values).limit!(1)
31
31
  else
32
- relation = except(:order).limit!(1)
32
+ except(:order).limit!(1)
33
33
  end
34
34
  # End of monkey-patch
35
35
  else
36
- relation = except(:select, :distinct, :order)._select!(::ActiveRecord::FinderMethods::ONE_AS_ONE).limit!(1)
36
+ except(:select, :distinct, :order)._select!(Arel.sql(::ActiveRecord::FinderMethods::ONE_AS_ONE, retryable: true)).limit!(1)
37
37
  end
38
38
 
39
39
  case conditions