lib/libis/services/oracle_client.rb in libis-services-1.0.7 vs lib/libis/services/oracle_client.rb in libis-services-1.0.10

- old
+ new

@@ -1,22 +1,45 @@ -require 'oci8' +# frozen_string_literal: true +if RUBY_PLATFORM == 'java' + require 'java' + require 'ojdbc8.jar' + require 'orai18n.jar' + java_import 'oracle.jdbc.pool.OracleDataSource' +else + require 'oci8' +end module Libis module Services class OracleClient attr_reader :url, :oci def initialize(url) @url = url - @oci = OCI8.new(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 def self.finalize(oci) - proc { oci.logoff } + if RUBY_PLATFORM == 'java' + proc { oci.close } + else + proc { oci.logoff } + end end # @param [Boolean] value def blocking=(value) oci.non_blocking = !value @@ -58,10 +81,10 @@ } end def run(script, parameters = []) params = '' - params = "\"" + parameters.join("\" \"") + "\"" if parameters and parameters.size > 0 + params = "\"" + parameters.join("\" \"") + "\"" if parameters&.size.to_i > 0 process_result `sqlplus -S #{url} @#{script} #{params}` end private