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/ocinumber.c CHANGED
@@ -23,10 +23,8 @@ static ID id_finite_p;
23
23
  static ID id_split;
24
24
  static ID id_numerator;
25
25
  static ID id_denominator;
26
- static ID id_Rational;
27
26
  static ID id_BigDecimal;
28
27
 
29
- static VALUE cRational;
30
28
  static VALUE cBigDecimal;
31
29
 
32
30
  static VALUE cOCINumber;
@@ -51,19 +49,6 @@ static int rboci8_type(VALUE obj)
51
49
  VALUE klass;
52
50
 
53
51
  switch (type) {
54
- case T_OBJECT:
55
- klass = CLASS_OF(obj);
56
- if (cRational != 0) {
57
- if (klass == cRational) {
58
- return T_RATIONAL;
59
- }
60
- } else {
61
- if (strcmp(rb_class2name(klass), "Rational") == 0) {
62
- cRational = rb_const_get(rb_cObject, id_Rational);
63
- return T_RATIONAL;
64
- }
65
- }
66
- break;
67
52
  case T_DATA:
68
53
  klass = CLASS_OF(obj);
69
54
  if (klass == cOCINumber) {
@@ -169,7 +154,7 @@ static void set_oci_number_from_str(OCINumber *result, VALUE str, VALUE fmt, VAL
169
154
  StringValue(str);
170
155
  /* set from string. */
171
156
  if (NIL_P(fmt)) {
172
- int rv = oranumber_from_str(result, RSTRING_PTR(str), RSTRING_LEN(str));
157
+ int rv = oranumber_from_str(result, RSTRING_PTR(str), RSTRING_LENINT(str));
173
158
  if (rv == ORANUMBER_SUCCESS) {
174
159
  return; /* success */
175
160
  } else {
@@ -187,17 +172,17 @@ static void set_oci_number_from_str(OCINumber *result, VALUE str, VALUE fmt, VAL
187
172
  }
188
173
  StringValue(fmt);
189
174
  fmt_ptr = RSTRING_ORATEXT(fmt);
190
- fmt_len = RSTRING_LEN(fmt);
175
+ fmt_len = RSTRING_LENINT(fmt);
191
176
  if (NIL_P(nls_params)) {
192
177
  nls_params_ptr = NULL;
193
178
  nls_params_len = 0;
194
179
  } else {
195
180
  StringValue(nls_params);
196
181
  nls_params_ptr = RSTRING_ORATEXT(nls_params);
197
- nls_params_len = RSTRING_LEN(nls_params);
182
+ nls_params_len = RSTRING_LENINT(nls_params);
198
183
  }
199
184
  chkerr(OCINumberFromText(errhp,
200
- RSTRING_ORATEXT(str), RSTRING_LEN(str),
185
+ RSTRING_ORATEXT(str), RSTRING_LENINT(str),
201
186
  fmt_ptr, fmt_len, nls_params_ptr, nls_params_len,
202
187
  result));
203
188
  }
@@ -231,6 +216,8 @@ static int set_oci_number_from_num(OCINumber *result, VALUE num, int force, OCIE
231
216
  num = rb_big2str(num, 10);
232
217
  set_oci_number_from_str(result, num, Qnil, Qnil, errhp);
233
218
  return 1;
219
+ default:
220
+ break;
234
221
  }
235
222
  if (RTEST(rb_obj_is_instance_of(num, cOCINumber))) {
236
223
  /* OCI::Number */
@@ -262,7 +249,7 @@ static int set_oci_number_from_num(OCINumber *result, VALUE num, int force, OCIE
262
249
  if (TYPE(ary[1]) != T_STRING) {
263
250
  goto is_not_big_decimal;
264
251
  }
265
- digits_len = RSTRING_LEN(ary[1]);
252
+ digits_len = RSTRING_LENINT(ary[1]);
266
253
  set_oci_number_from_str(&digits, ary[1], Qnil, Qnil, errhp);
267
254
  /* check base */
268
255
  if (TYPE(ary[2]) != T_FIXNUM || FIX2LONG(ary[2]) != 10) {
@@ -378,7 +365,7 @@ OCINumber *oci8_dbl_to_onum(OCINumber *result, double dbl, OCIError *errhp)
378
365
  sword rv;
379
366
 
380
367
  str = rb_obj_as_string(rb_float_new(dbl));
381
- rv = oranumber_from_str(result, RSTRING_PTR(str), RSTRING_LEN(str));
368
+ rv = oranumber_from_str(result, RSTRING_PTR(str), RSTRING_LENINT(str));
382
369
  if (rv != 0) {
383
370
  oci8_raise_by_msgno(rv, NULL);
384
371
  }
@@ -1322,14 +1309,14 @@ static VALUE onum_to_char(int argc, VALUE *argv, VALUE self)
1322
1309
  }
1323
1310
  StringValue(fmt);
1324
1311
  fmt_ptr = RSTRING_ORATEXT(fmt);
1325
- fmt_len = RSTRING_LEN(fmt);
1312
+ fmt_len = RSTRING_LENINT(fmt);
1326
1313
  if (NIL_P(nls_params)) {
1327
1314
  nls_params_ptr = NULL;
1328
1315
  nls_params_len = 0;
1329
1316
  } else {
1330
1317
  StringValue(nls_params);
1331
1318
  nls_params_ptr = RSTRING_ORATEXT(nls_params);
1332
- nls_params_len = RSTRING_LEN(nls_params);
1319
+ nls_params_len = RSTRING_LENINT(nls_params);
1333
1320
  }
1334
1321
  rv = OCINumberToText(errhp, _NUMBER(self),
1335
1322
  fmt_ptr, fmt_len, nls_params_ptr, nls_params_len,
@@ -1444,29 +1431,29 @@ static VALUE onum_to_d_real(OCINumber *num, OCIError *errhp)
1444
1431
  {
1445
1432
  char buf[64];
1446
1433
  ub4 buf_size = sizeof(buf);
1447
- const char *fmt = "FM9.99999999999999999999999999999999999999EEEE";
1434
+ const char *fmt = "FM9.09999999999999999999999999999999999999EEEE";
1448
1435
 
1449
1436
  if (!cBigDecimal) {
1450
1437
  rb_require("bigdecimal");
1451
1438
  cBigDecimal = rb_const_get(rb_cObject, id_BigDecimal);
1452
1439
  }
1453
- chkerr(OCINumberToText(errhp, num, (const oratext *)fmt, strlen(fmt),
1440
+ chkerr(OCINumberToText(errhp, num, (const oratext *)fmt, (ub4)strlen(fmt),
1454
1441
  NULL, 0, &buf_size, TO_ORATEXT(buf)));
1455
1442
  return rb_funcall(rb_cObject, id_BigDecimal, 1, rb_usascii_str_new(buf, buf_size));
1456
1443
  }
1457
1444
 
1458
1445
  /*
1459
- * @overload has_decimal_part?
1446
+ * @overload has_fractional_part?
1460
1447
  *
1461
- * Returns <code>true</code> if <i>self</i> has a decimal part.
1448
+ * Returns <code>true</code> if <i>self</i> has a fractional part.
1462
1449
  *
1463
1450
  * @example
1464
- * OraNumber(10).has_decimal_part? # => false
1465
- * OraNumber(10.1).has_decimal_part? # => true
1451
+ * OraNumber(10).has_fractional_part? # => false
1452
+ * OraNumber(10.1).has_fractional_part? # => true
1466
1453
  *
1467
- * @since 2.0.5
1454
+ * @since 2.2.5
1468
1455
  */
1469
- static VALUE onum_has_decimal_part_p(VALUE self)
1456
+ static VALUE onum_has_fractional_part_p(VALUE self)
1470
1457
  {
1471
1458
  OCIError *errhp = oci8_errhp;
1472
1459
  boolean result;
@@ -1805,10 +1792,10 @@ Init_oci_number(VALUE cOCI8, OCIError *errhp)
1805
1792
  id_split = rb_intern("split");
1806
1793
  id_numerator = rb_intern("numerator");
1807
1794
  id_denominator = rb_intern("denominator");
1808
- id_Rational = rb_intern("Rational");
1809
1795
  id_BigDecimal = rb_intern("BigDecimal");
1810
1796
 
1811
1797
  cOCINumber = rb_define_class("OraNumber", rb_cNumeric);
1798
+ rb_define_alloc_func(cOCINumber, onum_s_alloc);
1812
1799
  mMath = rb_define_module_under(cOCI8, "Math");
1813
1800
 
1814
1801
  /* constants for internal use. */
@@ -1858,8 +1845,6 @@ Init_oci_number(VALUE cOCI8, OCIError *errhp)
1858
1845
  rb_define_module_function(mMath, "log10", omath_log10, 1);
1859
1846
  rb_define_module_function(mMath, "sqrt", omath_sqrt, 1);
1860
1847
 
1861
- rb_define_alloc_func(cOCINumber, onum_s_alloc);
1862
-
1863
1848
  /* methods of OCI::Number */
1864
1849
  rb_define_global_function("OraNumber", onum_f_new, -1);
1865
1850
  rb_define_method(cOCINumber, "initialize", onum_initialize, -1);
@@ -1889,7 +1874,7 @@ Init_oci_number(VALUE cOCI8, OCIError *errhp)
1889
1874
  rb_define_method(cOCINumber, "to_f", onum_to_f, 0);
1890
1875
  rb_define_method(cOCINumber, "to_r", onum_to_r, 0);
1891
1876
  rb_define_method(cOCINumber, "to_d", onum_to_d, 0);
1892
- rb_define_method(cOCINumber, "has_decimal_part?", onum_has_decimal_part_p, 0);
1877
+ rb_define_method(cOCINumber, "has_fractional_part?", onum_has_fractional_part_p, 0);
1893
1878
  rb_define_method(cOCINumber, "to_onum", onum_to_onum, 0);
1894
1879
 
1895
1880
  rb_define_method(cOCINumber, "zero?", onum_zero_p, 0);
@@ -1918,6 +1903,10 @@ Init_oci_number(VALUE cOCI8, OCIError *errhp)
1918
1903
  dummy2 = rb_define_class_under(mOCI8BindType, "Integer", cOCI8BindTypeBase);
1919
1904
  dummy3 = rb_define_class_under(mOCI8BindType, "Float", cOCI8BindTypeBase);
1920
1905
  #endif
1906
+
1907
+ /* The following method definition is for backward-compatibility.
1908
+ I misunderstood the name of numbers after a decimal point. */
1909
+ rb_define_method_nodoc(cOCINumber, "has_decimal_part?", onum_has_fractional_part_p, 0);
1921
1910
  }
1922
1911
 
1923
1912
  /*