class Libis::Services::OracleClient
Attributes
oci[R]
url[R]
Public Class Methods
finalize(oci)
click to toggle source
# File lib/libis/services/oracle_client.rb, line 35 def self.finalize(oci) if RUBY_PLATFORM == 'java' proc { oci.close } else proc { oci.logoff } end end
new(url)
click to toggle source
# File lib/libis/services/oracle_client.rb, line 18 def initialize(url) @url = url @oci = if RUBY_PLATFORM == 'java' raise RuntimeError, 'Malformed database URL' unless url =~ /^(.*)\/(.*)@(.*)$/ user, pass, db = $1, $2, $3 uri = "jdbc:oracle:thin:@#{db}" ods = OracleDataSource.new ods.set_url(uri) ods.set_user(user) ods.set_password(pass) ods.get_connection else OCI8.new(url) end ObjectSpace.define_finalizer(self, self.class.finalize(@oci)) end
Public Instance Methods
blocking=(value)
click to toggle source
@param [Boolean] value
# File lib/libis/services/oracle_client.rb, line 44 def blocking=(value) oci.non_blocking = !value blocking? end
blocking?()
click to toggle source
# File lib/libis/services/oracle_client.rb, line 49 def blocking? !oci.non_blocking? end
call(procedure, parameters = [])
click to toggle source
# File lib/libis/services/oracle_client.rb, line 53 def call(procedure, parameters = []) params = '' params = "'" + parameters.map(&:to_s).join("','") + "'" if parameters and parameters.size > 0 oci.exec("call #{procedure}(#{params})") end
execute(statement, *bindvars, &block)
click to toggle source
# File lib/libis/services/oracle_client.rb, line 59 def execute(statement, *bindvars, &block) oci.exec(statement, *bindvars, &block) end
run(script, parameters = [])
click to toggle source
# File lib/libis/services/oracle_client.rb, line 84 def run(script, parameters = []) params = '' params = "\"" + parameters.join("\" \"") + "\"" if parameters&.size.to_i > 0 process_result `sqlplus -S #{url} @#{script} #{params}` end
table(name)
click to toggle source
# File lib/libis/services/oracle_client.rb, line 63 def table(name) metadata = oci.describe_table(name) { columns: metadata.columns.map do |column| { name: column.name, type: column.data_type, size: case column.data_type when :number column.precision when :varchar2 column.char_size else column.data_size end, required: !column.nullable? } end } end
Private Instance Methods
process_result(log)
click to toggle source
# File lib/libis/services/oracle_client.rb, line 92 def process_result(log) log.gsub!(/\n\n/, "\n") rows_created = 0 log.match(/^(\d+) rows? created.$/) { |m| rows_created += m[1] } rows_deleted = 0 log.match(/^(\d+) rows? deleted.$/) { |m| rows_deleted += m[1] } rows_updated = 0 log.match(/^(\d+) rows? updated.$/) { |m| rows_updated += m[1] } errors = Hash.new(0) error_count = 0 log.match(/\nERROR .*\n([^\n]*)\n/) { |m| errors[m[1]] += 1; error_count += 1 } {created: rows_created, updated: rows_updated, deleted: rows_deleted, errors: error_count, error_detail: errors} end