|
8 | 8 | *
|
9 | 9 | *
|
10 | 10 | * IDENTIFICATION
|
11 |
| - * $PostgreSQL: pgsql/src/backend/utils/adt/int.c,v 1.72 2006/03/11 01:19:22 neilc Exp $ |
| 11 | + * $PostgreSQL: pgsql/src/backend/utils/adt/int.c,v 1.73 2006/06/12 16:09:11 momjian Exp $ |
12 | 12 | *
|
13 | 13 | *-------------------------------------------------------------------------
|
14 | 14 | */
|
@@ -735,6 +735,17 @@ int4mul(PG_FUNCTION_ARGS)
|
735 | 735 | int32arg2=PG_GETARG_INT32(1);
|
736 | 736 | int32result;
|
737 | 737 |
|
| 738 | +#ifdefWIN32 |
| 739 | +/* |
| 740 | + *Win32 doesn't throw a catchable exception for |
| 741 | + *SELECT -2147483648 /* INT_MIN */* (-1); |
| 742 | +*/ |
| 743 | +if (arg2==-1&&arg1==INT_MIN) |
| 744 | +ereport(ERROR, |
| 745 | +(errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), |
| 746 | +errmsg("integer out of range"))); |
| 747 | +#endif |
| 748 | + |
738 | 749 | result=arg1*arg2;
|
739 | 750 |
|
740 | 751 | /*
|
@@ -770,6 +781,17 @@ int4div(PG_FUNCTION_ARGS)
|
770 | 781 | (errcode(ERRCODE_DIVISION_BY_ZERO),
|
771 | 782 | errmsg("division by zero")));
|
772 | 783 |
|
| 784 | +#ifdefWIN32 |
| 785 | +/* |
| 786 | + *Win32 doesn't throw a catchable exception for |
| 787 | + *SELECT -2147483648 /* INT_MIN */ / (-1); |
| 788 | +*/ |
| 789 | +if (arg2==-1&&arg1==INT_MIN) |
| 790 | +ereport(ERROR, |
| 791 | +(errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), |
| 792 | +errmsg("integer out of range"))); |
| 793 | +#endif |
| 794 | + |
773 | 795 | result=arg1 /arg2;
|
774 | 796 |
|
775 | 797 | /*
|
|