ruby-oci8 2.1.7 → 2.1.8

This diff has not been reviewed by any users.
Sign up to get free protection for your applications and to get access to all the features.
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
- }