class Janko::BulkMerge

Public Class Methods

new(options = {}) click to toggle source
# File lib/janko/bulk_merge.rb, line 7
def initialize(options = {})
    @options = options
    @target = "merge_#{SecureRandom.hex(8)}"
    @upsert = Upsert.new(options.merge(from_table: @target))
    @importer = Import.new(strategy: Janko::CopyImporter,
        table: @target, connection: connection,
        columns: options[:columns])
end

Public Instance Methods

connection() click to toggle source
# File lib/janko/bulk_merge.rb, line 38
def connection
    @options[:connection]
end
push(*values) click to toggle source
# File lib/janko/bulk_merge.rb, line 22
def push(*values)
    @importer.push(*values)
    self
end
result() click to toggle source
# File lib/janko/bulk_merge.rb, line 34
def result
    @upsert.result
end
start() click to toggle source
# File lib/janko/bulk_merge.rb, line 16
def start
    create_copy_target
    @importer.start
    self
end
stop() click to toggle source
# File lib/janko/bulk_merge.rb, line 27
def stop
    @importer.stop
    @upsert.process.cleanup
    drop_copy_target
    self
end

Private Instance Methods

create_copy_target() click to toggle source
# File lib/janko/bulk_merge.rb, line 44
        def create_copy_target
            connection.exec(<<-END)
                CREATE TEMP TABLE #{@target} WITHOUT OIDS ON COMMIT DROP
                AS (SELECT * FROM #{@options[:table]}) WITH NO DATA;
            END
            self
        end
drop_copy_target() click to toggle source
# File lib/janko/bulk_merge.rb, line 52
def drop_copy_target
    connection.exec("DROP TABLE #{@target}")
    self
end