pageinspect: More type-sanity surgery on the new hash index code.

Uniformly expose unsigned quantities using the next-wider signed
integer type (since we have no unsigned types at the SQL level).
At the SQL level, this results a change to report itemoffset as
int4 rather than int2.  Also at the SQL level, report one value
that is an OID as type oid.  Under the hood, uniformly use macros
that match the SQL output type as to both width and signedness.
This commit is contained in:
Robert Haas 2017-02-03 16:28:13 -05:00
parent e759854a09
commit 871ec0e336
2 changed files with 20 additions and 20 deletions

View File

@ -346,11 +346,11 @@ hash_page_items(PG_FUNCTION_ARGS)
MemSet(nulls, 0, sizeof(nulls));
j = 0;
values[j++] = UInt16GetDatum(uargs->offset);
values[j++] = Int32GetDatum((int32) uargs->offset);
values[j++] = PointerGetDatum(&itup->t_tid);
hashkey = _hash_get_indextuple_hashkey(itup);
values[j] = UInt64GetDatum((uint64) hashkey);
values[j] = Int64GetDatum((int64) hashkey);
tuple = heap_form_tuple(fctx->attinmeta->tupdesc, values, nulls);
result = HeapTupleGetDatum(tuple);
@ -466,7 +466,7 @@ hash_bitmap_info(PG_FUNCTION_ARGS)
MemSet(nulls, 0, sizeof(nulls));
j = 0;
values[j++] = UInt64GetDatum((uint64) bitmapblkno);
values[j++] = Int64GetDatum((int64) bitmapblkno);
values[j++] = Int32GetDatum(bitmapbit);
values[j++] = BoolGetDatum(bit);
@ -515,30 +515,30 @@ hash_metapage_info(PG_FUNCTION_ARGS)
MemSet(nulls, 0, sizeof(nulls));
j = 0;
values[j++] = UInt64GetDatum(metad->hashm_magic);
values[j++] = UInt64GetDatum(metad->hashm_version);
values[j++] = Int64GetDatum((int64) metad->hashm_magic);
values[j++] = Int64GetDatum((int64) metad->hashm_version);
values[j++] = Float8GetDatum(metad->hashm_ntuples);
values[j++] = UInt32GetDatum(metad->hashm_ffactor);
values[j++] = UInt32GetDatum(metad->hashm_bsize);
values[j++] = UInt32GetDatum(metad->hashm_bmsize);
values[j++] = UInt32GetDatum(metad->hashm_bmshift);
values[j++] = UInt64GetDatum(metad->hashm_maxbucket);
values[j++] = UInt64GetDatum(metad->hashm_highmask);
values[j++] = UInt64GetDatum(metad->hashm_lowmask);
values[j++] = UInt64GetDatum(metad->hashm_ovflpoint);
values[j++] = UInt64GetDatum(metad->hashm_firstfree);
values[j++] = UInt64GetDatum(metad->hashm_nmaps);
values[j++] = UInt32GetDatum(metad->hashm_procid);
values[j++] = Int32GetDatum((int32) metad->hashm_ffactor);
values[j++] = Int32GetDatum((int32) metad->hashm_bsize);
values[j++] = Int32GetDatum((int32) metad->hashm_bmsize);
values[j++] = Int32GetDatum((int32) metad->hashm_bmshift);
values[j++] = Int64GetDatum((int64) metad->hashm_maxbucket);
values[j++] = Int64GetDatum((int64) metad->hashm_highmask);
values[j++] = Int64GetDatum((int64) metad->hashm_lowmask);
values[j++] = Int64GetDatum((int64) metad->hashm_ovflpoint);
values[j++] = Int64GetDatum((int64) metad->hashm_firstfree);
values[j++] = Int64GetDatum((int64) metad->hashm_nmaps);
values[j++] = ObjectIdGetDatum((Oid) metad->hashm_procid);
for (i = 0; i < HASH_MAX_SPLITPOINTS; i++)
spares[i] = UInt64GetDatum(metad->hashm_spares[i]);
spares[i] = Int64GetDatum((int8) metad->hashm_spares[i]);
values[j++] = PointerGetDatum(construct_array(spares,
HASH_MAX_SPLITPOINTS,
INT8OID,
8, FLOAT8PASSBYVAL, 'd'));
for (i = 0; i < HASH_MAX_BITMAPS; i++)
mapp[i] = UInt64GetDatum(metad->hashm_mapp[i]);
mapp[i] = Int64GetDatum((int64) metad->hashm_mapp[i]);
values[j++] = PointerGetDatum(construct_array(mapp,
HASH_MAX_BITMAPS,
INT8OID,

View File

@ -35,7 +35,7 @@ LANGUAGE C STRICT PARALLEL SAFE;
-- hash_page_items()
--
CREATE FUNCTION hash_page_items(IN page bytea,
OUT itemoffset smallint,
OUT itemoffset int4,
OUT ctid tid,
OUT data int8)
RETURNS SETOF record
@ -70,7 +70,7 @@ CREATE FUNCTION hash_metapage_info(IN page bytea,
OUT ovflpoint int8,
OUT firstfree int8,
OUT nmaps int8,
OUT procid int4,
OUT procid oid,
OUT spares int8[],
OUT mapp int8[])
AS 'MODULE_PATHNAME', 'hash_metapage_info'