Class: AlgebraDB::Exec::Delivery

Inherits:
Object
  • Object
show all
Defined in:
lib/algebra_db/exec/delivery.rb

Overview

Something we can hand off to a connection to get back ruby values to play with.

Instance Method Summary collapse

Constructor Details

#initialize(query_builder, select_decoder) ⇒ Delivery



7
8
9
10
# File 'lib/algebra_db/exec/delivery.rb', line 7

def initialize(query_builder, select_decoder)
  @query_builder = query_builder
  @select_decoder = select_decoder
end

Instance Method Details

#execute!(connection) ⇒ Object



12
13
14
15
16
17
18
19
20
21
# File 'lib/algebra_db/exec/delivery.rb', line 12

def execute!(connection)
  return enum_for(:execute!, connection) unless block_given?

  execute_raw!(connection) do |result|
    result.type_map = @select_decoder.pg_type_map
    result.each do |row|
      yield @select_decoder.decode_row(row)
    end
  end
end

#execute_raw!(connection) ⇒ Object

Execute a query raw, IE, don’t do decoding.



25
26
27
28
29
30
31
32
# File 'lib/algebra_db/exec/delivery.rb', line 25

def execute_raw!(connection)
  sb = SyntaxBuilder.new.tap { |t| @query_builder.render_syntax(t) }
  # rubocop:disable Style/ExplicitBlockArgument
  connection.exec_params(sb.syntax, sb.params) do |res|
    yield res
  end
  # rubocop:enable Style/ExplicitBlockArgument
end