ruby-oci8 2.1.6 → 2.1.7
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 +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:
|