Class: Sequel::Dataset

Inherits:
Object
  • Object
show all
Defined in:
lib/sequel/oracle_extensions/merge.rb

Defined Under Namespace

Modules: MergeBlockCopy

Constant Summary collapse

MERGE_CLAUSE_METHODS =
clause_methods(:merge, %w'target source join update delete insert')

Instance Method Summary collapse

Instance Method Details

#merge(&block) ⇒ Object



8
9
10
# File 'lib/sequel/oracle_extensions/merge.rb', line 8

def merge(&block)
  execute_dui merge_sql(&block)
end

#merge_into(*values, &block) ⇒ Object



16
17
18
# File 'lib/sequel/oracle_extensions/merge.rb', line 16

def merge_into(*values, &block)
  execute_dui merge_into_sql(*values, &block)
end

#merge_into_sql(into, on, *values, &block) ⇒ Object



42
43
44
# File 'lib/sequel/oracle_extensions/merge.rb', line 42

def merge_into_sql(into, on, *values, &block)
  merge_sql into, self, on, *values, &block
end

#merge_sql(*values, &block) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/sequel/oracle_extensions/merge.rb', line 20

def merge_sql(*values, &block)
  ms = clone
 ms.opts = { :into=>values.shift, :using=>values.shift, :on=>[values.shift].compact }
      [:update, :insert, :delete].each{|k| ms.opts[k] = values.shift }
 ms.opts.update :defaults=>@opts[:defaults], :overrides=>@opts[:overrides]
    
  if block_given?
   ms.extend(MergeBlockCopy)
   ms.instance_eval(&block)
   ms = ms.clone(ms.opts)
  end

  ms.opts[:into] ||= @opts[:from].first
  ms.opts[:on] << @opts[:where] if @opts[:where]

  ms.send :_merge_sql
end

#merge_using(*values, &block) ⇒ Object



12
13
14
# File 'lib/sequel/oracle_extensions/merge.rb', line 12

def merge_using(*values, &block)
  execute_dui merge_using_sql(*values, &block)
end

#merge_using_sql(using, *values, &block) ⇒ Object



38
39
40
# File 'lib/sequel/oracle_extensions/merge.rb', line 38

def merge_using_sql(using, *values, &block)
  merge_sql @opts[:from].first, using, *values, &block
end