ruby-oci8 2.2.2-x86-mingw32 → 2.2.3-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog CHANGED
@@ -1,3 +1,39 @@
1
+ 2016-12-27 Kubo Takehiro <kubo@jiubao.org>
2
+ * NEWS: Add changes between 2.2.2 and 2.2.3.
3
+ * lib/oci8/version.rb: update to 2.2.3.
4
+ * dist-files: add test/test_bind_array.rb
5
+ * mkpkg-win32.rb: add path to ruby 2.4.0
6
+
7
+ 2016-12-26 Kubo Takehiro <kubo@jiubao.org>
8
+ * test/test_clob.rb, test/test_metadata.rb, test/test_object.rb,
9
+ test/test_oci8.rb, test/test_package_type.rb: Suppress warnings:
10
+ "Use assert_nil if expecting nil from ... in `...' This will
11
+ fail in MT6" printed by Minitest.
12
+
13
+ 2016-12-26 Kubo Takehiro <kubo@jiubao.org>
14
+ * lib/oci8/bindtype.rb, lib/oci8/compat.rb, lib/oci8/oci8.rb,
15
+ test/config.rb: Suppress "warning: constant ::Fixnum is deprecated"
16
+ and "warning: constant ::Bignum is deprecated" due to integer
17
+ unification in ruby 2.4.0.
18
+
19
+ 2016-12-14 Koichi ITO <koic.ito@gmail.com>
20
+ * ext/oci8/ocinumber.c: Fix invalid value for BigDecimal in
21
+ Ruby 2.4.0+
22
+
23
+ 2016-09-25 Kubo Takehiro <kubo@jiubao.org>
24
+ * ext/oci8/metadata.c, ext/oci8/oci8.c: Fix load error when
25
+ GC.stress = true.
26
+
27
+ 2016-09-11 Kubo Takehiro <kubo@jiubao.org>
28
+ * ext/oci8/oci8.h: Suppress 'warning: "ALWAYS_INLINE" redefined' when
29
+ compiled for ruby 2.4.0-preview2.
30
+
31
+ 2016-05-28 Kubo Takehiro <kubo@jiubao.org>
32
+ * docs/install-on-osx.md: Update installation document about OS X again.
33
+
34
+ 2016-05-28 Kubo Takehiro <kubo@jiubao.org>
35
+ * docs/install-on-osx.md: Update installation document about OS X.
36
+
1
37
  2016-04-24 Kubo Takehiro <kubo@jiubao.org>
2
38
  * mkpkg-win32.rb: Added to compile mingw32 packages.
3
39
  * dist-files: Updated to include docs/report-installation-issue.md.
data/NEWS CHANGED
@@ -1,5 +1,19 @@
1
1
  # @markup markdown
2
2
 
3
+ 2.2.3
4
+ =====
5
+
6
+ New Features
7
+ ------------
8
+
9
+ ### Support ruby 2.4.0
10
+
11
+ - [Fix invalid value for BigDecimal](https://github.com/kubo/ruby-oci8/issues/144)
12
+ - Fix load error when `GC.stress = true`.
13
+ - Suppress warnings caused by integer unification
14
+ - Suppress warnings outputted by Minitest in ruby 2.4.0
15
+ - Suppress warnings when compiling with ruby 2.4.0
16
+
3
17
  2.2.2
4
18
  =====
5
19
 
data/README.md CHANGED
@@ -8,7 +8,7 @@ Instant Client.
8
8
  Use ruby-oci8 2.0.6 for Oracle 8 or use ruby-oci8 2.1.8 for Oracle 9i.
9
9
 
10
10
  Note that ruby 1.8 support was dropped in ruby-oci8 2.2.0.
11
- Use ruby-2.1.8 for ruby 1.8.
11
+ Use ruby-oci8 2.1.8 for ruby 1.8.
12
12
 
13
13
  What's new
14
14
  ==========
data/dist-files CHANGED
@@ -83,6 +83,7 @@ test/setup_test_object.sql
83
83
  test/test_all.rb
84
84
  test/test_appinfo.rb
85
85
  test/test_array_dml.rb
86
+ test/test_bind_array.rb
86
87
  test/test_bind_raw.rb
87
88
  test/test_bind_string.rb
88
89
  test/test_bind_time.rb
@@ -35,34 +35,45 @@ Download Oracle Instant Client Packages
35
35
 
36
36
  Download the following packages from [Oracle Technology Network][]
37
37
 
38
- * Instant Client Package - Basic or Basic Lite
39
- * Instant Client Package - SDK
40
- * Instant Client Package - SQL*Plus (optionally)
38
+ * Instant Client Package - Basic (`instantclient-basic-macos.x64-12.1.0.2.0.zip`) or Basic Lite (`instantclient-basiclite-macos.x64-12.1.0.2.0.zip`)
39
+ * Instant Client Package - SDK (`instantclient-sdk-macos.x64-12.1.0.2.0.zip`)
40
+ * Instant Client Package - SQL*Plus (`instantclient-sdk-macos.x64-12.1.0.2.0.zip`) (optionally)
41
41
 
42
42
  Install Oracle Instant Client Packages via Homebrew
43
43
  ---------------------------------------------------
44
44
 
45
- To install `Oracle Instant Client Basic Lite` via [Homebrew][]
45
+ To install `Oracle Instant Client Basic` via [Homebrew][]
46
46
 
47
- * Download two instant client packages: `Basic Lite` and `SDK` and put them
48
- in `/Library/Caches/Homebrew` (if the environment variable `HOMEBREW_CACHE`
47
+ * Copy downloaded zip files to `/Library/Caches/Homebrew`
48
+ (if the environment variable `HOMEBREW_CACHE`
49
49
  is not set and `$HOME/Library/Caches/Homebrew` doesn't exist.)
50
+
50
51
  * Run the followining commands:
51
52
 
52
- brew install InstantClientTap/instantclient/instantclient-basiclite
53
- brew install InstantClientTap/instantclient/instantclient-sdk
53
+ brew tap InstantClientTap/instantclient
54
+ brew install instantclient-basic
55
+ brew install instantclient-sdk
56
+ brew install instantclient-sqlplus # (optionally)
54
57
 
55
- To install `Oracle Instant Client Basic` via [Homebrew][]
58
+ * Set the environment variable `OCI_DIR` while performing the following installation steps
59
+ if Homebrew is installed outside `/usr/local`.
60
+
61
+ export OCI_DIR=$(brew --prefix)/lib
62
+
63
+ To install `Oracle Instant Client Basic Lite` via [Homebrew][]
64
+
65
+ * Copy downloaded zip files to `/Library/Caches/Homebrew`
66
+ (if the environment variable `HOMEBREW_CACHE`
67
+ is not set and `$HOME/Library/Caches/Homebrew` doesn't exist.)
56
68
 
57
- * Download *three* instant client packages: `Basic`, `Basic Lite` and `SDK`
58
- and put them in `/Library/Caches/Homebrew` (if the environment variable
59
- `HOMEBREW_CACHE` is not set and `$HOME/Library/Caches/Homebrew` doesn't exist.)
60
69
  * Run the followining commands:
61
70
 
62
- brew install InstantClientTap/instantclient/instantclient-basic
63
- brew install InstantClientTap/instantclient/instantclient-sdk
71
+ brew tap InstantClientTap/instantclient
72
+ brew install instantclient-basiclite
73
+ brew install instantclient-sdk
74
+ brew install instantclient-sqlplus --with-basiclite # (optionally)
64
75
 
65
- * Set the environment variable OCI_DIR while performing the following installation steps
76
+ * Set the environment variable `OCI_DIR` while performing the following installation steps
66
77
  if Homebrew is installed outside `/usr/local`.
67
78
 
68
79
  export OCI_DIR=$(brew --prefix)/lib
@@ -74,31 +85,23 @@ If you don't use [Homebrew][], do the following:
74
85
 
75
86
  Unzip the packages as follows:
76
87
 
77
- mkdir /opt
78
- mkdir /opt/oracle
88
+ mkdir -p /opt/oracle
79
89
  cd /opt/oracle
80
90
 
81
91
  Copy downloaded files to /opt/oracle before running the following commands.
82
92
 
83
- unzip instantclient-basic-macos.x64-11.2.0.4.0.zip
84
- unzip instantclient-sdk-macos.x64-11.2.0.4.0.zip
85
- unzip instantclient-sqlplus-macos.x64-11.2.0.4.0.zip
93
+ unzip instantclient-basic-macos.x64-12.1.0.2.0.zip
94
+ unzip instantclient-sdk-macos.x64-12.1.0.2.0.zip
95
+ unzip instantclient-sqlplus-macos.x64-12.1.0.2.0.zip
86
96
 
87
97
  Make a symbolic link to link the library.
88
98
 
89
- cd /opt/oracle/instantclient11_2
90
- ln -s libclntsh.dylib.11.1 libclntsh.dylib
91
-
92
- Fix the library install and identification names using [fix_oralib][] to make them work
93
- without `DYLD_LIBRARY_PATH`.
94
-
95
- cd /opt/oracle/instantclient11_2
96
- curl -O https://raw.githubusercontent.com/kubo/fix_oralib_osx/master/fix_oralib.rb
97
- ruby fix_oralib.rb
99
+ cd /opt/oracle/instantclient_12_1
100
+ ln -s libclntsh.dylib.12.1 libclntsh.dylib
98
101
 
99
102
  Set the environment variable OCI_DIR while performing the following installation steps.
100
103
 
101
- export OCI_DIR=/opt/oracle/instantclient11_2
104
+ export OCI_DIR=/opt/oracle/instantclient_12_1
102
105
 
103
106
  Installation
104
107
  ============
@@ -203,10 +203,13 @@ OCI8::BindType::Mapping[String] = OCI8::BindType::String
203
203
  OCI8::BindType::Mapping[OraNumber] = OCI8::BindType::OraNumber
204
204
  OCI8::BindType::Mapping['BigDecimal'] = OCI8::BindType::BigDecimal
205
205
  OCI8::BindType::Mapping['Rational'] = OCI8::BindType::Rational
206
- OCI8::BindType::Mapping[Fixnum] = OCI8::BindType::Integer
207
206
  OCI8::BindType::Mapping[Float] = OCI8::BindType::Float
208
207
  OCI8::BindType::Mapping[Integer] = OCI8::BindType::Integer
209
- OCI8::BindType::Mapping[Bignum] = OCI8::BindType::Integer
208
+ unless 0.class == Integer
209
+ # ruby before integer unification
210
+ OCI8::BindType::Mapping[Fixnum] = OCI8::BindType::Integer
211
+ OCI8::BindType::Mapping[Bignum] = OCI8::BindType::Integer
212
+ end
210
213
  OCI8::BindType::Mapping[OraDate] = OCI8::BindType::OraDate
211
214
  OCI8::BindType::Mapping[Time] = OCI8::BindType::Time
212
215
  OCI8::BindType::Mapping[Date] = OCI8::BindType::Date
@@ -70,7 +70,7 @@ class OCI8
70
70
  constants.each do |name|
71
71
  next if name.to_s.index("SQLT_") != 0
72
72
  val = const_get name.intern
73
- if val.is_a? Fixnum
73
+ if val.is_a? Integer
74
74
  SQLT_NAMES[val] = name
75
75
  end
76
76
  end
@@ -79,6 +79,10 @@ class OCI8
79
79
  alias autocommit autocommit?
80
80
 
81
81
  class Cursor
82
+ # @!visibility private
83
+ # dirty hack to suppress "warning: constant ::Fixnum is deprecated"
84
+ Fixnum = (0.class == ::Integer) ? ::Integer : ::Fixnum
85
+
82
86
  def self.select_number_as=(val)
83
87
  if val == Fixnum
84
88
  @@bind_unknown_number = OCI8::BindType::Fixnum
@@ -622,7 +622,7 @@ class OCIError
622
622
  #
623
623
  def initialize(*args)
624
624
  if args.length > 0
625
- if args[0].is_a? Fixnum
625
+ if args[0].is_a? Integer
626
626
  @code = args.shift
627
627
  super(OCI8.error_message(@code).gsub('%s') {|s| args.empty? ? '%s' : args.shift})
628
628
  @sql = nil
@@ -1,3 +1,3 @@
1
1
  class OCI8
2
- VERSION = "2.2.2"
2
+ VERSION = "2.2.3"
3
3
  end
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -1,4 +1,4 @@
1
1
  if caller[0] !~ /\/bundler\/runtime\.rb:\d+:in `require'/
2
- warn "Don't requie 'ruby-oci8'. Use \"require 'oci8'\" instead. 'ruby-oci8.rb' was added only for 'Bundler.require'."
2
+ warn "Don't require 'ruby-oci8'. Use \"require 'oci8'\" instead. 'ruby-oci8.rb' was added only for 'Bundler.require'."
3
3
  end
4
4
  require 'oci8'
@@ -125,6 +125,13 @@ end
125
125
 
126
126
  class Minitest::Test
127
127
 
128
+ # @!visibility private
129
+ # dirty hack to suppress "warning: constant ::Fixnum is deprecated"
130
+ Fixnum = (0.class == ::Integer) ? ::Integer : ::Fixnum
131
+ # @!visibility private
132
+ # dirty hack to suppress "warning: constant ::Bignum is deprecated"
133
+ Bignum = (0.class == ::Integer) ? ::Integer : ::Bignum
134
+
128
135
  def get_oci8_connection()
129
136
  OCI8.new($dbuser, $dbpass, $dbname)
130
137
  rescue OCIError
@@ -0,0 +1,70 @@
1
+ require 'oci8'
2
+ require File.dirname(__FILE__) + '/config'
3
+
4
+ class TestBindArray < Minitest::Test
5
+
6
+ def test_bind_array_names
7
+ assert_equal(":id_0", OCI8::in_cond(:id, []).names)
8
+ assert_equal(":id_0", OCI8::in_cond(:id, [1]).names)
9
+ assert_equal(":id_0, :id_1", OCI8::in_cond(:id, [1, 2]).names)
10
+ assert_equal(":id_0, :id_1, :id_2", OCI8::in_cond(:id, [1, 2, 3]).names)
11
+ end
12
+
13
+ def test_bind_array_values
14
+ assert_equal([[nil, String, nil]], OCI8::in_cond(:id, []).values)
15
+ assert_equal([[1, nil, nil]], OCI8::in_cond(:id, [1]).values)
16
+ assert_equal([[1, nil, nil], [2, nil, nil]], OCI8::in_cond(:id, [1, 2]).values)
17
+ assert_equal([[1, nil, nil], [2, nil, nil], [3, nil, nil]], OCI8::in_cond(:id, [1, 2, 3]).values)
18
+ end
19
+
20
+ def test_bind_array_values_containg_nil
21
+ assert_equal([[nil, String]], OCI8::in_cond(:id, [nil]).values)
22
+ assert_equal([[nil, Fixnum], [2, nil, nil], [3, nil, nil]], OCI8::in_cond(:id, [nil, 2, 3]).values)
23
+ assert_equal([[1, nil, nil], [nil, Fixnum], [3, nil, nil]], OCI8::in_cond(:id, [1, nil, 3]).values)
24
+ end
25
+
26
+ def test_bind_array_values_with_type
27
+ assert_equal([[nil, Integer, nil]], OCI8::in_cond(:id, [], Integer).values)
28
+ assert_equal([[1, Integer, nil]], OCI8::in_cond(:id, [1], Integer).values)
29
+ assert_equal([[1, Integer, nil], [2, Integer, nil]], OCI8::in_cond(:id, [1, 2], Integer).values)
30
+ assert_equal([[1, Integer, nil], [2, Integer, nil], [3, Integer, nil]], OCI8::in_cond(:id, [1, 2, 3], Integer).values)
31
+ assert_equal([[nil, Integer, nil], [2, Integer, nil], [3, Integer, nil]], OCI8::in_cond(:id, [nil, 2, 3], Integer).values)
32
+ assert_equal([[1, Integer, nil], [nil, Integer, nil], [3, Integer, nil]], OCI8::in_cond(:id, [1, nil, 3], Integer).values)
33
+ end
34
+
35
+ def test_select
36
+ @conn = get_oci8_connection
37
+ begin
38
+ drop_table('test_table')
39
+ @conn.exec(<<EOS)
40
+ CREATE TABLE test_table (ID NUMBER(38))
41
+ EOS
42
+ cursor = @conn.parse('insert into test_table values(:1)')
43
+ cursor.bind_param(1, nil, Integer)
44
+ [1, 3, 5].each do |id|
45
+ cursor.exec(id)
46
+ end
47
+ cursor.close
48
+
49
+ [
50
+ [],
51
+ [1],
52
+ [1, 2],
53
+ [1, 2, 3],
54
+ [nil],
55
+ [nil, 2, 3],
56
+ [1, nil, 3],
57
+ ].each do |ids|
58
+ in_cond = OCI8::in_cond(:id, ids)
59
+ cursor = @conn.exec("select * from test_table where id in (#{in_cond.names}) order by id", *in_cond.values)
60
+ ([1, 3, 5] & ids).each do |id|
61
+ assert_equal(id, cursor.fetch[0])
62
+ end
63
+ end
64
+
65
+ drop_table('test_table')
66
+ ensure
67
+ @conn.logoff
68
+ end
69
+ end
70
+ end
@@ -67,7 +67,7 @@ class TestCLob < Minitest::Test
67
67
  # Though buf.size counts in byte,
68
68
  # offset and $lobreadnum count in character.
69
69
  end
70
- assert_equal(nil, buf)
70
+ assert_nil(buf)
71
71
  assert(f.eof?)
72
72
  assert(lob.eof?)
73
73
  end
@@ -42,6 +42,8 @@ class TestMetadata < Minitest::Test
42
42
  assert(expected_value.call(val), "#{msg} > #{method}")
43
43
  when Regexp
44
44
  assert_match(expected_value, val, "#{msg} > #{method}")
45
+ when nil
46
+ assert_nil(val, "#{msg} > #{method}")
45
47
  else
46
48
  assert_equal(expected_value, val, "#{msg} > #{method}")
47
49
  end
@@ -1335,7 +1337,6 @@ EOS
1335
1337
  drop_type('TEST_TYPE_NESTEAD_TABLE')
1336
1338
  drop_type('TEST_TYPE_CHILD')
1337
1339
  drop_type('TEST_TYPE_PARENT')
1338
- expected_values = []
1339
1340
  attrs_map = {}
1340
1341
 
1341
1342
  @conn.exec(<<-EOS)
@@ -237,15 +237,35 @@ class TestObj1 < Minitest::Test
237
237
  assert_equal(@nclob_val, nclob_val)
238
238
  assert_equal(@blob_val, blob_val)
239
239
  assert_equal(@obj_val, obj_val)
240
- assert_equal(@int_array_val, int_array_val && int_array_val.to_ary)
240
+ if @int_array_val
241
+ assert_equal(@int_array_val, int_array_val.to_ary)
242
+ else
243
+ assert_nil(@int_array_val, int_array_val)
244
+ end
241
245
  assert_array_in_delta(@flt_array_val, flt_array_val && flt_array_val.to_ary)
242
246
  assert_array_in_delta(@num_array_val, num_array_val && num_array_val.to_ary)
243
247
  assert_array_in_delta(@bdbl_array_val, bdbl_array_val && bdbl_array_val.to_ary)
244
248
  assert_array_in_delta(@bflt_array_val, bflt_array_val && bflt_array_val.to_ary)
245
- assert_equal(@str_array_val, str_array_val && str_array_val.to_ary)
246
- assert_equal(@raw_array_val, raw_array_val && raw_array_val.to_ary)
247
- assert_equal(@obj_array_val, obj_array_val && obj_array_val.to_ary)
248
- assert_equal(@obj_ary_of_ary_val, obj_ary_of_ary_val && obj_ary_of_ary_val.to_ary.collect { |elem| elem.to_ary })
249
+ if @str_array_val
250
+ assert_equal(@str_array_val, str_array_val.to_ary)
251
+ else
252
+ assert_nil(str_array_val)
253
+ end
254
+ if @raw_array_val
255
+ assert_equal(@raw_array_val, raw_array_val.to_ary)
256
+ else
257
+ assert_nil(raw_array_val)
258
+ end
259
+ if @obj_array_val
260
+ assert_equal(@obj_array_val, obj_array_val.to_ary)
261
+ else
262
+ assert_nil(obj_array_val)
263
+ end
264
+ if @obj_ary_of_ary_val
265
+ assert_equal(@obj_ary_of_ary_val, obj_ary_of_ary_val.to_ary.collect { |elem| elem.to_ary })
266
+ else
267
+ assert_nil(obj_ary_of_ary_val)
268
+ end
249
269
  assert_equal(@date_val, date_val)
250
270
  # assert_equal(@date_array_val, date_array_val && date_array_val.to_ary)
251
271
  end
@@ -256,6 +276,8 @@ class TestObj1 < Minitest::Test
256
276
  exp.each_with_index do |elem, idx|
257
277
  assert_in_delta(elem, val[idx], Delta)
258
278
  end
279
+ elsif exp.nil?
280
+ assert_nil(val)
259
281
  else
260
282
  assert_equal(exp, val)
261
283
  end
@@ -456,10 +478,26 @@ EOS
456
478
  csr.bind_param(:out2, nil, Integer)
457
479
  csr.bind_param(:out3, nil, Integer)
458
480
  csr.exec
459
- assert_equal(ary ? ary.length : -1, csr[:cnt])
460
- assert_equal(ary ? ary[0] : nil, csr[:out1])
461
- assert_equal(ary ? ary[1] : nil, csr[:out2])
462
- assert_equal(ary ? ary[2] : nil, csr[:out3])
481
+ if ary
482
+ assert_equal(ary.length, csr[:cnt])
483
+ else
484
+ assert_equal(-1, csr[:cnt])
485
+ end
486
+ if ary && ary[0]
487
+ assert_equal(ary[0], csr[:out1])
488
+ else
489
+ assert_nil(csr[:out1])
490
+ end
491
+ if ary && ary[1]
492
+ assert_equal(ary[1], csr[:out2])
493
+ else
494
+ assert_nil(csr[:out2])
495
+ end
496
+ if ary && ary[2]
497
+ assert_equal(ary[2], csr[:out3])
498
+ else
499
+ assert_nil(csr[:out3])
500
+ end
463
501
  end
464
502
  end
465
503
 
@@ -69,7 +69,7 @@ EOS
69
69
  cursor.exec
70
70
  assert_equal(test_data1, cursor.fetch[0])
71
71
  assert_equal(test_data2, cursor.fetch[0])
72
- assert_equal(test_data3, cursor.fetch[0])
72
+ assert_nil(cursor.fetch[0])
73
73
  assert_equal(test_data4, cursor.fetch[0])
74
74
  cursor.close
75
75
  drop_table('test_table')
@@ -38,6 +38,8 @@ class TestPackageType < Minitest::Test
38
38
  val = method.is_a?(Array) ? obj[method[0]] : obj.send(method)
39
39
  if expected_value.is_a? Hash
40
40
  check_attributes("#{msg} > #{method}", val, expected_value)
41
+ elsif expected_value.nil?
42
+ assert_nil(val, "#{msg} > #{method}")
41
43
  else
42
44
  assert_equal(expected_value, val, "#{msg} > #{method}")
43
45
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-oci8
3
3
  version: !ruby/object:Gem::Version
4
- hash: 3
4
+ hash: 1
5
5
  prerelease: false
6
6
  segments:
7
7
  - 2
8
8
  - 2
9
- - 2
10
- version: 2.2.2
9
+ - 3
10
+ version: 2.2.3
11
11
  platform: x86-mingw32
12
12
  authors:
13
13
  - Kubo Takehiro
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2016-04-24 00:00:00 +09:00
18
+ date: 2016-12-27 00:00:00 +09:00
19
19
  default_executable:
20
20
  dependencies: []
21
21
 
@@ -78,6 +78,7 @@ files:
78
78
  - test/test_all.rb
79
79
  - test/test_appinfo.rb
80
80
  - test/test_array_dml.rb
81
+ - test/test_bind_array.rb
81
82
  - test/test_bind_raw.rb
82
83
  - test/test_bind_string.rb
83
84
  - test/test_bind_time.rb
@@ -98,11 +99,12 @@ files:
98
99
  - test/test_oranumber.rb
99
100
  - test/test_package_type.rb
100
101
  - test/test_rowid.rb
101
- - lib/oci8lib_220.so
102
102
  - lib/oci8lib_191.so
103
- - lib/oci8lib_230.so
104
103
  - lib/oci8lib_200.so
105
104
  - lib/oci8lib_210.so
105
+ - lib/oci8lib_220.so
106
+ - lib/oci8lib_230.so
107
+ - lib/oci8lib_240.so
106
108
  has_rdoc: true
107
109
  homepage: http://www.rubydoc.info/github/kubo/ruby-oci8
108
110
  licenses: