aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/utils/adt/numeric.c4
-rw-r--r--src/test/regress/expected/numeric.out12
2 files changed, 6 insertions, 10 deletions
diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c
index eea42398541..5f23f2afac8 100644
--- a/src/backend/utils/adt/numeric.c
+++ b/src/backend/utils/adt/numeric.c
@@ -2946,6 +2946,10 @@ numeric_fac(PG_FUNCTION_ARGS)
NumericVar fact;
NumericVar result;
+ if (num < 0)
+ ereport(ERROR,
+ (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
+ errmsg("factorial of a negative number is undefined")));
if (num <= 1)
{
res = make_result(&const_one);
diff --git a/src/test/regress/expected/numeric.out b/src/test/regress/expected/numeric.out
index b255be7c852..2f3ecb50a73 100644
--- a/src/test/regress/expected/numeric.out
+++ b/src/test/regress/expected/numeric.out
@@ -2345,14 +2345,6 @@ SELECT 0!;
(1 row)
SELECT -4!;
- ?column?
-----------
- 1
-(1 row)
-
+ERROR: factorial of a negative number is undefined
SELECT factorial(-4);
- factorial
------------
- 1
-(1 row)
-
+ERROR: factorial of a negative number is undefined