aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/numeric.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/utils/adt/numeric.c')
-rw-r--r--src/backend/utils/adt/numeric.c62
1 files changed, 12 insertions, 50 deletions
diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c
index 476d3d5b5ce..4f5029a26c1 100644
--- a/src/backend/utils/adt/numeric.c
+++ b/src/backend/utils/adt/numeric.c
@@ -14,7 +14,7 @@
* Copyright (c) 1998-2003, PostgreSQL Global Development Group
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/numeric.c,v 1.63 2003/07/27 04:53:07 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/numeric.c,v 1.64 2003/07/30 19:48:41 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -316,7 +316,7 @@ numeric_in(PG_FUNCTION_ARGS)
/*
* Check for NaN
*/
- if (strcmp(str, "NaN") == 0)
+ if (strcasecmp(str, "NaN") == 0)
PG_RETURN_NUMERIC(make_result(&const_nan));
/*
@@ -1239,34 +1239,15 @@ numeric_smaller(PG_FUNCTION_ARGS)
{
Numeric num1 = PG_GETARG_NUMERIC(0);
Numeric num2 = PG_GETARG_NUMERIC(1);
- NumericVar arg1;
- NumericVar arg2;
- Numeric res;
-
- /*
- * Handle NaN
- */
- if (NUMERIC_IS_NAN(num1) || NUMERIC_IS_NAN(num2))
- PG_RETURN_NUMERIC(make_result(&const_nan));
/*
- * Unpack the values, and decide which is the smaller one
+ * Use cmp_numerics so that this will agree with the comparison
+ * operators, particularly as regards comparisons involving NaN.
*/
- init_var(&arg1);
- init_var(&arg2);
-
- set_var_from_num(num1, &arg1);
- set_var_from_num(num2, &arg2);
-
- if (cmp_var(&arg1, &arg2) <= 0)
- res = make_result(&arg1);
+ if (cmp_numerics(num1, num2) < 0)
+ PG_RETURN_NUMERIC(num1);
else
- res = make_result(&arg2);
-
- free_var(&arg1);
- free_var(&arg2);
-
- PG_RETURN_NUMERIC(res);
+ PG_RETURN_NUMERIC(num2);
}
@@ -1280,34 +1261,15 @@ numeric_larger(PG_FUNCTION_ARGS)
{
Numeric num1 = PG_GETARG_NUMERIC(0);
Numeric num2 = PG_GETARG_NUMERIC(1);
- NumericVar arg1;
- NumericVar arg2;
- Numeric res;
-
- /*
- * Handle NaN
- */
- if (NUMERIC_IS_NAN(num1) || NUMERIC_IS_NAN(num2))
- PG_RETURN_NUMERIC(make_result(&const_nan));
/*
- * Unpack the values, and decide which is the larger one
+ * Use cmp_numerics so that this will agree with the comparison
+ * operators, particularly as regards comparisons involving NaN.
*/
- init_var(&arg1);
- init_var(&arg2);
-
- set_var_from_num(num1, &arg1);
- set_var_from_num(num2, &arg2);
-
- if (cmp_var(&arg1, &arg2) >= 0)
- res = make_result(&arg1);
+ if (cmp_numerics(num1, num2) > 0)
+ PG_RETURN_NUMERIC(num1);
else
- res = make_result(&arg2);
-
- free_var(&arg1);
- free_var(&arg2);
-
- PG_RETURN_NUMERIC(res);
+ PG_RETURN_NUMERIC(num2);
}