Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions lib/active_record/connection_adapters/redshift_8_0_adapter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -360,6 +379,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:
Expand Down