summaryrefslogtreecommitdiff
path: root/src/backend/utils/fmgr/fmgr.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/utils/fmgr/fmgr.c')
-rw-r--r--src/backend/utils/fmgr/fmgr.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/backend/utils/fmgr/fmgr.c b/src/backend/utils/fmgr/fmgr.c
index 544dc840c19..45ca532de24 100644
--- a/src/backend/utils/fmgr/fmgr.c
+++ b/src/backend/utils/fmgr/fmgr.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/fmgr/fmgr.c,v 1.53 2001/06/01 02:41:36 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/fmgr/fmgr.c,v 1.54 2001/08/14 22:21:58 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -1414,10 +1414,24 @@ fmgr(Oid procedureId,...)
Datum
Int64GetDatum(int64 X)
{
+#ifndef INT64_IS_BUSTED
int64 *retval = (int64 *) palloc(sizeof(int64));
*retval = X;
return PointerGetDatum(retval);
+#else /* INT64_IS_BUSTED */
+ /*
+ * On a machine with no 64-bit-int C datatype, sizeof(int64) will not be
+ * 8, but we want Int64GetDatum to return an 8-byte object anyway, with
+ * zeroes in the unused bits. This is needed so that, for example,
+ * hash join of int8 will behave properly.
+ */
+ int64 *retval = (int64 *) palloc(Max(sizeof(int64), 8));
+
+ MemSet(retval, 0, Max(sizeof(int64), 8));
+ *retval = X;
+ return PointerGetDatum(retval);
+#endif /* INT64_IS_BUSTED */
}
Datum