summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2000-01-20 02:21:44 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2000-01-20 02:21:44 +0000
commit08195a43f318581e373792fd30e00813ab3ad9fc (patch)
treef8c9b94a65f383885cc5e1bd2df5dc3a5a1ca3b5
parent6d1efd76fb9852b8bc242dcaf35916090d7c5899 (diff)
Fix bugs in NUMERIC ceil() and floor() functions. ceil(0) returned 1,
and both would insert random junk digits if given an input that was an exact multiple of 10.
-rw-r--r--src/backend/utils/adt/numeric.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c
index 20b2a001d7e..e9443ddd9d3 100644
--- a/src/backend/utils/adt/numeric.c
+++ b/src/backend/utils/adt/numeric.c
@@ -5,7 +5,7 @@
*
* 1998 Jan Wieck
*
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/numeric.c,v 1.23 2000/01/18 03:44:41 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/numeric.c,v 1.24 2000/01/20 02:21:44 tgl Exp $
*
* ----------
*/
@@ -2932,7 +2932,7 @@ ceil_var(NumericVar *var, NumericVar *result)
set_var_from_var(var, &tmp);
tmp.rscale = 0;
- tmp.ndigits = MAX(0, tmp.weight + 1);
+ tmp.ndigits = MIN(tmp.ndigits, MAX(0, tmp.weight + 1));
if (tmp.sign == NUMERIC_POS && cmp_var(var, &tmp) != 0)
add_var(&tmp, &const_one, &tmp);
@@ -2957,7 +2957,7 @@ floor_var(NumericVar *var, NumericVar *result)
set_var_from_var(var, &tmp);
tmp.rscale = 0;
- tmp.ndigits = MAX(0, tmp.weight + 1);
+ tmp.ndigits = MIN(tmp.ndigits, MAX(0, tmp.weight + 1));
if (tmp.sign == NUMERIC_NEG && cmp_var(var, &tmp) != 0)
sub_var(&tmp, &const_one, &tmp);