ruby-oci8 2.2.1 → 2.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.yardopts +1 -6
- data/ChangeLog +98 -0
- data/NEWS +48 -1
- data/README.md +7 -0
- data/dist-files +4 -0
- data/docs/bind-array-to-in_cond.md +38 -0
- data/docs/conflicts-local-connections-and-processes.md +95 -0
- data/docs/report-installation-issue.md +8 -8
- data/docs/timeout-parameters.md +91 -0
- data/ext/oci8/apiwrap.yml +9 -0
- data/ext/oci8/extconf.rb +1 -0
- data/ext/oci8/metadata.c +4 -2
- data/ext/oci8/object.c +47 -2
- data/ext/oci8/oci8.h +2 -1
- data/ext/oci8/oraconf.rb +23 -12
- data/ext/oci8/plthook_win32.c +7 -1
- data/lib/oci8/connection_pool.rb +74 -3
- data/lib/oci8/cursor.rb +13 -6
- data/lib/oci8/object.rb +4 -1
- data/lib/oci8/oci8.rb +157 -21
- data/lib/oci8/ocihandle.rb +0 -16
- data/lib/oci8/properties.rb +33 -0
- data/lib/oci8/version.rb +1 -1
- data/lib/ruby-oci8.rb +4 -0
- data/ruby-oci8.gemspec +1 -1
- data/test/setup_test_object.sql +22 -2
- data/test/test_all.rb +1 -0
- data/test/test_connstr.rb +126 -0
- data/test/test_object.rb +26 -1
- metadata +8 -4
data/lib/oci8/ocihandle.rb
CHANGED
@@ -425,22 +425,6 @@ class OCIHandle
|
|
425
425
|
# @private
|
426
426
|
OCI_CRED_EXT = 2
|
427
427
|
|
428
|
-
#################################
|
429
|
-
#
|
430
|
-
# Authentication Modes
|
431
|
-
#
|
432
|
-
#################################
|
433
|
-
|
434
|
-
# for SYSDBA authorization
|
435
|
-
# @private
|
436
|
-
OCI_SYSDBA = 0x0002
|
437
|
-
# for SYSOPER authorization
|
438
|
-
# @private
|
439
|
-
OCI_SYSOPER = 0x0004
|
440
|
-
# for SYSASM authorization
|
441
|
-
# @private
|
442
|
-
OCI_SYSASM = 0x8000
|
443
|
-
|
444
428
|
#################################
|
445
429
|
#
|
446
430
|
# OCI Parameter Types
|
data/lib/oci8/properties.rb
CHANGED
@@ -13,6 +13,10 @@ class OCI8
|
|
13
13
|
:statement_cache_size => 0,
|
14
14
|
:events_mode => ((OCI8.__get_prop(2) & 4) != 0), # 4 <- OCI_EVENTS in oci.h
|
15
15
|
:cancel_read_at_exit => false,
|
16
|
+
:tcp_connect_timeout => nil,
|
17
|
+
:connect_timeout => nil,
|
18
|
+
:send_timeout => nil,
|
19
|
+
:recv_timeout => nil,
|
16
20
|
}
|
17
21
|
|
18
22
|
# @private
|
@@ -53,6 +57,11 @@ class OCI8
|
|
53
57
|
when :cancel_read_at_exit
|
54
58
|
val = val ? true : false
|
55
59
|
OCI8.__set_prop(3, val)
|
60
|
+
when :tcp_connect_timeout, :connect_timeout, :send_timeout, :recv_timeout
|
61
|
+
if !val.nil?
|
62
|
+
val = val.to_i
|
63
|
+
raise ArgumentError, "The property value for :#{name} must be nil or a positive integer." if val <= 0
|
64
|
+
end
|
56
65
|
end
|
57
66
|
super(name, val)
|
58
67
|
end
|
@@ -132,6 +141,30 @@ class OCI8
|
|
132
141
|
#
|
133
142
|
# *Since:* 2.1.8
|
134
143
|
#
|
144
|
+
# [:tcp_connect_timeout]
|
145
|
+
#
|
146
|
+
# See {file:docs/timeout-parameters.md}
|
147
|
+
#
|
148
|
+
# *Since:* 2.2.2
|
149
|
+
#
|
150
|
+
# [:connect_timeout]
|
151
|
+
#
|
152
|
+
# See {file:docs/timeout-parameters.md}
|
153
|
+
#
|
154
|
+
# *Since:* 2.2.2
|
155
|
+
#
|
156
|
+
# [:send_timeout]
|
157
|
+
#
|
158
|
+
# See {file:docs/timeout-parameters.md}
|
159
|
+
#
|
160
|
+
# *Since:* 2.2.2
|
161
|
+
#
|
162
|
+
# [:recv_timeout]
|
163
|
+
#
|
164
|
+
# See {file:docs/timeout-parameters.md}
|
165
|
+
#
|
166
|
+
# *Since:* 2.2.2
|
167
|
+
#
|
135
168
|
# @return [a customized Hash]
|
136
169
|
# @since 2.0.5
|
137
170
|
#
|
data/lib/oci8/version.rb
CHANGED
data/lib/ruby-oci8.rb
ADDED
data/ruby-oci8.gemspec
CHANGED
@@ -37,7 +37,7 @@ EOS
|
|
37
37
|
s.has_rdoc = 'yard'
|
38
38
|
s.authors = ['Kubo Takehiro']
|
39
39
|
s.platform = gem_platform
|
40
|
-
s.license = '2-
|
40
|
+
s.license = 'BSD-2-Clause'
|
41
41
|
files = File.read('dist-files').split("\n")
|
42
42
|
if gem_platform == Gem::Platform::RUBY
|
43
43
|
s.extensions << 'ext/oci8/extconf.rb'
|
data/test/setup_test_object.sql
CHANGED
@@ -10,6 +10,10 @@ drop type rb_test_obj_elem_array
|
|
10
10
|
/
|
11
11
|
drop type rb_test_obj_elem
|
12
12
|
/
|
13
|
+
drop type rb_test_obj_sub
|
14
|
+
/
|
15
|
+
drop type rb_test_obj_base
|
16
|
+
/
|
13
17
|
create type rb_test_obj_elem as object (
|
14
18
|
x integer,
|
15
19
|
y integer
|
@@ -116,7 +120,7 @@ create or replace type body rb_test_obj is
|
|
116
120
|
|
117
121
|
static function test_object_version return integer is
|
118
122
|
begin
|
119
|
-
return
|
123
|
+
return 3;
|
120
124
|
end;
|
121
125
|
|
122
126
|
static function class_func(n number) return rb_test_obj is
|
@@ -167,5 +171,21 @@ begin
|
|
167
171
|
end loop;
|
168
172
|
end;
|
169
173
|
/
|
170
|
-
|
174
|
+
|
175
|
+
create type rb_test_obj_base as object (
|
176
|
+
id varchar2(30)
|
177
|
+
) not final
|
178
|
+
/
|
179
|
+
create type rb_test_obj_sub under rb_test_obj_base (
|
180
|
+
subid varchar2(30)
|
181
|
+
) final
|
182
|
+
/
|
183
|
+
create or replace function rb_test_obj_get_object(get_base integer) return rb_test_obj_base is
|
184
|
+
begin
|
185
|
+
if get_base = 0 then
|
186
|
+
return rb_test_obj_base('base');
|
187
|
+
else
|
188
|
+
return rb_test_obj_sub('sub', 'subid');
|
189
|
+
end if;
|
190
|
+
end;
|
171
191
|
/
|
data/test/test_all.rb
CHANGED
data/test/test_connstr.rb
CHANGED
@@ -75,4 +75,130 @@ class TestConnStr < Minitest::Test
|
|
75
75
|
end
|
76
76
|
end
|
77
77
|
end
|
78
|
+
|
79
|
+
# https://docs.oracle.com/database/121/NETAG/naming.htm#BABJBFHJ
|
80
|
+
DESC_TEST_CASE =
|
81
|
+
[
|
82
|
+
# Cannot distinguish net service names from easy connect strings in this case.
|
83
|
+
["sales-server", nil, nil, "sales-server"],
|
84
|
+
# Easy Connect string with host.
|
85
|
+
["//sales-server", nil, nil, <<EOS],
|
86
|
+
(DESCRIPTION=
|
87
|
+
(CONNECT_DATA=
|
88
|
+
(SERVICE_NAME=))
|
89
|
+
(ADDRESS=
|
90
|
+
(PROTOCOL=TCP)
|
91
|
+
(HOST=sales-server)
|
92
|
+
(PORT=1521)))
|
93
|
+
EOS
|
94
|
+
# Easy Connect string with host and port.
|
95
|
+
["sales-server:3456", nil, nil, <<EOS],
|
96
|
+
(DESCRIPTION=
|
97
|
+
(CONNECT_DATA=
|
98
|
+
(SERVICE_NAME=))
|
99
|
+
(ADDRESS=
|
100
|
+
(PROTOCOL=TCP)
|
101
|
+
(HOST=sales-server)
|
102
|
+
(PORT=3456)))
|
103
|
+
EOS
|
104
|
+
# The host name is sales-server and the service name is sales.
|
105
|
+
["sales-server/sales", nil, nil, <<EOS],
|
106
|
+
(DESCRIPTION=
|
107
|
+
(CONNECT_DATA=
|
108
|
+
(SERVICE_NAME=sales))
|
109
|
+
(ADDRESS=
|
110
|
+
(PROTOCOL=TCP)
|
111
|
+
(HOST=sales-server)
|
112
|
+
(PORT=1521)))
|
113
|
+
EOS
|
114
|
+
# Easy Connect string with IPv6 address.
|
115
|
+
["[2001:0db8:0:0::200C:417A]:80/sales", nil, nil, <<EOS],
|
116
|
+
(DESCRIPTION=
|
117
|
+
(CONNECT_DATA=
|
118
|
+
(SERVICE_NAME=sales))
|
119
|
+
(ADDRESS=
|
120
|
+
(PROTOCOL=TCP)
|
121
|
+
(HOST=2001:0db8:0:0::200C:417A)
|
122
|
+
(PORT=80)))
|
123
|
+
EOS
|
124
|
+
# Easy Connect string with IPv6 host address.
|
125
|
+
["sales-server:80/sales", nil, nil, <<EOS],
|
126
|
+
(DESCRIPTION=
|
127
|
+
(CONNECT_DATA=
|
128
|
+
(SERVICE_NAME=sales))
|
129
|
+
(ADDRESS=
|
130
|
+
(PROTOCOL=TCP)
|
131
|
+
(HOST=sales-server)
|
132
|
+
(PORT=80)))
|
133
|
+
EOS
|
134
|
+
# Easy Connect string with host, service name, and server.
|
135
|
+
["sales-server/sales:dedicated/inst1", nil, nil, <<EOS],
|
136
|
+
(DESCRIPTION=
|
137
|
+
(CONNECT_DATA=
|
138
|
+
(SERVICE_NAME=sales)
|
139
|
+
(SERVER=dedicated)
|
140
|
+
(INSTANCE_NAME=inst1))
|
141
|
+
(ADDRESS=
|
142
|
+
(PROTOCOL=TCP)
|
143
|
+
(HOST=sales-server)
|
144
|
+
(PORT=1521)))
|
145
|
+
EOS
|
146
|
+
["sales-server//inst1", nil, nil, <<EOS],
|
147
|
+
(DESCRIPTION=
|
148
|
+
(CONNECT_DATA=
|
149
|
+
(SERVICE_NAME=)
|
150
|
+
(INSTANCE_NAME=inst1))
|
151
|
+
(ADDRESS=
|
152
|
+
(PROTOCOL=TCP)
|
153
|
+
(HOST=sales-server)
|
154
|
+
(PORT=1521)))
|
155
|
+
EOS
|
156
|
+
#
|
157
|
+
["sales-server/sales", 20, nil, <<EOS],
|
158
|
+
(DESCRIPTION=
|
159
|
+
(CONNECT_DATA=
|
160
|
+
(SERVICE_NAME=sales))
|
161
|
+
(ADDRESS=
|
162
|
+
(PROTOCOL=TCP)
|
163
|
+
(HOST=sales-server)
|
164
|
+
(PORT=1521))
|
165
|
+
(TRANSPORT_CONNECT_TIMEOUT=20))
|
166
|
+
EOS
|
167
|
+
#
|
168
|
+
["sales-server/sales", nil, 30, <<EOS],
|
169
|
+
(DESCRIPTION=
|
170
|
+
(CONNECT_DATA=
|
171
|
+
(SERVICE_NAME=sales))
|
172
|
+
(ADDRESS=
|
173
|
+
(PROTOCOL=TCP)
|
174
|
+
(HOST=sales-server)
|
175
|
+
(PORT=1521))
|
176
|
+
(CONNECT_TIMEOUT=30))
|
177
|
+
EOS
|
178
|
+
#
|
179
|
+
["sales-server/sales", 20, 30, <<EOS],
|
180
|
+
(DESCRIPTION=
|
181
|
+
(CONNECT_DATA=
|
182
|
+
(SERVICE_NAME=sales))
|
183
|
+
(ADDRESS=
|
184
|
+
(PROTOCOL=TCP)
|
185
|
+
(HOST=sales-server)
|
186
|
+
(PORT=1521))
|
187
|
+
(TRANSPORT_CONNECT_TIMEOUT=20)
|
188
|
+
(CONNECT_TIMEOUT=30))
|
189
|
+
EOS
|
190
|
+
]
|
191
|
+
|
192
|
+
def test_connect_descriptor
|
193
|
+
obj = OCI8.allocate # create an uninitialized object.
|
194
|
+
DESC_TEST_CASE.each do |test_case|
|
195
|
+
easy_connect_string = test_case[0]
|
196
|
+
tcp_connnect_timeout= test_case[1]
|
197
|
+
outbound_connnect_timeout = test_case[2]
|
198
|
+
expected_result = test_case[3].gsub(/\s/, '')
|
199
|
+
# use instance_eval to call a private method to_connect_descriptor
|
200
|
+
result = obj.instance_eval { to_connect_descriptor(easy_connect_string, tcp_connnect_timeout, outbound_connnect_timeout) }
|
201
|
+
assert_equal(expected_result, result, easy_connect_string)
|
202
|
+
end
|
203
|
+
end
|
78
204
|
end
|
data/test/test_object.rb
CHANGED
@@ -22,7 +22,7 @@ begin
|
|
22
22
|
|
23
23
|
begin
|
24
24
|
version = RbTestObj.test_object_version(conn)
|
25
|
-
error_message = "Invalid test object version" if version !=
|
25
|
+
error_message = "Invalid test object version" if version != 3
|
26
26
|
rescue NoMethodError
|
27
27
|
raise unless $!.to_s.include?('test_object_version')
|
28
28
|
error_message = "rb_test_obj.test_object_version is not declared."
|
@@ -48,6 +48,12 @@ EOS
|
|
48
48
|
class RbTestIntArray < OCI8::Object::Base
|
49
49
|
end
|
50
50
|
|
51
|
+
class RbTestObjBase < OCI8::Object::Base
|
52
|
+
end
|
53
|
+
|
54
|
+
class RbTestObjSub < RbTestObjBase
|
55
|
+
end
|
56
|
+
|
51
57
|
class TestObj1 < Minitest::Test
|
52
58
|
Delta = 0.00001
|
53
59
|
|
@@ -456,4 +462,23 @@ EOS
|
|
456
462
|
assert_equal(ary ? ary[2] : nil, csr[:out3])
|
457
463
|
end
|
458
464
|
end
|
465
|
+
|
466
|
+
def test_get_subtype
|
467
|
+
csr = @conn.parse("BEGIN :result := rb_test_obj_get_object(:1); END;")
|
468
|
+
csr.bind_param(1, nil, RbTestObjBase)
|
469
|
+
csr.bind_param(2, nil, Integer)
|
470
|
+
|
471
|
+
csr[2] = 0
|
472
|
+
csr.exec
|
473
|
+
val = csr[1]
|
474
|
+
assert_instance_of(RbTestObjBase, val)
|
475
|
+
assert_equal(val.id, 'base')
|
476
|
+
|
477
|
+
csr[2] = 1
|
478
|
+
csr.exec
|
479
|
+
val = csr[1]
|
480
|
+
assert_instance_of(RbTestObjSub, val)
|
481
|
+
assert_equal(val.id, 'sub')
|
482
|
+
assert_equal(val.subid, 'subid')
|
483
|
+
end
|
459
484
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 2
|
7
7
|
- 2
|
8
|
-
-
|
9
|
-
version: 2.2.
|
8
|
+
- 2
|
9
|
+
version: 2.2.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Kubo Takehiro
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date:
|
17
|
+
date: 2016-04-24 00:00:00 +09:00
|
18
18
|
default_executable:
|
19
19
|
dependencies: []
|
20
20
|
|
@@ -41,13 +41,16 @@ files:
|
|
41
41
|
- pre-distclean.rb
|
42
42
|
- ruby-oci8.gemspec
|
43
43
|
- setup.rb
|
44
|
+
- docs/bind-array-to-in_cond.md
|
44
45
|
- docs/install-binary-package.md
|
45
46
|
- docs/install-full-client.md
|
46
47
|
- docs/install-instant-client.md
|
47
48
|
- docs/install-on-osx.md
|
49
|
+
- docs/conflicts-local-connections-and-processes.md
|
48
50
|
- docs/osx-install-dev-tools.png
|
49
51
|
- docs/platform-specific-issues.md
|
50
52
|
- docs/report-installation-issue.md
|
53
|
+
- docs/timeout-parameters.md
|
51
54
|
- ext/oci8/.document
|
52
55
|
- ext/oci8/MANIFEST
|
53
56
|
- ext/oci8/apiwrap.c.tmpl
|
@@ -104,6 +107,7 @@ files:
|
|
104
107
|
- lib/oci8/oracle_version.rb
|
105
108
|
- lib/oci8/properties.rb
|
106
109
|
- lib/oci8/version.rb
|
110
|
+
- lib/ruby-oci8.rb
|
107
111
|
- test/README
|
108
112
|
- test/config.rb
|
109
113
|
- test/setup_test_object.sql
|
@@ -133,7 +137,7 @@ files:
|
|
133
137
|
has_rdoc: true
|
134
138
|
homepage: http://www.rubydoc.info/github/kubo/ruby-oci8
|
135
139
|
licenses:
|
136
|
-
- 2-
|
140
|
+
- BSD-2-Clause
|
137
141
|
post_install_message:
|
138
142
|
rdoc_options: []
|
139
143
|
|