diff options
author | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2011-02-25 19:04:25 -0300 |
---|---|---|
committer | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2011-02-25 19:04:25 -0300 |
commit | a338d654614f897ccb58eaa8a6171abdb7dc8dff (patch) | |
tree | 9a73fbd759eb81398b07eb1ba0cc36529fa40d60 | |
parent | 79ad8fc5f857ed38057f482fc022bf157175c4d8 (diff) | |
download | postgresql-a338d654614f897ccb58eaa8a6171abdb7dc8dff.tar.gz postgresql-a338d654614f897ccb58eaa8a6171abdb7dc8dff.zip |
Fix pageinspect's heap_page_item to return infomasks as 32 bit values
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.
-rw-r--r-- | contrib/pageinspect/heapfuncs.c | 4 | ||||
-rw-r--r-- | contrib/pageinspect/pageinspect--unpackaged--1.0.sql | 20 |
2 files changed, 21 insertions, 3 deletions
diff --git a/contrib/pageinspect/heapfuncs.c b/contrib/pageinspect/heapfuncs.c index 49a2f911200..20bca0dc539 100644 --- a/contrib/pageinspect/heapfuncs.c +++ b/contrib/pageinspect/heapfuncs.c @@ -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); /* diff --git a/contrib/pageinspect/pageinspect--unpackaged--1.0.sql b/contrib/pageinspect/pageinspect--unpackaged--1.0.sql index a9d1b52a426..7d4feaf034a 100644 --- a/contrib/pageinspect/pageinspect--unpackaged--1.0.sql +++ b/contrib/pageinspect/pageinspect--unpackaged--1.0.sql @@ -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); |