|
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 | /* |
|