ruby-oci8 2.1.6 → 2.1.7
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +21 -0
- data/NEWS +13 -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/ext/oci8/extconf.rb +5 -4
- data/ext/oci8/metadata.c +18 -1
- data/ext/oci8/oci8.h +1 -0
- data/ext/oci8/oraconf.rb +2 -2
- data/lib/oci8.rb.in +5 -4
- data/lib/oci8/metadata.rb +17 -0
- data/ruby-oci8.gemspec +1 -1
- metadata +4 -4
data/ChangeLog
CHANGED
@@ -1,3 +1,24 @@
|
|
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
|
+
|
1
22
|
2013-12-29 KUBO Takehiro <kubo@jiubao.org>
|
2
23
|
* NEWS: add changes between 2.1.6 and 2.1.5.
|
3
24
|
* VERSION: change the version to 2.1.6.
|
data/NEWS
CHANGED
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/ext/oci8/extconf.rb
CHANGED
@@ -156,11 +156,12 @@ when 'ruby'
|
|
156
156
|
# 1.9.3 | 1.9.1
|
157
157
|
# --------------+--------------
|
158
158
|
# 2.0.0 | 2.0.0
|
159
|
-
#
|
159
|
+
# --------------+--------------
|
160
|
+
# 2.1.0 | 2.1.0
|
160
161
|
# ... | ...
|
161
162
|
#
|
162
|
-
#
|
163
|
-
#
|
163
|
+
# The ABI version of ruby 2.1.1 will be 2.1.0.
|
164
|
+
# See "ABI Compatibility" in <URL:http://www.ruby-lang.org/en/news/2013/12/21/semantic-versioning-after-2-1-0/>.
|
164
165
|
#
|
165
166
|
case RUBY_VERSION
|
166
167
|
when /^1\.9\.0/
|
@@ -170,7 +171,7 @@ when 'ruby'
|
|
170
171
|
when /^1\.8/
|
171
172
|
so_basename += '18'
|
172
173
|
else
|
173
|
-
so_basename += RUBY_VERSION.gsub(
|
174
|
+
so_basename += RUBY_VERSION.gsub(/(\d+)\.(\d+).(.*)/, '\1\20')
|
174
175
|
end
|
175
176
|
when 'rbx'
|
176
177
|
so_basename += 'rbx'
|
data/ext/oci8/metadata.c
CHANGED
@@ -14,6 +14,7 @@ static VALUE mOCI8Metadata;
|
|
14
14
|
VALUE cOCI8MetadataBase;
|
15
15
|
static VALUE ptype_to_class;
|
16
16
|
static VALUE class_to_ptype;
|
17
|
+
static ID id_at_obj_link;
|
17
18
|
|
18
19
|
typedef struct {
|
19
20
|
oci8_base_t base;
|
@@ -175,11 +176,26 @@ static VALUE oci8_do_describe(VALUE self, void *objptr, ub4 objlen, ub1 objtype,
|
|
175
176
|
*/
|
176
177
|
static VALUE oci8_describe(VALUE self, VALUE name, VALUE klass, VALUE check_public)
|
177
178
|
{
|
179
|
+
char *str;
|
180
|
+
size_t idx, len;
|
181
|
+
VALUE metadata;
|
182
|
+
VALUE obj_link = Qnil;
|
183
|
+
|
178
184
|
OCI8SafeStringValue(name);
|
179
185
|
if (RSTRING_LEN(name) == 0) {
|
180
186
|
rb_raise(rb_eArgError, "empty string is set.");
|
181
187
|
}
|
182
|
-
|
188
|
+
str = RSTRING_PTR(name);
|
189
|
+
len = RSTRING_LEN(name);
|
190
|
+
for (idx = 0; idx < len; idx++) {
|
191
|
+
if (str[idx] == '@') {
|
192
|
+
obj_link = rb_enc_str_new(str + idx + 1, len - idx - 1, oci8_encoding);
|
193
|
+
break;
|
194
|
+
}
|
195
|
+
}
|
196
|
+
metadata = oci8_do_describe(self, str, len, OCI_OTYPE_NAME, klass, check_public);
|
197
|
+
rb_ivar_set(metadata, id_at_obj_link, obj_link);
|
198
|
+
return metadata;
|
183
199
|
}
|
184
200
|
|
185
201
|
static VALUE metadata_get_type_metadata(VALUE self, VALUE klass)
|
@@ -230,6 +246,7 @@ void Init_oci8_metadata(VALUE cOCI8)
|
|
230
246
|
class_to_ptype = rb_hash_new();
|
231
247
|
rb_global_variable(&ptype_to_class);
|
232
248
|
rb_global_variable(&class_to_ptype);
|
249
|
+
id_at_obj_link = rb_intern("@obj_link");
|
233
250
|
|
234
251
|
rb_define_singleton_method(cOCI8MetadataBase, "register_ptype", metadata_s_register_ptype, 1);
|
235
252
|
rb_define_private_method(cOCI8MetadataBase, "__param", metadata_get_param, 1);
|
data/ext/oci8/oci8.h
CHANGED
@@ -152,6 +152,7 @@ static inline volatile VALUE *rb_gc_guarded_ptr(volatile VALUE *ptr) {return ptr
|
|
152
152
|
#ifndef HAVE_TYPE_RB_ENCODING
|
153
153
|
/* ruby 1.8, rubinuis 1.2 */
|
154
154
|
#define rb_enc_associate(str, enc) do {} while(0)
|
155
|
+
#define rb_enc_str_new(str, len, enc) rb_str_new((str), (len))
|
155
156
|
#define rb_enc_str_buf_cat(str, ptr, len, enc) rb_str_buf_cat((str), (ptr), (len))
|
156
157
|
#define rb_external_str_new_with_enc(ptr, len, enc) rb_tainted_str_new((ptr), (len))
|
157
158
|
#define rb_locale_str_new_cstr(ptr) rb_str_new2(ptr)
|
data/ext/oci8/oraconf.rb
CHANGED
@@ -334,8 +334,8 @@ Backtrace:
|
|
334
334
|
#{$!.backtrace.join("\n ")}
|
335
335
|
---------------------------------------------------
|
336
336
|
See:
|
337
|
-
* http://ruby-oci8
|
338
|
-
* http://ruby-oci8
|
337
|
+
* http://rubydoc.info/gems/ruby-oci8/file/docs/install-full-client.md for Oracle full client
|
338
|
+
* http://rubydoc.info/gems/ruby-oci8/file/docs/install-instant-client.md for Oracle instant client
|
339
339
|
* http://ruby-oci8.rubyforge.org/en/file.report-installation-issue.html to report an issue.
|
340
340
|
|
341
341
|
EOS
|
data/lib/oci8.rb.in
CHANGED
@@ -43,11 +43,12 @@ 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
54
|
when /^1\.9\.0/
|
@@ -57,7 +58,7 @@ when 'ruby'
|
|
57
58
|
when /^1\.8/
|
58
59
|
so_basename += '18'
|
59
60
|
else
|
60
|
-
so_basename += RUBY_VERSION.gsub(
|
61
|
+
so_basename += RUBY_VERSION.gsub(/(\d+)\.(\d+).(.*)/, '\1\20')
|
61
62
|
end
|
62
63
|
when 'rbx'
|
63
64
|
so_basename += 'rbx'
|
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}>"
|
@@ -2066,6 +2075,9 @@ class OCI8
|
|
2066
2075
|
__describe(table_name, OCI8::Metadata::Table, false)
|
2067
2076
|
else
|
2068
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.
|
2069
2081
|
recursive_level = 20
|
2070
2082
|
recursive_level.times do
|
2071
2083
|
metadata = __describe(table_name, OCI8::Metadata::Unknown, true)
|
@@ -2074,6 +2086,11 @@ class OCI8
|
|
2074
2086
|
return metadata
|
2075
2087
|
when OCI8::Metadata::Synonym
|
2076
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
|
2077
2094
|
else
|
2078
2095
|
raise OCIError.new(4043, table_name) # ORA-04043: object %s does not exist
|
2079
2096
|
end
|
data/ruby-oci8.gemspec
CHANGED
@@ -19,7 +19,7 @@ spec = Gem::Specification.new do |s|
|
|
19
19
|
s.version = File.read('VERSION').strip
|
20
20
|
s.summary = 'Ruby interface for Oracle using OCI8 API'
|
21
21
|
s.email = 'kubo@jiubao.org'
|
22
|
-
s.homepage = '
|
22
|
+
s.homepage = 'https://github.com/kubo/ruby-oci8/'
|
23
23
|
s.rubyforge_project = 'ruby-oci8'
|
24
24
|
s.description = <<EOS
|
25
25
|
ruby-oci8 is a ruby interface for Oracle using OCI8 API. It is available with Oracle8i, Oracle9i, Oracle10g, Oracle11g and Oracle Instant Client.
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 2
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 2.1.
|
8
|
+
- 7
|
9
|
+
version: 2.1.7
|
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: 2014-02-02 00:00:00 +09:00
|
18
18
|
default_executable:
|
19
19
|
dependencies: []
|
20
20
|
|
@@ -121,7 +121,7 @@ files:
|
|
121
121
|
- test/test_oranumber.rb
|
122
122
|
- test/test_rowid.rb
|
123
123
|
has_rdoc: true
|
124
|
-
homepage:
|
124
|
+
homepage: https://github.com/kubo/ruby-oci8/
|
125
125
|
licenses:
|
126
126
|
- 2-clause BSD-style license
|
127
127
|
post_install_message:
|