ruby-oci8 2.1.0 → 2.1.1

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/ext/oci8/ocinumber.c CHANGED
@@ -2,7 +2,7 @@
2
2
  /*
3
3
  * ocinumber.c
4
4
  *
5
- * Copyright (C) 2005-2011 KUBO Takehiro <kubo@jiubao.org>
5
+ * Copyright (C) 2005-2012 KUBO Takehiro <kubo@jiubao.org>
6
6
  *
7
7
  */
8
8
  #include "oci8.h"
@@ -112,7 +112,9 @@ static VALUE onum_s_alloc(VALUE klass)
112
112
  return obj;
113
113
  }
114
114
 
115
- /* construct an ruby object(OCI::Number) from C structure (OCINumber). */
115
+ /*
116
+ * OCINumber (C datatype) -> OraNumber (ruby object)
117
+ */
116
118
  VALUE oci8_make_ocinumber(OCINumber *s, OCIError *errhp)
117
119
  {
118
120
  VALUE obj;
@@ -123,6 +125,9 @@ VALUE oci8_make_ocinumber(OCINumber *s, OCIError *errhp)
123
125
  return obj;
124
126
  }
125
127
 
128
+ /*
129
+ * OCINumber (C datatype) -> Integer (ruby object)
130
+ */
126
131
  VALUE oci8_make_integer(OCINumber *s, OCIError *errhp)
127
132
  {
128
133
  signed long sl;
@@ -141,12 +146,17 @@ VALUE oci8_make_integer(OCINumber *s, OCIError *errhp)
141
146
  rb_raise(eOCIException, "Invalid internal number format: %s", buf);
142
147
  }
143
148
 
149
+ /*
150
+ * OCINumber (C datatype) -> Float (ruby object)
151
+ */
144
152
  VALUE oci8_make_float(OCINumber *s, OCIError *errhp)
145
153
  {
146
154
  return rb_float_new(oci8_onum_to_dbl(s, errhp));
147
155
  }
148
156
 
149
- /* fill C structure (OCINumber) from a string. */
157
+ /*
158
+ * String (ruby object) -> OCINumber (C datatype)
159
+ */
150
160
  static void set_oci_number_from_str(OCINumber *result, VALUE str, VALUE fmt, VALUE nls_params, OCIError *errhp)
151
161
  {
152
162
  oratext *fmt_ptr;
@@ -190,8 +200,11 @@ static void set_oci_number_from_str(OCINumber *result, VALUE str, VALUE fmt, VAL
190
200
  result));
191
201
  }
192
202
 
193
- /* fill C structure (OCINumber) from a numeric object. */
194
- /* 1 - success, 0 - error */
203
+ /*
204
+ * Numeric (ruby object) -> OCINumber (C datatype)
205
+ *
206
+ * @return 1 on success. Otherwise, 0.
207
+ */
195
208
  static int set_oci_number_from_num(OCINumber *result, VALUE num, int force, OCIError *errhp)
196
209
  {
197
210
  signed long sl;
@@ -287,6 +300,9 @@ is_not_big_decimal:
287
300
  return 0;
288
301
  }
289
302
 
303
+ /*
304
+ * Numeric (ruby object) -> OCINumber (C datatype)
305
+ */
290
306
  OCINumber *oci8_set_ocinumber(OCINumber *result, VALUE self, OCIError *errhp)
291
307
  {
292
308
  set_oci_number_from_num(result, self, 1, errhp);
@@ -294,6 +310,9 @@ OCINumber *oci8_set_ocinumber(OCINumber *result, VALUE self, OCIError *errhp)
294
310
  }
295
311
  #define TO_OCINUM oci8_set_ocinumber
296
312
 
313
+ /*
314
+ * Numeric (ruby object) -> OCINumber (C datatype) as an integer
315
+ */
297
316
  OCINumber *oci8_set_integer(OCINumber *result, VALUE self, OCIError *errhp)
298
317
  {
299
318
  OCINumber work;
@@ -303,6 +322,9 @@ OCINumber *oci8_set_integer(OCINumber *result, VALUE self, OCIError *errhp)
303
322
  return result;
304
323
  }
305
324
 
325
+ /*
326
+ * OCINumber (C datatype) -> double (C datatype)
327
+ */
306
328
  double oci8_onum_to_dbl(OCINumber *s, OCIError *errhp)
307
329
  {
308
330
  if (oci8_float_conversion_type_is_ruby) {
@@ -330,14 +352,15 @@ double oci8_onum_to_dbl(OCINumber *s, OCIError *errhp)
330
352
  }
331
353
  }
332
354
 
355
+ /*
356
+ * double (C datatype) -> OCINumber (C datatype)
357
+ */
333
358
  OCINumber *oci8_dbl_to_onum(OCINumber *result, double dbl, OCIError *errhp)
334
359
  {
335
- switch (fpclassify(dbl)) {
336
- case FP_NAN:
360
+ if (isnan(dbl)) {
337
361
  rb_raise(rb_eFloatDomainError, "NaN");
338
362
  /* never reach here */
339
- break;
340
- case FP_INFINITE:
363
+ } else if (isinf(dbl)) {
341
364
  if (dbl > 0.0) {
342
365
  oranumber_from_str(result, "~", 1);
343
366
  } else {
@@ -361,12 +384,25 @@ OCINumber *oci8_dbl_to_onum(OCINumber *result, double dbl, OCIError *errhp)
361
384
  return result;
362
385
  }
363
386
 
387
+ /*
388
+ * Document-module: OCI8::Math
389
+ *
390
+ * The <code>OCI8::Math</code> module contains module functions for basic
391
+ * trigonometric and transcendental functions. Their accuracy is
392
+ * same with {OraNumber}.
393
+ */
394
+
364
395
  /*
365
396
  * call-seq:
366
- * OCI8::Math.atan2(y, x) -> oranumber
397
+ * atan2(y, x)
367
398
  *
368
- * Computes the arc tangent given <i>y</i> and <i>x</i>. Returns
369
- * -PI..PI.
399
+ * Computes the principal value of the arc tangent of <i>y/x</i>,
400
+ * using the signs of both arguments to determine the quadrant of the
401
+ * return value.
402
+ *
403
+ * @param [Numeric] y
404
+ * @param [Numeric] x
405
+ * @return [OraNumber] Computed value in the range [-{PI}, {PI}]
370
406
  */
371
407
  static VALUE omath_atan2(VALUE self, VALUE Ycoordinate, VALUE Xcoordinate)
372
408
  {
@@ -399,10 +435,12 @@ static VALUE omath_atan2(VALUE self, VALUE Ycoordinate, VALUE Xcoordinate)
399
435
 
400
436
  /*
401
437
  * call-seq:
402
- * OCI8::Math.cos(x) -> oranumber
438
+ * cos(x)
439
+ *
440
+ * Computes the cosine of <i>x</i>, measured in radians.
403
441
  *
404
- * Computes the cosine of <i>x</i> (expressed in radians). Returns
405
- * -1..1.
442
+ * @param [Numeric] x
443
+ * @return [OraNumber] Computed value in the range [-1, 1]
406
444
  */
407
445
  static VALUE omath_cos(VALUE obj, VALUE radian)
408
446
  {
@@ -416,10 +454,12 @@ static VALUE omath_cos(VALUE obj, VALUE radian)
416
454
 
417
455
  /*
418
456
  * call-seq:
419
- * OCI8::Math.sin(x) -> oranumber
457
+ * sin(x)
420
458
  *
421
- * Computes the sine of <i>x</i> (expressed in radians). Returns
422
- * -1..1.
459
+ * Computes the sine of <i>x</i>, measured in radians.
460
+ *
461
+ * @param [Numeric] x
462
+ * @return [OraNumber] Computed value in the range [-1, 1]
423
463
  */
424
464
  static VALUE omath_sin(VALUE obj, VALUE radian)
425
465
  {
@@ -433,9 +473,12 @@ static VALUE omath_sin(VALUE obj, VALUE radian)
433
473
 
434
474
  /*
435
475
  * call-seq:
436
- * OCI8::Math.tan(x) -> oranumber
476
+ * tan(x)
477
+ *
478
+ * Computes the tangent of <i>x</i>, measured in radians.
437
479
  *
438
- * Returns the tangent of <i>x</i> (expressed in radians).
480
+ * @param [Numeric] x
481
+ * @return [OraNumber]
439
482
  */
440
483
  static VALUE omath_tan(VALUE obj, VALUE radian)
441
484
  {
@@ -449,9 +492,12 @@ static VALUE omath_tan(VALUE obj, VALUE radian)
449
492
 
450
493
  /*
451
494
  * call-seq:
452
- * OCI8::Math.acos(x) -> oranumber
495
+ * acos(x)
453
496
  *
454
- * Computes the arc cosine of <i>x</i>. Returns 0..PI.
497
+ * Computes the principal value of the arc cosine of <i>x</i>.
498
+ *
499
+ * @param [Numeric] x
500
+ * @return [OraNumber] Computed value in the range [0, {PI}]
455
501
  */
456
502
  static VALUE omath_acos(VALUE obj, VALUE num)
457
503
  {
@@ -476,9 +522,12 @@ static VALUE omath_acos(VALUE obj, VALUE num)
476
522
 
477
523
  /*
478
524
  * call-seq:
479
- * OCI8::Math.asin(x) -> oranumber
525
+ * asin(x)
526
+ *
527
+ * Computes the principal value of the arc sine of <i>x</i>.
480
528
  *
481
- * Computes the arc sine of <i>x</i>. Returns 0..PI.
529
+ * @param [Numeric] x
530
+ * @return [OraNumber] Computed value in the range [-{PI}/2, {PI}]/2]
482
531
  */
483
532
  static VALUE omath_asin(VALUE obj, VALUE num)
484
533
  {
@@ -503,9 +552,12 @@ static VALUE omath_asin(VALUE obj, VALUE num)
503
552
 
504
553
  /*
505
554
  * call-seq:
506
- * OCI8::Math.atan(x) -> oranumber
555
+ * atan(x)
507
556
  *
508
- * Computes the arc tangent of <i>x</i>. Returns -{PI/2} .. {PI/2}.
557
+ * Computes the principal value of the arc tangent of their argument <i>x</i>.
558
+ *
559
+ * @param [Numeric] x
560
+ * @return [OraNumber] Computed value in the range [-{PI}/2, {PI}/2]
509
561
  */
510
562
  static VALUE omath_atan(VALUE obj, VALUE num)
511
563
  {
@@ -519,9 +571,12 @@ static VALUE omath_atan(VALUE obj, VALUE num)
519
571
 
520
572
  /*
521
573
  * call-seq:
522
- * OCI8::Math.cosh(x) -> oranumber
574
+ * cosh(x)
575
+ *
576
+ * Computes the hyperbolic cosine of <i>x</i>.
523
577
  *
524
- * Computes the hyperbolic cosine of <i>x</i> (expressed in radians).
578
+ * @param [Numeric] x
579
+ * @return [OraNumber]
525
580
  */
526
581
  static VALUE omath_cosh(VALUE obj, VALUE num)
527
582
  {
@@ -535,10 +590,12 @@ static VALUE omath_cosh(VALUE obj, VALUE num)
535
590
 
536
591
  /*
537
592
  * call-seq:
538
- * OCI8::Math.sinh(x) -> oranumber
593
+ * sinh(x)
539
594
  *
540
- * Computes the hyperbolic sine of <i>x</i> (expressed in
541
- * radians).
595
+ * Computes the hyperbolic sine of <i>x</i>.
596
+ *
597
+ * @param [Numeric] x
598
+ * @return [OraNumber]
542
599
  */
543
600
  static VALUE omath_sinh(VALUE obj, VALUE num)
544
601
  {
@@ -552,10 +609,12 @@ static VALUE omath_sinh(VALUE obj, VALUE num)
552
609
 
553
610
  /*
554
611
  * call-seq:
555
- * OCI8::Math.tanh() -> oranumber
612
+ * tanh(x)
613
+ *
614
+ * Computes the hyperbolic tangent of <i>x</i>.
556
615
  *
557
- * Computes the hyperbolic tangent of <i>x</i> (expressed in
558
- * radians).
616
+ * @param [Numeric] x
617
+ * @return [OraNumber]
559
618
  */
560
619
  static VALUE omath_tanh(VALUE obj, VALUE num)
561
620
  {
@@ -569,9 +628,12 @@ static VALUE omath_tanh(VALUE obj, VALUE num)
569
628
 
570
629
  /*
571
630
  * call-seq:
572
- * OCI8::Math.exp(x) -> oranumber
631
+ * exp(x)
573
632
  *
574
- * Returns e**x.
633
+ * Computes the base- <i>e</i> exponential of <i>x</i>.
634
+ *
635
+ * @param [Numeric] x
636
+ * @return [OraNumber]
575
637
  */
576
638
  static VALUE omath_exp(VALUE obj, VALUE num)
577
639
  {
@@ -584,12 +646,20 @@ static VALUE omath_exp(VALUE obj, VALUE num)
584
646
  }
585
647
 
586
648
  /*
587
- * call-seq:
588
- * OCI8::Math.log(numeric) -> oranumber
589
- * OCI8::Math.log(numeric, base_num) -> oranumber
649
+ * @overload log(x)
650
+ *
651
+ * Computes the natural logarithm of <i>x</i>.
652
+ *
653
+ * @param [Numeric] x
654
+ * @return [OraNumber]
655
+ *
656
+ * @overload log(x, y)
590
657
  *
591
- * Returns the natural logarithm of <i>numeric</i> for one argument.
592
- * Returns the base <i>base_num</i> logarithm of <i>numeric</i> for two arguments.
658
+ * Computes the base <i>y</I> logarithm of <i>x</i>.
659
+ *
660
+ * @param [Numeric] x
661
+ * @param [Numeric] y
662
+ * @return [OraNumber]
593
663
  */
594
664
  static VALUE omath_log(int argc, VALUE *argv, VALUE obj)
595
665
  {
@@ -622,9 +692,12 @@ static VALUE omath_log(int argc, VALUE *argv, VALUE obj)
622
692
 
623
693
  /*
624
694
  * call-seq:
625
- * OCI8::Math.log10(numeric) -> oranumber
695
+ * log10(x)
696
+ *
697
+ * Computes the base 10 logarithm of <i>x</i>.
626
698
  *
627
- * Returns the base 10 logarithm of <i>numeric</i>.
699
+ * @param [Numeric] x
700
+ * @return [OraNumber]
628
701
  */
629
702
  static VALUE omath_log10(VALUE obj, VALUE num)
630
703
  {
@@ -643,9 +716,12 @@ static VALUE omath_log10(VALUE obj, VALUE num)
643
716
 
644
717
  /*
645
718
  * call-seq:
646
- * OCI8::Math.sqrt(numeric) -> oranumber
719
+ * sqrt(x)
647
720
  *
648
- * Returns the non-negative square root of <i>numeric</i>.
721
+ * Computes the square root of <i>x</i>.
722
+ *
723
+ * @param [Numeric] x
724
+ * @return [OraNumber]
649
725
  */
650
726
  static VALUE omath_sqrt(VALUE obj, VALUE num)
651
727
  {
@@ -665,12 +741,39 @@ static VALUE omath_sqrt(VALUE obj, VALUE num)
665
741
  return oci8_make_ocinumber(&r, errhp);
666
742
  }
667
743
 
744
+ /*
745
+ * Document-class: OraNumber
746
+ *
747
+ * OraNumber is a ruby representation of
748
+ * {http://docs.oracle.com/cd/E11882_01/server.112/e17118/sql_elements001.htm#sthref118 Oracle NUMBER data type}.
749
+ * without precision and scale designators.
750
+ */
668
751
 
669
752
  /*
670
753
  * call-seq:
671
- * OraNumber(obj) -> oranumber
754
+ * OraNumber(expr = nil, fmt = nil, nlsparam = nil)
755
+ *
756
+ * Converts <i>expr</i> to a value of OraNumber. The <i>expr</i> can be a Numeric value
757
+ * or a String value. If it is a String value, optional <i>fmt</i> and <i>nlsparam</i>.
758
+ * is used as {http://docs.oracle.com/cd/E11882_01/server.112/e17118/functions211.htm Oracle SQL function TO_NUMBER}
759
+ * does.
760
+ *
761
+ * @example
762
+ * # Numeric expr
763
+ * OraNumber(123456.789) # -> 123456.789
764
+ * # String expr
765
+ * OraNumber('123456.789') # -> 123456.789
766
+ * # String expr with fmt
767
+ * OraNumber('123,456.789', '999,999,999.999') # -> 123456.789
768
+ * # String expr with fmt and nlsparam
769
+ * OraNumber('123.456,789', '999G999G999D999', "NLS_NUMERIC_CHARACTERS = ',.'") # -> 123456.789
672
770
  *
673
- * Returns a new <code>OraNumber</code>.
771
+ * @param [String, Numeric] expr
772
+ * @param [String] fmt
773
+ * @param [String] nlsparam
774
+ * @return [OraNumber]
775
+ *
776
+ * @since 2.0.3
674
777
  */
675
778
  static VALUE onum_f_new(int argc, VALUE *argv, VALUE self)
676
779
  {
@@ -679,6 +782,29 @@ static VALUE onum_f_new(int argc, VALUE *argv, VALUE self)
679
782
  return obj;
680
783
  }
681
784
 
785
+ /*
786
+ * call-seq:
787
+ * initialize(expr = nil, fmt = nil, nlsparam = nil)
788
+ *
789
+ * Creates a value of OraNumber from <i>expr</i>. The <i>expr</i> can be a Numeric value
790
+ * or a String value. If it is a String value, optional <i>fmt</i> and <i>nlsparam</i>
791
+ * is used as {http://docs.oracle.com/cd/E11882_01/server.112/e17118/functions211.htm Oracle SQL function TO_NUMBER}
792
+ * does.
793
+ *
794
+ * @example
795
+ * # Numeric expr
796
+ * OraNumber.new(123456.789) # -> 123456.789
797
+ * # String expr
798
+ * OraNumber.new('123456.789') # => #<OraNumber:123456.789>
799
+ * # String expr with fmt
800
+ * OraNumber.new('123,456.789', '999,999,999.999') # => #<OraNumber:123456.789>
801
+ * # String expr with fmt and nlsparam
802
+ * OraNumber.new('123.456,789', '999G999G999D999', "NLS_NUMERIC_CHARACTERS = ',.'") # => #<OraNumber:123456.789>
803
+ *
804
+ * @param [String, Numeric] expr
805
+ * @param [String] fmt
806
+ * @param [String] nlsparam
807
+ */
682
808
  static VALUE onum_initialize(int argc, VALUE *argv, VALUE self)
683
809
  {
684
810
  OCIError *errhp = oci8_errhp;
@@ -696,6 +822,17 @@ static VALUE onum_initialize(int argc, VALUE *argv, VALUE self)
696
822
  return Qnil;
697
823
  }
698
824
 
825
+ /*
826
+ * call-seq:
827
+ * initialize_copy(obj)
828
+ *
829
+ * Replaces <i>self</i> with <i>obj</i>. <code>Object#clone</code> and <code>Object#dup</code>
830
+ * call this method to copy data unknown by the ruby interpreter.
831
+ *
832
+ * @param [OraNumber] obj
833
+ *
834
+ * @private
835
+ */
699
836
  static VALUE onum_initialize_copy(VALUE lhs, VALUE rhs)
700
837
  {
701
838
  if (!RTEST(rb_obj_is_instance_of(rhs, CLASS_OF(lhs)))) {
@@ -706,6 +843,9 @@ static VALUE onum_initialize_copy(VALUE lhs, VALUE rhs)
706
843
  return lhs;
707
844
  }
708
845
 
846
+ /*
847
+ * @private
848
+ */
709
849
  static VALUE onum_coerce(VALUE self, VALUE other)
710
850
  {
711
851
  signed long sl;
@@ -733,10 +873,12 @@ static VALUE onum_coerce(VALUE self, VALUE other)
733
873
  }
734
874
 
735
875
  /*
736
- * call-seq:
737
- * -onum -> oranumber
876
+ * Returns a negated value of <i>self</i>
877
+ *
878
+ * @example
879
+ * -OraNumber(2) # => #<OraNumber:-2>
738
880
  *
739
- * Returns a negated <code>OraNumber</code>.
881
+ * @return [OraNumber]
740
882
  */
741
883
  static VALUE onum_neg(VALUE self)
742
884
  {
@@ -747,12 +889,20 @@ static VALUE onum_neg(VALUE self)
747
889
  return oci8_make_ocinumber(&r, errhp);
748
890
  }
749
891
 
750
-
751
892
  /*
752
893
  * call-seq:
753
- * onum + other -> number
894
+ * self + other
895
+ *
896
+ * Returns the sum of <i>self</i> and <i>other</i>.
897
+ * When <i>other</i>'s class is Integer, it returns an OraNumber value.
898
+ * Otherwise, it returns a value same with <i>other</i>'s class.
754
899
  *
755
- * Returns the sum of <i>onum</i> and <i>other</i>.
900
+ * @example
901
+ * OraNumber(2) + 3 # => #<OraNumber:5>
902
+ * OraNumber(2) + 1.5 # => 3.5 (Float)
903
+ *
904
+ * @param [Numeric] other
905
+ * @return [Numeric]
756
906
  */
757
907
  static VALUE onum_add(VALUE lhs, VALUE rhs)
758
908
  {
@@ -783,10 +933,18 @@ static VALUE onum_add(VALUE lhs, VALUE rhs)
783
933
 
784
934
  /*
785
935
  * call-seq:
786
- * onum - integer -> oranumber
787
- * onum - numeric -> numeric
936
+ * self - other
937
+ *
938
+ * Returns the difference of <i>self</i> and <i>other</i>.
939
+ * When <i>other</i>'s class is Integer, it returns an OraNumber value.
940
+ * Otherwise, it returns a value same with <i>other</i>'s class.
788
941
  *
789
- * Returns the difference of <i>onum</i> and <i>other</i>.
942
+ * @example
943
+ * OraNumber(2) - 3 # => #<OraNumber:-1>
944
+ * OraNumber(2) - 1.5 # => 0.5 (Float)
945
+ *
946
+ * @param [Numeric] other
947
+ * @return [Numeric]
790
948
  */
791
949
  static VALUE onum_sub(VALUE lhs, VALUE rhs)
792
950
  {
@@ -817,9 +975,18 @@ static VALUE onum_sub(VALUE lhs, VALUE rhs)
817
975
 
818
976
  /*
819
977
  * call-seq:
820
- * onum * other -> number
978
+ * self * other
979
+ *
980
+ * Returns the product of <i>self</i> and <i>other</i>.
981
+ * When <i>other</i>'s class is Integer, it returns an OraNumber value.
982
+ * Otherwise, it returns a value same with <i>other</i>'s class.
983
+ *
984
+ * @example
985
+ * OraNumber(2) * 3 # => #<OraNumber:6>
986
+ * OraNumber(2) * 1.5 # => 3.0 (Float)
821
987
  *
822
- * Returns the product of <i>onum</i> and <i>other</i>.
988
+ * @param [Numeric] other
989
+ * @return [Numeric]
823
990
  */
824
991
  static VALUE onum_mul(VALUE lhs, VALUE rhs)
825
992
  {
@@ -850,10 +1017,18 @@ static VALUE onum_mul(VALUE lhs, VALUE rhs)
850
1017
 
851
1018
  /*
852
1019
  * call-seq:
853
- * onum / integer -> oranumber
854
- * onum / numeric -> numeric
1020
+ * self / other
1021
+ *
1022
+ * Returns the result of dividing <i>self</i> by <i>other</i>.
1023
+ * When <i>other</i>'s class is Integer, it returns an OraNumber value.
1024
+ * Otherwise, it returns a value same with <i>other</i>'s class.
1025
+ *
1026
+ * @example
1027
+ * OraNumber(2) / 3 # => #<OraNumber:0.6666666666666666666666666666666666666667>
1028
+ * OraNumber(2) / 1.5 # => 1.3333333333333333 (Float)
855
1029
  *
856
- * Returns the result of dividing <i>onum</i> by <i>other</i>.
1030
+ * @param [Numeric] other
1031
+ * @return [Numeric]
857
1032
  */
858
1033
  static VALUE onum_div(VALUE lhs, VALUE rhs)
859
1034
  {
@@ -892,9 +1067,17 @@ static VALUE onum_div(VALUE lhs, VALUE rhs)
892
1067
 
893
1068
  /*
894
1069
  * call-seq:
895
- * onum % other -> oranumber
1070
+ * self % other
896
1071
  *
897
- * Returns the modulo after division of <i>onum</i> by <i>other</i>.
1072
+ * Returns the modulo after division of <i>self</i> by <i>other</i>.
1073
+ *
1074
+ * @example
1075
+ * OraNumber(13) % 5 # => #<OraNumber:3>
1076
+ *
1077
+ * @param [Numeric] other
1078
+ * @return [OraNumber]
1079
+ *
1080
+ * @raise [ZeroDivisionError] when <i>other</i> is zero.
898
1081
  */
899
1082
  static VALUE onum_mod(VALUE lhs, VALUE rhs)
900
1083
  {
@@ -917,9 +1100,16 @@ static VALUE onum_mod(VALUE lhs, VALUE rhs)
917
1100
 
918
1101
  /*
919
1102
  * call-seq:
920
- * onum ** other -> oranumber
1103
+ * self ** other
1104
+ *
1105
+ * Raises <i>self</i> to the power of <i>other</i>.
921
1106
  *
922
- * Raises <i>onum</i> the <i>other</i> power.
1107
+ * @example
1108
+ * OraNumber(2) ** 2 # => #<OraNumber:4>
1109
+ * OraNumber(2) ** 2.5 # => #<OraNumber:5.65685424949238019520675489683879231435>
1110
+ *
1111
+ * @param [Numeric] other
1112
+ * @return [OraNumber]
923
1113
  */
924
1114
  static VALUE onum_power(VALUE lhs, VALUE rhs)
925
1115
  {
@@ -940,11 +1130,19 @@ static VALUE onum_power(VALUE lhs, VALUE rhs)
940
1130
 
941
1131
  /*
942
1132
  * call-seq:
943
- * onum <=> other -> -1, 0, +1
1133
+ * self <=> other
944
1134
  *
945
- * Returns -1, 0, or +1 depending on whether <i>onum</i> is less than,
1135
+ * Returns -1, 0, or +1 depending on whether <i>self</i> is less than,
946
1136
  * equal to, or greater than <i>other</i>. This is the basis for the
947
1137
  * tests in <code>Comparable</code>.
1138
+ *
1139
+ * @example
1140
+ * OraNumber(5) <=> 3 # => 1
1141
+ * OraNumber(4) <=> 4 # => 0
1142
+ * OraNumber(2) <=> 2.5 # => 1
1143
+ *
1144
+ * @param [Numeric] other
1145
+ * @return [-1, 0 or +1]
948
1146
  */
949
1147
  static VALUE onum_cmp(VALUE lhs, VALUE rhs)
950
1148
  {
@@ -967,10 +1165,14 @@ static VALUE onum_cmp(VALUE lhs, VALUE rhs)
967
1165
  }
968
1166
 
969
1167
  /*
970
- * call-seq:
971
- * onum.floor -> integer
1168
+ * Returns the largest <code>Integer</code> less than or equal to <i>self</i>.
972
1169
  *
973
- * Returns the largest <code>Integer</code> less than or equal to <i>onum</i>.
1170
+ * @example
1171
+ * OraNumber(11.1).floor # => 11
1172
+ * OraNumber(25.8).floor # => 25
1173
+ * OraNumber(-25.8).floor # => -26
1174
+ *
1175
+ * @return [Integer]
974
1176
  */
975
1177
  static VALUE onum_floor(VALUE self)
976
1178
  {
@@ -982,11 +1184,14 @@ static VALUE onum_floor(VALUE self)
982
1184
  }
983
1185
 
984
1186
  /*
985
- * call-seq:
986
- * onum.ceil -> integer
1187
+ * Returns the smallest <code>Integer</code> greater than or equal to <i>self</i>.
987
1188
  *
988
- * Returns the smallest <code>Integer</code> greater than or equal to
989
- * <i>onum</i>.
1189
+ * @example
1190
+ * OraNumber(11.1).ceil # => 12
1191
+ * OraNumber(25.8).ceil # => 26
1192
+ * OraNumber(-25.8).ceil # => -25
1193
+ *
1194
+ * @return [Integer]
990
1195
  */
991
1196
  static VALUE onum_ceil(VALUE self)
992
1197
  {
@@ -998,16 +1203,30 @@ static VALUE onum_ceil(VALUE self)
998
1203
  }
999
1204
 
1000
1205
  /*
1001
- * call-seq:
1002
- * onum.round -> integer
1003
- * onum.round(decplace) -> oranumber
1206
+ * @overload round
1004
1207
  *
1005
- * Rounds <i>onum</i> to the nearest <code>Integer</code> when no argument.
1006
- * Rounds <i>onum</i> to a specified decimal place <i>decplace</i> when one argument.
1208
+ * Rounds <i>self</i> to the nearest <code>Integer</code>.
1007
1209
  *
1008
- * OraNumber.new(1.234).round(1) #=> 1.2
1009
- * OraNumber.new(1.234).round(2) #=> 1.23
1010
- * OraNumber.new(1.234).round(3) #=> 1.234
1210
+ * @example
1211
+ * OraNumber(1.49).round # => 1
1212
+ * OraNumber(1.5).round # => 2
1213
+ * OraNumber(-1.49).round # => -1
1214
+ * OraNumber(-1.5).round # => -2
1215
+ *
1216
+ * @return [Integer]
1217
+ *
1218
+ * @overload round(decplace)
1219
+ *
1220
+ * Rounds <i>onum</i> to a specified decimal place <i>decplace</i>.
1221
+ *
1222
+ * @example
1223
+ * OraNumber(123.456).round(2) # => #<OraNumber:123.46>
1224
+ * OraNumber(123.456).round(1) # => #<OraNumber:123.5>
1225
+ * OraNumber(123.456).round(0) # => #<OraNumber:123>
1226
+ * OraNumber(123.456).round(-1) # => #<OraNumber:120>
1227
+ *
1228
+ * @param [Integer]
1229
+ * @return [OraNumber]
1011
1230
  */
1012
1231
  static VALUE onum_round(int argc, VALUE *argv, VALUE self)
1013
1232
  {
@@ -1026,11 +1245,24 @@ static VALUE onum_round(int argc, VALUE *argv, VALUE self)
1026
1245
 
1027
1246
  /*
1028
1247
  * call-seq:
1029
- * onum.truncate -> integer
1030
- * onum.truncate(decplace) -> oranumber
1248
+ * truncate(decplace = 0)
1031
1249
  *
1032
- * Truncates <i>onum</i> to the <code>Integer</code> when no argument.
1033
- * Truncates <i>onum</i> to a specified decimal place <i>decplace</i> when one argument.
1250
+ * Truncates <i>self</i> to a specified decimal place <i>decplace</i>.
1251
+ *
1252
+ * @example
1253
+ * OraNumber(123.456).truncate # => #<OraNumber:123>
1254
+ * OraNumber(123.456).truncate(1) # => #<OraNumber:123.4>
1255
+ * OraNumber(123.456).truncate(2) # => #<OraNumber:123.45>
1256
+ * OraNumber(123.456).truncate(-1) # => #<OraNumber:120>
1257
+ *
1258
+ * OraNumber(-123.456).truncate # => #<OraNumber:-123>
1259
+ * OraNumber(-123.456).truncate(1) # => #<OraNumber:-123.4>
1260
+ * OraNumber(-123.456).truncate(2) # => #<OraNumber:-123.45>
1261
+ * OraNumber(-123.456).truncate(-1) # => #<OraNumber:-120>
1262
+ *
1263
+ * @param [Integer]
1264
+ * @return [OraNumber]
1265
+ * @todo returns {Integer} when <i>decplace</i> is not specified.
1034
1266
  */
1035
1267
  static VALUE onum_trunc(int argc, VALUE *argv, VALUE self)
1036
1268
  {
@@ -1045,14 +1277,17 @@ static VALUE onum_trunc(int argc, VALUE *argv, VALUE self)
1045
1277
 
1046
1278
  /*
1047
1279
  * call-seq:
1048
- * onum.round_prec(digits) -> oranumber
1280
+ * round_prec(digits)
1049
1281
  *
1050
- * Rounds <i>onum</i> to a specified number of decimal digits.
1282
+ * Rounds <i>self</i> to a specified number of decimal digits.
1051
1283
  * This method is available on Oracle 8.1 client or upper.
1052
1284
  *
1053
- * OraNumber.new(1.234).round_prec(2) #=> 1.2
1054
- * OraNumber.new(12.34).round_prec(2) #=> 12
1055
- * OraNumber.new(123.4).round_prec(2) #=> 120
1285
+ * @example
1286
+ * OraNumber(1.234).round_prec(2) # => #<OraNumber:1.2>
1287
+ * OraNumber(12.34).round_prec(2) # => #<OraNumber:12>
1288
+ * OraNumber(123.4).round_prec(2) # => #<OraNumber:120>
1289
+ *
1290
+ * @return [OraNumber]
1056
1291
  */
1057
1292
  static VALUE onum_round_prec(VALUE self, VALUE ndigs)
1058
1293
  {
@@ -1065,11 +1300,20 @@ static VALUE onum_round_prec(VALUE self, VALUE ndigs)
1065
1300
 
1066
1301
  /*
1067
1302
  * call-seq:
1068
- * onum.to_char(fmt = nil, nls_params = nil) -> string
1303
+ * onum.to_char(fmt = nil, nlsparam = nil)
1069
1304
  *
1070
1305
  * Returns a string containing a representation of self.
1071
- * <i>fmt</i> and <i>nls_params</i> are same meanings with
1072
- * <code>TO_CHAR</code> of Oracle function.
1306
+ * <i>fmt</i> and <i>nlsparam</i> are used as
1307
+ * {http://docs.oracle.com/cd/E11882_01/server.112/e17118/functions201.htm Oracle SQL function TO_CHAR(number)}
1308
+ * does.
1309
+ *
1310
+ * @example
1311
+ * OraNumber(123456.789).to_char('FM999,999,999.999') # => "123,456.789"
1312
+ * OraNumber(123456.789).to_char('FM999G999G999D999', "NLS_NUMERIC_CHARACTERS = ',.'") # => "123.456,789"
1313
+ *
1314
+ * @param [String] fmt
1315
+ * @param [String] nlsparam
1316
+ * @return [String]
1073
1317
  */
1074
1318
  static VALUE onum_to_char(int argc, VALUE *argv, VALUE self)
1075
1319
  {
@@ -1121,10 +1365,11 @@ static VALUE onum_to_char(int argc, VALUE *argv, VALUE self)
1121
1365
  }
1122
1366
 
1123
1367
  /*
1124
- * call-seq:
1125
- * onum.to_s -> string
1126
- *
1127
1368
  * Returns a string containing a representation of self.
1369
+ *
1370
+ * @return [String]
1371
+ *
1372
+ * @see #to_char
1128
1373
  */
1129
1374
  static VALUE onum_to_s(VALUE self)
1130
1375
  {
@@ -1132,10 +1377,9 @@ static VALUE onum_to_s(VALUE self)
1132
1377
  }
1133
1378
 
1134
1379
  /*
1135
- * call-seq:
1136
- * onum.to_i -> integer
1380
+ * Returns <i>self</i> truncated to an <code>Integer</code>.
1137
1381
  *
1138
- * Returns <i>onum</i> truncated to an <code>Integer</code>.
1382
+ * @return [Integer]
1139
1383
  */
1140
1384
  static VALUE onum_to_i(VALUE self)
1141
1385
  {
@@ -1147,11 +1391,14 @@ static VALUE onum_to_i(VALUE self)
1147
1391
  }
1148
1392
 
1149
1393
  /*
1150
- * call-seq:
1151
- * onum.to_f -> float
1394
+ * Converts <i>self</i> to <code>Float</code>.
1152
1395
  *
1153
- * Return the value as a <code>Float</code>.
1396
+ * When {OCI8.properties OCI8.properties [:float_conversion_type\]}
1397
+ * is <code>:ruby</code>, <i>self</I> is converted by <code>self.to_s.to_f</code>.
1398
+ * When it is <code>:oracle</code>, <i>self</I> is converted by the Oracle
1399
+ * OCI function OCINumberToReal().
1154
1400
  *
1401
+ * @return [Float]
1155
1402
  */
1156
1403
  static VALUE onum_to_f(VALUE self)
1157
1404
  {
@@ -1159,11 +1406,9 @@ static VALUE onum_to_f(VALUE self)
1159
1406
  }
1160
1407
 
1161
1408
  /*
1162
- * call-seq:
1163
- * onum.to_r -> rational
1164
- *
1165
- * Return the value as a <code>Rational</code>.
1409
+ * Returns <i>self</i> as a <code>Rational</code>.
1166
1410
  *
1411
+ * @return [Rational]
1167
1412
  */
1168
1413
  static VALUE onum_to_r(VALUE self)
1169
1414
  {
@@ -1202,11 +1447,9 @@ static VALUE onum_to_r(VALUE self)
1202
1447
  }
1203
1448
 
1204
1449
  /*
1205
- * call-seq:
1206
- * onum.to_d -> bigdecimal
1207
- *
1208
- * Return the value as a <code>BigDecimal</code>.
1450
+ * Returns <i>self</i> as a <code>BigDecimal</code>.
1209
1451
  *
1452
+ * @return [BigDecimal]
1210
1453
  */
1211
1454
  static VALUE onum_to_d(VALUE self)
1212
1455
  {
@@ -1230,13 +1473,14 @@ static VALUE onum_to_d_real(OCINumber *num, OCIError *errhp)
1230
1473
  }
1231
1474
 
1232
1475
  /*
1233
- * call-seq:
1234
- * onum.has_decimal_part? -> true or false
1235
- *
1236
- * Returns +true+ if <i>self</i> has a decimal part.
1476
+ * Returns <code>true</code> if <i>self</i> has a decimal part.
1237
1477
  *
1478
+ * @example
1238
1479
  * OraNumber(10).has_decimal_part? # => false
1239
1480
  * OraNumber(10.1).has_decimal_part? # => true
1481
+ *
1482
+ * @return [true or false]
1483
+ * @since 2.0.5
1240
1484
  */
1241
1485
  static VALUE onum_has_decimal_part_p(VALUE self)
1242
1486
  {
@@ -1248,11 +1492,9 @@ static VALUE onum_has_decimal_part_p(VALUE self)
1248
1492
  }
1249
1493
 
1250
1494
  /*
1251
- * call-seq:
1252
- * onum.to_onum -> oranumber
1253
- *
1254
1495
  * Returns self.
1255
1496
  *
1497
+ * @return [OraNumber]
1256
1498
  */
1257
1499
  static VALUE onum_to_onum(VALUE self)
1258
1500
  {
@@ -1260,11 +1502,9 @@ static VALUE onum_to_onum(VALUE self)
1260
1502
  }
1261
1503
 
1262
1504
  /*
1263
- * call-seq:
1264
- * onum.zero? -> true or false
1265
- *
1266
- * Returns <code>true</code> if <i>onum</i> is zero.
1505
+ * Returns <code>true</code> if <i>self</i> is zero.
1267
1506
  *
1507
+ * @return [true or false]
1268
1508
  */
1269
1509
  static VALUE onum_zero_p(VALUE self)
1270
1510
  {
@@ -1276,11 +1516,9 @@ static VALUE onum_zero_p(VALUE self)
1276
1516
  }
1277
1517
 
1278
1518
  /*
1279
- * call-seq:
1280
- * onum.abs -> oranumber
1281
- *
1282
- * Returns the absolute value of <i>onum</i>.
1519
+ * Returns the absolute value of <i>self</i>.
1283
1520
  *
1521
+ * @return [OraNumber]
1284
1522
  */
1285
1523
  static VALUE onum_abs(VALUE self)
1286
1524
  {
@@ -1293,10 +1531,16 @@ static VALUE onum_abs(VALUE self)
1293
1531
 
1294
1532
  /*
1295
1533
  * call-seq:
1296
- * onum.shift(fixnum) -> oranumber
1534
+ * shift(ndigits)
1297
1535
  *
1298
- * Returns <i>onum</i> * 10**<i>fixnum</i>
1536
+ * Returns <i>self</i> shifted by <i>ndigits</i>
1299
1537
  * This method is available on Oracle 8.1 client or upper.
1538
+ *
1539
+ * @example
1540
+ * OraNumber(123).shift(3) # => #<OraNumber:123000>
1541
+ * OraNumber(123).shift(-3) # => #<OraNumber:0.123>
1542
+ *
1543
+ * @return [OraNumber]
1300
1544
  */
1301
1545
  static VALUE onum_shift(VALUE self, VALUE exp)
1302
1546
  {
@@ -1308,15 +1552,16 @@ static VALUE onum_shift(VALUE self, VALUE exp)
1308
1552
  }
1309
1553
 
1310
1554
  /*
1311
- * call-seq:
1312
- * onum.dump -> string
1555
+ * Returns internal representation whose format is same with the return value of
1556
+ * {http://docs.oracle.com/cd/E11882_01/server.112/e17118/functions055.htm Oracle SQL function DUMP}.
1313
1557
  *
1314
- * Returns internal representation whose format is same with
1315
- * the return value of Oracle SQL function DUMP().
1558
+ * @example
1559
+ * OraNumber.new(100).dump #=> "Typ=2 Len=2: 194,2"
1560
+ * OraNumber.new(123).dump #=> "Typ=2 Len=3: 194,2,24"
1561
+ * OraNumber.new(0.1).dump #=> "Typ=2 Len=2: 192,11"
1316
1562
  *
1317
- * OraNumber.new(100).dump #=> "Typ=2 Len=2: 194,2"
1318
- * OraNumber.new(123).dump #=> "Typ=2 Len=3: 194,2,24"
1319
- * OraNumber.new(0.1).dump #=> "Typ=2 Len=2: 192,11"
1563
+ * @return [String]
1564
+ * @since 2.0.4
1320
1565
  */
1321
1566
  static VALUE onum_dump(VALUE self)
1322
1567
  {
@@ -1325,6 +1570,9 @@ static VALUE onum_dump(VALUE self)
1325
1570
  return rb_usascii_str_new(buf, rv);
1326
1571
  }
1327
1572
 
1573
+ /*
1574
+ * @private
1575
+ */
1328
1576
  static VALUE onum_hash(VALUE self)
1329
1577
  {
1330
1578
  char *c = DATA_PTR(self);
@@ -1342,6 +1590,9 @@ static VALUE onum_hash(VALUE self)
1342
1590
  return INT2FIX(hash);
1343
1591
  }
1344
1592
 
1593
+ /*
1594
+ * @private
1595
+ */
1345
1596
  static VALUE onum_inspect(VALUE self)
1346
1597
  {
1347
1598
  const char *name = rb_class2name(CLASS_OF(self));
@@ -1356,9 +1607,13 @@ static VALUE onum_inspect(VALUE self)
1356
1607
 
1357
1608
  /*
1358
1609
  * call-seq:
1359
- * onum._dump -> string
1610
+ * _dump
1360
1611
  *
1361
- * Dump <i>onum</i> for marshaling.
1612
+ * Serializes <i>self</i>.
1613
+ * This method is called by Marshal.dump().
1614
+ *
1615
+ * @return [String] a byte stream
1616
+ * @see OraNumber._load
1362
1617
  */
1363
1618
  static VALUE onum__dump(int argc, VALUE *argv, VALUE self)
1364
1619
  {
@@ -1372,9 +1627,14 @@ static VALUE onum__dump(int argc, VALUE *argv, VALUE self)
1372
1627
 
1373
1628
  /*
1374
1629
  * call-seq:
1375
- * OraNumber._load(string) -> oranumber
1630
+ * _load(bytes)
1631
+ *
1632
+ * Restores a byte stream serialized by {OraNumber#_dump}.
1633
+ * This method is called by Marshal.load() to deserialize a byte stream
1634
+ * created by Marshal.dump().
1376
1635
  *
1377
- * Unmarshal a dumped <code>OraNumber</code> object.
1636
+ * @param [String] bytes a byte stream
1637
+ * @return [OraNumber] an deserialized object
1378
1638
  */
1379
1639
  static VALUE
1380
1640
  onum_s_load(VALUE klass, VALUE str)
@@ -1395,8 +1655,17 @@ onum_s_load(VALUE klass, VALUE str)
1395
1655
  }
1396
1656
 
1397
1657
  /*
1398
- * bind_ocinumber
1658
+ * Document-class: OCI8::BindType::OraNumber
1659
+ */
1660
+
1661
+ /*
1662
+ * Document-class: OCI8::BindType::Integer
1663
+ */
1664
+
1665
+ /*
1666
+ * Document-class: OCI8::BindType::Float
1399
1667
  */
1668
+
1400
1669
  static VALUE bind_ocinumber_get(oci8_bind_t *obind, void *data, void *null_struct)
1401
1670
  {
1402
1671
  return oci8_make_ocinumber((OCINumber*)data, oci8_errhp);
@@ -1555,10 +1824,10 @@ Init_oci_number(VALUE cOCI8, OCIError *errhp)
1555
1824
  rb_define_alloc_func(cOCINumber, onum_s_alloc);
1556
1825
 
1557
1826
  /* methods of OCI::Number */
1558
- rb_define_method(rb_cObject, "OraNumber", onum_f_new, -1);
1559
- rb_define_method_nodoc(cOCINumber, "initialize", onum_initialize, -1);
1560
- rb_define_method_nodoc(cOCINumber, "initialize_copy", onum_initialize_copy, 1);
1561
- rb_define_method_nodoc(cOCINumber, "coerce", onum_coerce, 1);
1827
+ rb_define_global_function("OraNumber", onum_f_new, -1);
1828
+ rb_define_method(cOCINumber, "initialize", onum_initialize, -1);
1829
+ rb_define_method(cOCINumber, "initialize_copy", onum_initialize_copy, 1);
1830
+ rb_define_method(cOCINumber, "coerce", onum_coerce, 1);
1562
1831
 
1563
1832
  rb_include_module(cOCINumber, rb_mComparable);
1564
1833
 
@@ -1584,15 +1853,15 @@ Init_oci_number(VALUE cOCI8, OCIError *errhp)
1584
1853
  rb_define_method(cOCINumber, "to_r", onum_to_r, 0);
1585
1854
  rb_define_method(cOCINumber, "to_d", onum_to_d, 0);
1586
1855
  rb_define_method(cOCINumber, "has_decimal_part?", onum_has_decimal_part_p, 0);
1587
- rb_define_method_nodoc(cOCINumber, "to_onum", onum_to_onum, 0);
1856
+ rb_define_method(cOCINumber, "to_onum", onum_to_onum, 0);
1588
1857
 
1589
1858
  rb_define_method(cOCINumber, "zero?", onum_zero_p, 0);
1590
1859
  rb_define_method(cOCINumber, "abs", onum_abs, 0);
1591
1860
  rb_define_method(cOCINumber, "shift", onum_shift, 1);
1592
1861
  rb_define_method(cOCINumber, "dump", onum_dump, 0);
1593
1862
 
1594
- rb_define_method_nodoc(cOCINumber, "hash", onum_hash, 0);
1595
- rb_define_method_nodoc(cOCINumber, "inspect", onum_inspect, 0);
1863
+ rb_define_method(cOCINumber, "hash", onum_hash, 0);
1864
+ rb_define_method(cOCINumber, "inspect", onum_inspect, 0);
1596
1865
 
1597
1866
  /* methods for marshaling */
1598
1867
  rb_define_method(cOCINumber, "_dump", onum__dump, -1);
@@ -1601,8 +1870,22 @@ Init_oci_number(VALUE cOCI8, OCIError *errhp)
1601
1870
  oci8_define_bind_class("OraNumber", &bind_ocinumber_vtable);
1602
1871
  oci8_define_bind_class("Integer", &bind_integer_vtable);
1603
1872
  oci8_define_bind_class("Float", &bind_float_vtable);
1873
+
1874
+ #if 0 /* for rdoc/yard */
1875
+ oci8_cOCIHandle = rb_define_class("OCIHandle", rb_cObject);
1876
+ cOCI8 = rb_define_class("OCI8", oci8_cOCIHandle);
1877
+ mOCI8BindType = rb_define_module_under(cOCI8, "BindType");
1878
+ cOCI8BindTypeBase = rb_define_class_under(mOCI8BindType, "Base", oci8_cOCIHandle);
1879
+
1880
+ dummy1 = rb_define_class_under(mOCI8BindType, "OraNumber", cOCI8BindTypeBase);
1881
+ dummy2 = rb_define_class_under(mOCI8BindType, "Integer", cOCI8BindTypeBase);
1882
+ dummy3 = rb_define_class_under(mOCI8BindType, "Float", cOCI8BindTypeBase);
1883
+ #endif
1604
1884
  }
1605
1885
 
1886
+ /*
1887
+ * OraNumber (ruby object) -> OCINumber (C datatype)
1888
+ */
1606
1889
  OCINumber *oci8_get_ocinumber(VALUE num)
1607
1890
  {
1608
1891
  if (!rb_obj_is_kind_of(num, cOCINumber)) {