ruby-oci8 2.2.0.2 → 2.2.12

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.
Files changed (83) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +1 -6
  3. data/ChangeLog +600 -0
  4. data/NEWS +426 -35
  5. data/README.md +27 -9
  6. data/dist-files +13 -2
  7. data/docs/bind-array-to-in_cond.md +38 -0
  8. data/docs/conflicts-local-connections-and-processes.md +98 -0
  9. data/docs/hanging-after-inactivity.md +63 -0
  10. data/docs/install-binary-package.md +15 -11
  11. data/docs/install-full-client.md +18 -21
  12. data/docs/install-instant-client.md +45 -27
  13. data/docs/install-on-osx.md +31 -117
  14. data/docs/ldap-auth-and-function-interposition.md +123 -0
  15. data/docs/number-type-mapping.md +79 -0
  16. data/docs/platform-specific-issues.md +17 -50
  17. data/docs/report-installation-issue.md +11 -8
  18. data/docs/timeout-parameters.md +94 -0
  19. data/ext/oci8/apiwrap.c.tmpl +2 -5
  20. data/ext/oci8/apiwrap.rb +6 -1
  21. data/ext/oci8/apiwrap.yml +39 -143
  22. data/ext/oci8/attr.c +4 -2
  23. data/ext/oci8/bind.c +421 -9
  24. data/ext/oci8/connection_pool.c +3 -3
  25. data/ext/oci8/encoding.c +5 -5
  26. data/ext/oci8/env.c +8 -2
  27. data/ext/oci8/error.c +24 -16
  28. data/ext/oci8/extconf.rb +35 -63
  29. data/ext/oci8/hook_funcs.c +274 -61
  30. data/ext/oci8/lob.c +31 -75
  31. data/ext/oci8/metadata.c +8 -6
  32. data/ext/oci8/object.c +119 -29
  33. data/ext/oci8/oci8.c +46 -133
  34. data/ext/oci8/oci8.h +40 -123
  35. data/ext/oci8/oci8lib.c +178 -46
  36. data/ext/oci8/ocihandle.c +37 -37
  37. data/ext/oci8/ocinumber.c +24 -35
  38. data/ext/oci8/oraconf.rb +168 -337
  39. data/ext/oci8/oradate.c +19 -19
  40. data/ext/oci8/plthook.h +10 -0
  41. data/ext/oci8/plthook_elf.c +433 -268
  42. data/ext/oci8/plthook_osx.c +40 -9
  43. data/ext/oci8/plthook_win32.c +16 -1
  44. data/ext/oci8/stmt.c +52 -17
  45. data/ext/oci8/win32.c +4 -22
  46. data/lib/oci8/bindtype.rb +10 -17
  47. data/lib/oci8/check_load_error.rb +57 -10
  48. data/lib/oci8/compat.rb +5 -1
  49. data/lib/oci8/connection_pool.rb +74 -3
  50. data/lib/oci8/cursor.rb +70 -31
  51. data/lib/oci8/metadata.rb +9 -1
  52. data/lib/oci8/object.rb +14 -1
  53. data/lib/oci8/oci8.rb +184 -58
  54. data/lib/oci8/ocihandle.rb +0 -16
  55. data/lib/oci8/oracle_version.rb +11 -1
  56. data/lib/oci8/properties.rb +55 -0
  57. data/lib/oci8/version.rb +1 -1
  58. data/lib/oci8.rb +48 -4
  59. data/lib/ruby-oci8.rb +1 -0
  60. data/pre-distclean.rb +1 -3
  61. data/ruby-oci8.gemspec +4 -9
  62. data/setup.rb +11 -2
  63. data/test/README.md +37 -0
  64. data/test/config.rb +8 -1
  65. data/test/setup_test_object.sql +42 -14
  66. data/test/setup_test_package.sql +59 -0
  67. data/test/test_all.rb +4 -0
  68. data/test/test_bind_array.rb +70 -0
  69. data/test/test_bind_boolean.rb +99 -0
  70. data/test/test_bind_integer.rb +47 -0
  71. data/test/test_break.rb +11 -9
  72. data/test/test_clob.rb +5 -17
  73. data/test/test_connstr.rb +142 -0
  74. data/test/test_datetime.rb +8 -3
  75. data/test/test_metadata.rb +2 -1
  76. data/test/test_object.rb +99 -18
  77. data/test/test_oci8.rb +170 -46
  78. data/test/test_oranumber.rb +12 -6
  79. data/test/test_package_type.rb +17 -3
  80. data/test/test_properties.rb +17 -0
  81. metadata +45 -55
  82. data/docs/osx-install-dev-tools.png +0 -0
  83. data/test/README +0 -42
data/ext/oci8/oci8lib.c CHANGED
@@ -7,6 +7,10 @@
7
7
  #ifdef HAVE_RUBY_THREAD_H
8
8
  #include <ruby/thread.h>
9
9
  #endif
10
+ #if defined(HAVE_PLTHOOK) && !defined(WIN32)
11
+ #include <dlfcn.h>
12
+ #include "plthook.h"
13
+ #endif
10
14
 
11
15
  ID oci8_id_at_last_error;
12
16
  ID oci8_id_get;
@@ -54,7 +58,6 @@ void oci8_base_free(oci8_base_t *base)
54
58
  base->hp.ptr = NULL;
55
59
  }
56
60
 
57
- #ifdef HAVE_RB_SET_END_PROC
58
61
  static void at_exit_func(VALUE val)
59
62
  {
60
63
  oci8_in_finalizer = 1;
@@ -62,21 +65,136 @@ static void at_exit_func(VALUE val)
62
65
  oci8_shutdown_sockets();
63
66
  #endif
64
67
  }
65
- #endif
66
68
 
67
69
  static VALUE bind_base_alloc(VALUE klass)
68
70
  {
69
71
  rb_raise(rb_eNameError, "private method `new' called for %s:Class", rb_class2name(klass));
70
72
  }
71
73
 
74
+ #if defined(HAVE_PLTHOOK) && !defined(WIN32) && !defined(__CYGWIN__) && !defined(TRUFFLERUBY)
75
+ static const char *find_libclntsh(void *handle)
76
+ {
77
+ void *symaddr = dlsym(handle, "OCIEnvCreate");
78
+ Dl_info info;
79
+ #ifdef __APPLE__
80
+ const char *basename = "libclntsh.dylib";
81
+ #else
82
+ const char *basename = "libclntsh.so";
83
+ #endif
84
+ const char *p;
85
+
86
+ if (symaddr == NULL) {
87
+ return NULL;
88
+ }
89
+ if (dladdr(symaddr, &info) == 0) {
90
+ return NULL;
91
+ }
92
+ if ((p = strrchr(info.dli_fname, '/')) == NULL) {
93
+ return NULL;
94
+ }
95
+ if (strncmp(p + 1, basename, strlen(basename)) != 0) {
96
+ return NULL;
97
+ }
98
+ return info.dli_fname;
99
+ }
100
+
101
+ /*
102
+ * Symbol prefix depends on the platform.
103
+ * Linux x86_64 - no prefix
104
+ * Linux x86_32 - "_"
105
+ * macOS - "@_"
106
+ */
107
+ static const char *find_symbol_prefix(plthook_t *ph, size_t *len)
108
+ {
109
+ unsigned int pos = 0;
110
+ const char *name;
111
+ void **addr;
112
+
113
+ while (plthook_enum(ph, &pos, &name, &addr) == 0) {
114
+ const char *p = strstr(name, "OCIEnvCreate");
115
+ if (p != NULL) {
116
+ *len = p - name;
117
+ return name;
118
+ }
119
+ }
120
+ return NULL;
121
+ }
122
+
123
+ /*
124
+ * Fix PLT entries against function interposition.
125
+ * See: http://www.rubydoc.info/github/kubo/ruby-oci8/file/docs/ldap-auth-and-function-interposition.md
126
+ */
127
+ static void rebind_internal_symbols(void)
128
+ {
129
+ const char *libfile;
130
+ void *handle;
131
+ int flags = RTLD_LAZY | RTLD_NOLOAD;
132
+ plthook_t *ph;
133
+ unsigned int pos = 0;
134
+ const char *name;
135
+ void **addr;
136
+ const char *prefix;
137
+ size_t prefix_len;
138
+
139
+ #ifdef RTLD_FIRST
140
+ flags |= RTLD_FIRST; /* for macOS */
141
+ #endif
142
+
143
+ libfile = find_libclntsh(RTLD_DEFAULT); /* normal case */
144
+ if (libfile == NULL) {
145
+ libfile = find_libclntsh(RTLD_NEXT); /* special case when OCIEnvCreate is hooked by LD_PRELOAD */
146
+ }
147
+ if (libfile == NULL) {
148
+ return;
149
+ }
150
+ handle = dlopen(libfile, flags);
151
+ if (handle == NULL) {
152
+ return;
153
+ }
154
+ if (plthook_open(&ph, libfile) != 0) {
155
+ dlclose(handle);
156
+ return;
157
+ }
158
+ prefix = find_symbol_prefix(ph, &prefix_len);
159
+ if (prefix == NULL) {
160
+ dlclose(handle);
161
+ plthook_close(ph);
162
+ return;
163
+ }
164
+ while (plthook_enum(ph, &pos, &name, &addr) == 0) {
165
+ void *funcaddr;
166
+ if (prefix_len != 0) {
167
+ if (strncmp(name, prefix, prefix_len) != 0) {
168
+ continue;
169
+ }
170
+ name += prefix_len;
171
+ }
172
+ if (strncmp(name, "OCI", 3) == 0) {
173
+ /* exclude functions starting with OCI not to prevent LD_PRELOAD hooking */
174
+ continue;
175
+ }
176
+ funcaddr = dlsym(handle, name);
177
+ if (funcaddr != NULL && *addr != funcaddr) {
178
+ /* If libclntsh.so exports and imports same functions, their
179
+ * PLT entries are forcedly modified to point to itself not
180
+ * to use functions in other libraries.
181
+ */
182
+ *addr = funcaddr;
183
+ }
184
+ }
185
+ plthook_close(ph);
186
+ dlclose(handle);
187
+ }
188
+ #endif
189
+
72
190
  #ifdef _WIN32
73
191
  __declspec(dllexport)
74
192
  #endif
75
193
  void
76
- Init_oci8lib()
194
+ Init_oci8lib(void)
77
195
  {
78
196
  VALUE cOCI8;
79
- OCIEnv *envhp;
197
+ OCIEnv *envhp = NULL;
80
198
  OCIError *errhp;
81
199
  sword rv;
82
200
 
@@ -108,6 +226,9 @@ Init_oci8lib()
108
226
  oracle_client_version = ORAVERNUM(major, minor, update, patch, port_update);
109
227
  }
110
228
  #endif
229
+ #if defined(HAVE_PLTHOOK) && !defined(WIN32) && !defined(__CYGWIN__) && !defined(TRUFFLERUBY)
230
+ rebind_internal_symbols();
231
+ #endif
111
232
 
112
233
  oci8_id_at_last_error = rb_intern("@last_error");
113
234
  oci8_id_get = rb_intern("get");
@@ -118,9 +239,7 @@ Init_oci8lib()
118
239
  oci8_id_mul_op = rb_intern("*");
119
240
  oci8_id_div_op = rb_intern("/");
120
241
  #endif
121
- #ifdef HAVE_RB_SET_END_PROC
122
242
  rb_set_end_proc(at_exit_func, Qnil);
123
- #endif
124
243
 
125
244
  Init_oci8_thread_util();
126
245
  Init_oci8_error();
@@ -157,7 +276,11 @@ Init_oci8lib()
157
276
  /* allocate a temporary errhp to pass Init_oci_number() */
158
277
  rv = OCIEnvCreate(&envhp, oci8_env_mode, NULL, NULL, NULL, NULL, 0, NULL);
159
278
  if (rv != OCI_SUCCESS) {
160
- oci8_raise_init_error();
279
+ if (envhp != NULL) {
280
+ oci8_env_free_and_raise(envhp, rv);
281
+ } else {
282
+ oci8_raise_init_error();
283
+ }
161
284
  }
162
285
  rv = OCIHandleAlloc(envhp, (dvoid *)&errhp, OCI_HTYPE_ERROR, 0, NULL);
163
286
  if (rv != OCI_SUCCESS)
@@ -338,6 +461,7 @@ sword oci8_call_without_gvl(oci8_svcctx_t *svcctx, void *(*func)(void *), void *
338
461
  parg.func = func;
339
462
  parg.data = data;
340
463
  rv = (sword)rb_protect(protected_call, (VALUE)&parg, &state);
464
+ RB_OBJ_WRITE(svcctx->base.self, &svcctx->executing_thread, Qnil);
341
465
  if (state) {
342
466
  rb_jump_tag(state);
343
467
  }
@@ -358,8 +482,8 @@ typedef struct {
358
482
  OCIStmt *stmtp;
359
483
  } cb_arg_t;
360
484
 
361
- static VALUE exec_sql(cb_arg_t *arg);
362
- static VALUE ensure_func(cb_arg_t *arg);
485
+ static VALUE exec_sql(VALUE varg);
486
+ static VALUE ensure_func(VALUE varg);
363
487
 
364
488
  /*
365
489
  * utility function to execute a single SQL statement
@@ -380,17 +504,14 @@ sword oci8_exec_sql(oci8_svcctx_t *svcctx, const char *sql_text, ub4 num_define_
380
504
  return (sword)rb_ensure(exec_sql, (VALUE)&arg, ensure_func, (VALUE)&arg);
381
505
  }
382
506
 
383
- static VALUE exec_sql(cb_arg_t *arg)
507
+ static VALUE exec_sql(VALUE varg)
384
508
  {
509
+ cb_arg_t *arg = (cb_arg_t *)varg;
385
510
  ub4 pos;
386
511
  sword rv;
387
512
 
388
- rv = OCIHandleAlloc(oci8_envhp, (dvoid*)&arg->stmtp, OCI_HTYPE_STMT, 0, NULL);
389
- if (rv != OCI_SUCCESS) {
390
- oci8_env_raise(oci8_envhp, rv);
391
- }
392
513
  chker2(OCIStmtPrepare2(arg->svcctx->base.hp.svc, &arg->stmtp, oci8_errhp,
393
- (text*)arg->sql_text, strlen(arg->sql_text), NULL, 0,
514
+ (text*)arg->sql_text, (ub4)strlen(arg->sql_text), NULL, 0,
394
515
  OCI_NTV_SYNTAX, OCI_DEFAULT),
395
516
  &arg->svcctx->base);
396
517
  for (pos = 0; pos < arg->num_define_vars; pos++) {
@@ -427,8 +548,9 @@ static VALUE exec_sql(cb_arg_t *arg)
427
548
  return (VALUE)rv;
428
549
  }
429
550
 
430
- static VALUE ensure_func(cb_arg_t *arg)
551
+ static VALUE ensure_func(VALUE varg)
431
552
  {
553
+ cb_arg_t *arg = (cb_arg_t *)varg;
432
554
  if (arg->stmtp != NULL) {
433
555
  OCIStmtRelease(arg->stmtp, oci8_errhp, NULL, 0, OCI_DEFAULT);
434
556
  }
@@ -439,6 +561,24 @@ static VALUE ensure_func(cb_arg_t *arg)
439
561
 
440
562
  #ifndef _WIN32
441
563
  #include <dlfcn.h>
564
+ static void *load_file(const char *filename, int flags, VALUE errors)
565
+ {
566
+ void *handle = dlopen(filename, flags);
567
+
568
+ if (handle == NULL) {
569
+ char *err = dlerror();
570
+ VALUE msg;
571
+
572
+ if (strstr(err, filename) == NULL) {
573
+ msg = rb_sprintf("%s: %s", filename, err);
574
+ msg = rb_enc_associate_index(msg, rb_locale_encindex());
575
+ } else {
576
+ msg = rb_locale_str_new_cstr(err);
577
+ }
578
+ rb_ary_push(errors, msg);
579
+ }
580
+ return handle;
581
+ }
442
582
  #endif
443
583
 
444
584
  void *oci8_find_symbol(const char *symbol_name)
@@ -481,58 +621,50 @@ void *oci8_find_symbol(const char *symbol_name)
481
621
  "libclntsh.sl.12.1",
482
622
  "libclntsh.sl.11.1",
483
623
  "libclntsh.sl.10.1",
484
- "libclntsh.sl.9.0",
485
- "libclntsh.sl.8.0",
486
624
  #elif defined(__APPLE__)
487
625
  /* Mac OS X */
626
+ "libclntsh.dylib",
488
627
  "libclntsh.dylib.12.1",
489
628
  "libclntsh.dylib.11.1",
490
629
  "libclntsh.dylib.10.1",
491
630
  #else
492
631
  /* Linux, Solaris and HP-UX(IA64) */
632
+ "libclntsh.so",
493
633
  "libclntsh.so.12.1",
494
634
  "libclntsh.so.11.1",
495
635
  "libclntsh.so.10.1",
496
- "libclntsh.so.9.0",
497
- "libclntsh.so.8.0",
498
636
  #endif
499
637
  };
500
638
  #define NUM_SONAMES (sizeof(sonames)/sizeof(sonames[0]))
639
+ #if defined(_AIX) /* AIX */
640
+ #define BASE_SONAME "libclntsh.a(shr.o)"
641
+ #elif defined(__hppa) /* HP-UX(PA-RISC) */
642
+ #define BASE_SONAME "libclntsh.sl"
643
+ #elif !defined(__CYGWIN__) && !defined(__APPLE__)
644
+ #define BASE_SONAME "libclntsh.so"
645
+ #endif
501
646
  size_t idx;
502
- volatile VALUE err = rb_ary_new();
647
+ VALUE err = rb_ary_new();
503
648
 
504
649
  #ifdef _AIX
505
650
  #define DLOPEN_FLAG (RTLD_LAZY|RTLD_GLOBAL|RTLD_MEMBER)
506
651
  #else
507
652
  #define DLOPEN_FLAG (RTLD_LAZY|RTLD_GLOBAL)
508
653
  #endif
509
- for (idx = 0; idx < NUM_SONAMES; idx++) {
510
- handle = dlopen(sonames[idx], DLOPEN_FLAG);
511
- if (handle != NULL) {
512
- break;
513
- }
514
- rb_ary_push(err, rb_locale_str_new_cstr(dlerror()));
654
+ #ifdef BASE_SONAME
655
+ char *oracle_home = getenv("ORACLE_HOME");
656
+
657
+ if (oracle_home != NULL) {
658
+ VALUE fname = rb_str_buf_cat2(rb_str_buf_new_cstr(oracle_home), "/lib/" BASE_SONAME);
659
+ handle = load_file(StringValueCStr(fname), DLOPEN_FLAG, err);
660
+ RB_GC_GUARD(fname);
661
+ }
662
+ #endif
663
+ for (idx = 0; handle == NULL && idx < NUM_SONAMES; idx++) {
664
+ handle = load_file(sonames[idx], DLOPEN_FLAG, err);
515
665
  }
516
666
  if (handle == NULL) {
517
- VALUE msg;
518
- const VALUE *arr = RARRAY_CONST_PTR(err);
519
-
520
- msg = rb_str_buf_new(NUM_SONAMES * 50);
521
- for (idx = 0; idx < NUM_SONAMES; idx++) {
522
- const char *errmsg = RSTRING_PTR(arr[idx]);
523
- if (idx != 0) {
524
- rb_str_buf_cat2(msg, " ");
525
- }
526
- if (strstr(errmsg, sonames[idx]) == NULL) {
527
- /* prepend "soname: " if soname is not found in
528
- * the error message.
529
- */
530
- rb_str_buf_cat2(msg, sonames[idx]);
531
- rb_str_buf_cat2(msg, ": ");
532
- }
533
- rb_str_buf_append(msg, arr[idx]);
534
- rb_str_buf_cat2(msg, ";");
535
- }
667
+ VALUE msg = rb_ary_join(err, rb_usascii_str_new_cstr("; "));
536
668
  rb_exc_raise(rb_exc_new3(rb_eLoadError, msg));
537
669
  }
538
670
  }
data/ext/oci8/ocihandle.c CHANGED
@@ -217,7 +217,7 @@ static VALUE attr_get_common(int argc, VALUE *argv, VALUE self, enum datatype da
217
217
  }
218
218
  return rb_external_str_new_with_enc(v.charptr, size, oci8_encoding);
219
219
  case DATATYPE_BINARY:
220
- return rb_tainted_str_new(v.charptr, size);
220
+ return rb_str_new(v.charptr, size);
221
221
  case DATATYPE_INTEGER:
222
222
  if (size > sizeof(onum.OCINumberPart) - 1) {
223
223
  rb_raise(rb_eRuntimeError, "Too long size %u", size);
@@ -245,9 +245,9 @@ static VALUE attr_get_common(int argc, VALUE *argv, VALUE self, enum datatype da
245
245
  *
246
246
  * Gets the value of an attribute as `ub1' datatype.
247
247
  *
248
- * @param [Fixnum] attr_type
248
+ * @param [Integer] attr_type
249
249
  * @param [Boolean] strict If false, "ORA-24328: illegal attribute value" is ignored.
250
- * @return [Fixnum]
250
+ * @return [Integer]
251
251
  *
252
252
  * @since 2.0.4
253
253
  * @private
@@ -262,9 +262,9 @@ static VALUE attr_get_ub1(int argc, VALUE *argv, VALUE self)
262
262
  *
263
263
  * Gets the value of an attribute as `ub2' datatype.
264
264
  *
265
- * @param [Fixnum] attr_type
265
+ * @param [Integer] attr_type
266
266
  * @param [Boolean] strict If false, "ORA-24328: illegal attribute value" is ignored.
267
- * @return [Fixnum]
267
+ * @return [Integer]
268
268
  *
269
269
  * @since 2.0.4
270
270
  * @private
@@ -279,7 +279,7 @@ static VALUE attr_get_ub2(int argc, VALUE *argv, VALUE self)
279
279
  *
280
280
  * Gets the value of an attribute as `ub4' datatype.
281
281
  *
282
- * @param [Fixnum] attr_type
282
+ * @param [Integer] attr_type
283
283
  * @param [Boolean] strict If false, "ORA-24328: illegal attribute value" is ignored.
284
284
  * @return [Integer]
285
285
  *
@@ -296,7 +296,7 @@ static VALUE attr_get_ub4(int argc, VALUE *argv, VALUE self)
296
296
  *
297
297
  * Gets the value of an attribute as `ub8' datatype.
298
298
  *
299
- * @param [Fixnum] attr_type
299
+ * @param [Integer] attr_type
300
300
  * @param [Boolean] strict If false, "ORA-24328: illegal attribute value" is ignored.
301
301
  * @return [Integer]
302
302
  *
@@ -313,9 +313,9 @@ static VALUE attr_get_ub8(int argc, VALUE *argv, VALUE self)
313
313
  *
314
314
  * Gets the value of an attribute as `sb1' datatype.
315
315
  *
316
- * @param [Fixnum] attr_type
316
+ * @param [Integer] attr_type
317
317
  * @param [Boolean] strict If false, "ORA-24328: illegal attribute value" is ignored.
318
- * @return [Fixnum]
318
+ * @return [Integer]
319
319
  *
320
320
  * @since 2.0.4
321
321
  * @private
@@ -330,9 +330,9 @@ static VALUE attr_get_sb1(int argc, VALUE *argv, VALUE self)
330
330
  *
331
331
  * Gets the value of an attribute as `sb2' datatype.
332
332
  *
333
- * @param [Fixnum] attr_type
333
+ * @param [Integer] attr_type
334
334
  * @param [Boolean] strict If false, "ORA-24328: illegal attribute value" is ignored.
335
- * @return [Fixnum]
335
+ * @return [Integer]
336
336
  *
337
337
  * @since 2.0.4
338
338
  * @private
@@ -347,7 +347,7 @@ static VALUE attr_get_sb2(int argc, VALUE *argv, VALUE self)
347
347
  *
348
348
  * Gets the value of an attribute as `sb4' datatype.
349
349
  *
350
- * @param [Fixnum] attr_type
350
+ * @param [Integer] attr_type
351
351
  * @param [Boolean] strict If false, "ORA-24328: illegal attribute value" is ignored.
352
352
  * @return [Integer]
353
353
  *
@@ -364,7 +364,7 @@ static VALUE attr_get_sb4(int argc, VALUE *argv, VALUE self)
364
364
  *
365
365
  * Gets the value of an attribute as `sb8' datatype.
366
366
  *
367
- * @param [Fixnum] attr_type
367
+ * @param [Integer] attr_type
368
368
  * @param [Boolean] strict If false, "ORA-24328: illegal attribute value" is ignored.
369
369
  * @return [Integer]
370
370
  *
@@ -381,7 +381,7 @@ static VALUE attr_get_sb8(int argc, VALUE *argv, VALUE self)
381
381
  *
382
382
  * Gets the value of an attribute as `boolean' datatype.
383
383
  *
384
- * @param [Fixnum] attr_type
384
+ * @param [Integer] attr_type
385
385
  * @param [Boolean] strict If false, "ORA-24328: illegal attribute value" is ignored.
386
386
  * @return [true of false]
387
387
  *
@@ -403,7 +403,7 @@ static VALUE attr_get_boolean(int argc, VALUE *argv, VALUE self)
403
403
  * @note If the specified attr_type's datatype is not a
404
404
  * pointer type, it causes a segmentation fault.
405
405
  *
406
- * @param [Fixnum] attr_type
406
+ * @param [Integer] attr_type
407
407
  * @param [Boolean] strict If false, "ORA-24328: illegal attribute value" is ignored.
408
408
  * @return [String]
409
409
  *
@@ -424,7 +424,7 @@ static VALUE attr_get_string(int argc, VALUE *argv, VALUE self)
424
424
  * @note If the specified attr_type's datatype is not a
425
425
  * pointer type, it causes a segmentation fault.
426
426
  *
427
- * @param [Fixnum] attr_type
427
+ * @param [Integer] attr_type
428
428
  * @param [Boolean] strict If false, "ORA-24328: illegal attribute value" is ignored.
429
429
  * @return [String]
430
430
  *
@@ -445,9 +445,9 @@ static VALUE attr_get_binary(int argc, VALUE *argv, VALUE self)
445
445
  * @note If the specified attr_type's datatype is not a
446
446
  * pointer type, it causes a segmentation fault.
447
447
  *
448
- * @param [Fixnum] attr_type
448
+ * @param [Integer] attr_type
449
449
  * @param [Boolean] strict If false, "ORA-24328: illegal attribute value" is ignored.
450
- * @return [Fixnum]
450
+ * @return [Integer]
451
451
  *
452
452
  * @since 2.0.4
453
453
  * @private
@@ -466,7 +466,7 @@ static VALUE attr_get_integer(int argc, VALUE *argv, VALUE self)
466
466
  * @note If the specified attr_type's datatype is not a
467
467
  * pointer type, it causes a segmentation fault.
468
468
  *
469
- * @param [Fixnum] attr_type
469
+ * @param [Integer] attr_type
470
470
  * @param [Boolean] strict If false, "ORA-24328: illegal attribute value" is ignored.
471
471
  * @return [OraDate]
472
472
  *
@@ -486,8 +486,8 @@ static VALUE attr_get_oradate(int argc, VALUE *argv, VALUE self)
486
486
  * @note If the specified attr_type's datatype is a
487
487
  * pointer type, it causes a segmentation fault.
488
488
  *
489
- * @param [Fixnum] attr_type
490
- * @param [Fixnum] attr_value
489
+ * @param [Integer] attr_type
490
+ * @param [Integer] attr_value
491
491
  * @return [self]
492
492
  *
493
493
  * @since 2.0.4
@@ -514,8 +514,8 @@ static VALUE attr_set_ub1(VALUE self, VALUE attr_type, VALUE val)
514
514
  * @note If the specified attr_type's datatype is a
515
515
  * pointer type, it causes a segmentation fault.
516
516
  *
517
- * @param [Fixnum] attr_type
518
- * @param [Fixnum] attr_value
517
+ * @param [Integer] attr_type
518
+ * @param [Integer] attr_value
519
519
  * @return [self]
520
520
  *
521
521
  * @since 2.0.4
@@ -542,7 +542,7 @@ static VALUE attr_set_ub2(VALUE self, VALUE attr_type, VALUE val)
542
542
  * @note If the specified attr_type's datatype is a
543
543
  * pointer type, it causes a segmentation fault.
544
544
  *
545
- * @param [Fixnum] attr_type
545
+ * @param [Integer] attr_type
546
546
  * @param [Integer] attr_value
547
547
  * @return [self]
548
548
  *
@@ -570,7 +570,7 @@ static VALUE attr_set_ub4(VALUE self, VALUE attr_type, VALUE val)
570
570
  * @note If the specified attr_type's datatype is a
571
571
  * pointer type, it causes a segmentation fault.
572
572
  *
573
- * @param [Fixnum] attr_type
573
+ * @param [Integer] attr_type
574
574
  * @param [Integer] attr_value
575
575
  * @return [self]
576
576
  *
@@ -598,8 +598,8 @@ static VALUE attr_set_ub8(VALUE self, VALUE attr_type, VALUE val)
598
598
  * @note If the specified attr_type's datatype is a
599
599
  * pointer type, it causes a segmentation fault.
600
600
  *
601
- * @param [Fixnum] attr_type
602
- * @param [Fixnum] attr_value
601
+ * @param [Integer] attr_type
602
+ * @param [Integer] attr_value
603
603
  * @return [self]
604
604
  *
605
605
  * @since 2.0.4
@@ -626,8 +626,8 @@ static VALUE attr_set_sb1(VALUE self, VALUE attr_type, VALUE val)
626
626
  * @note If the specified attr_type's datatype is a
627
627
  * pointer type, it causes a segmentation fault.
628
628
  *
629
- * @param [Fixnum] attr_type
630
- * @param [Fixnum] attr_value
629
+ * @param [Integer] attr_type
630
+ * @param [Integer] attr_value
631
631
  * @return [self]
632
632
  *
633
633
  * @since 2.0.4
@@ -654,7 +654,7 @@ static VALUE attr_set_sb2(VALUE self, VALUE attr_type, VALUE val)
654
654
  * @note If the specified attr_type's datatype is a
655
655
  * pointer type, it causes a segmentation fault.
656
656
  *
657
- * @param [Fixnum] attr_type
657
+ * @param [Integer] attr_type
658
658
  * @param [Integer] attr_value
659
659
  * @return [self]
660
660
  *
@@ -682,7 +682,7 @@ static VALUE attr_set_sb4(VALUE self, VALUE attr_type, VALUE val)
682
682
  * @note If the specified attr_type's datatype is a
683
683
  * pointer type, it causes a segmentation fault.
684
684
  *
685
- * @param [Fixnum] attr_type
685
+ * @param [Integer] attr_type
686
686
  * @param [Integer] attr_value
687
687
  * @return [self]
688
688
  *
@@ -710,7 +710,7 @@ static VALUE attr_set_sb8(VALUE self, VALUE attr_type, VALUE val)
710
710
  * @note If the specified attr_type's datatype is a
711
711
  * pointer type, it causes a segmentation fault.
712
712
  *
713
- * @param [Fixnum] attr_type
713
+ * @param [Integer] attr_type
714
714
  * @param [true or false] attr_value
715
715
  * @return [self]
716
716
  *
@@ -737,7 +737,7 @@ static VALUE attr_set_boolean(VALUE self, VALUE attr_type, VALUE val)
737
737
  * +attr_value+ is converted to {OCI8.encoding} before it is set
738
738
  * when the ruby version is 1.9.
739
739
  *
740
- * @param [Fixnum] attr_type
740
+ * @param [Integer] attr_type
741
741
  * @param [String] attr_value
742
742
  * @return [self]
743
743
  *
@@ -752,7 +752,7 @@ static VALUE attr_set_string(VALUE self, VALUE attr_type, VALUE val)
752
752
  Check_Type(attr_type, T_FIXNUM);
753
753
  OCI8SafeStringValue(val);
754
754
  /* set attribute */
755
- chker2(OCIAttrSet(base->hp.ptr, base->type, RSTRING_PTR(val), RSTRING_LEN(val), FIX2INT(attr_type), oci8_errhp), base);
755
+ chker2(OCIAttrSet(base->hp.ptr, base->type, RSTRING_PTR(val), RSTRING_LENINT(val), FIX2INT(attr_type), oci8_errhp), base);
756
756
  return self;
757
757
  }
758
758
 
@@ -761,7 +761,7 @@ static VALUE attr_set_string(VALUE self, VALUE attr_type, VALUE val)
761
761
  *
762
762
  * Sets the value of an attribute as `ub1 *' datatype.
763
763
  *
764
- * @param [Fixnum] attr_type
764
+ * @param [Integer] attr_type
765
765
  * @param [String] attr_value
766
766
  * @return [self]
767
767
  *
@@ -776,7 +776,7 @@ static VALUE attr_set_binary(VALUE self, VALUE attr_type, VALUE val)
776
776
  Check_Type(attr_type, T_FIXNUM);
777
777
  SafeStringValue(val);
778
778
  /* set attribute */
779
- chker2(OCIAttrSet(base->hp.ptr, base->type, RSTRING_PTR(val), RSTRING_LEN(val), FIX2INT(attr_type), oci8_errhp), base);
779
+ chker2(OCIAttrSet(base->hp.ptr, base->type, RSTRING_PTR(val), RSTRING_LENINT(val), FIX2INT(attr_type), oci8_errhp), base);
780
780
  return self;
781
781
  }
782
782
 
@@ -787,7 +787,7 @@ static VALUE attr_set_binary(VALUE self, VALUE attr_type, VALUE val)
787
787
  * +number+ is converted to internal Oracle NUMBER format before
788
788
  * it is set.
789
789
  *
790
- * @param [Fixnum] attr_type
790
+ * @param [Integer] attr_type
791
791
  * @param [Numeric] number
792
792
  * @return [self]
793
793
  *