ruby-oci8 2.1.7 → 2.1.8

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 CHANGED
@@ -1,3 +1,139 @@
1
+ 2015-04-04 Kubo Takehiro <kubo@jiubao.org>
2
+ * NEWS: add changes between 2.1.7 and 2.1.8.
3
+ * VERSION: update to 2.1.8.
4
+ * dist-files: add new files.
5
+
6
+ 2015-04-04 Kubo Takehiro <kubo@jiubao.org>
7
+ * ext/oci8/extconf.rb, ext/oci8/oci8.h: Add a macro for old rubies which
8
+ don't have rb_str_set_len().
9
+ * ext/oci8/hook_funcs.c: Suppress a warning.
10
+
11
+ 2015-04-04 Kubo Takehiro <kubo@jiubao.org>
12
+ * ext/oci8/lob.c: Increase the buffer size to read a LOB.
13
+
14
+ 2015-04-04 Kubo Takehiro <kubo@jiubao.org>
15
+ * docs/install-instant-client.md, ext/oci8/lob.c, ext/oci8/metadata.c,
16
+ ext/oci8/oci8.c: Update documents for YARD.
17
+
18
+ 2015-04-02 Kubo Takehiro <kubo@jiubao.org>
19
+ * ext/oci8/lob.c: Fix SEGV when a temporary LOB is freed by GC
20
+ while reading another lob and the ruby version is 2.0.0 or
21
+ upper.
22
+
23
+ 2015-03-01 Kubo Takehiro <kubo@jiubao.org>
24
+ * lib/oci8/cursor.rb, lib/oci8/properties.rb:
25
+ Fix errors while generating documents by yard such as
26
+ "Exception occurred while generating 'OCI8/Cursor.html'."
27
+
28
+ 2015-03-01 Kubo Takehiro <kubo@jiubao.org>
29
+ * ext/oci8/oci8.c, ext/oci8/oci8.h: Rollback transactions on
30
+ logoff only when the transactions are in progress.
31
+
32
+ 2015-01-27 Kubo Takehiro <kubo@jiubao.org>
33
+ * ext/oci8/ocihandle.c, ext/oci8/ocinumber.c, ext/oci8/oradate.c,
34
+ ext/oci8/stmt.c: Suppreess warnings: "[warn]: @param tag has unknown parameter name: xxx"
35
+ by yard.
36
+
37
+ 2015-01-20 Kubo Takehiro <kubo@jiubao.org>
38
+ * lib/oci8/oci8.rb: Add OCI8#send_timeout, OCI8#send_timeout=,
39
+ OCI8#recv_timeout and OCI8#recv_timeout=.
40
+
41
+ 2015-01-20 Kubo Takehiro <kubo@jiubao.org>
42
+ * ext/oci8/hook_funcs.c, ext/oci8/oci8.c, ext/oci8/oci8.h:
43
+ Fix for cancel_read_at_exit on Windows.
44
+
45
+ 2015-01-20 Kubo Takehiro <kubo@jiubao.org>
46
+ * ext/oci8/oci8.c, ext/oci8/oci8lib.c, lib/oci8/properties.rb:
47
+ Add OCI8.properties[:cancel_read_at_exit].
48
+
49
+ 2015-01-20 Kubo Takehiro <kubo@jiubao.org>
50
+ * ext/oci8/extconf.rb, ext/oci8/hook_funcs.c, ext/oci8/oci8.c,
51
+ ext/oci8/oci8.h, ext/oci8/oci8lib.c, ext/oci8/plthook.h,
52
+ ext/oci8/plthook_elf.c, ext/oci8/plthook_osx.c,
53
+ ext/oci8/plthook_win32.c: Cancel read system calls at exit
54
+ not to block ruby process termination.
55
+ This works on Linux, OSX and Windows Vista or upper.
56
+ (github issue #56)
57
+
58
+ 2015-01-12 Kubo Takehiro <kubo@jiubao.org>
59
+ * README.md: Fix a broken link.
60
+ (github issue #67 reported by Zloy)
61
+
62
+ 2014-12-30 Kubo Takehiro <kubo@jiubao.org>
63
+ * ext/oci8/lob.c, ext/oci8/oci8lib.c: Revise type checking of LOB.
64
+
65
+ 2014-12-30 Kubo Takehiro <kubo@jiubao.org>
66
+ * ext/oci8/bind.c, ext/oci8/connection_pool.c, ext/oci8/lob.c,
67
+ ext/oci8/metadata.c, ext/oci8/object.c, ext/oci8/oci8.c, ext/oci8/oci8.h,
68
+ ext/oci8/oci8lib.c, ext/oci8/ocihandle.c, ext/oci8/stmt.c:
69
+ Add oci8_check_typeddata() and use it instead of oci8_get_handle()
70
+ and oci8_get_bind().
71
+
72
+ 2014-12-30 Kubo Takehiro <kubo@jiubao.org>
73
+ * ext/oci8/oradate.c: Add check_oradate() to check datatype.
74
+
75
+ 2014-12-30 Kubo Takehiro <kubo@jiubao.org>
76
+ * ext/oci8/lob.c, ext/oci8/metadata.c, ext/oci8/object.c, ext/oci8/stmt.c:
77
+ Add more write barriers.
78
+
79
+ 2014-12-29 Kubo Takehiro <kubo@jiubao.org>
80
+ * ext/oci8/bind.c, ext/oci8/connection_pool.c, ext/oci8/lob.c,
81
+ ext/oci8/metadata.c, ext/oci8/object.c, ext/oci8/oci8.c, ext/oci8/oci8.h
82
+ ext/oci8/oci8lib.c, ext/oci8/ocidatetime.c, ext/oci8/ocihandle.c,
83
+ ext/oci8/ocinumber.c, ext/oci8/oradate.c, ext/oci8/stmt.c:
84
+ Use rb_data_type_t as the base type of oci8_handle_data_type_t.
85
+
86
+ 2014-12-29 Kubo Takehiro <kubo@jiubao.org>
87
+ * ext/oci8/bind.c, ext/oci8/connection_pool.c, ext/oci8/lob.c,
88
+ ext/oci8/metadata.c, ext/oci8/object.c, ext/oci8/oci8.c, ext/oci8/oci8.h
89
+ ext/oci8/oci8lib.c, ext/oci8/ocidatetime.c, ext/oci8/ocihandle.c,
90
+ ext/oci8/ocinumber.c, ext/oci8/oradate.c, ext/oci8/stmt.c:
91
+ Rename vtable and vptr to data_type.
92
+
93
+ 2014-12-29 Kubo Takehiro <kubo@jiubao.org>
94
+ * ext/oci8/bind.c, ext/oci8/connection_pool.c, ext/oci8/lob.c,
95
+ ext/oci8/metadata.c, ext/oci8/object.c, ext/oci8/oci8.c, ext/oci8/oci8.h
96
+ ext/oci8/oci8lib.c, ext/oci8/ocidatetime.c, ext/oci8/ocihandle.c,
97
+ ext/oci8/ocinumber.c, ext/oci8/oradate.c, ext/oci8/stmt.c:
98
+ Add oci8_allocate_typeddata() and use it to allocate OCI objects.
99
+
100
+ 2014-12-23 Kubo Takehiro <kubo@jiubao.org>
101
+ * ext/oci8/connection_pool.c, ext/oci8/metadata.c, ext/oci8/object.c,
102
+ ext/oci8/oci8.c, ext/oci8/oci8.h, ext/oci8/oci8lib.c, ext/oci8/ocihandle.c
103
+ ext/oci8/ocinumber.c, ext/oci8/oradate.c, ext/oci8/stmt.c:
104
+ Add write barriers to use generational GC.
105
+
106
+ 2014-12-23 Kubo Takehiro <kubo@jiubao.org>
107
+ * ext/oci8/oci8.h, ext/oci8/oci8lib.c, ext/oci8/ocihandle.c,
108
+ ext/oci8/ocinumber.c, ext/oci8/oradate.c:
109
+ Use TypedData on ruby 1.9.3 and later.
110
+
111
+ 2014-12-22 Kubo Takehiro <kubo@jiubao.org>
112
+ * ext/oci8/extconf.rb, ext/oci8/stmt.c: Don't use SYM2ID on ruby 2.2.0
113
+ or later. Symbols passed to SYM2ID are not GC'ed.
114
+
115
+ 2014-12-21 Kubo Takehiro <kubo@jiubao.org>
116
+ * ext/oci8/bind.c, ext/oci8/object.c, ext/oci8/oci8.h, ext/oci8/oci8lib.c,
117
+ ext/oci8/ocidatetime.c, ext/oci8/ocihandle.c, ext/oci8/ocinumber.c:
118
+ Use RARRAY_AREF and RARRAY_CONST_PTR for Generational GC.
119
+
120
+ 2014-12-06 Kubo Takehiro <kubo@jiubao.org>
121
+ * ext/oci8/connection_pool.c, ext/oci8/lob.c, ext/oci8/oci8.c,
122
+ ext/oci8/stmt.c: Fix "RuntimeError:executing in another thread"
123
+ when a closed connection is used. This bug was introduced by
124
+ the previous commit.
125
+ (github issue #64 reported by Yasuo Honda)
126
+
127
+ 2014-11-16 Kubo Takehiro <kubo@jiubao.org>
128
+ * ext/oci8/attr.c, ext/oci8/bind.c, ext/oci8/connection_pool.c,
129
+ ext/oci8/lob.c, ext/oci8/metadata.c, ext/oci8/object.c,
130
+ ext/oci8/oci8.c, ext/oci8/oci8.h, ext/oci8/oci8lib.c,
131
+ ext/oci8/ocihandle.c, ext/oci8/stmt.c:
132
+ Raises an exception when a closed OCI8 object is used.
133
+ Using a closed cursor causes various problems such as segmentation
134
+ fault, nil comparison error and so on.
135
+ (github issue #61 and #62 reported by Mike Bourgeous)
136
+
1
137
  2014-02-02 Kubo Takehiro <kubo@jiubao.org>
2
138
  * NEWS: add changes between 2.1.7 and 2.1.6.
3
139
  * VERSION: change the version to 2.1.7.
data/NEWS CHANGED
@@ -1,5 +1,66 @@
1
1
  # @markup markdown
2
2
 
3
+ 2.1.8
4
+ =====
5
+
6
+ New Features
7
+ ------------
8
+
9
+ ### Send and receive timeouts
10
+
11
+ New methods {OCI8#send_timeout}, {OCI8#send_timeout=}, {OCI8#recv_timeout} and {OCI8#recv_timeout=}
12
+ were added. They are available on Oracle 11.1 or upper.
13
+
14
+ Use them at your own risk because they use [undocumented OCI handle attributes](http://blog.jiubao.org/2015/01/undocumented-oci-handle-attributes.html).
15
+
16
+ ### Cancel read system calls not to prevent ruby process termination
17
+
18
+ When network quality is poor and incoming packets are lost irregularly,
19
+ the ruby process termination may be blocked until TCP keepalive time (2 hours).
20
+
21
+ By setting [OCI8.properties[:cancel_read_at_exit]](OCI8.html#properties-class_method)
22
+ true, read system calls, which may wait incoming packets, are canceled at exit.
23
+ See: [github issue #56](https://github.com/kubo/ruby-oci8/issues/56)
24
+
25
+ This feature is disabled by default because it uses [unusual technique](https://github.com/kubo/plthook)
26
+ which hooks read system calls issued by Oracle client library and it works only on
27
+ Linux, Windows and OSX.
28
+
29
+ ### RGenGC
30
+
31
+ Object allocation code is rewritten to use [RGenGC](http://www.infoq.com/news/2013/12/ruby21).
32
+
33
+ Fixed Issues
34
+ ------------
35
+
36
+ - Raises an exception when a closed OCI8 object is used.
37
+ Using a closed cursor causes various problems such as segmentation
38
+ fault, nil comparison error and so on.
39
+ See: [github issue #61](https://github.com/kubo/ruby-oci8/issues/61)
40
+ and [github issue #62](https://github.com/kubo/ruby-oci8/issues/62)
41
+
42
+ (reported by Mike Bourgeous)
43
+
44
+ - Fix "RuntimeError:executing in another thread"
45
+ when a closed connection is used. This bug was introduced by
46
+ the previously listed issue.
47
+ See: [github issue #64](https://github.com/kubo/ruby-oci8/issues/64)
48
+
49
+ (reported by Yasuo Honda)
50
+
51
+ - Fix SEGV when a temporary LOB is freed by GC while reading another
52
+ lob and the ruby version is 2.0.0 or upper.
53
+
54
+ - Skip rollback on logoff when no transactions are in progress.
55
+
56
+ - Fix a broken link in README.md.
57
+ See: [github issue #67](https://github.com/kubo/ruby-oci8/issues/67)
58
+
59
+ (reported by Zloy)
60
+
61
+ - Don't use SYM2ID on ruby 2.2.0 or later not to make symbols unGCable
62
+ by [Symbol GC](http://www.infoq.com/news/2014/12/ruby-2.2.0-released).
63
+
3
64
  2.1.7
4
65
  =====
5
66
 
data/README.md CHANGED
@@ -21,10 +21,10 @@ 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
- API Reference
24
+ Documentation
25
25
  =============
26
26
 
27
- * http://rubydoc.info/gems/ruby-oci8/frames/file/README.md
27
+ * http://rubydoc.info/gems/ruby-oci8/
28
28
 
29
29
  Installation
30
30
  ============
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.1.7
1
+ 2.1.8
data/dist-files CHANGED
@@ -29,6 +29,7 @@ ext/oci8/encoding.c
29
29
  ext/oci8/env.c
30
30
  ext/oci8/error.c
31
31
  ext/oci8/extconf.rb
32
+ ext/oci8/hook_funcs.c
32
33
  ext/oci8/lob.c
33
34
  ext/oci8/metadata.c
34
35
  ext/oci8/object.c
@@ -42,6 +43,10 @@ ext/oci8/oraconf.rb
42
43
  ext/oci8/oradate.c
43
44
  ext/oci8/oranumber_util.c
44
45
  ext/oci8/oranumber_util.h
46
+ ext/oci8/plthook.h
47
+ ext/oci8/plthook_elf.c
48
+ ext/oci8/plthook_osx.c
49
+ ext/oci8/plthook_win32.c
45
50
  ext/oci8/post-config.rb
46
51
  ext/oci8/stmt.c
47
52
  ext/oci8/thread_util.c
@@ -45,6 +45,8 @@ Note:
45
45
  * use libclntsh.sl instead of libclntsh.so on HP-UX PA-RISC.
46
46
  * use libclntsh.dylib instead of libclntsh.so on Mac OS X.
47
47
  * skip this step for AIX.
48
+ * run `yum install libaio` also on Redhat.
49
+ * run `apt-get install libaio1` also on Ubuntu.
48
50
 
49
51
  Set the library search path, whose name depends on the OS, to point to
50
52
  the installed directory.
@@ -6,15 +6,6 @@
6
6
  */
7
7
  #include "oci8.h"
8
8
 
9
- VALUE oci8_get_ub2_attr(oci8_base_t *base, ub4 attrtype, OCIStmt *stmtp)
10
- {
11
- ub2 val;
12
-
13
- chker3(OCIAttrGet(base->hp.ptr, base->type, &val, NULL, attrtype, oci8_errhp),
14
- base, stmtp);
15
- return INT2FIX(val);
16
- }
17
-
18
9
  #define MAX_ROWID_LEN 128
19
10
 
20
11
  typedef struct {
@@ -2,7 +2,7 @@
2
2
  /*
3
3
  * bind.c
4
4
  *
5
- * Copyright (C) 2002-2011 KUBO Takehiro <kubo@jiubao.org>
5
+ * Copyright (C) 2002-2014 Kubo Takehiro <kubo@jiubao.org>
6
6
  */
7
7
  #include "oci8.h"
8
8
 
@@ -25,6 +25,23 @@ typedef struct {
25
25
  ub1 csfrm;
26
26
  } oci8_bind_string_t;
27
27
 
28
+ const oci8_handle_data_type_t oci8_bind_data_type = {
29
+ {
30
+ "OCI8::BindType::Base",
31
+ {
32
+ NULL,
33
+ oci8_handle_cleanup,
34
+ oci8_handle_size,
35
+ },
36
+ &oci8_handle_data_type.rb_data_type, NULL,
37
+ #ifdef RUBY_TYPED_WB_PROTECTED
38
+ RUBY_TYPED_WB_PROTECTED,
39
+ #endif
40
+ },
41
+ NULL,
42
+ 0,
43
+ };
44
+
28
45
  /*
29
46
  * bind_string
30
47
  */
@@ -104,9 +121,20 @@ static void bind_string_post_bind_hook(oci8_bind_t *obind)
104
121
  &obind->base);
105
122
  }
106
123
 
107
- static const oci8_bind_vtable_t bind_string_vtable = {
124
+ static const oci8_bind_data_type_t bind_string_data_type = {
108
125
  {
109
- NULL,
126
+ {
127
+ "OCI8::BindType::String",
128
+ {
129
+ NULL,
130
+ oci8_handle_cleanup,
131
+ oci8_handle_size,
132
+ },
133
+ &oci8_bind_data_type.rb_data_type, NULL,
134
+ #ifdef RUBY_TYPED_WB_PROTECTED
135
+ RUBY_TYPED_WB_PROTECTED,
136
+ #endif
137
+ },
110
138
  oci8_bind_free,
111
139
  sizeof(oci8_bind_string_t)
112
140
  },
@@ -119,6 +147,11 @@ static const oci8_bind_vtable_t bind_string_vtable = {
119
147
  bind_string_post_bind_hook,
120
148
  };
121
149
 
150
+ static VALUE bind_string_alloc(VALUE klass)
151
+ {
152
+ return oci8_allocate_typeddata(klass, &bind_string_data_type.base);
153
+ }
154
+
122
155
  /*
123
156
  * bind_raw
124
157
  */
@@ -141,9 +174,20 @@ static void bind_raw_set(oci8_bind_t *obind, void *data, void **null_structp, VA
141
174
  vstr->size = RSTRING_LEN(val);
142
175
  }
143
176
 
144
- static const oci8_bind_vtable_t bind_raw_vtable = {
177
+ static const oci8_bind_data_type_t bind_raw_data_type = {
145
178
  {
146
- NULL,
179
+ {
180
+ "OCI8::BindType::RAW",
181
+ {
182
+ NULL,
183
+ oci8_handle_cleanup,
184
+ oci8_handle_size,
185
+ },
186
+ &oci8_bind_data_type.rb_data_type, NULL,
187
+ #ifdef RUBY_TYPED_WB_PROTECTED
188
+ RUBY_TYPED_WB_PROTECTED,
189
+ #endif
190
+ },
147
191
  oci8_bind_free,
148
192
  sizeof(oci8_bind_string_t)
149
193
  },
@@ -155,6 +199,11 @@ static const oci8_bind_vtable_t bind_raw_vtable = {
155
199
  SQLT_LVB
156
200
  };
157
201
 
202
+ static VALUE bind_raw_alloc(VALUE klass)
203
+ {
204
+ return oci8_allocate_typeddata(klass, &bind_raw_data_type.base);
205
+ }
206
+
158
207
  /*
159
208
  * bind_binary_double
160
209
  */
@@ -178,9 +227,20 @@ static void bind_binary_double_init(oci8_bind_t *obind, VALUE svc, VALUE val, VA
178
227
  #ifndef SQLT_BDOUBLE
179
228
  #define SQLT_BDOUBLE 22
180
229
  #endif
181
- static const oci8_bind_vtable_t bind_binary_double_vtable = {
230
+ static const oci8_bind_data_type_t bind_binary_double_data_type = {
182
231
  {
183
- NULL,
232
+ {
233
+ "OCI8::BindType::BinaryDouble",
234
+ {
235
+ NULL,
236
+ oci8_handle_cleanup,
237
+ oci8_handle_size,
238
+ },
239
+ &oci8_bind_data_type.rb_data_type, NULL,
240
+ #ifdef RUBY_TYPED_WB_PROTECTED
241
+ RUBY_TYPED_WB_PROTECTED,
242
+ #endif
243
+ },
184
244
  oci8_bind_free,
185
245
  sizeof(oci8_bind_t)
186
246
  },
@@ -192,10 +252,15 @@ static const oci8_bind_vtable_t bind_binary_double_vtable = {
192
252
  SQLT_BDOUBLE
193
253
  };
194
254
 
255
+ static VALUE bind_binary_double_alloc(VALUE klass)
256
+ {
257
+ return oci8_allocate_typeddata(klass, &bind_binary_double_data_type.base);
258
+ }
259
+
195
260
  static VALUE oci8_bind_get(VALUE self)
196
261
  {
197
- oci8_bind_t *obind = DATA_PTR(self);
198
- const oci8_bind_vtable_t *vptr = (const oci8_bind_vtable_t *)obind->base.vptr;
262
+ oci8_bind_t *obind = TO_BIND(self);
263
+ const oci8_bind_data_type_t *data_type = (const oci8_bind_data_type_t *)obind->base.data_type;
199
264
  ub4 idx = obind->curar_idx;
200
265
  void **null_structp = NULL;
201
266
 
@@ -203,12 +268,12 @@ static VALUE oci8_bind_get(VALUE self)
203
268
  if (obind->u.inds[idx] != 0)
204
269
  return Qnil;
205
270
  }
206
- return vptr->get(obind, (void*)((size_t)obind->valuep + obind->alloc_sz * idx), null_structp);
271
+ return data_type->get(obind, (void*)((size_t)obind->valuep + obind->alloc_sz * idx), null_structp);
207
272
  }
208
273
 
209
274
  static VALUE oci8_bind_get_data(VALUE self)
210
275
  {
211
- oci8_bind_t *obind = DATA_PTR(self);
276
+ oci8_bind_t *obind = TO_BIND(self);
212
277
 
213
278
  if (obind->maxar_sz == 0) {
214
279
  obind->curar_idx = 0;
@@ -227,8 +292,8 @@ static VALUE oci8_bind_get_data(VALUE self)
227
292
 
228
293
  static VALUE oci8_bind_set(VALUE self, VALUE val)
229
294
  {
230
- oci8_bind_t *obind = DATA_PTR(self);
231
- const oci8_bind_vtable_t *vptr = (const oci8_bind_vtable_t *)obind->base.vptr;
295
+ oci8_bind_t *obind = TO_BIND(self);
296
+ const oci8_bind_data_type_t *data_type = (const oci8_bind_data_type_t *)obind->base.data_type;
232
297
  ub4 idx = obind->curar_idx;
233
298
 
234
299
  if (NIL_P(val)) {
@@ -247,14 +312,14 @@ static VALUE oci8_bind_set(VALUE self, VALUE val)
247
312
  null_structp = &obind->u.null_structs[idx];
248
313
  *(OCIInd*)obind->u.null_structs[idx] = 0;
249
314
  }
250
- vptr->set(obind, (void*)((size_t)obind->valuep + obind->alloc_sz * idx), null_structp, val);
315
+ data_type->set(obind, (void*)((size_t)obind->valuep + obind->alloc_sz * idx), null_structp, val);
251
316
  }
252
317
  return self;
253
318
  }
254
319
 
255
320
  static VALUE oci8_bind_set_data(VALUE self, VALUE val)
256
321
  {
257
- oci8_bind_t *obind = DATA_PTR(self);
322
+ oci8_bind_t *obind = TO_BIND(self);
258
323
 
259
324
  if (obind->maxar_sz == 0) {
260
325
  obind->curar_idx = 0;
@@ -270,7 +335,7 @@ static VALUE oci8_bind_set_data(VALUE self, VALUE val)
270
335
  }
271
336
  for (idx = 0; idx < size; idx++) {
272
337
  obind->curar_idx = idx;
273
- rb_funcall(self, oci8_id_set, 1, RARRAY_PTR(val)[idx]);
338
+ rb_funcall(self, oci8_id_set, 1, RARRAY_AREF(val, idx));
274
339
  }
275
340
  obind->curar_sz = size;
276
341
  }
@@ -279,8 +344,8 @@ static VALUE oci8_bind_set_data(VALUE self, VALUE val)
279
344
 
280
345
  static VALUE oci8_bind_initialize(VALUE self, VALUE svc, VALUE val, VALUE length, VALUE max_array_size)
281
346
  {
282
- oci8_bind_t *obind = DATA_PTR(self);
283
- const oci8_bind_vtable_t *bind_class = (const oci8_bind_vtable_t *)obind->base.vptr;
347
+ oci8_bind_t *obind = TO_BIND(self);
348
+ const oci8_bind_data_type_t *bind_class = (const oci8_bind_data_type_t *)obind->base.data_type;
284
349
  ub4 cnt = 1;
285
350
 
286
351
  obind->tdo = Qnil;
@@ -354,16 +419,9 @@ void Init_oci8_bind(VALUE klass)
354
419
  rb_define_private_method(cOCI8BindTypeBase, "set_data", oci8_bind_set_data, 1);
355
420
 
356
421
  /* register primitive data types. */
357
- oci8_define_bind_class("String", &bind_string_vtable);
358
- oci8_define_bind_class("RAW", &bind_raw_vtable);
422
+ oci8_define_bind_class("String", &bind_string_data_type, bind_string_alloc);
423
+ oci8_define_bind_class("RAW", &bind_raw_data_type, bind_raw_alloc);
359
424
  if (oracle_client_version >= ORAVER_10_1) {
360
- oci8_define_bind_class("BinaryDouble", &bind_binary_double_vtable);
425
+ oci8_define_bind_class("BinaryDouble", &bind_binary_double_data_type, bind_binary_double_alloc);
361
426
  }
362
427
  }
363
-
364
- oci8_bind_t *oci8_get_bind(VALUE obj)
365
- {
366
- oci8_base_t *base;
367
- Check_Handle(obj, cOCI8BindTypeBase, base);
368
- return (oci8_bind_t *)base;
369
- }