ruby-oci8 2.1.5-x86-mingw32 → 2.1.7-x86-mingw32
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/ChangeLog +123 -0
- data/NEWS +54 -0
- data/README.md +9 -6
- data/VERSION +1 -1
- data/docs/install-full-client.md +2 -4
- data/docs/install-instant-client.md +14 -9
- data/docs/report-installation-issue.md +1 -1
- data/lib/oci8.rb +10 -19
- data/lib/oci8.rb.in +8 -17
- data/lib/oci8/cursor.rb +2 -0
- data/lib/oci8/metadata.rb +87 -9
- data/lib/oci8/object.rb +23 -0
- data/lib/oci8lib_18.so +0 -0
- data/lib/oci8lib_191.so +0 -0
- data/lib/oci8lib_200.so +0 -0
- data/lib/oci8lib_210.so +0 -0
- data/ruby-oci8.gemspec +2 -2
- data/test/config.rb +76 -66
- data/test/test_all.rb +4 -6
- data/test/test_appinfo.rb +2 -3
- data/test/test_array_dml.rb +6 -7
- data/test/test_bind_raw.rb +1 -2
- data/test/test_bind_string.rb +1 -2
- data/test/test_bind_time.rb +1 -2
- data/test/test_break.rb +2 -3
- data/test/test_clob.rb +1 -2
- data/test/test_connection_pool.rb +2 -3
- data/test/test_connstr.rb +1 -4
- data/test/test_datetime.rb +2 -3
- data/test/test_dbi.rb +1 -2
- data/test/test_dbi_clob.rb +6 -6
- data/test/test_encoding.rb +1 -2
- data/test/test_error.rb +1 -2
- data/test/test_metadata.rb +2086 -898
- data/test/test_object.rb +8 -11
- data/test/test_oci8.rb +1 -2
- data/test/test_oracle_version.rb +1 -3
- data/test/test_oradate.rb +1 -2
- data/test/test_oranumber.rb +5 -6
- data/test/test_rowid.rb +1 -2
- metadata +6 -5
data/ChangeLog
CHANGED
@@ -1,3 +1,126 @@
|
|
1
|
+
2014-02-02 Kubo Takehiro <kubo@jiubao.org>
|
2
|
+
* NEWS: add changes between 2.1.7 and 2.1.6.
|
3
|
+
* VERSION: change the version to 2.1.7.
|
4
|
+
|
5
|
+
2014-01-25 Kubo Takehiro <kubo@jiubao.org>
|
6
|
+
* ext/oci8/extconf.rb, lib/oci8.rb.in: Follow ABI versioning after ruby 2.1.0.
|
7
|
+
|
8
|
+
2014-01-19 Kubo Takehiro <kubo@jiubao.org>
|
9
|
+
* docs/install-full-client.md, docs/install-instant-client.md: Change down
|
10
|
+
load URL and filenames in examples.
|
11
|
+
|
12
|
+
2014-01-06 Kubo Takehiro <kubo@jiubao.org>
|
13
|
+
* README.md, docs/install-full-client.md, docs/install-instant-client.md,
|
14
|
+
docs/report-installation-issue.md, ext/oci8/oraconf.rb, ruby-oci8.gemspec:
|
15
|
+
Move the project page and download URL to github.
|
16
|
+
|
17
|
+
2014-01-05 KUBO Takehiro <kubo@jiubao.org>
|
18
|
+
* ext/oci8/metadata.c, ext/oci8/oci8.h, lib/oci8/metadata.rb:
|
19
|
+
Fix OCI8#describe_table to follow synonyms in a remote database.
|
20
|
+
Add OCI8::Metadata::Base#obj_link.
|
21
|
+
|
22
|
+
2013-12-29 KUBO Takehiro <kubo@jiubao.org>
|
23
|
+
* NEWS: add changes between 2.1.6 and 2.1.5.
|
24
|
+
* VERSION: change the version to 2.1.6.
|
25
|
+
|
26
|
+
2013-12-28 KUBO Takehiro <kubo@jiubao.org>
|
27
|
+
* ext/oci8/oraconf.rb: fix for Windows x64. OCI.lib for MSVC doesn't
|
28
|
+
work with mingw64 compilers. fix URL in the error message.
|
29
|
+
|
30
|
+
2013-12-14 KUBO Takehiro <kubo@jiubao.org>
|
31
|
+
* lib/oci8/metadata.rb, test/test_metadata.rb: fix
|
32
|
+
OCI8::Metadata::Synonym#schema_name and #translated_name
|
33
|
+
for synonyms with a database link and without schema_name.
|
34
|
+
|
35
|
+
2013-12-14 KUBO Takehiro <kubo@jiubao.org>
|
36
|
+
* test/*.rb: suppress warnings "MiniTest::Unit::TestCase is now Minitest::Test"
|
37
|
+
when minitest gem is installed.
|
38
|
+
|
39
|
+
2013-12-14 KUBO Takehiro <kubo@jiubao.org>
|
40
|
+
* test/test_metadata.rb: fix tests in an environment where
|
41
|
+
the data size of "CAST('1' AS CHAR(1 char))" is wrong.
|
42
|
+
|
43
|
+
2013-11-18 KUBO Takehiro <kubo@jiubao.org>
|
44
|
+
* ext/oci8/oraconf.rb: support cygwin x86_64.
|
45
|
+
|
46
|
+
2013-11-10 KUBO Takehiro <kubo@jiubao.org>
|
47
|
+
* ext/oci8/error.c, ext/oci8/lob.c, ext/oci8/object.c, ext/oci8/oci8.h,
|
48
|
+
ext/oci8/oci8lib.c, ext/oci8/ocihandle.c, ext/oci8/stmt.c:
|
49
|
+
use rb_class_new_instance() instead of rb_funcall() with rb_intern("new").
|
50
|
+
|
51
|
+
2013-11-09 KUBO Takehiro <kubo@jiubao.org>
|
52
|
+
* ext/oci8/error.c, ext/oci8/extconf.rb, ext/oci8/oci8.h:
|
53
|
+
append the full path of the Oracle client library when OCIEnvCreate
|
54
|
+
is failed such as "OCI Library Initialization Error - /path/to/libclntsh.so.12.1".
|
55
|
+
|
56
|
+
2013-11-09 KUBO Takehiro <kubo@jiubao.org>
|
57
|
+
* ext/oci8/extconf.rb, lib/oci8.rb.in: support rubinius 2.x whose
|
58
|
+
RUBY_VERSION is 2.1.0.
|
59
|
+
* ext/oci8/oraconf.rb: reduce the size of libOCI.a created for cygwin.
|
60
|
+
|
61
|
+
2013-11-09 KUBO Takehiro <kubo@jiubao.org>
|
62
|
+
* ext/oci8/extconf.rb, lib/oci8.rb.in: support ruby 2.1.0-preview1.
|
63
|
+
(requested by Yasuo Honda)
|
64
|
+
|
65
|
+
2013-08-24 KUBO Takehiro <kubo@jiubao.org>
|
66
|
+
* ext/oci8/oraconf.rb: Use Dir.glob to find the Oracle instant client
|
67
|
+
NLS data file. Its name depends on the Oracle major version on
|
68
|
+
Windows.
|
69
|
+
|
70
|
+
2013-08-03 KUBO Takehiro <kubo@jiubao.org>
|
71
|
+
* lib/oci8/metadata.rb: fix undefined method 'char_used?' when
|
72
|
+
OCI8::Metadata::Argument#inspect is called.
|
73
|
+
* test/test_metadata.rb: refactor and add tests for #inspect methods.
|
74
|
+
* test/test_package_type.rb: add some test data.
|
75
|
+
|
76
|
+
2013-07-30 KUBO Takehiro <kubo@jiubao.org>
|
77
|
+
* ext/oci8/metadata.c, ext/oci8/ocihandle.c, test/test_metadata.rb:
|
78
|
+
Fix segmentation fault when metadata are accessed after the
|
79
|
+
session is disconnected.
|
80
|
+
|
81
|
+
2013-07-24 KUBO Takehiro <kubo@jiubao.org>
|
82
|
+
* lib/oci8/metadata.rb, test/test_package_type.rb:
|
83
|
+
Add OCI8::Metadata::Type#package_name and
|
84
|
+
OCI8::Metadata::ArgBase#has_default?.
|
85
|
+
|
86
|
+
2013-07-22 KUBO Takehiro <kubo@jiubao.org>
|
87
|
+
* ext/oci8/oci8lib.c, lib/oci8.rb.in, lib/oci8/metadata.rb: Add
|
88
|
+
OCI8::Metadata::Package:types to support package type
|
89
|
+
description. It is a new feature of Oracle 12c.
|
90
|
+
* test/setup_test_package.sql, test/test_all.rb,
|
91
|
+
test/test_package_type.rb: Add tests for package type description.
|
92
|
+
|
93
|
+
2013-07-15 KUBO Takehiro <kubo@jiubao.org>
|
94
|
+
* test/*.rb: Use MiniTest instead of Test::Unit.
|
95
|
+
|
96
|
+
2013-06-23 KUBO Takehiro <kubo@jiubao.org>
|
97
|
+
* lib/oci8/cursor.rb, lib/oci8/object.rb: fix to bind object types by
|
98
|
+
name as OCI8::Cursor#bind_param(pos, val, :named_type, typename).
|
99
|
+
* test/test_object.rb: fix to test OCI8::Cursor#bind_param(pos, val,
|
100
|
+
:named_type, typename).
|
101
|
+
|
102
|
+
2013-06-23 KUBO Takehiro <kubo@jiubao.org>
|
103
|
+
* lib/oci8/metadata.rb: OCI8#describe_synonym and OCI8#describe_any
|
104
|
+
accept 'PUBLIC.XXX' as a public synonym name.
|
105
|
+
* test/test_metadata.rb: add tests for OCI8#describe_synonym.
|
106
|
+
|
107
|
+
2013-06-11 KUBO Takehiro <kubo@jiubao.org>
|
108
|
+
* ruby-oci8.gemspec: fix ruby version checking in binary gem.
|
109
|
+
Gem::ruby_version of ruby 2.0.0p195 is 2.0.0.195, which
|
110
|
+
doesn't match '= 2.0.0'.
|
111
|
+
(github issue #36 reported by sodonnel)
|
112
|
+
|
113
|
+
2013-03-30 KUBO Takehiro <kubo@jiubao.org>
|
114
|
+
* ext/oci8/oci8lib.c: fix potential SEGV when one connection
|
115
|
+
is used by more than two threads and temporary lobs are
|
116
|
+
freed by GC.
|
117
|
+
|
118
|
+
2013-03-16 KUBO Takehiro <kubo@jiubao.org>
|
119
|
+
* ext/oci8/apiwrap.yml, ext/oci8/stmt.c: call OCIStmtPrepare2()
|
120
|
+
without GVL to prevent OCI8#parse from blocking ruby itself
|
121
|
+
while the connection is used by another thread even though
|
122
|
+
non-blocking mode is set.
|
123
|
+
|
1
124
|
2013-03-09 KUBO Takehiro <kubo@jiubao.org>
|
2
125
|
* ruby-oci8.gemspec: revert the previous commit because old
|
3
126
|
rubygems doesn't support:
|
data/NEWS
CHANGED
@@ -1,5 +1,59 @@
|
|
1
1
|
# @markup markdown
|
2
2
|
|
3
|
+
2.1.7
|
4
|
+
=====
|
5
|
+
|
6
|
+
New Features
|
7
|
+
------------
|
8
|
+
|
9
|
+
### Add OCI8::Metadata::Base#obj_link.
|
10
|
+
|
11
|
+
Fixed Issues
|
12
|
+
------------
|
13
|
+
|
14
|
+
- Fix OCI8#describe_table to follow synonyms in a remote database.
|
15
|
+
|
16
|
+
2.1.6
|
17
|
+
=====
|
18
|
+
|
19
|
+
New Features
|
20
|
+
------------
|
21
|
+
|
22
|
+
### Support ruby 2.1.0
|
23
|
+
|
24
|
+
### Support cygwin x86_64
|
25
|
+
|
26
|
+
### OCI8#describe_synonym and OCI8#describe_any accept 'PUBLIC.XXX' as a public synonym name.
|
27
|
+
|
28
|
+
Fixed Issues
|
29
|
+
------------
|
30
|
+
|
31
|
+
- fix wrong return valus of OCI8::Metadata::Synonym#schema_name
|
32
|
+
and #translated_name for synonyms with a database link but
|
33
|
+
without schema_name.
|
34
|
+
|
35
|
+
- fix ruby version checking in binary gem. Gem::ruby_version of
|
36
|
+
ruby 2.0.0p195 is 2.0.0.195, which doesn't match '= 2.0.0'.
|
37
|
+
|
38
|
+
(github issue #36 reported by sodonnel)
|
39
|
+
|
40
|
+
- fix SEGV when metadata are accessed after the session is disconnected.
|
41
|
+
|
42
|
+
- fix undefined method 'char_used?' when OCI8::Metadata::Argument#inspect is called.
|
43
|
+
|
44
|
+
- fix tests in an environment where the data size of "CAST('1' AS CHAR(1 char))"
|
45
|
+
is wrong.
|
46
|
+
|
47
|
+
- suppress warnings "MiniTest::Unit::TestCase is now Minitest::Test"
|
48
|
+
when minitest gem is installed.
|
49
|
+
|
50
|
+
- fix SEGV when oci8lib.so is compiled by mingw64 without runtime-check option.
|
51
|
+
Note that binary gems are compiled with runtime-check to check available Oracle
|
52
|
+
client features at runtime.
|
53
|
+
|
54
|
+
- fix SEGV when one connection is used by more than two threads and temporary
|
55
|
+
lobs are freed by GC.
|
56
|
+
|
3
57
|
2.1.5
|
4
58
|
=====
|
5
59
|
|
data/README.md
CHANGED
@@ -21,20 +21,23 @@ Connect to scott/tiger, select `emp` and print as CSV format.
|
|
21
21
|
|
22
22
|
If you install a ruby-oci8 gem package, you may need to add `-rubygems` before `-r oci8`.
|
23
23
|
|
24
|
-
|
24
|
+
API Reference
|
25
25
|
=============
|
26
26
|
|
27
|
-
*
|
28
|
-
|
29
|
-
|
30
|
-
|
27
|
+
* http://rubydoc.info/gems/ruby-oci8/frames/file/README.md
|
28
|
+
|
29
|
+
Installation
|
30
|
+
============
|
31
|
+
|
32
|
+
* {file:docs/install-full-client.md Install for Oracle Full Client}
|
33
|
+
* {file:docs/install-instant-client.md Install for Oracle Instant Client}
|
34
|
+
* {file:docs/install-binary-package.md Install Binary Package}
|
31
35
|
|
32
36
|
Report issues
|
33
37
|
=============
|
34
38
|
|
35
39
|
* {file:docs/report-installation-issue.md}
|
36
40
|
* [The issues page on github](https://github.com/kubo/ruby-oci8/issues)
|
37
|
-
* [The ruby-oci8 help forum on rubyforge](http://rubyforge.org/forum/forum.php?forum_id=1078)
|
38
41
|
|
39
42
|
License
|
40
43
|
=======
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.1.
|
1
|
+
2.1.7
|
data/docs/install-full-client.md
CHANGED
@@ -90,8 +90,7 @@ tar.gz package
|
|
90
90
|
|
91
91
|
### Download the source code
|
92
92
|
|
93
|
-
Download the latest tar.gz package
|
94
|
-
which is the latest version at the time of writing, from [rubyforge][].
|
93
|
+
Download the latest tar.gz package from [download page][].
|
95
94
|
|
96
95
|
### Run make and install
|
97
96
|
|
@@ -107,10 +106,9 @@ note: If you use '`sudo`', use it only when running '`make install`'.
|
|
107
106
|
|
108
107
|
#### Windows(mswin32)
|
109
108
|
|
110
|
-
|
111
109
|
gzip -dc ruby-oci8-VERSION.tar.gz | tar xvf -
|
112
110
|
cd ruby-oci8-VERSION
|
113
111
|
nmake
|
114
112
|
nmake install
|
115
113
|
|
116
|
-
[
|
114
|
+
[download page]: https://bintray.com/kubo/generic/ruby-oci8
|
@@ -34,11 +34,11 @@ Unzip the packages as follows:
|
|
34
34
|
unzip path/to/instantclient-sdk-OS-VERSION.zip
|
35
35
|
unzip path/to/instantclient-sqlplus-OS-VERSION.zip
|
36
36
|
|
37
|
-
If /opt/oracle/
|
37
|
+
If /opt/oracle/instantclient12_1/libclntsh.so is not found, make
|
38
38
|
a symbolic link to link the library.
|
39
39
|
|
40
|
-
cd /opt/oracle/
|
41
|
-
ln -s libclntsh.so.
|
40
|
+
cd /opt/oracle/instantclient12_1
|
41
|
+
ln -s libclntsh.so.12.1 libclntsh.so
|
42
42
|
|
43
43
|
Note:
|
44
44
|
|
@@ -66,9 +66,15 @@ the installed directory.
|
|
66
66
|
</table>
|
67
67
|
|
68
68
|
For example:
|
69
|
-
|
69
|
+
|
70
|
+
$ LD_LIBRARY_PATH=/opt/oracle/instantclient_12_1
|
70
71
|
$ export LD_LIBRARY_PATH
|
71
72
|
|
73
|
+
Though many instant client pages indicate that the environment varialbe
|
74
|
+
`ORACLE_HOME` should be set, it isn't necessary unless Oracle Net
|
75
|
+
configuration files such as `tnsnames.ora` and `sqlnet.ora` are in
|
76
|
+
`$ORACLE_HOME/network/admin/`.
|
77
|
+
|
72
78
|
Linux rpm packages
|
73
79
|
------------------
|
74
80
|
|
@@ -81,7 +87,8 @@ Install the downloaded packages as follows:
|
|
81
87
|
Set LD_LIBRARY_PATH to point to the directory where libclntsh.so is installed.
|
82
88
|
|
83
89
|
For example:
|
84
|
-
|
90
|
+
|
91
|
+
$ LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client/lib
|
85
92
|
$ export LD_LIBRARY_PATH
|
86
93
|
|
87
94
|
Windows
|
@@ -138,8 +145,7 @@ tar.gz package
|
|
138
145
|
|
139
146
|
### Download the source code
|
140
147
|
|
141
|
-
Download the latest tar.gz package
|
142
|
-
which is the latest version at the time of writing, from [rubyforge][].
|
148
|
+
Download the latest tar.gz package from [download page][].
|
143
149
|
|
144
150
|
Note: if you are using Windows and you have no special need to compile
|
145
151
|
it by yourself, look at {file:docs/install-binary-packge.md}.
|
@@ -158,10 +164,9 @@ note: If you use '`sudo`', use it only when running '`make install`'.
|
|
158
164
|
|
159
165
|
#### Windows(mswin32)
|
160
166
|
|
161
|
-
|
162
167
|
gzip -dc ruby-oci8-VERSION.tar.gz | tar xvf -
|
163
168
|
cd ruby-oci8-VERSION
|
164
169
|
nmake
|
165
170
|
nmake install
|
166
171
|
|
167
|
-
[
|
172
|
+
[download page]: https://bintray.com/kubo/generic/ruby-oci8
|
@@ -4,7 +4,7 @@ Look at {file:docs/platform-specific-issues.md},
|
|
4
4
|
[the issues page on github][github] and [the ruby-oci8 help forum on rubyforge][rubyforge]
|
5
5
|
to check whether your issue is fixed or not.
|
6
6
|
|
7
|
-
If it is a new one, post the following information to [github][]
|
7
|
+
If it is a new one, post the following information to [github][].
|
8
8
|
|
9
9
|
[github]: https://github.com/kubo/ruby-oci8/issues
|
10
10
|
[rubyforge]: http://rubyforge.org/forum/forum.php?forum_id=1078
|
data/lib/oci8.rb
CHANGED
@@ -43,15 +43,14 @@ when 'ruby'
|
|
43
43
|
# 1.9.3 | 1.9.1
|
44
44
|
# --------------+--------------
|
45
45
|
# 2.0.0 | 2.0.0
|
46
|
-
#
|
46
|
+
# --------------+--------------
|
47
|
+
# 2.1.0 | 2.1.0
|
47
48
|
# ... | ...
|
48
49
|
#
|
49
|
-
#
|
50
|
-
#
|
50
|
+
# The ABI version of ruby 2.1.1 will be 2.1.0.
|
51
|
+
# See "ABI Compatibility" in <URL:http://www.ruby-lang.org/en/news/2013/12/21/semantic-versioning-after-2-1-0/>.
|
51
52
|
#
|
52
53
|
case RUBY_VERSION
|
53
|
-
when /^2\.0/
|
54
|
-
so_basename += RUBY_VERSION.gsub(/\W/, '')
|
55
54
|
when /^1\.9\.0/
|
56
55
|
raise 'unsupported ruby version: 1.9.0'
|
57
56
|
when /^1\.9/
|
@@ -59,20 +58,10 @@ when 'ruby'
|
|
59
58
|
when /^1\.8/
|
60
59
|
so_basename += '18'
|
61
60
|
else
|
62
|
-
|
61
|
+
so_basename += RUBY_VERSION.gsub(/(\d+)\.(\d+).(.*)/, '\1\20')
|
63
62
|
end
|
64
63
|
when 'rbx'
|
65
|
-
|
66
|
-
case RUBY_VERSION
|
67
|
-
when /^2\.0/
|
68
|
-
so_basename += 'rbx20'
|
69
|
-
when /^1\.9/
|
70
|
-
so_basename += 'rbx19'
|
71
|
-
when /^1\.8/
|
72
|
-
so_basename += 'rbx18'
|
73
|
-
else
|
74
|
-
raise 'unsupported language mode: ' + RUBY_VERSION
|
75
|
-
end
|
64
|
+
so_basename += 'rbx'
|
76
65
|
when 'jruby'
|
77
66
|
raise "Ruby-oci8 doesn't support jruby because its C extension support is in development in jruby 1.6 and deprecated in jruby 1.7."
|
78
67
|
else
|
@@ -80,10 +69,10 @@ else
|
|
80
69
|
end
|
81
70
|
require so_basename
|
82
71
|
|
83
|
-
if OCI8::VERSION != '2.1.
|
72
|
+
if OCI8::VERSION != '2.1.7'
|
84
73
|
require 'rbconfig'
|
85
74
|
so_name = so_basename + "." + RbConfig::CONFIG['DLEXT']
|
86
|
-
raise "VERSION MISMATCH! #{so_name} version is #{OCI8::VERSION}, but oci8.rb version is 2.1.
|
75
|
+
raise "VERSION MISMATCH! #{so_name} version is #{OCI8::VERSION}, but oci8.rb version is 2.1.7."
|
87
76
|
end
|
88
77
|
|
89
78
|
require 'oci8/encoding-init.rb'
|
@@ -104,6 +93,8 @@ class OCI8
|
|
104
93
|
ORAVER_10_2 = OCI8::OracleVersion.new(10, 2)
|
105
94
|
# @private
|
106
95
|
ORAVER_11_1 = OCI8::OracleVersion.new(11, 1)
|
96
|
+
# @private
|
97
|
+
ORAVER_12_1 = OCI8::OracleVersion.new(12, 1)
|
107
98
|
|
108
99
|
# @private
|
109
100
|
@@oracle_client_version = OCI8::OracleVersion.new(self.oracle_client_vernum)
|
data/lib/oci8.rb.in
CHANGED
@@ -43,15 +43,14 @@ when 'ruby'
|
|
43
43
|
# 1.9.3 | 1.9.1
|
44
44
|
# --------------+--------------
|
45
45
|
# 2.0.0 | 2.0.0
|
46
|
-
#
|
46
|
+
# --------------+--------------
|
47
|
+
# 2.1.0 | 2.1.0
|
47
48
|
# ... | ...
|
48
49
|
#
|
49
|
-
#
|
50
|
-
#
|
50
|
+
# The ABI version of ruby 2.1.1 will be 2.1.0.
|
51
|
+
# See "ABI Compatibility" in <URL:http://www.ruby-lang.org/en/news/2013/12/21/semantic-versioning-after-2-1-0/>.
|
51
52
|
#
|
52
53
|
case RUBY_VERSION
|
53
|
-
when /^2\.0/
|
54
|
-
so_basename += RUBY_VERSION.gsub(/\W/, '')
|
55
54
|
when /^1\.9\.0/
|
56
55
|
raise 'unsupported ruby version: 1.9.0'
|
57
56
|
when /^1\.9/
|
@@ -59,20 +58,10 @@ when 'ruby'
|
|
59
58
|
when /^1\.8/
|
60
59
|
so_basename += '18'
|
61
60
|
else
|
62
|
-
|
61
|
+
so_basename += RUBY_VERSION.gsub(/(\d+)\.(\d+).(.*)/, '\1\20')
|
63
62
|
end
|
64
63
|
when 'rbx'
|
65
|
-
|
66
|
-
case RUBY_VERSION
|
67
|
-
when /^2\.0/
|
68
|
-
so_basename += 'rbx20'
|
69
|
-
when /^1\.9/
|
70
|
-
so_basename += 'rbx19'
|
71
|
-
when /^1\.8/
|
72
|
-
so_basename += 'rbx18'
|
73
|
-
else
|
74
|
-
raise 'unsupported language mode: ' + RUBY_VERSION
|
75
|
-
end
|
64
|
+
so_basename += 'rbx'
|
76
65
|
when 'jruby'
|
77
66
|
raise "Ruby-oci8 doesn't support jruby because its C extension support is in development in jruby 1.6 and deprecated in jruby 1.7."
|
78
67
|
else
|
@@ -104,6 +93,8 @@ class OCI8
|
|
104
93
|
ORAVER_10_2 = OCI8::OracleVersion.new(10, 2)
|
105
94
|
# @private
|
106
95
|
ORAVER_11_1 = OCI8::OracleVersion.new(11, 1)
|
96
|
+
# @private
|
97
|
+
ORAVER_12_1 = OCI8::OracleVersion.new(12, 1)
|
107
98
|
|
108
99
|
# @private
|
109
100
|
@@oracle_client_version = OCI8::OracleVersion.new(self.oracle_client_vernum)
|
data/lib/oci8/cursor.rb
CHANGED
@@ -478,6 +478,8 @@ class OCI8
|
|
478
478
|
elsif key.class == Class && key < OCI8::Object::Base
|
479
479
|
param = @con.get_tdo_by_class(key)
|
480
480
|
key = :named_type
|
481
|
+
elsif key == :named_type
|
482
|
+
param = @con.get_tdo_by_typename(param[:length])
|
481
483
|
end
|
482
484
|
when OCI8::Metadata::Base
|
483
485
|
key = param.data_type
|
data/lib/oci8/metadata.rb
CHANGED
@@ -89,6 +89,15 @@ class OCI8
|
|
89
89
|
# attr_get_oradate(OCI_ATTR_TIMESTAMP)
|
90
90
|
#end
|
91
91
|
|
92
|
+
# Returns the database link name if the object is at the remote host.
|
93
|
+
# Note that this is available only when the object is returned by OCI8#describe_* methods.
|
94
|
+
#
|
95
|
+
# @return [String or nil] database link name
|
96
|
+
# @since 2.1.7
|
97
|
+
def obj_link
|
98
|
+
@obj_link
|
99
|
+
end
|
100
|
+
|
92
101
|
# @private
|
93
102
|
def inspect
|
94
103
|
"#<#{self.class.name}:(#{obj_id}) #{obj_schema}.#{obj_name}>"
|
@@ -110,7 +119,7 @@ class OCI8
|
|
110
119
|
Proc.new do |p|
|
111
120
|
if p.charset_form == :nchar
|
112
121
|
"NVARCHAR2(#{p.char_size})"
|
113
|
-
elsif p.char_used?
|
122
|
+
elsif p.respond_to?(:char_used?) && p.char_used?
|
114
123
|
"VARCHAR2(#{p.char_size} CHAR)"
|
115
124
|
else
|
116
125
|
"VARCHAR2(#{p.data_size})"
|
@@ -248,6 +257,12 @@ class OCI8
|
|
248
257
|
"TIMESTAMP(#{fsprecision}) WITH LOCAL TIME ZONE"
|
249
258
|
end
|
250
259
|
end]
|
260
|
+
DATA_TYPE_MAP[245] = [:record,
|
261
|
+
Proc.new do |p|
|
262
|
+
"#{p.schema_name}.#{p.type_name}"
|
263
|
+
end]
|
264
|
+
DATA_TYPE_MAP[252] = [:boolean, "BOOLEAN"]
|
265
|
+
DATA_TYPE_MAP[266] = [:pls_integer, "PLS_INTEGER"]
|
251
266
|
|
252
267
|
def __data_type # :nodoc:
|
253
268
|
return @data_type if defined? @data_type
|
@@ -337,6 +352,9 @@ class OCI8
|
|
337
352
|
#when 228; :sysfirst # OCI_TYPECODE_SYSFIRST
|
338
353
|
#when 235; :syslast # OCI_TYPECODE_SYSLAST
|
339
354
|
when 266; :pls_integer # OCI_TYPECODE_PLS_INTEGER
|
355
|
+
when 250; :record # OCI_TYPECODE_RECORD
|
356
|
+
when 251; :itable # OCI_TYPECODE_ITABLE
|
357
|
+
when 252; :boolean # OCI_TYPECODE_BOOLEAN
|
340
358
|
end
|
341
359
|
end
|
342
360
|
end
|
@@ -632,6 +650,12 @@ class OCI8
|
|
632
650
|
end
|
633
651
|
private :list_subprograms
|
634
652
|
|
653
|
+
# package type list
|
654
|
+
def list_types # :nodoc:
|
655
|
+
__param(137) # OCI_ATTR_LIST_PKG_TYPES
|
656
|
+
end
|
657
|
+
private :list_types
|
658
|
+
|
635
659
|
# Returns +true+ if the package subprograms have
|
636
660
|
# {invoker's rights}[http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/subprograms.htm#i18574].
|
637
661
|
# Otherwise, +false+.
|
@@ -647,6 +671,22 @@ class OCI8
|
|
647
671
|
prog.instance_variable_set(:@is_standalone, false)
|
648
672
|
end
|
649
673
|
end
|
674
|
+
|
675
|
+
if OCI8.oracle_client_version < ORAVER_12_1
|
676
|
+
def types
|
677
|
+
raise "This version of the Oracle client does not support PL/SQL package type descriptions."
|
678
|
+
end
|
679
|
+
else
|
680
|
+
# Returns an array of types defined within the Package.
|
681
|
+
#
|
682
|
+
# @return [array of OCI8::Metadata::Type]
|
683
|
+
# @since 2.1.6
|
684
|
+
def types
|
685
|
+
@types ||= list_types.to_a.each do |type|
|
686
|
+
type.instance_variable_set(:@is_standalone, false)
|
687
|
+
end
|
688
|
+
end
|
689
|
+
end
|
650
690
|
end
|
651
691
|
|
652
692
|
# Information about types
|
@@ -851,6 +891,15 @@ class OCI8
|
|
851
891
|
attr_get_string(OCI_ATTR_SUPERTYPE_NAME) if is_subtype?
|
852
892
|
end
|
853
893
|
|
894
|
+
# Returns the package name if the type is a package type.
|
895
|
+
# Otherwise, +nil+.
|
896
|
+
#
|
897
|
+
# @return [String or nil]
|
898
|
+
# @since 2.1.6
|
899
|
+
def package_name
|
900
|
+
attr_get_string(12, false) # OCI_ATTR_PACKAGE_NAME
|
901
|
+
end
|
902
|
+
|
854
903
|
# Returns attribute information of the type.
|
855
904
|
#
|
856
905
|
# @return [array of OCI8::Metadata::TypeAttr]
|
@@ -1199,6 +1248,7 @@ class OCI8
|
|
1199
1248
|
# schema name of the synonym translation
|
1200
1249
|
def schema_name
|
1201
1250
|
@schema_name ||= attr_get_string(OCI_ATTR_SCHEMA_NAME)
|
1251
|
+
@schema_name.size == 0 ? nil : @schema_name
|
1202
1252
|
end
|
1203
1253
|
|
1204
1254
|
# object name of the synonym translation
|
@@ -1214,11 +1264,7 @@ class OCI8
|
|
1214
1264
|
|
1215
1265
|
# full-qualified synonym translation name with schema, object and database link name.
|
1216
1266
|
def translated_name
|
1217
|
-
|
1218
|
-
schema_name + '.' + name
|
1219
|
-
else
|
1220
|
-
schema_name + '.' + name + '@' + link
|
1221
|
-
end
|
1267
|
+
(schema_name ? schema_name + '.' : '') + name + (link ? '@' + link : '')
|
1222
1268
|
end
|
1223
1269
|
|
1224
1270
|
def inspect # :nodoc:
|
@@ -1487,10 +1533,21 @@ class OCI8
|
|
1487
1533
|
end
|
1488
1534
|
|
1489
1535
|
# Indicates whether an argument has a default
|
1536
|
+
#
|
1537
|
+
# @return [1 or 0]
|
1538
|
+
# @deprecated
|
1490
1539
|
def has_default
|
1491
1540
|
attr_get_ub1(OCI_ATTR_HAS_DEFAULT)
|
1492
1541
|
end
|
1493
1542
|
|
1543
|
+
# Indicates whether an argument has a default
|
1544
|
+
#
|
1545
|
+
# @return [true or false]
|
1546
|
+
# @since 2.1.6
|
1547
|
+
def has_default?
|
1548
|
+
__boolean(OCI_ATTR_HAS_DEFAULT)
|
1549
|
+
end
|
1550
|
+
|
1494
1551
|
# The list of arguments at the next level (when the argument is
|
1495
1552
|
# of a record or table type).
|
1496
1553
|
def list_arguments
|
@@ -1648,8 +1705,9 @@ class OCI8
|
|
1648
1705
|
#when OCI_LTYPE_TABLE_ALIAS; offset = ?
|
1649
1706
|
#when OCI_LTYPE_VARIABLE_TYPE; offset = ?
|
1650
1707
|
#when OCI_LTYPE_NAME_VALUE; offset = ?
|
1708
|
+
when 15; offset = 0 # OCI_LTYPE_PACKAGE_TYPE
|
1651
1709
|
else
|
1652
|
-
raise NotImplementedError, "unsupported list type #{
|
1710
|
+
raise NotImplementedError, "unsupported list type #{ltype}"
|
1653
1711
|
end
|
1654
1712
|
ary = []
|
1655
1713
|
0.upto(num_params - 1) do |i|
|
@@ -1994,7 +2052,13 @@ class OCI8
|
|
1994
2052
|
# @param [String] object_name
|
1995
2053
|
# @return [a subclass of OCI8::Metadata::Base]
|
1996
2054
|
def describe_any(object_name)
|
1997
|
-
|
2055
|
+
if /^PUBLIC\.(.*)/i =~ object_name
|
2056
|
+
md = __describe($1, OCI8::Metadata::Unknown, true)
|
2057
|
+
raise OCIError.new(4043, object_name) if md.obj_schema != 'PUBLIC'
|
2058
|
+
md
|
2059
|
+
else
|
2060
|
+
__describe(object_name, OCI8::Metadata::Unknown, true)
|
2061
|
+
end
|
1998
2062
|
end
|
1999
2063
|
# Returns table or view information. If the name is a current schema's synonym
|
2000
2064
|
# name or a public synonym name, it returns table or view information which
|
@@ -2011,6 +2075,9 @@ class OCI8
|
|
2011
2075
|
__describe(table_name, OCI8::Metadata::Table, false)
|
2012
2076
|
else
|
2013
2077
|
# check tables, views, synonyms and public synonyms.
|
2078
|
+
|
2079
|
+
# follow synonyms up to 20 times to prevent infinite loop
|
2080
|
+
# caused by recursive synonyms.
|
2014
2081
|
recursive_level = 20
|
2015
2082
|
recursive_level.times do
|
2016
2083
|
metadata = __describe(table_name, OCI8::Metadata::Unknown, true)
|
@@ -2019,6 +2086,11 @@ class OCI8
|
|
2019
2086
|
return metadata
|
2020
2087
|
when OCI8::Metadata::Synonym
|
2021
2088
|
table_name = metadata.translated_name
|
2089
|
+
if metadata.obj_link and metadata.link.nil?
|
2090
|
+
# table_name is a synonym in a remote database for an object in the
|
2091
|
+
# remote database itself.
|
2092
|
+
table_name = "#{table_name}@#{metadata.obj_link}"
|
2093
|
+
end
|
2022
2094
|
else
|
2023
2095
|
raise OCIError.new(4043, table_name) # ORA-04043: object %s does not exist
|
2024
2096
|
end
|
@@ -2066,7 +2138,13 @@ class OCI8
|
|
2066
2138
|
# @param [String] synonym_name
|
2067
2139
|
# @return [OCI8::Metadata::Synonym]
|
2068
2140
|
def describe_synonym(synonym_name, check_public_also = true)
|
2069
|
-
|
2141
|
+
if /^PUBLIC\.(.*)/i =~ synonym_name
|
2142
|
+
md = __describe($1, OCI8::Metadata::Synonym, true)
|
2143
|
+
raise OCIError.new(4043, synonym_name) if md.obj_schema != 'PUBLIC'
|
2144
|
+
md
|
2145
|
+
else
|
2146
|
+
__describe(synonym_name, OCI8::Metadata::Synonym, check_public_also)
|
2147
|
+
end
|
2070
2148
|
end
|
2071
2149
|
# Returns sequence information
|
2072
2150
|
#
|