Folks,

Dennis Björklund and I discovered a little problem with how CVS TIP
reports overflows on cast.  Please find enclosed a patch which fixes
it.

Cheers,
D
-- 
David Fetter <[EMAIL PROTECTED]> http://fetter.org/
phone: +1 415 235 3778        AIM: dfetter666
                              Skype: davidfetter

Remember to vote!
Index: src/backend/utils/adt/numeric.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/utils/adt/numeric.c,v
retrieving revision 1.94
diff -c -r1.94 numeric.c
*** src/backend/utils/adt/numeric.c     14 Jul 2006 05:28:28 -0000      1.94
--- src/backend/utils/adt/numeric.c     28 Sep 2006 18:47:31 -0000
***************
*** 3217,3227 ****
                                        ereport(ERROR,
                                                        
(errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
                                                         errmsg("numeric field 
overflow"),
!                                                        errdetail("A field 
with precision %d, scale %d must have an absolute value less than %s%d.",
                                                                           
precision, scale,
                                                                           /* 
Display 10^0 as 1 */
                                                                           
maxdigits ? "10^" : "",
!                                                                          
maxdigits ? maxdigits : 1)));
                                break;
                        }
                        ddigits -= DEC_DIGITS;
--- 3217,3230 ----
                                        ereport(ERROR,
                                                        
(errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
                                                         errmsg("numeric field 
overflow"),
!                                                        errdetail("A field 
with precision %d, scale %d must have an absolute value less than %s%d - 5 * 
%s%d.",
                                                                           
precision, scale,
                                                                           /* 
Display 10^0 as 1 */
                                                                           
maxdigits ? "10^" : "",
!                                                                          
maxdigits ? maxdigits : 1,
!                                                                          
"10^-",
!                                                                          
scale + 1
!                                                                          )));
                                break;
                        }
                        ddigits -= DEC_DIGITS;
Index: src/test/regress/expected/numeric.out
===================================================================
RCS file: /projects/cvsroot/pgsql/src/test/regress/expected/numeric.out,v
retrieving revision 1.18
diff -c -r1.18 numeric.out
*** src/test/regress/expected/numeric.out       25 Jan 2006 18:20:22 -0000      
1.18
--- src/test/regress/expected/numeric.out       28 Sep 2006 18:47:31 -0000
***************
*** 688,699 ****
  INSERT INTO fract_only VALUES (2, '0.1');
  INSERT INTO fract_only VALUES (3, '1.0');     -- should fail
  ERROR:  numeric field overflow
! DETAIL:  A field with precision 4, scale 4 must have an absolute value less 
than 1.
  INSERT INTO fract_only VALUES (4, '-0.9999');
  INSERT INTO fract_only VALUES (5, '0.99994');
  INSERT INTO fract_only VALUES (6, '0.99995');  -- should fail
  ERROR:  numeric field overflow
! DETAIL:  A field with precision 4, scale 4 must have an absolute value less 
than 1.
  INSERT INTO fract_only VALUES (7, '0.00001');
  INSERT INTO fract_only VALUES (8, '0.00017');
  SELECT * FROM fract_only;
--- 688,699 ----
  INSERT INTO fract_only VALUES (2, '0.1');
  INSERT INTO fract_only VALUES (3, '1.0');     -- should fail
  ERROR:  numeric field overflow
! DETAIL:  A field with precision 4, scale 4 must have an absolute value less 
than 1 - 5 * 10^-5.
  INSERT INTO fract_only VALUES (4, '-0.9999');
  INSERT INTO fract_only VALUES (5, '0.99994');
  INSERT INTO fract_only VALUES (6, '0.99995');  -- should fail
  ERROR:  numeric field overflow
! DETAIL:  A field with precision 4, scale 4 must have an absolute value less 
than 1 - 5 * 10^-5.
  INSERT INTO fract_only VALUES (7, '0.00001');
  INSERT INTO fract_only VALUES (8, '0.00017');
  SELECT * FROM fract_only;
---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
       choose an index scan if your joining column's datatypes do not
       match

Reply via email to