diff --git a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb index f588f76d85..7e0160e7cb 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb @@ -160,9 +160,10 @@ def schema_migration # :nodoc: end end - def prepared_statements + def prepared_statements? @prepared_statements && !prepared_statements_disabled_cache.include?(object_id) end + alias :prepared_statements :prepared_statements? def prepared_statements_disabled_cache # :nodoc: Thread.current[:ar_prepared_statements_disabled_cache] ||= Set.new @@ -256,7 +257,7 @@ def seconds_idle # :nodoc: end def unprepared_statement - cache = prepared_statements_disabled_cache.add(object_id) if @prepared_statements + cache = prepared_statements_disabled_cache.add?(object_id) if @prepared_statements yield ensure cache&.delete(object_id) diff --git a/activerecord/test/cases/bind_parameter_test.rb b/activerecord/test/cases/bind_parameter_test.rb index 3de48e13a1..dab940b12e 100644 --- a/activerecord/test/cases/bind_parameter_test.rb +++ b/activerecord/test/cases/bind_parameter_test.rb @@ -173,6 +173,22 @@ def test_bind_params_to_sql_with_unprepared_statements end end + def test_nested_unprepared_statements + assert_predicate @connection, :prepared_statements? + + @connection.unprepared_statement do + assert_not_predicate @connection, :prepared_statements? + + @connection.unprepared_statement do + assert_not_predicate @connection, :prepared_statements? + end + + assert_not_predicate @connection, :prepared_statements? + end + + assert_predicate @connection, :prepared_statements? + end + private def assert_bind_params_to_sql table = Author.quoted_table_name