Class: Janko::Merge

Inherits:
Object
  • Object
show all
Includes:
Agrippa::Delegation, Agrippa::MutableHash
Defined in:
lib/janko/merge.rb

Instance Method Summary collapse

Instance Method Details

#alter(*list, &block) ⇒ Object



67
68
69
70
71
# File 'lib/janko/merge.rb', line 67

def alter(*list, &block)
    preserve_state_if_started
    columns.alter(*list, &block)
    self
end

#columnsObject



94
95
96
97
98
99
100
# File 'lib/janko/merge.rb', line 94

def columns
    @state[:columns] ||= begin
        raise("Connect before setting merge parameters.") \
            unless connected?
        default_column_list
    end
end

#connect(connection) ⇒ Object



26
27
28
29
# File 'lib/janko/merge.rb', line 26

def connect(connection)
    @state[:connection] = Connection.build(connection)
    self
end

#default_stateObject



22
23
24
# File 'lib/janko/merge.rb', line 22

def default_state
    { strategy: Janko::BulkMerge, connection: Connection.default }
end

#insert(*list) ⇒ Object



55
56
57
58
59
# File 'lib/janko/merge.rb', line 55

def insert(*list)
    preserve_state_if_started
    columns.tag("insert", *list)
    self
end

#key(*list) ⇒ Object



43
44
45
46
47
# File 'lib/janko/merge.rb', line 43

def key(*list)
    preserve_state_if_started
    columns.tag("key", *list)
    self
end

#push(*args) ⇒ Object



81
82
83
84
85
# File 'lib/janko/merge.rb', line 81

def push(*args)
    raise("Call #start before #push") unless @state[:started]
    rollback_on_error { delegate.push(*args) }
    self
end

#returning(returning) ⇒ Object



36
37
38
39
40
41
# File 'lib/janko/merge.rb', line 36

def returning(returning)
    returning = returning.to_s
    raise("Merge can return inserted, updated, all, or none.") \
        unless %w(inserted updated all none).include?(returning)
    chain(returning: returning)
end

#select(*list) ⇒ Object



61
62
63
64
65
# File 'lib/janko/merge.rb', line 61

def select(*list)
    preserve_state_if_started
    columns.tag("select", *list)
    self
end

#startObject



73
74
75
76
77
78
79
# File 'lib/janko/merge.rb', line 73

def start
    @state[:started] = true
    reset_delegate
    begin_transaction and lock_table
    rollback_on_error { delegate.start }
    self
end

#stopObject



87
88
89
90
91
92
# File 'lib/janko/merge.rb', line 87

def stop
    raise("Call #start before #stop") unless @state[:started]
    rollback_on_error { delegate.stop }
    @state[:started] = false
    self
end

#update(*list) ⇒ Object



49
50
51
52
53
# File 'lib/janko/merge.rb', line 49

def update(*list)
    preserve_state_if_started
    columns.tag("update", *list)
    self
end

#use(strategy) ⇒ Object



31
32
33
34
# File 'lib/janko/merge.rb', line 31

def use(strategy)
    @state[:strategy] = strategy
    self
end