Sha256: 92d2363553ffa91c641a3ebec43da358363c09f642637d08d0f5aff614023e9e
Contents?: true
Size: 894 Bytes
Versions: 9
Compression:
Stored size: 894 Bytes
Contents
module MultiTenant class CopyFromClientHelper attr_reader :count def initialize(conn, column_types) @count = 0 @conn = conn @column_types = column_types end def <<(row) row = row.map.with_index { |val, idx| @column_types[idx].serialize(val) } @conn.put_copy_data(row) @count += 1 end end module CopyFromClient def copy_from_client(columns, &block) conn = connection.raw_connection column_types = columns.map { |c| type_for_attribute(c.to_s) } helper = MultiTenant::CopyFromClientHelper.new(conn, column_types) conn.copy_data %{COPY #{quoted_table_name}("#{columns.join('","')}") FROM STDIN}, PG::TextEncoder::CopyRow.new do block.call helper end helper.count end end end ActiveSupport.on_load(:active_record) do |base| base.extend(MultiTenant::CopyFromClient) end
Version data entries
9 entries across 9 versions & 1 rubygems