Skip to content

Commit

Permalink
Newell/query executor reset (#32)
Browse files Browse the repository at this point in the history
* implement reset on query executor

* make methods smaller

* extract out query executor factory so we dont break lazy initialization of loggers
  • Loading branch information
andrew-newell authored and scytherswings committed Apr 23, 2019
1 parent dca4712 commit 24a3f34
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 7 deletions.
1 change: 1 addition & 0 deletions lib/pgdice.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down
11 changes: 5 additions & 6 deletions lib/pgdice/database_connection_factory.rb
Original file line number Diff line number Diff line change
@@ -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
2 changes: 1 addition & 1 deletion lib/pgdice/query_executor.rb
Original file line number Diff line number Diff line change
@@ -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
Expand Down
20 changes: 20 additions & 0 deletions lib/pgdice/query_executor_factory.rb
Original file line number Diff line number Diff line change
@@ -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
9 changes: 9 additions & 0 deletions test/pgdice/query_executor_factory_test.rb
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 24a3f34

Please sign in to comment.