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 +4 -4
- data/.github/workflows/ci.yml +1 -1
- data/CHANGELOG.md +7 -0
- data/VERSION +1 -1
- data/lib/active_record/connection_adapters/sqlserver/database_statements.rb +3 -1
- data/test/cases/insert_all_test_sqlserver.rb +45 -0
- data/test/models/sqlserver/recurring_task.rb +3 -0
- data/test/schema/sqlserver_specific_schema.rb +8 -0
- metadata +8 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 34f478c68720d0070576ee92aeaaaf4d32ed24a9edf746d575ddc1b7633c02f4
|
4
|
+
data.tar.gz: 5c9bbd2821b3d0431d93e74b07dc1a729fa5a90ee213e2a53f93e8b8d67034fa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 50dd731f8f49995aed5492cda26255234bb0c4b941cd67c26f9d8e7ca3e3ffe13d9d6470f3769617604388d9c92d3df99b21a2169d3c1c9c8c75906fe9d6d7bc
|
7
|
+
data.tar.gz: 66461bd72eaa9fd3cfb8235c6566f199eefae9e716ac59ed00908e3ddd19f99ec467c5fe83a9d1bf3ed3a8f7642e35c6267e6f6168344d9e1339bb950bc79e24
|
data/.github/workflows/ci.yml
CHANGED
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.
|
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| "(
|
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
|
@@ -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.
|
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-
|
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.
|
243
|
-
source_code_uri: https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/v8.0.
|
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
|