Class: Pgtk::Pool::Txn

Inherits:
Object
  • Object
show all
Defined in:
lib/pgtk/pool.rb

Overview

A temporary class to execute a single SQL request.

Instance Method Summary collapse

Constructor Details

#initialize(conn, log) ⇒ Txn



135
136
137
138
# File 'lib/pgtk/pool.rb', line 135

def initialize(conn, log)
  @conn = conn
  @log = log
end

Instance Method Details

#exec(query, args = [], result = 0) {|Hash| ... } ⇒ Object

Exec a single parameterized command.

Yields:

  • (Hash)

    Rows



145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
# File 'lib/pgtk/pool.rb', line 145

def exec(query, args = [], result = 0)
  start = Time.now
  sql = query.is_a?(Array) ? query.join(' ') : query
  begin
    out =
      if args.empty?
        @conn.exec(sql) do |res|
          if block_given?
            yield res
          else
            res.each.to_a
          end
        end
      else
        @conn.exec_params(sql, args, result) do |res|
          if block_given?
            yield res
          else
            res.each.to_a
          end
        end
      end
  rescue StandardError => e
    @log.error("#{sql}: #{e.message}")
    raise e
  end
  lag = Time.now - start
  if lag < 1
    @log.debug("#{sql}: #{(lag * 1000).round}ms / #{@conn.object_id}")
  else
    @log.info("#{sql}: #{format('%.02f', lag)}s")
  end
  out
end