diff --git a/lib/pgdice.rb b/lib/pgdice.rb index 5179c29..97364ed 100644 --- a/lib/pgdice.rb +++ b/lib/pgdice.rb @@ -43,6 +43,7 @@ require 'pgdice/partition_dropper_factory' require 'pgdice/query_executor' +require 'pgdice/query_executor_factory' require 'pgdice/database_connection' require 'pgdice/database_connection_factory' diff --git a/lib/pgdice/database_connection_factory.rb b/lib/pgdice/database_connection_factory.rb index 5bbfeba..959d2d4 100644 --- a/lib/pgdice/database_connection_factory.rb +++ b/lib/pgdice/database_connection_factory.rb @@ -1,21 +1,20 @@ # frozen_string_literal: true -# Entry point for PartitionManager +# Entry point module PgDice - # PartitionListerFactory is a class used to build PartitionListers + # DatabaseConnectionFactory is a class used to build DatabaseConnections class DatabaseConnectionFactory extend Forwardable - def_delegators :@configuration, :logger, :pg_connection, :dry_run + def_delegators :@configuration, :logger, :dry_run def initialize(configuration, opts = {}) @configuration = configuration - @query_executor = opts[:query_executor] ||= PgDice::QueryExecutor.new(logger: logger, - connection_supplier: -> { pg_connection }) + @query_executor_factory = opts[:query_executor_factory] ||= PgDice::QueryExecutorFactory.new(configuration, opts) end def call - PgDice::DatabaseConnection.new(logger: logger, query_executor: @query_executor, dry_run: dry_run) + PgDice::DatabaseConnection.new(logger: logger, query_executor: @query_executor_factory.call, dry_run: dry_run) end end end diff --git a/lib/pgdice/query_executor.rb b/lib/pgdice/query_executor.rb index 665a815..e27cbc4 100644 --- a/lib/pgdice/query_executor.rb +++ b/lib/pgdice/query_executor.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -# Entry point for DatabaseConnection +# Entry point module PgDice # Wrapper class around pg_connection to reset connection on PG errors class QueryExecutor diff --git a/lib/pgdice/query_executor_factory.rb b/lib/pgdice/query_executor_factory.rb new file mode 100644 index 0000000..70d9eee --- /dev/null +++ b/lib/pgdice/query_executor_factory.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +# Entry point +module PgDice + # QueryExecutorFactory is a class used to build QueryExecutors + class QueryExecutorFactory + extend Forwardable + + def_delegators :@configuration, :logger, :pg_connection + + def initialize(configuration, opts = {}) + @configuration = configuration + @connection_supplier = opts[:connection_supplier] ||= -> { pg_connection } + end + + def call + PgDice::QueryExecutor.new(logger: logger, connection_supplier: @connection_supplier) + end + end +end diff --git a/test/pgdice/query_executor_factory_test.rb b/test/pgdice/query_executor_factory_test.rb new file mode 100644 index 0000000..84e9d00 --- /dev/null +++ b/test/pgdice/query_executor_factory_test.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +require 'test_helper' + +class QueryExecutorFactoryTest < Minitest::Test + def test_can_generate_query_executor + assert PgDice::QueryExecutorFactory.new(PgDice.configuration).call + end +end