ruby-oci8 2.0.4-x86-mingw32 → 2.0.5-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +158 -1
- data/Makefile +1 -3
- data/NEWS +70 -0
- data/VERSION +1 -1
- data/dist-files +1 -0
- data/lib/oci8.rb +14 -3
- data/lib/oci8.rb.in +13 -2
- data/lib/oci8/.document +1 -0
- data/lib/oci8/bindtype.rb +16 -3
- data/lib/oci8/datetime.rb +14 -6
- data/lib/oci8/encoding-init.rb +6 -1
- data/lib/oci8/encoding.yml +2 -2
- data/lib/oci8/object.rb +28 -9
- data/lib/oci8/oci8.rb +22 -6
- data/lib/oci8/properties.rb +50 -0
- data/lib/oci8lib_18.so +0 -0
- data/lib/oci8lib_191.so +0 -0
- data/test/test_break.rb +6 -7
- data/test/test_oranumber.rb +96 -5
- metadata +20 -5
data/ChangeLog
CHANGED
@@ -1,6 +1,163 @@
|
|
1
|
+
2011-06-12 KUBO Takehiro <kubo@jiubao.org>
|
2
|
+
* NEWS: add changes between 2.0.4 and 2.0.5.
|
3
|
+
* VERSION: change the version to 2.0.5.
|
4
|
+
|
5
|
+
2011-06-12 KUBO Takehiro <kubo@jiubao.org>
|
6
|
+
* ext/oci8/oci8lib.c: add __declspec(dllexport) to Init_oci8lib(). The mingw32
|
7
|
+
gcc compiler doesn't export functions without it if more than one function
|
8
|
+
is declared with it.
|
9
|
+
* ext/oci8/oraconf.rb: work around for rubinius 1.2.3, which doesn't support
|
10
|
+
Array#pack('P').
|
11
|
+
* lib/oci8/oci8.rb: fix a bug introduced by the previous commit.
|
12
|
+
* ext/oci8/env.c, ext/oci8/extconf.rb, ext/oci8/oci8.c, ext/oci8/oci8.h,
|
13
|
+
ext/oci8/oci8lib.c: Use HAVE_RB_THREAD_BLOCKING_REGION instead of
|
14
|
+
HAVE_TYPE_RB_BLOCKING_FUNCTION_T. have_type("rb_blocking_function_t", "ruby.h")
|
15
|
+
unexpectedly doesn't work on Visual Studio 2010.
|
16
|
+
|
17
|
+
2011-06-10 KUBO Takehiro <kubo@jiubao.org>
|
18
|
+
* ext/oci8/apiwrap.yml, lib/oci8/oci8.rb: fix for Psych YAML library.
|
19
|
+
* ext/oci8/extconf.rb, ext/oci8/oci8.h, ext/oci8/ocihandle.c: fix to
|
20
|
+
work with ruby 1.9.3dev.
|
21
|
+
|
22
|
+
2011-06-10 KUBO Takehiro <kubo@jiubao.org>
|
23
|
+
* ext/oci8/oci8.c: prevent GC on failed-logon connections from freeing
|
24
|
+
alive connections when the service context handle addresses are
|
25
|
+
accidentally same.
|
26
|
+
* ext/oci8/ocidatetime.c: raise "OCIError: ORA-01805: possible error in
|
27
|
+
date/time operation" when Oracle 11gR2's client and server timezone versions
|
28
|
+
are not same instead of raising a exception "undefined method `*' for
|
29
|
+
nil:NilClass." This is a temporary fix.
|
30
|
+
See: http://rubyforge.org/forum/forum.php?thread_id=49102&forum_id=1078
|
31
|
+
|
32
|
+
2011-06-10 KUBO Takehiro <kubo@jiubao.org>
|
33
|
+
* ext/oci8/env.c, ext/oci8/oci8.h: Free OCI error handles on the
|
34
|
+
native thread termination, not on the ruby thread termination.
|
35
|
+
(reported by Jordan Curzon and Aaron Qian)
|
36
|
+
See: http://rubyforge.org/forum/forum.php?thread_id=49751&forum_id=1078
|
37
|
+
|
38
|
+
2011-02-21 KUBO Takehiro <kubo@jiubao.org>
|
39
|
+
* ext/oci8/lob.c, ext/oci8/metadata.c, ext/oci8/oci8.c,
|
40
|
+
ext/oci8/oci8.h, ext/oci8/oci8lib.c, ext/oci8/stmt.c:
|
41
|
+
fix segmentation fault when calling OCI8::Cursor#[] for
|
42
|
+
closed statement object's (reported by Hugo L. Borges)
|
43
|
+
|
44
|
+
2011-02-01 KUBO Takehiro <kubo@jiubao.org>
|
45
|
+
* ext/oci8/ocidatetime.c, lib/oci8/datetime.rb: rename
|
46
|
+
the name of the class to binding timestamp with time zone
|
47
|
+
from OCITimestamp to OCITimestampTZ. OCITimestamp will be
|
48
|
+
used for timestamp without time zone.
|
49
|
+
|
50
|
+
2011-01-30 KUBO Takehiro <kubo@jiubao.org>
|
51
|
+
* ext/oci8/oraconf.rb: check Oracle client's cpu type on Solaris as
|
52
|
+
on Linux and Mac OS X. change error messages on Mac OS X to suggest
|
53
|
+
to set RC_ARCHS=x86_64 when mkmf.log contains messages such as
|
54
|
+
'missing required architecture i386 in file.'
|
55
|
+
|
56
|
+
2010-12-26 KUBO Takehiro <kubo@jiubao.org>
|
57
|
+
* ext/oci8/ocinumber.c, lib/oci8/bindtype.rb, test/test_oranumber.rb:
|
58
|
+
add OraNumber#has_decimal_part? and OCI8::BindType::BasicNumberType.
|
59
|
+
|
60
|
+
2010-12-14 KUBO Takehiro <kubo@jiubao.org>
|
61
|
+
* dist-files, lib/oci8.rb.in, lib/oci8/.document, lib/oci8/properties.rb:
|
62
|
+
add OCI8.properties to get and set ruby-oci8 global setting.
|
63
|
+
* ext/oci8/bind.c, lib/oci8/bindtype.rb: fix NCHAR support and add
|
64
|
+
OCI8.properties[:bind_string_as_nchar] to control charset form (CHAR or NCHAR)
|
65
|
+
when binding string values.
|
66
|
+
See: http://rubyforge.org/forum/forum.php?thread_id=48838&forum_id=1078
|
67
|
+
|
68
|
+
2010-12-04 KUBO Takehiro <kubo@jiubao.org>
|
69
|
+
* ext/oci8/object.c, ext/oci8/bind.c, lib/oci8/object.rb,
|
70
|
+
test/test_object.rb: fix a problem to assign NULL bind value
|
71
|
+
to object type bind variables.
|
72
|
+
(reported by Raimonds Simanovskis)
|
73
|
+
* ext/oci8/oraconf.rb: fix for 32-bit ruby compiled on
|
74
|
+
x86_64 linux. (reported by Jason Renschler)
|
75
|
+
* ext/oci8/oranumber_util.c, test/test_oranumber.rb:
|
76
|
+
suppress warning: unknown conversion type character 'h' in format
|
77
|
+
|
78
|
+
2010-09-18 KUBO Takehiro <kubo@jiubao.org>
|
79
|
+
* ext/oci8/win32.c: undefine boolean to pass compilation on
|
80
|
+
Cygwin. (reported by Don Hill).
|
81
|
+
* lib/oci8/encoding-init.rb, lib/oci8/encoding.yml: add a
|
82
|
+
mapping from ZHT16HKSCS to Big5-HKSCS when the latter
|
83
|
+
is available in ruby.
|
84
|
+
|
85
|
+
2010-09-12 KUBO Takehiro <kubo@jiubao.org>
|
86
|
+
* ext/oci8/env.c, ext/oci8/extconf.rb: suppress warning
|
87
|
+
'use "ruby/util.h" instead of bare "util.h".'
|
88
|
+
* test/test_break.rb: make tests insensitive to execution timing.
|
89
|
+
|
90
|
+
2010-09-10 KUBO Takehiro <kubo@jiubao.org>
|
91
|
+
* test/test_array_dml.rb: delete workaround code. It now works
|
92
|
+
fine on rubinius head.
|
93
|
+
|
94
|
+
2010-09-07 KUBO Takehiro <kubo@jiubao.org>
|
95
|
+
* ext/oci8/extconf.rb, ext/oci8/oci8lib.c: Don't use
|
96
|
+
rb_set_end_proc() when it isn't available.
|
97
|
+
* ext/oci8/extconf.rb, lib/oci8.rb.in: add RUBY_ENGINE to
|
98
|
+
the C extension library name when RUBY_ENGINE is not "ruby."
|
99
|
+
* test/test_array_dml.rb: skip test_array_insert1 on rubinius.
|
100
|
+
This will be enabled after the rubinius issue #445 is fixed.
|
101
|
+
|
102
|
+
2010-09-05 KUBO Takehiro <kubo@jiubao.org>
|
103
|
+
* ext/oci8/extconf.rb, ext/oci8/oci8.h, ext/oci8/oci8lib.c,
|
104
|
+
ext/oci8/ocinumber.c: use rb_intern() to retrieve IDs of '+', '-',
|
105
|
+
'*' and '/' on rubinus.
|
106
|
+
* ext/oci8/oradate.c: use rb_call_super() instead of
|
107
|
+
rb_obj_init_copy(), which is not declared in rubinus.
|
108
|
+
|
109
|
+
2010-08-28 KUBO Takehiro <kubo@jiubao.org>
|
110
|
+
* ext/oci8/env.c: fix for rubinius.
|
111
|
+
|
112
|
+
2010-08-28 KUBO Takehiro <kubo@jiubao.org>
|
113
|
+
* ext/oci8/env.c, ext/oci8/error.c, ext/oci8/extconf.rb, ext/oci8/oci8.c,
|
114
|
+
ext/oci8/oci8.h, oci8/oci8lib.c, ext/oci8/ocinumber.c: fix for rubinius.
|
115
|
+
Note that this is not enough to compile ruby-oci8 on it.
|
116
|
+
|
117
|
+
2010-08-23 KUBO Takehiro <kubo@jiubao.org>
|
118
|
+
* lib/oci8/object.rb: fix an error when SDO_GEOMETRY is used
|
119
|
+
and $VERBOSE is set.
|
120
|
+
* test/test_oranumber.rb: change a testcase for ruby 1.9.2.
|
121
|
+
Math::atan2(0, 0) behaviour was changed in 1.9.2.
|
122
|
+
|
123
|
+
2010-08-15 KUBO Takehiro <kubo@jiubao.org>
|
124
|
+
* ext/oci8/lob.c, ext/oci8/object.c, ext/oci8/oci8.h,
|
125
|
+
lib/oci8/object.rb: support LOB datatypes in Oracle objects.
|
126
|
+
(reported by Michael Sexton)
|
127
|
+
* ext/oci8/ocihandle.c: fix SEGV in finalizer when temporary LOBs
|
128
|
+
are used. This bug was introduced by the previous commit.
|
129
|
+
|
130
|
+
2010-08-15 KUBO Takehiro <kubo@jiubao.org>
|
131
|
+
* ext/oci8/apiwrap.yml, ext/oci8/lob.c: fix memory leak when temporary
|
132
|
+
lobs are used.
|
133
|
+
|
134
|
+
2010-08-14 KUBO Takehiro <kubo@jiubao.org>
|
135
|
+
* ext/oci8/bind.c: fix a bug that a string is bound to RAW.
|
136
|
+
Its encoding had been convertd to OCI.encoding incorrectly.
|
137
|
+
(backport from the trunk)
|
138
|
+
* ext/oci8/stmt.c: fix SEGV when an exception is raised while
|
139
|
+
a bind value is deallocated.
|
140
|
+
(backport from the trunk)
|
141
|
+
|
142
|
+
2010-04-23 KUBO Takehiro <kubo@jiubao.org>
|
143
|
+
* ext/oci8/oranumber_util.c, test/test_oranumber.rb:
|
144
|
+
add limitted support for OraNumber's positive and negative
|
145
|
+
infinity. They are converted to '~' and '-~' respectively
|
146
|
+
as described in <URL:http://www.ixora.com.au/notes/infinity.htm>.
|
147
|
+
|
148
|
+
2010-04-23 KUBO Takehiro <kubo@jiubao.org>
|
149
|
+
* Makefile: fix wrong dependencies in Makefile when running
|
150
|
+
'make -jNNN (where NNN >= 2)'
|
151
|
+
(contributed by Alyano Alyanos. See bug #28129 on rubyforge.)
|
152
|
+
|
153
|
+
2010-03-07 KUBO Takehiro <kubo@jiubao.org>
|
154
|
+
* ext/oci8/ocinumber.c: fix to compile on HP-UX.
|
155
|
+
Duplicate const qualifiers prevented HP-UX cc from compiling.
|
156
|
+
(reported by Sebastian YEPES)
|
157
|
+
|
1
158
|
2010-02-28 KUBO Takehiro <kubo@jiubao.org>
|
2
159
|
* NEWS: add changes between 2.0.3 and 2.0.4.
|
3
|
-
* VERSION: change the version to 2.0.
|
160
|
+
* VERSION: change the version to 2.0.4.
|
4
161
|
* ext/oci8/stmt.c: fix segmentation fault when OCI8::Cursor#fetch
|
5
162
|
is called prior to OCI8::Cursor#exec.
|
6
163
|
* ext/oci8/oci8.c: minor fix in rdoc comment.
|
data/Makefile
CHANGED
data/NEWS
CHANGED
@@ -1,3 +1,73 @@
|
|
1
|
+
2.0.5:
|
2
|
+
|
3
|
+
* New Features
|
4
|
+
|
5
|
+
- Support Rubinius.
|
6
|
+
|
7
|
+
- OraNumber#has_decimal_part? -> boolean
|
8
|
+
|
9
|
+
OraNumber(10).has_decimal_part? # => false
|
10
|
+
OraNumber(10.1).has_decimal_part? # => true
|
11
|
+
|
12
|
+
- Limitted support for OraNumber's positive and negative infinity.
|
13
|
+
|
14
|
+
They are converted to '~' and '-~' respectively as described in
|
15
|
+
<URL:http://www.ixora.com.au/notes/infinity.htm>.
|
16
|
+
|
17
|
+
- OCI8.properties is added to control ruby-oci8 behaviour.
|
18
|
+
It supports :bind_string_as_nchar only for now.
|
19
|
+
|
20
|
+
- OCI8.properties[:bind_string_as_nchar] is added.
|
21
|
+
|
22
|
+
You need to set "OCI8.properties[:bind_string_as_nchar] = true"
|
23
|
+
if the database character set is not UTF-8 and NCHAR/NVARCHAR2 columns
|
24
|
+
contain characters which cannot be converted to the database character set.
|
25
|
+
See: http://rubyforge.org/forum/forum.php?thread_id=48838&forum_id=1078
|
26
|
+
|
27
|
+
* Fixed issues
|
28
|
+
|
29
|
+
- Fix InvalidHandle errors on Rails.
|
30
|
+
(reported by Jordan Curzon and Aaron Qian)
|
31
|
+
See: http://rubyforge.org/forum/forum.php?thread_id=49751&forum_id=1078
|
32
|
+
|
33
|
+
- Raise "OCIError: ORA-01805: possible error in date/time operation"
|
34
|
+
when Oracle 11gR2's client and server timezone versions are not same
|
35
|
+
instead of raising a exception "undefined method `*' for nil:NilClass."
|
36
|
+
See: http://rubyforge.org/forum/forum.php?thread_id=49102&forum_id=1078
|
37
|
+
|
38
|
+
- Fix unexpectedly disconnect when failed-logon connections is GC'ed
|
39
|
+
and the connection object's address is accidentally same with
|
40
|
+
an alive connection.
|
41
|
+
|
42
|
+
- Fix segmentation fault when calling OCI8::Cursor#[] for
|
43
|
+
closed statement object's (reported by Hugo L. Borges)
|
44
|
+
|
45
|
+
- Fix a bug that a string is bound to RAW.
|
46
|
+
Its encoding had been convertd to OCI.encoding incorrectly.
|
47
|
+
|
48
|
+
- Fix memory leaks when temporary lobs are used.
|
49
|
+
|
50
|
+
- Fix a problem to assign NULL bind value to object type bind variables.
|
51
|
+
(reported by Raimonds Simanovskis)
|
52
|
+
|
53
|
+
- Support LOB datatypes in object type.
|
54
|
+
(reported by Michael Sexton)
|
55
|
+
|
56
|
+
- Fix to compile on cygwin. The declaration of 'boolean' in Oracle
|
57
|
+
conflicts with that of latest cygwin.
|
58
|
+
(reported by Don Hill).
|
59
|
+
|
60
|
+
- Fix to complie for the 32-bit ruby which was compiled on x86_64 linux
|
61
|
+
and configured without '--build', '--host' nor '--target'.
|
62
|
+
The RUBY_PLATFORM is 'x86_64-linux' even though the ruby is 32-bit.
|
63
|
+
(reported by Jason Renschler)
|
64
|
+
|
65
|
+
- Fix wrong dependencies in Makefile when running 'make -jNNN (where NNN >= 2)'
|
66
|
+
(contributed by Alyano Alyanos. See bug #28129 on rubyforge.)
|
67
|
+
|
68
|
+
- Fix to compile on HP-UX. Duplicated const qualifiers prevented HP-UX cc
|
69
|
+
from compiling. (reported by Sebastian YEPES)
|
70
|
+
|
1
71
|
2.0.4:
|
2
72
|
|
3
73
|
* New Features
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.0.
|
1
|
+
2.0.5
|
data/dist-files
CHANGED
data/lib/oci8.rb
CHANGED
@@ -18,14 +18,24 @@ if RUBY_PLATFORM =~ /cygwin/
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
+
so_basename = 'oci8lib_'
|
22
|
+
if defined? RUBY_ENGINE and RUBY_ENGINE != 'ruby'
|
23
|
+
so_basename += RUBY_ENGINE
|
24
|
+
end
|
25
|
+
|
26
|
+
# The suffix number indicates the ruby API version.
|
27
|
+
# 18 - ruby 1.8.x
|
28
|
+
# 191 - ruby 1.9.1 and 1.9.2
|
29
|
+
# 19x - ruby 1.9.x future version which will break the API compatibility
|
21
30
|
case RUBY_VERSION
|
22
31
|
when /^1\.9/
|
23
|
-
|
32
|
+
so_basename += '191'
|
24
33
|
when /^1\.8/
|
25
|
-
|
34
|
+
so_basename += '18'
|
26
35
|
else
|
27
36
|
raise 'unsupported ruby version: ' + RUBY_VERSION
|
28
37
|
end
|
38
|
+
require so_basename
|
29
39
|
|
30
40
|
if OCI8.respond_to? :encoding
|
31
41
|
if defined? DEFAULT_OCI8_ENCODING
|
@@ -75,8 +85,9 @@ require 'oci8/bindtype.rb'
|
|
75
85
|
require 'oci8/metadata.rb'
|
76
86
|
require 'oci8/compat.rb'
|
77
87
|
require 'oci8/object.rb'
|
88
|
+
require 'oci8/properties.rb'
|
78
89
|
|
79
90
|
class OCI8
|
80
|
-
VERSION = '2.0.
|
91
|
+
VERSION = '2.0.5'
|
81
92
|
CLIENT_VERSION = '1020'
|
82
93
|
end
|
data/lib/oci8.rb.in
CHANGED
@@ -18,14 +18,24 @@ if RUBY_PLATFORM =~ /cygwin/
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
+
so_basename = 'oci8lib_'
|
22
|
+
if defined? RUBY_ENGINE and RUBY_ENGINE != 'ruby'
|
23
|
+
so_basename += RUBY_ENGINE
|
24
|
+
end
|
25
|
+
|
26
|
+
# The suffix number indicates the ruby API version.
|
27
|
+
# 18 - ruby 1.8.x
|
28
|
+
# 191 - ruby 1.9.1 and 1.9.2
|
29
|
+
# 19x - ruby 1.9.x future version which will break the API compatibility
|
21
30
|
case RUBY_VERSION
|
22
31
|
when /^1\.9/
|
23
|
-
|
32
|
+
so_basename += '191'
|
24
33
|
when /^1\.8/
|
25
|
-
|
34
|
+
so_basename += '18'
|
26
35
|
else
|
27
36
|
raise 'unsupported ruby version: ' + RUBY_VERSION
|
28
37
|
end
|
38
|
+
require so_basename
|
29
39
|
|
30
40
|
if OCI8.respond_to? :encoding
|
31
41
|
if defined? DEFAULT_OCI8_ENCODING
|
@@ -75,6 +85,7 @@ require 'oci8/bindtype.rb'
|
|
75
85
|
require 'oci8/metadata.rb'
|
76
86
|
require 'oci8/compat.rb'
|
77
87
|
require 'oci8/object.rb'
|
88
|
+
require 'oci8/properties.rb'
|
78
89
|
|
79
90
|
class OCI8
|
80
91
|
VERSION = '@@OCI8_MODULE_VERSION@@'
|
data/lib/oci8/.document
CHANGED
data/lib/oci8/bindtype.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#--
|
2
2
|
# bindtype.rb -- OCI8::BindType
|
3
3
|
#
|
4
|
-
# Copyright (C) 2009 KUBO Takehiro <kubo@jiubao.org>
|
4
|
+
# Copyright (C) 2009-2010 KUBO Takehiro <kubo@jiubao.org>
|
5
5
|
#++
|
6
6
|
|
7
7
|
class OCI8
|
@@ -46,6 +46,12 @@ class OCI8
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
+
class BasicNumberType < OCI8::BindType::OraNumber
|
50
|
+
def get()
|
51
|
+
(val = super()) && (val.has_decimal_part? ? val.to_f : val.to_i)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
49
55
|
# get/set Number (for OCI8::SQLT_NUM)
|
50
56
|
class Number
|
51
57
|
def self.create(con, val, param, max_array_size)
|
@@ -116,6 +122,8 @@ class OCI8
|
|
116
122
|
length = val.size
|
117
123
|
end
|
118
124
|
end
|
125
|
+
# use the default value when :nchar is not set explicitly.
|
126
|
+
nchar = OCI8.properties[:bind_string_as_nchar] unless param.has_key?(:nchar)
|
119
127
|
when OCI8::Metadata::Base
|
120
128
|
case param.data_type
|
121
129
|
when :char, :varchar2
|
@@ -124,13 +132,18 @@ class OCI8
|
|
124
132
|
# The length of a Japanese half-width kana is one in Shift_JIS,
|
125
133
|
# two in EUC-JP, three in UTF-8.
|
126
134
|
length *= 3 unless param.char_used?
|
135
|
+
nchar = (param.charset_form == :nchar)
|
127
136
|
when :raw
|
128
137
|
# HEX needs twice space.
|
129
138
|
length = param.data_size * 2
|
130
139
|
end
|
131
140
|
end
|
132
141
|
length = @@minimum_bind_length if length.nil? or length < @@minimum_bind_length
|
133
|
-
|
142
|
+
if nchar
|
143
|
+
OCI8::BindType::NCHAR.new(con, val, length, max_array_size)
|
144
|
+
else
|
145
|
+
OCI8::BindType::CHAR.new(con, val, length, max_array_size)
|
146
|
+
end
|
134
147
|
end
|
135
148
|
end
|
136
149
|
|
@@ -153,7 +166,7 @@ class OCI8
|
|
153
166
|
|
154
167
|
class Long < OCI8::BindType::String
|
155
168
|
def self.create(con, val, param, max_array_size)
|
156
|
-
|
169
|
+
super(con, val, {:length => con.long_read_len}, max_array_size)
|
157
170
|
end
|
158
171
|
end
|
159
172
|
|
data/lib/oci8/datetime.rb
CHANGED
@@ -38,6 +38,14 @@ class OCI8
|
|
38
38
|
@@time_new_accepts_timezone = false # prior to ruby 1.9.2
|
39
39
|
end
|
40
40
|
|
41
|
+
begin
|
42
|
+
# 2001-01-01 00:00:59.999
|
43
|
+
::DateTime.civil(2001, 1, 1, 0, 0, Rational(59_999, 1000), 0)
|
44
|
+
@@datetime_has_fractional_second_bug = false
|
45
|
+
rescue ArgumentError
|
46
|
+
@@datetime_has_fractional_second_bug = true
|
47
|
+
end
|
48
|
+
|
41
49
|
def self.default_timezone
|
42
50
|
@@default_timezone
|
43
51
|
end
|
@@ -162,8 +170,8 @@ class OCI8
|
|
162
170
|
return nil if ary.nil?
|
163
171
|
|
164
172
|
year, month, day, hour, minute, sec, fsec, tz_hour, tz_min = ary
|
165
|
-
if sec >= 59 and fsec != 0
|
166
|
-
# convert to a DateTime via a String as a
|
173
|
+
if @@datetime_has_fractional_second_bug and sec >= 59 and fsec != 0
|
174
|
+
# convert to a DateTime via a String as a workaround
|
167
175
|
if tz_hour >= 0 && tz_min >= 0
|
168
176
|
sign = ?+
|
169
177
|
else
|
@@ -245,7 +253,7 @@ class OCI8
|
|
245
253
|
end
|
246
254
|
|
247
255
|
if OCI8.oracle_client_version >= ORAVER_9_0
|
248
|
-
class
|
256
|
+
class DateTimeViaOCITimestampTZ < OCI8::BindType::OCITimestampTZ # :nodoc:
|
249
257
|
include OCI8::BindType::Util
|
250
258
|
|
251
259
|
def set(val) # :nodoc:
|
@@ -257,7 +265,7 @@ class OCI8
|
|
257
265
|
end
|
258
266
|
end
|
259
267
|
|
260
|
-
class
|
268
|
+
class TimeViaOCITimestampTZ < OCI8::BindType::OCITimestampTZ # :nodoc:
|
261
269
|
include OCI8::BindType::Util
|
262
270
|
|
263
271
|
def set(val) # :nodoc:
|
@@ -335,7 +343,7 @@ class OCI8
|
|
335
343
|
if OCI8.oracle_client_version >= ORAVER_9_0
|
336
344
|
def self.create(con, val, param, max_array_size) # :nodoc:
|
337
345
|
if true # TODO: check Oracle server version
|
338
|
-
|
346
|
+
DateTimeViaOCITimestampTZ.new(con, val, param, max_array_size)
|
339
347
|
else
|
340
348
|
DateTimeViaOCIDate.new(con, val, param, max_array_size)
|
341
349
|
end
|
@@ -414,7 +422,7 @@ class OCI8
|
|
414
422
|
if OCI8.oracle_client_version >= ORAVER_9_0
|
415
423
|
def self.create(con, val, param, max_array_size) # :nodoc:
|
416
424
|
if true # TODO: check Oracle server version
|
417
|
-
|
425
|
+
TimeViaOCITimestampTZ.new(con, val, param, max_array_size)
|
418
426
|
else
|
419
427
|
TimeViaOCIDate.new(con, val, param, max_array_size)
|
420
428
|
end
|
data/lib/oci8/encoding-init.rb
CHANGED
@@ -5,7 +5,8 @@
|
|
5
5
|
# try to get NLS_LANG.
|
6
6
|
nls_lang = ENV['NLS_LANG']
|
7
7
|
|
8
|
-
if
|
8
|
+
# if NLS_LANG is not set, get it from the Windows registry.
|
9
|
+
if nls_lang.nil? and defined? OCI8::Win32Util
|
9
10
|
dll_path = OCI8::Win32Util.dll_path.upcase
|
10
11
|
if dll_path =~ %r{\\BIN\\OCI.DLL}
|
11
12
|
oracle_home = $`
|
@@ -33,6 +34,10 @@ if nls_lang
|
|
33
34
|
if enc.nil?
|
34
35
|
raise "Ruby encoding name is not found in encoding.yml for NLS_LANG #{nls_lang}."
|
35
36
|
end
|
37
|
+
if enc.is_a? Array
|
38
|
+
# Use the first available encoding in the array.
|
39
|
+
enc = enc.find do |e| Encoding.find(e) rescue false; end
|
40
|
+
end
|
36
41
|
else
|
37
42
|
warn "Warning: NLS_LANG is not set. fallback to US-ASCII."
|
38
43
|
enc = 'US-ASCII'
|
data/lib/oci8/encoding.yml
CHANGED
@@ -40,7 +40,7 @@ ZHS16GBK: GBK
|
|
40
40
|
# MS Windows Code Page 950 with Hong Kong Supplementary Character
|
41
41
|
# Set HKSCS-2001 (character set conversion to and from Unicode is
|
42
42
|
# based on Unicode 3.0)
|
43
|
-
ZHT16HKSCS: Big5
|
43
|
+
ZHT16HKSCS: [Big5-HKSCS, Big5]
|
44
44
|
|
45
45
|
# MS Windows Code Page 950 Traditional Chinese
|
46
46
|
ZHT16MSWIN950: Big5
|
@@ -166,7 +166,7 @@ ZHT16DBT: nil # FIXME
|
|
166
166
|
# MS Windows Code Page 950 with Hong Kong Supplementary Character
|
167
167
|
# Set HKSCS-2001 (character set conversion to and from Unicode is
|
168
168
|
# based on Unicode 3.1)
|
169
|
-
ZHT16HKSCS31: Big5
|
169
|
+
ZHT16HKSCS31: [Big5-HKSCS, Big5]
|
170
170
|
|
171
171
|
# SOPS 32-bit Traditional Chinese
|
172
172
|
ZHT32SOPS: nil # FIXME
|
data/lib/oci8/object.rb
CHANGED
@@ -394,7 +394,7 @@ EOS
|
|
394
394
|
@class_methods[type_method.name.downcase.intern] = result_type
|
395
395
|
end
|
396
396
|
else
|
397
|
-
warn "unsupported return type (#{schema_name}.#{name}.#{type_method.name})" if $VERBOSE
|
397
|
+
warn "unsupported return type (#{metadata.schema_name}.#{metadata.name}.#{type_method.name})" if $VERBOSE
|
398
398
|
end
|
399
399
|
end
|
400
400
|
end
|
@@ -457,6 +457,16 @@ EOS
|
|
457
457
|
#[ATTR_NAMED_COLLECTION, [datatype, typeinfo], SIZE_OF_POINTER, 2, ALIGNMENT_OF_POINTER]
|
458
458
|
tdo = con.get_tdo_by_metadata(metadata.type_metadata)
|
459
459
|
[ATTR_NAMED_COLLECTION, tdo, tdo.val_size, tdo.ind_size, tdo.alignment]
|
460
|
+
when :clob
|
461
|
+
if metadata.charset_form != :nchar
|
462
|
+
[ATTR_CLOB, con, SIZE_OF_POINTER, 2, ALIGNMENT_OF_POINTER]
|
463
|
+
else
|
464
|
+
[ATTR_NCLOB, con, SIZE_OF_POINTER, 2, ALIGNMENT_OF_POINTER]
|
465
|
+
end
|
466
|
+
when :blob
|
467
|
+
[ATTR_BLOB, con, SIZE_OF_POINTER, 2, ALIGNMENT_OF_POINTER]
|
468
|
+
when :bfile
|
469
|
+
[ATTR_BFILE, con, SIZE_OF_POINTER, 2, ALIGNMENT_OF_POINTER]
|
460
470
|
else
|
461
471
|
raise "unsupported typecode #{metadata.typecode}"
|
462
472
|
end
|
@@ -487,6 +497,7 @@ EOS
|
|
487
497
|
|
488
498
|
class NamedType
|
489
499
|
def to_value
|
500
|
+
return nil if self.null?
|
490
501
|
obj = tdo.ruby_class.new
|
491
502
|
obj.instance_variable_set(:@attributes, self.attributes)
|
492
503
|
obj
|
@@ -503,20 +514,28 @@ EOS
|
|
503
514
|
end
|
504
515
|
|
505
516
|
def attributes=(obj)
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
517
|
+
if obj.nil?
|
518
|
+
self.null = true
|
519
|
+
else
|
520
|
+
obj = obj.instance_variable_get(:@attributes) unless obj.is_a? Hash
|
521
|
+
tdo.attributes.each do |attr|
|
522
|
+
attr_val = obj[attr.name]
|
523
|
+
attr_val = attr.set_proc.call(attr_val) if attr.set_proc
|
524
|
+
set_attribute(attr.datatype, attr.typeinfo, attr.val_offset, attr.ind_offset, attr_val)
|
525
|
+
end
|
526
|
+
self.null = false
|
511
527
|
end
|
512
528
|
end
|
513
529
|
end
|
514
530
|
|
515
531
|
class NamedCollection
|
516
532
|
def to_value
|
517
|
-
|
518
|
-
|
519
|
-
|
533
|
+
attr = self.attributes
|
534
|
+
if attr
|
535
|
+
obj = tdo.ruby_class.new
|
536
|
+
obj.instance_variable_set(:@attributes, attr)
|
537
|
+
obj
|
538
|
+
end
|
520
539
|
end
|
521
540
|
|
522
541
|
def attributes
|
data/lib/oci8/oci8.rb
CHANGED
@@ -8,6 +8,7 @@
|
|
8
8
|
#
|
9
9
|
|
10
10
|
require 'date'
|
11
|
+
require 'yaml'
|
11
12
|
|
12
13
|
# A connection to a Oracle database server.
|
13
14
|
#
|
@@ -543,13 +544,28 @@ class OraDate
|
|
543
544
|
end
|
544
545
|
|
545
546
|
class OraNumber
|
546
|
-
def yaml_initialize(type, val) # :nodoc:
|
547
|
-
initialize(val)
|
548
|
-
end
|
549
547
|
|
550
|
-
|
551
|
-
|
552
|
-
|
548
|
+
if defined? Psych and YAML == Psych
|
549
|
+
|
550
|
+
yaml_tag '!ruby/object:OraNumber'
|
551
|
+
def encode_with coder # :nodoc:
|
552
|
+
coder.scalar = self.to_s
|
553
|
+
end
|
554
|
+
|
555
|
+
def init_with coder # :nodoc:
|
556
|
+
initialize(coder.scalar)
|
557
|
+
end
|
558
|
+
|
559
|
+
else
|
560
|
+
|
561
|
+
def yaml_initialize(type, val) # :nodoc:
|
562
|
+
initialize(val)
|
563
|
+
end
|
564
|
+
|
565
|
+
def to_yaml(opts = {}) # :nodoc:
|
566
|
+
YAML.quick_emit(object_id, opts) do |out|
|
567
|
+
out.scalar(taguri, self.to_s, :plain)
|
568
|
+
end
|
553
569
|
end
|
554
570
|
end
|
555
571
|
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# properties.rb -- implements OCI8.properties
|
2
|
+
#
|
3
|
+
# Copyright (C) 2010 KUBO Takehiro <kubo@jiubao.org>
|
4
|
+
|
5
|
+
class OCI8
|
6
|
+
|
7
|
+
@@properties = {
|
8
|
+
:bind_string_as_nchar => false,
|
9
|
+
}
|
10
|
+
|
11
|
+
def @@properties.[](name)
|
12
|
+
raise IndexError, "No such property name: #{name}" unless @@properties.has_key?(name)
|
13
|
+
super(name)
|
14
|
+
end
|
15
|
+
|
16
|
+
def @@properties.[]=(name, val)
|
17
|
+
raise IndexError, "No such property name: #{name}" unless @@properties.has_key?(name)
|
18
|
+
case name
|
19
|
+
when :bind_string_as_nchar
|
20
|
+
val = val ? true : false
|
21
|
+
end
|
22
|
+
super(name, val)
|
23
|
+
end
|
24
|
+
|
25
|
+
# call-seq:
|
26
|
+
# OCI8.properties -> a customized Hash
|
27
|
+
#
|
28
|
+
# (new in 2.0.5)
|
29
|
+
#
|
30
|
+
# Returns a Hash which ruby-oci8 global settings.
|
31
|
+
# The hash's setter and getter methods are customized to check
|
32
|
+
# property names and values.
|
33
|
+
#
|
34
|
+
# # get properties
|
35
|
+
# OCI8.properties[:bind_string_as_nchar] # => false
|
36
|
+
# OCI8.properties[:invalid_property_name] # raises an IndexError
|
37
|
+
#
|
38
|
+
# # set properties
|
39
|
+
# OCI8.properties[:bind_string_as_nchar] = true
|
40
|
+
# OCI8.properties[:invalid_property_name] = true # raises an IndexError
|
41
|
+
#
|
42
|
+
# Supported properties are listed below:
|
43
|
+
#
|
44
|
+
# [:bind_string_as_nchar]
|
45
|
+
# +true+ when string bind variables are bound as NCHAR,
|
46
|
+
# otherwise +false+. The default value is +false+.
|
47
|
+
def self.properties
|
48
|
+
@@properties
|
49
|
+
end
|
50
|
+
end
|
data/lib/oci8lib_18.so
CHANGED
Binary file
|
data/lib/oci8lib_191.so
CHANGED
Binary file
|
data/test/test_break.rb
CHANGED
@@ -23,23 +23,22 @@ class TestBreak < Test::Unit::TestCase
|
|
23
23
|
|
24
24
|
TIME_IN_PLSQL = 5
|
25
25
|
TIME_TO_BREAK = 2
|
26
|
-
MARGIN = 0.1
|
27
26
|
|
28
27
|
def do_test_ocibreak(conn, expect)
|
29
28
|
$start_time = Time.now
|
30
29
|
|
31
30
|
th = Thread.start do
|
32
31
|
begin
|
33
|
-
|
34
|
-
|
32
|
+
conn.exec("BEGIN DBMS_LOCK.SLEEP(#{TIME_IN_PLSQL}); END;")
|
33
|
+
assert_equal(expect[PLSQL_DONE], (Time.now - $start_time).round, 'PLSQL_DONE')
|
35
34
|
rescue OCIBreak
|
36
|
-
|
35
|
+
assert_equal(expect[OCIBREAK], (Time.now - $start_time).round, 'OCIBREAK')
|
37
36
|
end
|
38
37
|
end
|
39
38
|
|
40
|
-
sleep(0.
|
41
|
-
sleep(TIME_TO_BREAK)
|
42
|
-
assert_equal(expect[SEND_BREAK], (Time.now - $start_time
|
39
|
+
sleep(0.3) # Wait until DBMS_LOCK.SLEEP is running.
|
40
|
+
sleep(TIME_TO_BREAK - 0.3)
|
41
|
+
assert_equal(expect[SEND_BREAK], (Time.now - $start_time).round, 'SEND_BREAK')
|
43
42
|
conn.break()
|
44
43
|
th.join
|
45
44
|
end
|
data/test/test_oranumber.rb
CHANGED
@@ -125,6 +125,33 @@ class TestOraNumber < Test::Unit::TestCase
|
|
125
125
|
val = $1+'.'+$2 if /(-?)0\.(.*)/ =~ val
|
126
126
|
assert_equal(val, cursor[:out])
|
127
127
|
end
|
128
|
+
# Infinity and -Infinity
|
129
|
+
['~', '-~'].each do |val|
|
130
|
+
cursor[:in] = OraNumber.new(val)
|
131
|
+
cursor.exec
|
132
|
+
assert_equal(val, cursor[:out])
|
133
|
+
end
|
134
|
+
if OCI8::oracle_client_version >= OCI8::ORAVER_10_1
|
135
|
+
cursor = conn.parse(<<EOS)
|
136
|
+
BEGIN
|
137
|
+
IF (:in_oranum = CAST(:in_binary_double AS NUMBER)) THEN
|
138
|
+
:result := 'match';
|
139
|
+
ELSE
|
140
|
+
:result := 'unmatch';
|
141
|
+
END IF;
|
142
|
+
END;
|
143
|
+
EOS
|
144
|
+
cursor.bind_param(:in_oranum, nil, OraNumber)
|
145
|
+
cursor.bind_param(:in_binary_double, nil, :binary_double)
|
146
|
+
cursor.bind_param(:result, nil, String, 7)
|
147
|
+
[['~', 1.0/0.0], ['-~', -1.0/0.0]].each do |val|
|
148
|
+
cursor[:in_oranum] = OraNumber.new(val[0])
|
149
|
+
cursor[:in_binary_double] = val[1]
|
150
|
+
cursor.exec
|
151
|
+
assert_equal(cursor[:result], 'match')
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
128
155
|
ensure
|
129
156
|
conn.logoff
|
130
157
|
end
|
@@ -142,13 +169,39 @@ class TestOraNumber < Test::Unit::TestCase
|
|
142
169
|
cursor.exec
|
143
170
|
assert_equal(OraNumber.new(val), cursor[:out])
|
144
171
|
end
|
172
|
+
# Infinity and -Infinity
|
173
|
+
if OCI8::oracle_client_version >= OCI8::ORAVER_10_1
|
174
|
+
cursor = conn.parse("BEGIN :out := CAST(:in AS NUMBER); END;")
|
175
|
+
cursor.bind_param(:out, OraNumber)
|
176
|
+
cursor.bind_param(:in, nil, :binary_double)
|
177
|
+
[['~', 1.0/0.0], ['-~', -1.0/0.0]].each do |val|
|
178
|
+
cursor[:in] = val[1]
|
179
|
+
cursor.exec
|
180
|
+
assert_equal(OraNumber.new(val[0]), cursor[:out])
|
181
|
+
end
|
182
|
+
end
|
183
|
+
ensure
|
184
|
+
conn.logoff
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
def test_bind_basic_number_type
|
189
|
+
conn = get_oci8_connection
|
190
|
+
bind_type = OCI8::BindType::Mapping[:number]
|
191
|
+
begin
|
192
|
+
OCI8::BindType::Mapping[:number] = OCI8::BindType::BasicNumberType
|
193
|
+
assert_kind_of(NilClass, conn.select_one('select CAST(NULL AS NUMBER) from dual')[0])
|
194
|
+
assert_kind_of(Integer, conn.select_one('select 0.0 from dual')[0])
|
195
|
+
assert_kind_of(Integer, conn.select_one('select 10.0 from dual')[0])
|
196
|
+
assert_kind_of(Float, conn.select_one('select 10.1 from dual')[0])
|
145
197
|
ensure
|
146
198
|
conn.logoff
|
199
|
+
OCI8::BindType::Mapping[:number] = bind_type
|
147
200
|
end
|
148
201
|
end
|
149
202
|
|
150
203
|
def test_dup
|
151
|
-
LARGE_RANGE_VALUES.each do |x|
|
204
|
+
(LARGE_RANGE_VALUES + ['~', '-~']).each do |x|
|
152
205
|
n = OraNumber.new(x)
|
153
206
|
assert_equal(n, n.dup)
|
154
207
|
assert_equal(n, n.clone)
|
@@ -156,14 +209,14 @@ class TestOraNumber < Test::Unit::TestCase
|
|
156
209
|
end
|
157
210
|
|
158
211
|
def test_marshal
|
159
|
-
LARGE_RANGE_VALUES.each do |x|
|
212
|
+
(LARGE_RANGE_VALUES + ['~', '-~']).each do |x|
|
160
213
|
n = OraNumber.new(x)
|
161
214
|
assert_equal(n, Marshal.load(Marshal.dump(n)))
|
162
215
|
end
|
163
216
|
end
|
164
217
|
|
165
218
|
def test_yaml
|
166
|
-
LARGE_RANGE_VALUES.each do |x|
|
219
|
+
(LARGE_RANGE_VALUES + ['~', '-~']).each do |x|
|
167
220
|
n = OraNumber.new(x)
|
168
221
|
assert_equal(n, YAML.load(YAML.dump(n)))
|
169
222
|
end
|
@@ -200,11 +253,28 @@ class TestOraNumber < Test::Unit::TestCase
|
|
200
253
|
|
201
254
|
# OCI8::Math.atan2(y, x) -> ocinumber
|
202
255
|
def test_math_atan2
|
256
|
+
# Prior to ruby 1.9.2:
|
257
|
+
# Following method calls' return values depend on the underneath C library
|
258
|
+
# implementation.
|
259
|
+
#
|
260
|
+
# Math::atan2(+0.0, +0.0)
|
261
|
+
# Math::atan2(-0.0, +0.0)
|
262
|
+
# Math::atan2(+0.0, -0.0)
|
263
|
+
# Math::atan2(-0.0, -0.0)
|
264
|
+
#
|
265
|
+
# They are +0.0, -0.0, +PI and -PI respectively as far as I checked them on
|
266
|
+
# Windows and Linux.
|
267
|
+
#
|
268
|
+
# After ruby 1.9.2:
|
269
|
+
# They all raise a Math::DomainError exception.
|
270
|
+
#
|
271
|
+
# In contrast to Math::atan2, OCI8::Math::atan2(0, 0) allways returns 0 because
|
272
|
+
# OraNumber doesn't have the difference between +0 and -0.
|
203
273
|
compare_with_float2(SMALL_RANGE_VALUES, SMALL_RANGE_VALUES,
|
204
|
-
Proc.new {|x, y| Math::atan2(x, y.to_f)},
|
274
|
+
Proc.new {|x, y| (x.to_f == 0 && y.to_f == 0) ? 0 : Math::atan2(x, y.to_f)},
|
205
275
|
Proc.new {|x, y| OCI8::Math::atan2(x, y.to_f)})
|
206
276
|
compare_with_float2(SMALL_RANGE_VALUES, SMALL_RANGE_VALUES,
|
207
|
-
Proc.new {|x, y| Math::atan2(y.to_f, x)},
|
277
|
+
Proc.new {|x, y| (x.to_f == 0 && y.to_f == 0) ? 0 : Math::atan2(y.to_f, x)},
|
208
278
|
Proc.new {|x, y| OCI8::Math::atan2(y.to_f, x)})
|
209
279
|
end
|
210
280
|
|
@@ -652,4 +722,25 @@ class TestOraNumber < Test::Unit::TestCase
|
|
652
722
|
assert_equal(ary[1], OraNumber.new(ary[0]).to_s)
|
653
723
|
end
|
654
724
|
end
|
725
|
+
|
726
|
+
def test_dump
|
727
|
+
conn = get_oci8_connection
|
728
|
+
begin
|
729
|
+
cursor = conn.parse("select dump(to_number(:1)) from dual")
|
730
|
+
cursor.bind_param(1, nil, String, 40)
|
731
|
+
LARGE_RANGE_VALUES.each do |val|
|
732
|
+
cursor[1] = val
|
733
|
+
cursor.exec
|
734
|
+
assert_equal(cursor.fetch[0], OraNumber.new(val).dump)
|
735
|
+
end
|
736
|
+
ensure
|
737
|
+
conn.logoff
|
738
|
+
end
|
739
|
+
LARGE_RANGE_VALUES
|
740
|
+
end
|
741
|
+
|
742
|
+
def test_has_decimal_part
|
743
|
+
assert_equal(false, OraNumber(10.0).has_decimal_part?)
|
744
|
+
assert_equal(true, OraNumber(10.1).has_decimal_part?)
|
745
|
+
end
|
655
746
|
end
|
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-oci8
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 5
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 2
|
8
|
+
- 0
|
9
|
+
- 5
|
10
|
+
version: 2.0.5
|
5
11
|
platform: x86-mingw32
|
6
12
|
authors:
|
7
13
|
- KUBO Takehiro
|
@@ -9,7 +15,7 @@ autorequire:
|
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date:
|
18
|
+
date: 2011-06-12 00:00:00 +09:00
|
13
19
|
default_executable:
|
14
20
|
dependencies: []
|
15
21
|
|
@@ -52,6 +58,7 @@ files:
|
|
52
58
|
- lib/oci8/object.rb
|
53
59
|
- lib/oci8/oci8.rb
|
54
60
|
- lib/oci8/oracle_version.rb
|
61
|
+
- lib/oci8/properties.rb
|
55
62
|
- test/README
|
56
63
|
- test/config.rb
|
57
64
|
- test/test_all.rb
|
@@ -86,21 +93,29 @@ rdoc_options:
|
|
86
93
|
require_paths:
|
87
94
|
- lib
|
88
95
|
required_ruby_version: !ruby/object:Gem::Requirement
|
96
|
+
none: false
|
89
97
|
requirements:
|
90
98
|
- - ">="
|
91
99
|
- !ruby/object:Gem::Version
|
100
|
+
hash: 55
|
101
|
+
segments:
|
102
|
+
- 1
|
103
|
+
- 8
|
104
|
+
- 0
|
92
105
|
version: 1.8.0
|
93
|
-
version:
|
94
106
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
|
+
none: false
|
95
108
|
requirements:
|
96
109
|
- - ">="
|
97
110
|
- !ruby/object:Gem::Version
|
111
|
+
hash: 3
|
112
|
+
segments:
|
113
|
+
- 0
|
98
114
|
version: "0"
|
99
|
-
version:
|
100
115
|
requirements: []
|
101
116
|
|
102
117
|
rubyforge_project: ruby-oci8
|
103
|
-
rubygems_version: 1.3.
|
118
|
+
rubygems_version: 1.3.7
|
104
119
|
signing_key:
|
105
120
|
specification_version: 3
|
106
121
|
summary: Ruby interface for Oracle using OCI8 API
|