diff --git a/src/backend/utils/adt/arrayfuncs.c b/src/backend/utils/adt/arrayfuncs.c index 522af7affc..2a4de41bbc 100644 --- a/src/backend/utils/adt/arrayfuncs.c +++ b/src/backend/utils/adt/arrayfuncs.c @@ -4084,7 +4084,7 @@ hash_array_extended(PG_FUNCTION_ARGS) { /* Apply the hash function */ locfcinfo.arg[0] = elt; - locfcinfo.arg[1] = seed; + locfcinfo.arg[1] = Int64GetDatum(seed); locfcinfo.argnull[0] = false; locfcinfo.argnull[1] = false; locfcinfo.isnull = false; diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c index 34c0b52d58..0992bb3fdd 100644 --- a/src/backend/utils/adt/date.c +++ b/src/backend/utils/adt/date.c @@ -2223,14 +2223,15 @@ Datum timetz_hash_extended(PG_FUNCTION_ARGS) { TimeTzADT *key = PG_GETARG_TIMETZADT_P(0); - uint64 seed = PG_GETARG_DATUM(1); + Datum seed = PG_GETARG_DATUM(1); uint64 thash; /* Same approach as timetz_hash */ thash = DatumGetUInt64(DirectFunctionCall2(hashint8extended, Int64GetDatumFast(key->time), seed)); - thash ^= DatumGetUInt64(hash_uint32_extended(key->zone, seed)); + thash ^= DatumGetUInt64(hash_uint32_extended(key->zone, + DatumGetInt64(seed))); PG_RETURN_UINT64(thash); } diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c index 22d5898927..bc01f3c284 100644 --- a/src/backend/utils/adt/numeric.c +++ b/src/backend/utils/adt/numeric.c @@ -2285,7 +2285,7 @@ hash_numeric_extended(PG_FUNCTION_ARGS) hash_len * sizeof(NumericDigit), seed); - result = digit_hash ^ weight; + result = UInt64GetDatum(DatumGetUInt64(digit_hash) ^ weight); PG_RETURN_DATUM(result); } diff --git a/src/backend/utils/adt/rangetypes.c b/src/backend/utils/adt/rangetypes.c index d7ba271317..dae505159e 100644 --- a/src/backend/utils/adt/rangetypes.c +++ b/src/backend/utils/adt/rangetypes.c @@ -1288,7 +1288,7 @@ Datum hash_range_extended(PG_FUNCTION_ARGS) { RangeType *r = PG_GETARG_RANGE(0); - uint64 seed = PG_GETARG_INT64(1); + Datum seed = PG_GETARG_DATUM(1); uint64 result; TypeCacheEntry *typcache; TypeCacheEntry *scache; @@ -1335,7 +1335,8 @@ hash_range_extended(PG_FUNCTION_ARGS) upper_hash = 0; /* Merge hashes of flags and bounds */ - result = hash_uint32_extended((uint32) flags, seed); + result = DatumGetUInt64(hash_uint32_extended((uint32) flags, + DatumGetInt64(seed))); result ^= lower_hash; result = ROTATE_HIGH_AND_LOW_32BITS(result); result ^= upper_hash;