From b4ee9e760e907efea2e94272e019f97e313309d1 Mon Sep 17 00:00:00 2001 From: Aidan Haran Date: Sat, 1 Mar 2025 10:09:54 +0000 Subject: [PATCH 1/4] Fix affected rows count when lowercase schema reflection enabled --- .../sqlserver/database_statements.rb | 3 ++- test/cases/adapter_test_sqlserver.rb | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/lib/active_record/connection_adapters/sqlserver/database_statements.rb b/lib/active_record/connection_adapters/sqlserver/database_statements.rb index 9e36d61aa..41fbd12aa 100644 --- a/lib/active_record/connection_adapters/sqlserver/database_statements.rb +++ b/lib/active_record/connection_adapters/sqlserver/database_statements.rb @@ -39,7 +39,8 @@ def cast_result(raw_result) end def affected_rows(raw_result) - raw_result.first['AffectedRows'] + column_name = lowercase_schema_reflection ? 'affectedrows' : 'AffectedRows' + raw_result.first[column_name] end def raw_execute(sql, name = nil, binds = [], prepare: false, async: false, allow_retry: false, materialize_transactions: true, batch: false) diff --git a/test/cases/adapter_test_sqlserver.rb b/test/cases/adapter_test_sqlserver.rb index 96cc70bf0..1f9f71937 100644 --- a/test/cases/adapter_test_sqlserver.rb +++ b/test/cases/adapter_test_sqlserver.rb @@ -7,6 +7,7 @@ require "models/subscriber" require "models/minimalistic" require "models/college" +require "models/discount" class AdapterTestSQLServer < ActiveRecord::TestCase fixtures :tasks @@ -183,6 +184,24 @@ class AdapterTestSQLServer < ActiveRecord::TestCase assert_equal "Favorite number?", SSTestUppered.last.column1 assert SSTestUppered.columns_hash["column2"] end + + it "destroys model with no associations" do + connection.lowercase_schema_reflection = true + + rec = Discount.create! + assert_equal 1, Discount.count + rec.destroy! + assert_equal 0, Discount.count + end + + it "destroys model with association" do + connection.lowercase_schema_reflection = true + + post = Post.create!(title: 'Setup', body: 'Record to be deleted') + assert_equal 1, Post.count + post.destroy! + assert_equal 0, Post.count + end end describe "identity inserts" do From 9b4b352349c08cd36fd194bc5118d738839c1cbc Mon Sep 17 00:00:00 2001 From: Aidan Haran Date: Sat, 1 Mar 2025 10:13:07 +0000 Subject: [PATCH 2/4] Update CHANGELOG.md --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 40bee95dc..e8eb67001 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## Unreleased + +#### Fixed + +- [#1306](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1306) Fix affected rows count when lowercase schema reflection enabled + ## v8.0.2 #### Fixed From c91e9b40f331426f3751323fc9f35cd7cb2deb5b Mon Sep 17 00:00:00 2001 From: Aidan Haran Date: Sat, 1 Mar 2025 10:15:53 +0000 Subject: [PATCH 3/4] Update adapter_test_sqlserver.rb --- test/cases/adapter_test_sqlserver.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/cases/adapter_test_sqlserver.rb b/test/cases/adapter_test_sqlserver.rb index 1f9f71937..f84333ee6 100644 --- a/test/cases/adapter_test_sqlserver.rb +++ b/test/cases/adapter_test_sqlserver.rb @@ -188,9 +188,9 @@ class AdapterTestSQLServer < ActiveRecord::TestCase it "destroys model with no associations" do connection.lowercase_schema_reflection = true - rec = Discount.create! + discount = Discount.create! assert_equal 1, Discount.count - rec.destroy! + discount.destroy! assert_equal 0, Discount.count end From f5bba2c31e3a808be7ea7d979b410dc756575ea4 Mon Sep 17 00:00:00 2001 From: Aidan Haran Date: Sat, 1 Mar 2025 10:19:02 +0000 Subject: [PATCH 4/4] Update adapter_test_sqlserver.rb --- test/cases/adapter_test_sqlserver.rb | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/test/cases/adapter_test_sqlserver.rb b/test/cases/adapter_test_sqlserver.rb index f84333ee6..5f6c64784 100644 --- a/test/cases/adapter_test_sqlserver.rb +++ b/test/cases/adapter_test_sqlserver.rb @@ -188,19 +188,19 @@ class AdapterTestSQLServer < ActiveRecord::TestCase it "destroys model with no associations" do connection.lowercase_schema_reflection = true - discount = Discount.create! - assert_equal 1, Discount.count - discount.destroy! - assert_equal 0, Discount.count + assert_nothing_raised do + discount = Discount.create! + discount.destroy! + end end it "destroys model with association" do connection.lowercase_schema_reflection = true - post = Post.create!(title: 'Setup', body: 'Record to be deleted') - assert_equal 1, Post.count - post.destroy! - assert_equal 0, Post.count + assert_nothing_raised do + post = Post.create!(title: 'Setup', body: 'Record to be deleted') + post.destroy! + end end end