From 69b4ea01b0e8d5c268ea42e0a3492d2ee6e57512 Mon Sep 17 00:00:00 2001 From: Aidan Haran Date: Mon, 10 Feb 2025 14:05:19 +0000 Subject: [PATCH] Exist queries are retryable --- .../sqlserver/core_ext/finder_methods.rb | 2 +- test/cases/coerced_tests.rb | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/active_record/connection_adapters/sqlserver/core_ext/finder_methods.rb b/lib/active_record/connection_adapters/sqlserver/core_ext/finder_methods.rb index db2d06708..8c5fc8a85 100644 --- a/lib/active_record/connection_adapters/sqlserver/core_ext/finder_methods.rb +++ b/lib/active_record/connection_adapters/sqlserver/core_ext/finder_methods.rb @@ -33,7 +33,7 @@ def _construct_relation_for_exists(conditions) end # End of monkey-patch else - relation = except(:select, :distinct, :order)._select!(::ActiveRecord::FinderMethods::ONE_AS_ONE).limit!(1) + relation = except(:select, :distinct, :order)._select!(Arel.sql(::ActiveRecord::FinderMethods::ONE_AS_ONE, retryable: true)).limit!(1) end case conditions diff --git a/test/cases/coerced_tests.rb b/test/cases/coerced_tests.rb index 58d760341..e10267a49 100644 --- a/test/cases/coerced_tests.rb +++ b/test/cases/coerced_tests.rb @@ -1971,7 +1971,7 @@ def with_marshable_time_defaults # Revert changes @connection.change_column_default(:sst_datatypes, :datetime, current_default) if current_default.present? end - + # We need to give the full paths for this to work. undef_method :schema_dump_5_1_path def schema_dump_5_1_path @@ -2796,3 +2796,14 @@ def test_with_recursive_coerced end end +module ActiveRecord + class AdapterConnectionTest < ActiveRecord::TestCase + # Original method defined for core adapters. + undef_method :raw_transaction_open? + def raw_transaction_open?(connection) + connection.instance_variable_get(:@raw_connection).query("SELECT @@trancount").to_a[0][0] > 0 + rescue + false + end + end +end