activerecord-sqlserver-adapter 8.0.5 → 8.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 488cfb3fda58b07e4bacc2db733d766492f84d4d0af50ecd6e5548f066ac34b3
4
- data.tar.gz: b64864d043dd035dde5413736d9fc9adb5d2bf1e364b25ef57ca2ea69bc386cf
3
+ metadata.gz: 34f478c68720d0070576ee92aeaaaf4d32ed24a9edf746d575ddc1b7633c02f4
4
+ data.tar.gz: 5c9bbd2821b3d0431d93e74b07dc1a729fa5a90ee213e2a53f93e8b8d67034fa
5
5
  SHA512:
6
- metadata.gz: fe2eb7bbc39edbc855bba7403792e532a43cae178d1cd8943189142f61c4203b346cb0191366626422ec287fde5d77d174240bcdef37152d177acda8d1e5dad4
7
- data.tar.gz: 88ae10b6aa5b67f2bbc6a760a2f5af7679422fea1d10086aa3bb6592aaeadc202a2657c48906e4bb8b237acd7ca87e57588de6f02590a20a32278c855777b5c8
6
+ metadata.gz: 50dd731f8f49995aed5492cda26255234bb0c4b941cd67c26f9d8e7ca3e3ffe13d9d6470f3769617604388d9c92d3df99b21a2169d3c1c9c8c75906fe9d6d7bc
7
+ data.tar.gz: 66461bd72eaa9fd3cfb8235c6566f199eefae9e716ac59ed00908e3ddd19f99ec467c5fe83a9d1bf3ed3a8f7642e35c6267e6f6168344d9e1339bb950bc79e24
@@ -5,7 +5,7 @@ on: [push, pull_request]
5
5
  jobs:
6
6
  test:
7
7
  name: Run test suite
8
- runs-on: ubuntu-20.04 # TODO: Change back to 'ubuntu-latest' when https://github.com/microsoft/mssql-docker/issues/899 resolved.
8
+ runs-on: ubuntu-latest
9
9
 
10
10
  env:
11
11
  COMPOSE_FILE: compose.ci.yaml
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## v8.0.6
2
+
3
+ #### Fixed
4
+
5
+ - [#1318](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1318) Reverse order of values when upserting
6
+ - [#1321](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1321) Fix SQL statement to calculate `updated_at` when upserting
7
+
1
8
  ## v8.0.5
2
9
 
3
10
  #### Added
data/VERSION CHANGED
@@ -1 +1 @@
1
- 8.0.5
1
+ 8.0.6
@@ -159,6 +159,8 @@ module ActiveRecord
159
159
 
160
160
 
161
161
  def build_sql_for_merge_insert(insert:, insert_all:, columns_with_uniqueness_constraints:) # :nodoc:
162
+ insert_all.inserts.reverse! if insert.update_duplicates?
163
+
162
164
  sql = <<~SQL
163
165
  MERGE INTO #{insert.model.quoted_table_name} WITH (UPDLOCK, HOLDLOCK) AS target
164
166
  USING (
@@ -583,7 +585,7 @@ module ActiveRecord
583
585
  def build_sql_for_recording_timestamps_when_updating(insert:)
584
586
  insert.model.timestamp_attributes_for_update_in_model.filter_map do |column_name|
585
587
  if insert.send(:touch_timestamp_attribute?, column_name)
586
- "target.#{quote_column_name(column_name)}=CASE WHEN (#{insert.updatable_columns.map { |column| "(COALESCE(target.#{quote_column_name(column)}, 'NULL') = COALESCE(source.#{quote_column_name(column)}, 'NULL'))" }.join(" AND ")}) THEN target.#{quote_column_name(column_name)} ELSE #{high_precision_current_timestamp} END,"
588
+ "target.#{quote_column_name(column_name)}=CASE WHEN (#{insert.updatable_columns.map { |column| "(source.#{quote_column_name(column)} = target.#{quote_column_name(column)} OR (source.#{quote_column_name(column)} IS NULL AND target.#{quote_column_name(column)} IS NULL))" }.join(" AND ")}) THEN target.#{quote_column_name(column_name)} ELSE #{high_precision_current_timestamp} END,"
587
589
  end
588
590
  end.join
589
591
  end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper_sqlserver"
4
+ require "models/book"
5
+ require "models/sqlserver/recurring_task"
6
+
7
+ class InsertAllTestSQLServer < ActiveRecord::TestCase
8
+ # Test ported from the Rails `main` branch that is not on the `8-0-stable` branch.
9
+ def test_insert_all_only_applies_last_value_when_given_duplicate_identifiers
10
+ skip unless supports_insert_on_duplicate_skip?
11
+
12
+ Book.insert_all [
13
+ { id: 111, name: "expected_new_name" },
14
+ { id: 111, name: "unexpected_new_name" }
15
+ ]
16
+ assert_equal "expected_new_name", Book.find(111).name
17
+ end
18
+
19
+ # Test ported from the Rails `main` branch that is not on the `8-0-stable` branch.
20
+ def test_upsert_all_only_applies_last_value_when_given_duplicate_identifiers
21
+ skip unless supports_insert_on_duplicate_update? && !current_adapter?(:PostgreSQLAdapter)
22
+
23
+ Book.create!(id: 112, name: "original_name")
24
+
25
+ Book.upsert_all [
26
+ { id: 112, name: "unexpected_new_name" },
27
+ { id: 112, name: "expected_new_name" }
28
+ ]
29
+ assert_equal "expected_new_name", Book.find(112).name
30
+ end
31
+
32
+ test "upsert_all recording of timestamps works with mixed datatypes" do
33
+ task = RecurringTask.create!(
34
+ key: "abcdef",
35
+ priority: 5
36
+ )
37
+
38
+ RecurringTask.upsert_all([{
39
+ id: task.id,
40
+ priority: nil
41
+ }])
42
+
43
+ assert_not_equal task.updated_at, RecurringTask.find(task.id).updated_at
44
+ end
45
+ end
@@ -0,0 +1,3 @@
1
+ class RecurringTask < ActiveRecord::Base
2
+ self.table_name = "recurring_tasks"
3
+ end
@@ -360,4 +360,12 @@ ActiveRecord::Schema.define do
360
360
  name varchar(255)
361
361
  )
362
362
  TABLE_IN_OTHER_SCHEMA_USED_BY_MODEL
363
+
364
+ create_table "recurring_tasks", force: true do |t|
365
+ t.string :key
366
+ t.integer :priority, default: 0
367
+
368
+ t.datetime2 :created_at
369
+ t.datetime2 :updated_at
370
+ end
363
371
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-sqlserver-adapter
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.0.5
4
+ version: 8.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ken Collins
@@ -15,7 +15,7 @@ authors:
15
15
  autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
- date: 2025-03-20 00:00:00.000000000 Z
18
+ date: 2025-05-13 00:00:00.000000000 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: activerecord
@@ -164,6 +164,7 @@ files:
164
164
  - test/cases/helper_sqlserver.rb
165
165
  - test/cases/in_clause_test_sqlserver.rb
166
166
  - test/cases/index_test_sqlserver.rb
167
+ - test/cases/insert_all_test_sqlserver.rb
167
168
  - test/cases/json_test_sqlserver.rb
168
169
  - test/cases/lateral_test_sqlserver.rb
169
170
  - test/cases/migration_test_sqlserver.rb
@@ -205,6 +206,7 @@ files:
205
206
  - test/models/sqlserver/quoted_table.rb
206
207
  - test/models/sqlserver/quoted_view_1.rb
207
208
  - test/models/sqlserver/quoted_view_2.rb
209
+ - test/models/sqlserver/recurring_task.rb
208
210
  - test/models/sqlserver/sst_memory.rb
209
211
  - test/models/sqlserver/sst_string_collation.rb
210
212
  - test/models/sqlserver/string_default.rb
@@ -239,8 +241,8 @@ licenses:
239
241
  - MIT
240
242
  metadata:
241
243
  bug_tracker_uri: https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/issues
242
- changelog_uri: https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/blob/v8.0.5/CHANGELOG.md
243
- source_code_uri: https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/v8.0.5
244
+ changelog_uri: https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/blob/v8.0.6/CHANGELOG.md
245
+ source_code_uri: https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/v8.0.6
244
246
  post_install_message:
245
247
  rdoc_options: []
246
248
  require_paths:
@@ -283,6 +285,7 @@ test_files:
283
285
  - test/cases/helper_sqlserver.rb
284
286
  - test/cases/in_clause_test_sqlserver.rb
285
287
  - test/cases/index_test_sqlserver.rb
288
+ - test/cases/insert_all_test_sqlserver.rb
286
289
  - test/cases/json_test_sqlserver.rb
287
290
  - test/cases/lateral_test_sqlserver.rb
288
291
  - test/cases/migration_test_sqlserver.rb
@@ -324,6 +327,7 @@ test_files:
324
327
  - test/models/sqlserver/quoted_table.rb
325
328
  - test/models/sqlserver/quoted_view_1.rb
326
329
  - test/models/sqlserver/quoted_view_2.rb
330
+ - test/models/sqlserver/recurring_task.rb
327
331
  - test/models/sqlserver/sst_memory.rb
328
332
  - test/models/sqlserver/sst_string_collation.rb
329
333
  - test/models/sqlserver/string_default.rb