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

Version Path
activerecord-multi-tenant-2.2.0 lib/activerecord-multi-tenant/copy_from_client.rb
activerecord-multi-tenant-2.1.6 lib/activerecord-multi-tenant/copy_from_client.rb
activerecord-multi-tenant-2.1.5 lib/activerecord-multi-tenant/copy_from_client.rb
activerecord-multi-tenant-2.1.4 lib/activerecord-multi-tenant/copy_from_client.rb
activerecord-multi-tenant-2.1.3 lib/activerecord-multi-tenant/copy_from_client.rb
activerecord-multi-tenant-2.1.2 lib/activerecord-multi-tenant/copy_from_client.rb
activerecord-multi-tenant-2.1.1 lib/activerecord-multi-tenant/copy_from_client.rb
activerecord-multi-tenant-2.0.0 lib/activerecord-multi-tenant/copy_from_client.rb
activerecord-multi-tenant-1.2.0 lib/activerecord-multi-tenant/copy_from_client.rb