Module: ActiveRecord::Bulkoperation::BatchUpdate::InstanceMethods

Included in:
ActiveRecord::Base
Defined in:
lib/activerecord_bulkoperation/connection_adapters/oracle_enhanced/oci_connection.rb,
lib/activerecord_bulkoperation/connection_adapters/oracle_enhanced/jdbc_connection.rb

Instance Method Summary collapse

Instance Method Details

#enhanced_write_lobsObject

:nodoc:



8
9
10
# File 'lib/activerecord_bulkoperation/connection_adapters/oracle_enhanced/jdbc_connection.rb', line 8

def enhanced_write_lobs #:nodoc:
  # disable this feature for jruby
end

#execute_batch_update(sql, types, values, optimistic = true) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/activerecord_bulkoperation/connection_adapters/oracle_enhanced/oci_connection.rb', line 8

def execute_batch_update(sql, types, values, optimistic = true)
  fail ArgumentError.new('String expected') unless sql.is_a? String

  types = [types] unless types.is_a? Array
  fail ArgumentError.new('Array of Symbol expected') unless types.select { |i| not i.is_a? Symbol }.empty?

  fail ArgumentError.new('Array expected') unless values.is_a? Array
  values = [values] unless values.select { |i| not i.is_a? Array }.empty?

  return 0 if values.empty?

  unless values.select { |i| not i.count == types.count }.empty?
    fail ArgumentError.new('types.count must be equal to arr.count for every arr in values')
  end

  unless connection.adapter_name == 'Oracle' || connection.adapter_name == 'OracleEnhanced'
    fail "Operation is provided only on Oracle connections. (adapter_name is #{connection.adapter_name})"
  end

  oci_conn = connection.raw_connection if connected?
  fail 'Unable to access the raw OCI connection.' unless oci_conn
  cursor = oci_conn.parse(sql)
  fail "Unable to obtain cursor for this statement:\n#{sql}." unless cursor

  if check_date_homogeneously(types, values)
    affected_rows = execute_batch_update_array(cursor, sql, types, values, optimistic)
  else
    affected_rows = execute_batch_update_single(cursor, sql, types, values, optimistic)
  end

  affected_rows
end