class SqlToCsvStream::PostgresqlCopyEnumerator

Constants

COPY_OPTIONS_DEFAULTS

Public Class Methods

default_connection() click to toggle source
# File lib/sql_to_csv_stream/postgresql_copy_enumerator.rb, line 9
def self.default_connection
  raise 'PostgreSQL database connection required' unless defined?(ActiveRecord)

  ActiveRecord::Base.connection.raw_connection
end
new(sql, connection: self.class.default_connection, copy_options: {}) click to toggle source
# File lib/sql_to_csv_stream/postgresql_copy_enumerator.rb, line 15
def initialize(sql, connection: self.class.default_connection, copy_options: {})
  @sql = sql.chomp(';')
  @connection = connection
  @copy_options = COPY_OPTIONS_DEFAULTS.merge(copy_options)
end

Public Instance Methods

each() { |row| ... } click to toggle source
# File lib/sql_to_csv_stream/postgresql_copy_enumerator.rb, line 21
def each
  @connection.copy_data(copy_sql) do
    while (row = @connection.get_copy_data)
      yield(row) if block_given?
    end
  end
end

Private Instance Methods

copy_sql() click to toggle source
# File lib/sql_to_csv_stream/postgresql_copy_enumerator.rb, line 31
def copy_sql
  "COPY (#{@sql}) TO STDOUT WITH (#{joined_copy_options})"
end
joined_copy_options() click to toggle source
# File lib/sql_to_csv_stream/postgresql_copy_enumerator.rb, line 35
def joined_copy_options
  @copy_options.map { |k, v| "#{k.upcase} #{v}" }
               .join(', ')
end