]> granicus.if.org Git - postgresql/commitdiff
pageinspect: More type-sanity surgery on the new hash index code.
authorRobert Haas <rhaas@postgresql.org>
Fri, 3 Feb 2017 21:28:13 +0000 (16:28 -0500)
committerRobert Haas <rhaas@postgresql.org>
Fri, 3 Feb 2017 21:28:13 +0000 (16:28 -0500)
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.

contrib/pageinspect/hashfuncs.c
contrib/pageinspect/pageinspect--1.5--1.6.sql

index 49cb12e5189c154c56c50aed7b91c764793b0a5b..08663c109d1fb6838090fbb7d1b6d461d6bdba4d 100644 (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,
index a22438d3c33613c67f010aa4ccb02c45b66c617c..ac3956882c94c64c7aae36b8c75d9167234b1ac3 100644 (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'