From 22812411fa6956f66858825bc3fb6730dd9e7b0d Mon Sep 17 00:00:00 2001 From: Evan Brooks Date: Sun, 22 Feb 2026 00:16:23 -0400 Subject: [PATCH] Add Rails 8.1 compatibility - Relax activerecord dependency from ~> 8.0.0 to ~> 8.0 - mark_transaction_written_if_write and check_if_write_query removed in Rails 8.1 - Override decode_string_array in PostgreSQL adapter. ARJDBC may return PG arrays as either a Ruby Array or a PG string ("{a,b}"), so handle both cases. --- activerecord-jdbc-adapter.gemspec | 2 +- lib/arjdbc/abstract/database_statements.rb | 15 +++++++++++++++ lib/arjdbc/postgresql/schema_statements.rb | 17 +++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/activerecord-jdbc-adapter.gemspec b/activerecord-jdbc-adapter.gemspec index a32506441..f12115079 100644 --- a/activerecord-jdbc-adapter.gemspec +++ b/activerecord-jdbc-adapter.gemspec @@ -41,7 +41,7 @@ Gem::Specification.new do |gem| gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) } gem.test_files = gem.files.grep(%r{^test/}) - gem.add_dependency "activerecord", "~> 8.0.0" + gem.add_dependency "activerecord", "~> 8.0" #gem.add_development_dependency 'test-unit', '2.5.4' #gem.add_development_dependency 'test-unit-context', '>= 0.3.0' diff --git a/lib/arjdbc/abstract/database_statements.rb b/lib/arjdbc/abstract/database_statements.rb index 64a6a82f6..856619a23 100644 --- a/lib/arjdbc/abstract/database_statements.rb +++ b/lib/arjdbc/abstract/database_statements.rb @@ -9,6 +9,21 @@ module DatabaseStatements NO_BINDS = [].freeze + unless method_defined?(:mark_transaction_written_if_write) + def mark_transaction_written_if_write(sql) + if write_query?(sql) + ensure_writes_are_allowed(sql) + mark_transaction_written + end + end + end + + unless method_defined?(:check_if_write_query) + def check_if_write_query(sql) + ensure_writes_are_allowed(sql) if write_query?(sql) + end + end + def exec_insert(sql, name = nil, binds = NO_BINDS, pk = nil, sequence_name = nil, returning: nil) if preventing_writes? raise ActiveRecord::ReadOnlyError, "Write query attempted while in readonly mode: #{sql}" diff --git a/lib/arjdbc/postgresql/schema_statements.rb b/lib/arjdbc/postgresql/schema_statements.rb index 41f3ef91b..50d64bfea 100644 --- a/lib/arjdbc/postgresql/schema_statements.rb +++ b/lib/arjdbc/postgresql/schema_statements.rb @@ -6,6 +6,23 @@ module SchemaStatements ForeignKeyDefinition = ActiveRecord::ConnectionAdapters::ForeignKeyDefinition Utils = ActiveRecord::ConnectionAdapters::PostgreSQL::Utils + def decode_string_array(value) + return value if value.is_a?(Array) + _arjdbc_array_parser.parse_pg_array(value) + end + + private + + def _arjdbc_array_parser + @_arjdbc_array_parser ||= begin + obj = Object.new + obj.extend(ActiveRecord::ConnectionAdapters::PostgreSQL::ArrayParser) + obj + end + end + + public + def foreign_keys(table_name) scope = quoted_scope(table_name) fk_info = internal_exec_query(<<~SQL, "SCHEMA", allow_retry: true, materialize_transactions: false)