From bed24fd8662707e681f03ab55452b2c757a1c4d0 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 20 Jan 2026 15:28:23 +0000 Subject: [PATCH 1/2] fix: add conditional check_if_write_query for Rails 8.1 compatibility --- .../connection_adapters/redshift_8_0_adapter.rb | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/active_record/connection_adapters/redshift_8_0_adapter.rb b/lib/active_record/connection_adapters/redshift_8_0_adapter.rb index 2462d4e..0f785bd 100644 --- a/lib/active_record/connection_adapters/redshift_8_0_adapter.rb +++ b/lib/active_record/connection_adapters/redshift_8_0_adapter.rb @@ -360,6 +360,16 @@ def translate_exception(exception, message:, sql:, binds:) end end + # Rails 8.1 deprecated AbstractAdapter#check_if_write_query + # Implement it here for compatibility if it doesn't exist in the parent class + unless AbstractAdapter.method_defined?(:check_if_write_query) + def check_if_write_query(sql) + return unless preventing_writes? && write_query?(sql) + + raise ActiveRecord::ReadOnlyError, "Write query attempted while in readonly mode: #{sql}" + end + end + class << self def initialize_type_map(m) # :nodoc: From 6d2f4f541e77057cbba0bd815f382c12f2d41861 Mon Sep 17 00:00:00 2001 From: Denis Demchenko Date: Wed, 21 Jan 2026 14:43:01 +0200 Subject: [PATCH 2/2] fix: fixed missing mark_transaction_written_if_write and in_transaction? methods --- .../redshift_8_0_adapter.rb | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/lib/active_record/connection_adapters/redshift_8_0_adapter.rb b/lib/active_record/connection_adapters/redshift_8_0_adapter.rb index 0f785bd..9958e8d 100644 --- a/lib/active_record/connection_adapters/redshift_8_0_adapter.rb +++ b/lib/active_record/connection_adapters/redshift_8_0_adapter.rb @@ -90,6 +90,25 @@ class RedshiftAdapter < AbstractAdapter include Redshift::SchemaStatements include Redshift::DatabaseStatements + # Rails 8.1+ compatibility: mark_transaction_written_if_write was removed + # and replaced with mark_transaction_written (no parameters). + # This method provides backward compatibility for our adapter. + if ActiveRecord.version >= Gem::Version.new('8.1.0') + def mark_transaction_written_if_write(sql) # :nodoc: + transaction = current_transaction + if transaction.open? && write_query?(sql) + mark_transaction_written + end + end + end + + # Compatibility: in_transaction? is defined in PostgreSQLAdapter but not in AbstractAdapter. + # Since RedshiftAdapter inherits from AbstractAdapter (not PostgreSQLAdapter), + # we need to provide this method. It's used for prepared statement cache handling. + def in_transaction? # :nodoc: + open_transactions > 0 + end + def schema_creation # :nodoc: Redshift::SchemaCreation.new self end