ruby-oci8 2.1.4 → 2.1.5
Sign up to get free protection for your applications and to get access to all the features.
- data/.yardopts +1 -0
- data/ChangeLog +67 -0
- data/NEWS +21 -0
- data/VERSION +1 -1
- data/docs/platform-specific-issues.md +4 -24
- data/ext/oci8/extconf.rb +2 -1
- data/ext/oci8/lob.c +39 -26
- data/ext/oci8/object.c +25 -1
- data/ext/oci8/oci8.c +12 -42
- data/ext/oci8/oci8.h +1 -3
- data/ext/oci8/oci8lib.c +8 -0
- data/ext/oci8/ocihandle.c +167 -188
- data/ext/oci8/oraconf.rb +3 -2
- data/lib/oci8.rb.in +1 -1
- data/lib/oci8/metadata.rb +59 -67
- data/lib/oci8/object.rb +0 -1
- data/lib/oci8/oci8.rb +35 -35
- data/lib/oci8/oracle_version.rb +7 -14
- data/ruby-oci8.gemspec +31 -26
- data/test/test_bind_time.rb +2 -2
- data/test/test_connection_pool.rb +2 -2
- data/test/test_metadata.rb +0 -2
- data/test/test_object.rb +0 -1
- data/test/test_oci8.rb +10 -2
- metadata +4 -4
data/.yardopts
CHANGED
data/ChangeLog
CHANGED
@@ -1,3 +1,70 @@
|
|
1
|
+
2013-03-09 KUBO Takehiro <kubo@jiubao.org>
|
2
|
+
* ruby-oci8.gemspec: revert the previous commit because old
|
3
|
+
rubygems doesn't support:
|
4
|
+
required_ruby_version = ['>= 1.8.0', '<= 2.0.0']
|
5
|
+
|
6
|
+
2013-03-09 KUBO Takehiro <kubo@jiubao.org>
|
7
|
+
* NEWS: add changes between 2.1.5 and 2.1.4
|
8
|
+
* VERSION: change the version to 2.1.5.
|
9
|
+
* docs/platform-specific-issues.md: remove obsolete description.
|
10
|
+
* ext/oci8/extconf.rb, ext/oci8/oraconf.rb: fix to compile for
|
11
|
+
Windows x64 client.
|
12
|
+
* ruby-oci8.gemspec: change required_ruby_version range
|
13
|
+
when a binary gem includes more than one compiled object.
|
14
|
+
* test/test_connection_pool.rb: fix to pass tests on slow
|
15
|
+
machines.
|
16
|
+
|
17
|
+
2013-03-05 KUBO Takehiro <kubo@jiubao.org>
|
18
|
+
* ext/oci8/oci8.c, lib/oci8/oci8.rb, lib/oci8/oracle_version.rb:
|
19
|
+
refactoring.
|
20
|
+
|
21
|
+
2013-03-03 KUBO Takehiro <kubo@jiubao.org>
|
22
|
+
* lib/oci8/oci8.rb, test/test_oci8.rb: set 'rubyoci8' as
|
23
|
+
the driver name, which is displayed in
|
24
|
+
V$SESSION_CONNECT_INFO.CLIENT_DRIVER.
|
25
|
+
(require Oracle 11g or upper)
|
26
|
+
|
27
|
+
2013-03-03 KUBO Takehiro <kubo@jiubao.org>
|
28
|
+
* lib/oci8.rb.in: use RbConfig::CONFIG instead of obsolete
|
29
|
+
constant Config::CONFIG.
|
30
|
+
* lib/oci8/object.rb, test/test_bind_time.rb, test/test_metadata.rb
|
31
|
+
test/test_object.rb, test/test_oci8.rb:
|
32
|
+
suppress warning: assigned but unused variable
|
33
|
+
|
34
|
+
2013-03-03 KUBO Takehiro <kubo@jiubao.org>
|
35
|
+
* ext/oci8/lob.c, ext/oci8/oci8.c, ext/oci8/oci8.h:
|
36
|
+
refactor oci8_lob_t.
|
37
|
+
|
38
|
+
2013-03-03 KUBO Takehiro <kubo@jiubao.org>
|
39
|
+
* ext/oci8/oci8.c: fix segmentation fault when the process
|
40
|
+
exits on rubinius.
|
41
|
+
|
42
|
+
2013-03-02 KUBO Takehiro <kubo@jiubao.org>
|
43
|
+
* .yardopts, ext/oci8/object.c, lib/oci8/metadata.rb,
|
44
|
+
lib/oci8/oracle_version.rb: update comments for rdoc/yard.
|
45
|
+
|
46
|
+
2013-03-02 KUBO Takehiro <kubo@jiubao.org>
|
47
|
+
* ext/oci8/ocihandle.c: change arguments of internal methods
|
48
|
+
OCIHandle#attr_get_*() to ignore "ORA-24328: illegal
|
49
|
+
attribute value".
|
50
|
+
* lib/oci8/metadata.rb: change OCI8::Metadata::Base#obj_id,
|
51
|
+
#obj_name and #obj_schema not to raise "ORA-24328:
|
52
|
+
illegal attribute value".
|
53
|
+
|
54
|
+
2013-03-02 KUBO Takehiro <kubo@jiubao.org>
|
55
|
+
* ruby-oci8.gemspec: fix for ruby 2.0.0 to make binary gems.
|
56
|
+
|
57
|
+
2013-03-02 KUBO Takehiro <kubo@jiubao.org>
|
58
|
+
* ext/oci8/oraconf.rb: fix for compilation on Windows x64 by mingw64.
|
59
|
+
|
60
|
+
2013-01-12 KUBO Takehiro <kubo@jiubao.org>
|
61
|
+
* ext/oci8/oci8lib.c: export a main function for Solaris x86 (32-bit).
|
62
|
+
When a main function is invisible from Oracle instant client
|
63
|
+
11.2.0.3 for Solaris x86 (32-bit), OCIEnvCreate() fails by
|
64
|
+
unknown reasons.
|
65
|
+
* docs/platform-specific-issues.md: change the workaround for
|
66
|
+
Solaris x86 (32-bit) instant client.
|
67
|
+
|
1
68
|
2013-01-06 KUBO Takehiro <kubo@jiubao.org>
|
2
69
|
* NEWS: add changes between 2.1.4 and 2.1.3
|
3
70
|
* VERSION: change the version to 2.1.4.
|
data/NEWS
CHANGED
@@ -1,5 +1,26 @@
|
|
1
1
|
# @markup markdown
|
2
2
|
|
3
|
+
2.1.5
|
4
|
+
=====
|
5
|
+
|
6
|
+
New Features
|
7
|
+
------------
|
8
|
+
|
9
|
+
### V$SESSION_CONNECT_INFO.CLIENT_DRIVER.
|
10
|
+
|
11
|
+
'rubyoci8' is set as the driver name, which is displayed in
|
12
|
+
V$SESSION_CONNECT_INFO.CLIENT_DRIVER when both the client and
|
13
|
+
the server are Oracle 11g or upper.
|
14
|
+
|
15
|
+
Fixed Issues
|
16
|
+
------------
|
17
|
+
|
18
|
+
- fix segmentation fault when the process exits on rubinius.
|
19
|
+
|
20
|
+
- fix "OCI Library Initialization Error" only when the Oracle
|
21
|
+
instant client is 11.2.0.3 for Solaris x86 32-bit, the ruby
|
22
|
+
version is 1.9.3 or upper and the ruby is compiled by gcc.
|
23
|
+
|
3
24
|
2.1.4
|
4
25
|
=====
|
5
26
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.1.
|
1
|
+
2.1.5
|
@@ -34,15 +34,10 @@ Note: "`" is a back quote.
|
|
34
34
|
Mac OS X
|
35
35
|
========
|
36
36
|
|
37
|
-
OS X 10.7
|
38
|
-
|
39
|
-
|
40
|
-
64-bit instant client doesn't work. Use 32-bit ruby and instant client or jruby.
|
37
|
+
OS X 10.7+
|
38
|
+
----------
|
41
39
|
|
42
|
-
|
43
|
-
|
44
|
-
* {http://rubyforge.org/forum/forum.php?thread\_id=49548&forum\_id=1078}
|
45
|
-
* {https://forums.oracle.com/forums/thread.jspa?threadID=2187558}
|
40
|
+
Use the latest 64-bit instant client. The older 64-bit (10.2.0.4) instant client [doesn't work](https://forums.oracle.com/forums/thread.jspa?threadID=2187558). The older 32-bit instant client will work but only with 32-bit ruby or jruby (using JDBC).
|
46
41
|
|
47
42
|
Intel Mac (64-bit)
|
48
43
|
------------------
|
@@ -59,7 +54,7 @@ The Intel Instant client is for Mac OS X 10.5 Leopard. If you are using 10.4 Tig
|
|
59
54
|
use one of the following workarounds.
|
60
55
|
|
61
56
|
* compile ruby as ppc. (look at [How to setup Ruby and Oracle client on Intel Mac](http://blog.rayapps.com/2007/08/27/how-to-setup-ruby-and-oracle-client-on-intel-mac/))
|
62
|
-
* use [ruby-odbc
|
57
|
+
* use [ruby-odbc](http://www.ch-werner.de/rubyodbc/) and a third party ODBC driver ([Actual Technologies](http://www.actualtechnologies.com) or [OpenLink Software](http://uda.openlinksw.com/)).
|
63
58
|
* use JRuby and Oracle JDBC driver.
|
64
59
|
|
65
60
|
PowerPC Mac
|
@@ -74,21 +69,6 @@ You need a same compiler which is used to make ruby itself.
|
|
74
69
|
For example, if the ruby is compiled by gcc, you need gcc. If it is compiled by Oracle Solaris Studio
|
75
70
|
(formerly called as Sun Studio), you need Oracle Solaris Studio.
|
76
71
|
|
77
|
-
If ruby is compiled by gcc and "require 'oci8'" raises "OCI Library Initialization Error",
|
78
|
-
you may need to recompile ruby as follows:
|
79
|
-
|
80
|
-
$ bzip2 -dc ruby-1.9.3-pxxx.tar.bz2 | tar xvf -
|
81
|
-
$ cd ruby-1.9.3-pxxx
|
82
|
-
$ vi main.c # <- Add RUBY_FUNC_EXPORTED just before "int main(..)" as follows:
|
83
|
-
-------------
|
84
|
-
RUBY_FUNC_EXPORTED /* Add this line */
|
85
|
-
int
|
86
|
-
main(int argc, char **argv)
|
87
|
-
-------------
|
88
|
-
$ ./configure
|
89
|
-
$ make
|
90
|
-
$ make install
|
91
|
-
|
92
72
|
If you use Blastwave.org's ruby and want not to install Sun Studio,
|
93
73
|
you can edit rbconfig.rb by your self. [(look at here)](http://forum.textdrive.com/viewtopic.php?id=12630)
|
94
74
|
|
data/ext/oci8/extconf.rb
CHANGED
@@ -225,11 +225,12 @@ when /mingw32/
|
|
225
225
|
if RbConfig::MAKEFILE_CONFIG["LDSHARED"].gsub!(/-s\b/, '')
|
226
226
|
alias :oci8_configuration_orig :configuration
|
227
227
|
def configuration(*args)
|
228
|
+
prefix = [nil].pack('P').size == 4 ? '_' : ''
|
228
229
|
oci8_configuration_orig(*args) << <<EOS
|
229
230
|
|
230
231
|
# Dirty hack to get the map file.
|
231
232
|
all__: all
|
232
|
-
nm $(DLLIB) | grep ' [TtBb]
|
233
|
+
nm $(DLLIB) | grep ' [TtBb] #{prefix}[A-Za-z]' > $(TARGET).map
|
233
234
|
strip -s $(DLLIB)
|
234
235
|
EOS
|
235
236
|
end
|
data/ext/oci8/lob.c
CHANGED
@@ -1,4 +1,9 @@
|
|
1
1
|
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
|
+
/*
|
3
|
+
* lob.c - part of ruby-oci8
|
4
|
+
*
|
5
|
+
* Copyright (C) 2002-2013 Kubo Takehiro <kubo@jiubao.org>
|
6
|
+
*/
|
2
7
|
#include "oci8.h"
|
3
8
|
|
4
9
|
static ID id_plus;
|
@@ -22,8 +27,7 @@ enum state {
|
|
22
27
|
};
|
23
28
|
typedef struct {
|
24
29
|
oci8_base_t base;
|
25
|
-
|
26
|
-
OCISvcCtx *svchp;
|
30
|
+
oci8_svcctx_t *svcctx;
|
27
31
|
ub4 pos;
|
28
32
|
int char_width;
|
29
33
|
ub1 csfrm;
|
@@ -31,6 +35,15 @@ typedef struct {
|
|
31
35
|
enum state state;
|
32
36
|
} oci8_lob_t;
|
33
37
|
|
38
|
+
static oci8_svcctx_t *check_svcctx(oci8_lob_t *lob)
|
39
|
+
{
|
40
|
+
oci8_svcctx_t *svcctx = lob->svcctx;
|
41
|
+
if (svcctx == NULL || svcctx->base.type != OCI_HTYPE_SVCCTX) {
|
42
|
+
rb_raise(rb_eRuntimeError, "Invalid Svcctx");
|
43
|
+
}
|
44
|
+
return svcctx;
|
45
|
+
}
|
46
|
+
|
34
47
|
static VALUE oci8_lob_write(VALUE self, VALUE data);
|
35
48
|
|
36
49
|
static VALUE oci8_make_lob(VALUE klass, oci8_svcctx_t *svcctx, OCILobLocator *s)
|
@@ -101,20 +114,22 @@ void oci8_assign_bfile(oci8_svcctx_t *svcctx, VALUE lob, OCILobLocator **dest)
|
|
101
114
|
static void oci8_lob_mark(oci8_base_t *base)
|
102
115
|
{
|
103
116
|
oci8_lob_t *lob = (oci8_lob_t *)base;
|
104
|
-
|
117
|
+
if (lob->svcctx != NULL) {
|
118
|
+
rb_gc_mark(lob->svcctx->base.self);
|
119
|
+
}
|
105
120
|
}
|
106
121
|
|
107
122
|
static void oci8_lob_free(oci8_base_t *base)
|
108
123
|
{
|
109
124
|
oci8_lob_t *lob = (oci8_lob_t *)base;
|
110
125
|
boolean is_temporary;
|
126
|
+
oci8_svcctx_t *svcctx = lob->svcctx;
|
111
127
|
|
112
|
-
if (
|
128
|
+
if (svcctx != NULL
|
113
129
|
&& OCILobIsTemporary(oci8_envhp, oci8_errhp, lob->base.hp.lob, &is_temporary) == OCI_SUCCESS
|
114
130
|
&& is_temporary) {
|
115
131
|
|
116
132
|
#ifdef HAVE_RB_THREAD_BLOCKING_REGION
|
117
|
-
oci8_svcctx_t *svcctx = oci8_get_svcctx(lob->svc);
|
118
133
|
oci8_temp_lob_t *temp_lob = ALLOC(oci8_temp_lob_t);
|
119
134
|
|
120
135
|
temp_lob->next = svcctx->temp_lobs;
|
@@ -124,11 +139,10 @@ static void oci8_lob_free(oci8_base_t *base)
|
|
124
139
|
lob->base.hp.ptr = NULL;
|
125
140
|
#else
|
126
141
|
/* FIXME: This may stall the GC. */
|
127
|
-
OCILobFreeTemporary(
|
142
|
+
OCILobFreeTemporary(svcctx->base.hp.svc, oci8_errhp, lob->base.hp.lob);
|
128
143
|
#endif
|
129
144
|
}
|
130
|
-
lob->
|
131
|
-
lob->svchp = NULL;
|
145
|
+
lob->svcctx = NULL;
|
132
146
|
}
|
133
147
|
|
134
148
|
static oci8_base_vtable_t oci8_lob_vtable = {
|
@@ -139,7 +153,7 @@ static oci8_base_vtable_t oci8_lob_vtable = {
|
|
139
153
|
|
140
154
|
static ub4 oci8_lob_get_length(oci8_lob_t *lob)
|
141
155
|
{
|
142
|
-
oci8_svcctx_t *svcctx =
|
156
|
+
oci8_svcctx_t *svcctx = check_svcctx(lob);
|
143
157
|
ub4 len;
|
144
158
|
|
145
159
|
chker2(OCILobGetLength_nb(svcctx, svcctx->base.hp.svc, oci8_errhp, lob->base.hp.lob, &len),
|
@@ -150,7 +164,7 @@ static ub4 oci8_lob_get_length(oci8_lob_t *lob)
|
|
150
164
|
static void lob_open(oci8_lob_t *lob)
|
151
165
|
{
|
152
166
|
if (lob->state == S_CLOSE) {
|
153
|
-
oci8_svcctx_t *svcctx =
|
167
|
+
oci8_svcctx_t *svcctx = check_svcctx(lob);
|
154
168
|
|
155
169
|
chker2(OCILobOpen_nb(svcctx, svcctx->base.hp.svc, oci8_errhp, lob->base.hp.lob, OCI_DEFAULT),
|
156
170
|
&svcctx->base);
|
@@ -161,7 +175,7 @@ static void lob_open(oci8_lob_t *lob)
|
|
161
175
|
static void lob_close(oci8_lob_t *lob)
|
162
176
|
{
|
163
177
|
if (lob->state == S_OPEN) {
|
164
|
-
oci8_svcctx_t *svcctx =
|
178
|
+
oci8_svcctx_t *svcctx = check_svcctx(lob);
|
165
179
|
|
166
180
|
chker2(OCILobClose_nb(svcctx, svcctx->base.hp.svc, oci8_errhp, lob->base.hp.lob),
|
167
181
|
&svcctx->base);
|
@@ -172,7 +186,7 @@ static void lob_close(oci8_lob_t *lob)
|
|
172
186
|
static void bfile_close(oci8_lob_t *lob)
|
173
187
|
{
|
174
188
|
if (lob->state == S_BFILE_OPEN) {
|
175
|
-
oci8_svcctx_t *svcctx =
|
189
|
+
oci8_svcctx_t *svcctx = check_svcctx(lob);
|
176
190
|
|
177
191
|
chker2(OCILobFileClose_nb(svcctx, svcctx->base.hp.svc, oci8_errhp, lob->base.hp.lob),
|
178
192
|
&svcctx->base);
|
@@ -228,28 +242,26 @@ static VALUE oci8_lob_do_initialize(int argc, VALUE *argv, VALUE self, ub1 csfrm
|
|
228
242
|
oci8_lob_t *lob = DATA_PTR(self);
|
229
243
|
VALUE svc;
|
230
244
|
VALUE val;
|
245
|
+
oci8_svcctx_t *svcctx;
|
231
246
|
sword rv;
|
232
247
|
|
233
248
|
rb_scan_args(argc, argv, "11", &svc, &val);
|
234
|
-
|
249
|
+
svcctx = oci8_get_svcctx(svc);
|
235
250
|
rv = OCIDescriptorAlloc(oci8_envhp, &lob->base.hp.ptr, OCI_DTYPE_LOB, 0, NULL);
|
236
251
|
if (rv != OCI_SUCCESS)
|
237
252
|
oci8_env_raise(oci8_envhp, rv);
|
238
253
|
lob->base.type = OCI_DTYPE_LOB;
|
239
|
-
lob->svc = svc;
|
240
|
-
lob->svchp = NULL;
|
241
254
|
lob->pos = 0;
|
242
255
|
lob->char_width = 1;
|
243
256
|
lob->csfrm = csfrm;
|
244
257
|
lob->lobtype = lobtype;
|
245
258
|
lob->state = S_NO_OPEN_CLOSE;
|
246
259
|
oci8_link_to_parent((oci8_base_t*)lob, (oci8_base_t*)DATA_PTR(svc));
|
260
|
+
lob->svcctx = svcctx;
|
247
261
|
if (!NIL_P(val)) {
|
248
|
-
oci8_svcctx_t *svcctx = oci8_get_svcctx(svc);
|
249
262
|
OCI8StringValue(val);
|
250
263
|
chker2(OCILobCreateTemporary_nb(svcctx, svcctx->base.hp.svc, oci8_errhp, lob->base.hp.lob, 0, csfrm, lobtype, TRUE, OCI_DURATION_SESSION),
|
251
264
|
&svcctx->base);
|
252
|
-
lob->svchp = oci8_get_oci_svcctx(svc);
|
253
265
|
oci8_lob_write(self, val);
|
254
266
|
lob->pos = 0; /* reset the position */
|
255
267
|
}
|
@@ -461,7 +473,7 @@ static VALUE oci8_lob_rewind(VALUE self)
|
|
461
473
|
static VALUE oci8_lob_truncate(VALUE self, VALUE len)
|
462
474
|
{
|
463
475
|
oci8_lob_t *lob = DATA_PTR(self);
|
464
|
-
oci8_svcctx_t *svcctx =
|
476
|
+
oci8_svcctx_t *svcctx = check_svcctx(lob);
|
465
477
|
|
466
478
|
lob_open(lob);
|
467
479
|
chker2(OCILobTrim_nb(svcctx, svcctx->base.hp.svc, oci8_errhp, lob->base.hp.lob, NUM2UINT(len)),
|
@@ -502,7 +514,7 @@ static VALUE oci8_lob_set_size(VALUE self, VALUE len)
|
|
502
514
|
static VALUE oci8_lob_read(int argc, VALUE *argv, VALUE self)
|
503
515
|
{
|
504
516
|
oci8_lob_t *lob = DATA_PTR(self);
|
505
|
-
oci8_svcctx_t *svcctx =
|
517
|
+
oci8_svcctx_t *svcctx = check_svcctx(lob);
|
506
518
|
ub4 length;
|
507
519
|
ub4 nchar;
|
508
520
|
ub4 amt;
|
@@ -626,7 +638,7 @@ static VALUE oci8_lob_read(int argc, VALUE *argv, VALUE self)
|
|
626
638
|
static VALUE oci8_lob_write(VALUE self, VALUE data)
|
627
639
|
{
|
628
640
|
oci8_lob_t *lob = DATA_PTR(self);
|
629
|
-
oci8_svcctx_t *svcctx =
|
641
|
+
oci8_svcctx_t *svcctx = check_svcctx(lob);
|
630
642
|
ub4 amt;
|
631
643
|
|
632
644
|
lob_open(lob);
|
@@ -695,7 +707,7 @@ static VALUE oci8_lob_flush(VALUE self)
|
|
695
707
|
static VALUE oci8_lob_get_chunk_size(VALUE self)
|
696
708
|
{
|
697
709
|
oci8_lob_t *lob = DATA_PTR(self);
|
698
|
-
oci8_svcctx_t *svcctx =
|
710
|
+
oci8_svcctx_t *svcctx = check_svcctx(lob);
|
699
711
|
ub4 len;
|
700
712
|
|
701
713
|
chker2(OCILobGetChunkSize_nb(svcctx, svcctx->base.hp.svc, oci8_errhp, lob->base.hp.lob, &len),
|
@@ -710,11 +722,11 @@ static VALUE oci8_lob_clone(VALUE self)
|
|
710
722
|
VALUE newobj;
|
711
723
|
boolean is_temporary;
|
712
724
|
|
713
|
-
newobj = rb_funcall(CLASS_OF(self), oci8_id_new, 1, lob->
|
725
|
+
newobj = rb_funcall(CLASS_OF(self), oci8_id_new, 1, lob->svcctx ? lob->svcctx->base.self : Qnil);
|
714
726
|
newlob = DATA_PTR(newobj);
|
715
727
|
if (OCILobIsTemporary(oci8_envhp, oci8_errhp, lob->base.hp.lob, &is_temporary) == OCI_SUCCESS
|
716
728
|
&& is_temporary) {
|
717
|
-
oci8_svcctx_t *svcctx =
|
729
|
+
oci8_svcctx_t *svcctx = check_svcctx(lob);
|
718
730
|
chker2(OCILobLocatorAssign_nb(svcctx, svcctx->base.hp.svc, oci8_errhp, lob->base.hp.lob, &newlob->base.hp.lob),
|
719
731
|
&svcctx->base);
|
720
732
|
} else {
|
@@ -796,16 +808,16 @@ static VALUE oci8_bfile_initialize(int argc, VALUE *argv, VALUE self)
|
|
796
808
|
VALUE svc;
|
797
809
|
VALUE dir_alias;
|
798
810
|
VALUE filename;
|
811
|
+
oci8_svcctx_t *svcctx;
|
799
812
|
int rv;
|
800
813
|
|
801
814
|
rb_scan_args(argc, argv, "12", &svc, &dir_alias, &filename);
|
802
|
-
|
815
|
+
svcctx = oci8_get_svcctx(svc);
|
803
816
|
rv = OCIDescriptorAlloc(oci8_envhp, &lob->base.hp.ptr, OCI_DTYPE_LOB, 0, NULL);
|
804
817
|
if (rv != OCI_SUCCESS) {
|
805
818
|
oci8_env_raise(oci8_envhp, rv);
|
806
819
|
}
|
807
820
|
lob->base.type = OCI_DTYPE_LOB;
|
808
|
-
lob->svc = svc;
|
809
821
|
lob->pos = 0;
|
810
822
|
lob->char_width = 1;
|
811
823
|
lob->csfrm = SQLCS_IMPLICIT;
|
@@ -817,6 +829,7 @@ static VALUE oci8_bfile_initialize(int argc, VALUE *argv, VALUE self)
|
|
817
829
|
oci8_bfile_set_name(self, dir_alias, filename);
|
818
830
|
}
|
819
831
|
oci8_link_to_parent((oci8_base_t*)lob, (oci8_base_t*)DATA_PTR(svc));
|
832
|
+
lob->svcctx = svcctx;
|
820
833
|
return Qnil;
|
821
834
|
}
|
822
835
|
|
@@ -892,7 +905,7 @@ static VALUE oci8_bfile_set_filename(VALUE self, VALUE filename)
|
|
892
905
|
static VALUE oci8_bfile_exists_p(VALUE self)
|
893
906
|
{
|
894
907
|
oci8_lob_t *lob = DATA_PTR(self);
|
895
|
-
oci8_svcctx_t *svcctx =
|
908
|
+
oci8_svcctx_t *svcctx = check_svcctx(lob);
|
896
909
|
boolean flag;
|
897
910
|
|
898
911
|
chker2(OCILobFileExists_nb(svcctx, svcctx->base.hp.svc, oci8_errhp, lob->base.hp.lob, &flag),
|
data/ext/oci8/object.c
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
2
|
/*
|
3
|
-
* Copyright (C) 2002-
|
3
|
+
* Copyright (C) 2002-2013 Kubo Takehiro <kubo@jiubao.org>
|
4
4
|
*/
|
5
5
|
|
6
6
|
/*
|
@@ -681,30 +681,54 @@ void Init_oci_object(VALUE cOCI8)
|
|
681
681
|
/* OCI8::TDO */
|
682
682
|
cOCI8TDO = oci8_define_class_under(cOCI8, "TDO", &oci8_tdo_vtable);
|
683
683
|
rb_define_private_method(cOCI8TDO, "setup", oci8_tdo_setup, 2);
|
684
|
+
/* @private */
|
684
685
|
rb_define_const(cOCI8TDO, "ATTR_STRING", INT2FIX(ATTR_STRING));
|
686
|
+
/* @private */
|
685
687
|
rb_define_const(cOCI8TDO, "ATTR_RAW", INT2FIX(ATTR_RAW));
|
688
|
+
/* @private */
|
686
689
|
rb_define_const(cOCI8TDO, "ATTR_OCINUMBER", INT2FIX(ATTR_OCINUMBER));
|
690
|
+
/* @private */
|
687
691
|
rb_define_const(cOCI8TDO, "ATTR_FLOAT", INT2FIX(ATTR_FLOAT));
|
692
|
+
/* @private */
|
688
693
|
rb_define_const(cOCI8TDO, "ATTR_INTEGER", INT2FIX(ATTR_INTEGER));
|
694
|
+
/* @private */
|
689
695
|
rb_define_const(cOCI8TDO, "ATTR_OCIDATE", INT2FIX(ATTR_OCIDATE));
|
696
|
+
/* @private */
|
690
697
|
rb_define_const(cOCI8TDO, "ATTR_BINARY_DOUBLE", INT2FIX(ATTR_BINARY_DOUBLE));
|
698
|
+
/* @private */
|
691
699
|
rb_define_const(cOCI8TDO, "ATTR_BINARY_FLOAT", INT2FIX(ATTR_BINARY_FLOAT));
|
700
|
+
/* @private */
|
692
701
|
rb_define_const(cOCI8TDO, "ATTR_NAMED_TYPE", INT2FIX(ATTR_NAMED_TYPE));
|
702
|
+
/* @private */
|
693
703
|
rb_define_const(cOCI8TDO, "ATTR_NAMED_COLLECTION", INT2FIX(ATTR_NAMED_COLLECTION));
|
704
|
+
/* @private */
|
694
705
|
rb_define_const(cOCI8TDO, "ATTR_CLOB", INT2FIX(ATTR_CLOB));
|
706
|
+
/* @private */
|
695
707
|
rb_define_const(cOCI8TDO, "ATTR_NCLOB", INT2FIX(ATTR_NCLOB));
|
708
|
+
/* @private */
|
696
709
|
rb_define_const(cOCI8TDO, "ATTR_BLOB", INT2FIX(ATTR_BLOB));
|
710
|
+
/* @private */
|
697
711
|
rb_define_const(cOCI8TDO, "ATTR_BFILE", INT2FIX(ATTR_BFILE));
|
698
712
|
#define ALIGNMENT_OF(type) (size_t)&(((struct {char c; type t;}*)0)->t)
|
713
|
+
/* @private */
|
699
714
|
rb_define_const(cOCI8TDO, "SIZE_OF_POINTER", INT2FIX(sizeof(void *)));
|
715
|
+
/* @private */
|
700
716
|
rb_define_const(cOCI8TDO, "ALIGNMENT_OF_POINTER", INT2FIX(ALIGNMENT_OF(void *)));
|
717
|
+
/* @private */
|
701
718
|
rb_define_const(cOCI8TDO, "SIZE_OF_OCINUMBER", INT2FIX(sizeof(OCINumber)));
|
719
|
+
/* @private */
|
702
720
|
rb_define_const(cOCI8TDO, "ALIGNMENT_OF_OCINUMBER", INT2FIX(ALIGNMENT_OF(OCINumber)));
|
721
|
+
/* @private */
|
703
722
|
rb_define_const(cOCI8TDO, "SIZE_OF_OCIDATE", INT2FIX(sizeof(OCIDate)));
|
723
|
+
/* @private */
|
704
724
|
rb_define_const(cOCI8TDO, "ALIGNMENT_OF_OCIDATE", INT2FIX(ALIGNMENT_OF(OCIDate)));
|
725
|
+
/* @private */
|
705
726
|
rb_define_const(cOCI8TDO, "SIZE_OF_FLOAT", INT2FIX(sizeof(float)));
|
727
|
+
/* @private */
|
706
728
|
rb_define_const(cOCI8TDO, "ALIGNMENT_OF_FLOAT", INT2FIX(ALIGNMENT_OF(float)));
|
729
|
+
/* @private */
|
707
730
|
rb_define_const(cOCI8TDO, "SIZE_OF_DOUBLE", INT2FIX(sizeof(double)));
|
731
|
+
/* @private */
|
708
732
|
rb_define_const(cOCI8TDO, "ALIGNMENT_OF_DOUBLE", INT2FIX(ALIGNMENT_OF(double)));
|
709
733
|
|
710
734
|
/* OCI8::NamedType */
|