Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Fix pageinspect's heap_page_item to return infomasks as 32 bit values
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Fri, 25 Feb 2011 22:04:25 +0000 (19:04 -0300)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Fri, 25 Feb 2011 22:04:25 +0000 (19:04 -0300)
HeapTupleHeader's t_infomask and t_infomask2 are defined as 16-bit
unsigned integers, so when the 16th bit was set, heap_page_item was
returning them as negative values, which was ugly.

The change to pageinspect--unpackaged--1.0.sql allows a module upgraded
from 9.0 to be cleanly updated from the previous definition.

contrib/pageinspect/heapfuncs.c
contrib/pageinspect/pageinspect--unpackaged--1.0.sql

index 49a2f9112006bce779be5272efba09eece088158..20bca0dc539dd92d79fe4922c6108238b3826c28 100644 (file)
@@ -170,8 +170,8 @@ heap_page_items(PG_FUNCTION_ARGS)
            values[5] = UInt32GetDatum(HeapTupleHeaderGetXmax(tuphdr));
            values[6] = UInt32GetDatum(HeapTupleHeaderGetRawCommandId(tuphdr)); /* shared with xvac */
            values[7] = PointerGetDatum(&tuphdr->t_ctid);
-           values[8] = UInt16GetDatum(tuphdr->t_infomask2);
-           values[9] = UInt16GetDatum(tuphdr->t_infomask);
+           values[8] = UInt32GetDatum(tuphdr->t_infomask2);
+           values[9] = UInt32GetDatum(tuphdr->t_infomask);
            values[10] = UInt8GetDatum(tuphdr->t_hoff);
 
            /*
index a9d1b52a4268cf14793f07dd0cdf0b7fe1698793..7d4feaf034ae40198355b49b2862ef20a07df1bc 100644 (file)
@@ -1,9 +1,27 @@
 /* contrib/pageinspect/pageinspect--unpackaged--1.0.sql */
 
+DROP FUNCTION heap_page_items(bytea);
+CREATE FUNCTION heap_page_items(IN page bytea,
+   OUT lp smallint,
+   OUT lp_off smallint,
+   OUT lp_flags smallint,
+   OUT lp_len smallint,
+   OUT t_xmin xid,
+   OUT t_xmax xid,
+   OUT t_field3 int4,
+   OUT t_ctid tid,
+   OUT t_infomask2 integer,
+   OUT t_infomask integer,
+   OUT t_hoff smallint,
+   OUT t_bits text,
+   OUT t_oid oid)
+RETURNS SETOF record
+AS 'MODULE_PATHNAME', 'heap_page_items'
+LANGUAGE C STRICT;
+
 ALTER EXTENSION pageinspect ADD function get_raw_page(text,integer);
 ALTER EXTENSION pageinspect ADD function get_raw_page(text,text,integer);
 ALTER EXTENSION pageinspect ADD function page_header(bytea);
-ALTER EXTENSION pageinspect ADD function heap_page_items(bytea);
 ALTER EXTENSION pageinspect ADD function bt_metap(text);
 ALTER EXTENSION pageinspect ADD function bt_page_stats(text,integer);
 ALTER EXTENSION pageinspect ADD function bt_page_items(text,integer);