Skip to content

Commit

Permalink
fixup! WIP: Make this gem work with mysql2 and trilogy
Browse files Browse the repository at this point in the history
Co-authored-by: Benjamin Quorning <bquorning@zendesk.com>
  • Loading branch information
HeyNonster and bquorning committed Jun 19, 2023
1 parent b6bc3f4 commit 43ac2d0
Show file tree
Hide file tree
Showing 8 changed files with 34 additions and 41 deletions.
17 changes: 14 additions & 3 deletions lib/active_record_host_pool.rb
@@ -1,5 +1,19 @@
# frozen_string_literal: true

module ActiveRecordHostPool
class << self
attr_accessor :loaded_db_adapter
end
end

begin
require 'mysql2'
ActiveRecordHostPool.loaded_db_adapter = :mysql2
rescue LoadError
require 'activerecord-trilogy-adapter'
ActiveRecordHostPool.loaded_db_adapter = :trilogy
end

require 'active_record'
require 'active_record/base'
require 'active_record/connection_adapters/abstract_adapter'
Expand All @@ -9,6 +23,3 @@
require 'active_record_host_pool/pool_proxy'
require 'active_record_host_pool/connection_adapter_mixin'
require 'active_record_host_pool/version'

module ActiveRecordHostPool
end
24 changes: 12 additions & 12 deletions lib/active_record_host_pool/connection_adapter_mixin.rb
@@ -1,12 +1,12 @@
# frozen_string_literal: true

require_relative "helpers"

case ActiveRecordHostPool::Helpers.loaded_database_adapter
when 'mysql2'
case ActiveRecordHostPool.loaded_db_adapter
when :mysql2
require "active_record/connection_adapters/mysql2_adapter"
when 'trilogy'
require "active_record/connection_adapters/trilogy_adapter"
when :trilogy
require 'trilogy_adapter/connection'
require "trilogy_adapter/errors"
ActiveRecord::Base.extend TrilogyAdapter::Connection
end

module ActiveRecordHostPool
Expand Down Expand Up @@ -89,12 +89,12 @@ def _switch_connection
end
end

case ActiveRecordHostPool::Helpers.loaded_database_adapter
when 'mysql2'
case ActiveRecordHostPool.loaded_db_adapter
when :mysql2
def _arhp_select_db(database)
raw_connection.select_db(database)
end
when 'trilogy'
when :trilogy
def _arhp_select_db(database) # rubocop:disable Lint/DuplicateMethods
raw_connection.change_db(database)
end
Expand Down Expand Up @@ -140,10 +140,10 @@ def establish_connection(spec)
end
end

case ActiveRecordHostPool::Helpers.loaded_database_adapter
when 'mysql2'
case ActiveRecordHostPool.loaded_db_adapter
when :mysql2
ActiveRecord::ConnectionAdapters::Mysql2Adapter.include(ActiveRecordHostPool::DatabaseSwitch)
when 'trilogy'
when :trilogy
ActiveRecord::ConnectionAdapters::TrilogyAdapter.include(ActiveRecordHostPool::DatabaseSwitch)
end

Expand Down
13 changes: 0 additions & 13 deletions lib/active_record_host_pool/helpers.rb

This file was deleted.

6 changes: 3 additions & 3 deletions lib/active_record_host_pool/pool_proxy_6_1.rb
Expand Up @@ -15,10 +15,10 @@
module ActiveRecordHostPool
# Sits between ConnectionHandler and a bunch of different ConnectionPools (one per host).
class PoolProxy < Delegator
case ActiveRecordHostPool::Helpers.loaded_database_adapter
when 'mysql2'
case ActiveRecordHostPool.loaded_db_adapter
when :mysql2
RESCUABLE_DB_ERROR = Mysql2::Error
when 'trilogy'
when :trilogy
RESCUABLE_DB_ERROR = Trilogy::ProtocolError
end

Expand Down
2 changes: 1 addition & 1 deletion test/database.yml
@@ -1,5 +1,5 @@
<% mysql = URI(ENV['MYSQL_URL'] || 'mysql://root@127.0.0.1:3306') %>
<% adapter = ActiveRecordHostPool::Helpers.loaded_database_adapter %>
<% adapter = ActiveRecordHostPool.loaded_db_adapter %>

# ARHP creates separate connection pools based on the pool key.
# The pool key is defined as:
Expand Down
5 changes: 0 additions & 5 deletions test/helper.rb
Expand Up @@ -9,11 +9,6 @@
require 'minitest/mock_expectations'
require 'phenix'

if ActiveRecordHostPool::Helpers.loaded_database_adapter == 'trilogy'
require 'trilogy_adapter/connection'
ActiveRecord::Base.extend TrilogyAdapter::Connection
end

ENV['RAILS_ENV'] = 'test'
ENV['LEGACY_CONNECTION_HANDLING'] = 'true' if ENV['LEGACY_CONNECTION_HANDLING'].nil?

Expand Down
6 changes: 3 additions & 3 deletions test/test_arhp_caching.rb
Expand Up @@ -64,10 +64,10 @@ def test_models_with_matching_hosts_and_non_matching_databases_issue_exists_with

cached_db = Pool1DbC.connection.unproxied.pool.connections.first.instance_variable_get(:@_cached_current_database)

case ActiveRecordHostPool::Helpers.loaded_database_adapter
when 'mysql2'
case ActiveRecordHostPool.loaded_db_adapter
when :mysql2
assert_equal("Mysql2::Error: Table '#{cached_db}.pool1_db_cs' doesn't exist", exception.message)
when 'trilogy'
when :trilogy
assert_equal("Trilogy::ProtocolError: 1146: Table '#{cached_db}.pool1_db_cs' doesn't exist", exception.message)
end
end
Expand Down
2 changes: 1 addition & 1 deletion test/three_tier_database.yml
@@ -1,5 +1,5 @@
<% mysql = URI(ENV['MYSQL_URL'] || 'mysql://root@127.0.0.1:3306') %>
<% adapter = ActiveRecordHostPool::Helpers.loaded_database_adapter %>
<% adapter = ActiveRecordHostPool.loaded_db_adapter %>

# This .yml file is loaded in Rails 6.1 when ActiveRecord::Base.legacy_connection_handling = false
#
Expand Down

0 comments on commit 43ac2d0

Please sign in to comment.