@ -51,17 +51,12 @@ heap_desc(StringInfo buf, XLogRecord *record)
{
{
xl_heap_insert * xlrec = ( xl_heap_insert * ) rec ;
xl_heap_insert * xlrec = ( xl_heap_insert * ) rec ;
if ( record - > xl_info & XLOG_HEAP_INIT_PAGE )
appendStringInfoString ( buf , " insert(init): " ) ;
else
appendStringInfoString ( buf , " insert: " ) ;
out_target ( buf , & ( xlrec - > target ) ) ;
out_target ( buf , & ( xlrec - > target ) ) ;
}
}
else if ( info = = XLOG_HEAP_DELETE )
else if ( info = = XLOG_HEAP_DELETE )
{
{
xl_heap_delete * xlrec = ( xl_heap_delete * ) rec ;
xl_heap_delete * xlrec = ( xl_heap_delete * ) rec ;
appendStringInfoString ( buf , " delete: " ) ;
out_target ( buf , & ( xlrec - > target ) ) ;
out_target ( buf , & ( xlrec - > target ) ) ;
appendStringInfoChar ( buf , ' ' ) ;
appendStringInfoChar ( buf , ' ' ) ;
out_infobits ( buf , xlrec - > infobits_set ) ;
out_infobits ( buf , xlrec - > infobits_set ) ;
@ -70,10 +65,6 @@ heap_desc(StringInfo buf, XLogRecord *record)
{
{
xl_heap_update * xlrec = ( xl_heap_update * ) rec ;
xl_heap_update * xlrec = ( xl_heap_update * ) rec ;
if ( record - > xl_info & XLOG_HEAP_INIT_PAGE )
appendStringInfoString ( buf , " update(init): " ) ;
else
appendStringInfoString ( buf , " update: " ) ;
out_target ( buf , & ( xlrec - > target ) ) ;
out_target ( buf , & ( xlrec - > target ) ) ;
appendStringInfo ( buf , " xmax %u " , xlrec - > old_xmax ) ;
appendStringInfo ( buf , " xmax %u " , xlrec - > old_xmax ) ;
out_infobits ( buf , xlrec - > old_infobits_set ) ;
out_infobits ( buf , xlrec - > old_infobits_set ) ;
@ -86,10 +77,6 @@ heap_desc(StringInfo buf, XLogRecord *record)
{
{
xl_heap_update * xlrec = ( xl_heap_update * ) rec ;
xl_heap_update * xlrec = ( xl_heap_update * ) rec ;
if ( record - > xl_info & XLOG_HEAP_INIT_PAGE ) /* can this case happen? */
appendStringInfoString ( buf , " hot_update(init): " ) ;
else
appendStringInfoString ( buf , " hot_update: " ) ;
out_target ( buf , & ( xlrec - > target ) ) ;
out_target ( buf , & ( xlrec - > target ) ) ;
appendStringInfo ( buf , " xmax %u " , xlrec - > old_xmax ) ;
appendStringInfo ( buf , " xmax %u " , xlrec - > old_xmax ) ;
out_infobits ( buf , xlrec - > old_infobits_set ) ;
out_infobits ( buf , xlrec - > old_infobits_set ) ;
@ -102,7 +89,7 @@ heap_desc(StringInfo buf, XLogRecord *record)
{
{
xl_heap_lock * xlrec = ( xl_heap_lock * ) rec ;
xl_heap_lock * xlrec = ( xl_heap_lock * ) rec ;
appendStringInfo ( buf , " lock %u: " , xlrec - > locking_xid ) ;
appendStringInfo ( buf , " xid %u: " , xlrec - > locking_xid ) ;
out_target ( buf , & ( xlrec - > target ) ) ;
out_target ( buf , & ( xlrec - > target ) ) ;
appendStringInfoChar ( buf , ' ' ) ;
appendStringInfoChar ( buf , ' ' ) ;
out_infobits ( buf , xlrec - > infobits_set ) ;
out_infobits ( buf , xlrec - > infobits_set ) ;
@ -111,11 +98,8 @@ heap_desc(StringInfo buf, XLogRecord *record)
{
{
xl_heap_inplace * xlrec = ( xl_heap_inplace * ) rec ;
xl_heap_inplace * xlrec = ( xl_heap_inplace * ) rec ;
appendStringInfoString ( buf , " inplace: " ) ;
out_target ( buf , & ( xlrec - > target ) ) ;
out_target ( buf , & ( xlrec - > target ) ) ;
}
}
else
appendStringInfoString ( buf , " UNKNOWN " ) ;
}
}
void
void
heap2_desc ( StringInfo buf , XLogRecord * record )
heap2_desc ( StringInfo buf , XLogRecord * record )
@ -128,7 +112,7 @@ heap2_desc(StringInfo buf, XLogRecord *record)
{
{
xl_heap_clean * xlrec = ( xl_heap_clean * ) rec ;
xl_heap_clean * xlrec = ( xl_heap_clean * ) rec ;
appendStringInfo ( buf , " clean: rel %u/%u/%u; blk %u remxid %u" ,
appendStringInfo ( buf , " rel %u/%u/%u; blk %u remxid %u " ,
xlrec - > node . spcNode , xlrec - > node . dbNode ,
xlrec - > node . spcNode , xlrec - > node . dbNode ,
xlrec - > node . relNode , xlrec - > block ,
xlrec - > node . relNode , xlrec - > block ,
xlrec - > latestRemovedXid ) ;
xlrec - > latestRemovedXid ) ;
@ -137,27 +121,22 @@ heap2_desc(StringInfo buf, XLogRecord *record)
{
{
xl_heap_freeze_page * xlrec = ( xl_heap_freeze_page * ) rec ;
xl_heap_freeze_page * xlrec = ( xl_heap_freeze_page * ) rec ;
appendStringInfo ( buf , " freeze_page: rel %u/%u/%u; blk %u; cutoff xid %u ntuples %u" ,
appendStringInfo ( buf , " rel %u/%u/%u; blk %u; cutoff xid %u ntuples %u " ,
xlrec - > node . spcNode , xlrec - > node . dbNode ,
xlrec - > node . spcNode , xlrec - > node . dbNode ,
xlrec - > node . relNode , xlrec - > block ,
xlrec - > node . relNode , xlrec - > block ,
xlrec - > cutoff_xid , xlrec - > ntuples ) ;
xlrec - > cutoff_xid , xlrec - > ntuples ) ;
}
}
else if ( info = = XLOG_HEAP2_REWRITE )
{
appendStringInfoString ( buf , " heap rewrite: " ) ;
}
else if ( info = = XLOG_HEAP2_CLEANUP_INFO )
else if ( info = = XLOG_HEAP2_CLEANUP_INFO )
{
{
xl_heap_cleanup_info * xlrec = ( xl_heap_cleanup_info * ) rec ;
xl_heap_cleanup_info * xlrec = ( xl_heap_cleanup_info * ) rec ;
appendStringInfo ( buf , " cleanup info: remxid %u " ,
appendStringInfo ( buf , " remxid %u " , xlrec - > latestRemovedXid ) ;
xlrec - > latestRemovedXid ) ;
}
}
else if ( info = = XLOG_HEAP2_VISIBLE )
else if ( info = = XLOG_HEAP2_VISIBLE )
{
{
xl_heap_visible * xlrec = ( xl_heap_visible * ) rec ;
xl_heap_visible * xlrec = ( xl_heap_visible * ) rec ;
appendStringInfo ( buf , " visible: rel %u/%u/%u; blk %u" ,
appendStringInfo ( buf , " rel %u/%u/%u; blk %u " ,
xlrec - > node . spcNode , xlrec - > node . dbNode ,
xlrec - > node . spcNode , xlrec - > node . dbNode ,
xlrec - > node . relNode , xlrec - > block ) ;
xlrec - > node . relNode , xlrec - > block ) ;
}
}
@ -165,10 +144,6 @@ heap2_desc(StringInfo buf, XLogRecord *record)
{
{
xl_heap_multi_insert * xlrec = ( xl_heap_multi_insert * ) rec ;
xl_heap_multi_insert * xlrec = ( xl_heap_multi_insert * ) rec ;
if ( record - > xl_info & XLOG_HEAP_INIT_PAGE )
appendStringInfoString ( buf , " multi-insert (init): " ) ;
else
appendStringInfoString ( buf , " multi-insert: " ) ;
appendStringInfo ( buf , " rel %u/%u/%u; blk %u; %d tuples " ,
appendStringInfo ( buf , " rel %u/%u/%u; blk %u; %d tuples " ,
xlrec - > node . spcNode , xlrec - > node . dbNode , xlrec - > node . relNode ,
xlrec - > node . spcNode , xlrec - > node . dbNode , xlrec - > node . relNode ,
xlrec - > blkno , xlrec - > ntuples ) ;
xlrec - > blkno , xlrec - > ntuples ) ;
@ -177,7 +152,7 @@ heap2_desc(StringInfo buf, XLogRecord *record)
{
{
xl_heap_lock_updated * xlrec = ( xl_heap_lock_updated * ) rec ;
xl_heap_lock_updated * xlrec = ( xl_heap_lock_updated * ) rec ;
appendStringInfo ( buf , " lock updated: xmax %u msk %04x; " , xlrec - > xmax ,
appendStringInfo ( buf , " xmax %u msk %04x; " , xlrec - > xmax ,
xlrec - > infobits_set ) ;
xlrec - > infobits_set ) ;
out_target ( buf , & ( xlrec - > target ) ) ;
out_target ( buf , & ( xlrec - > target ) ) ;
}
}
@ -185,11 +160,91 @@ heap2_desc(StringInfo buf, XLogRecord *record)
{
{
xl_heap_new_cid * xlrec = ( xl_heap_new_cid * ) rec ;
xl_heap_new_cid * xlrec = ( xl_heap_new_cid * ) rec ;
appendStringInfo ( buf , " new_cid: " ) ;
out_target ( buf , & ( xlrec - > target ) ) ;
out_target ( buf , & ( xlrec - > target ) ) ;
appendStringInfo ( buf , " ; cmin: %u, cmax: %u, combo: %u " ,
appendStringInfo ( buf , " ; cmin: %u, cmax: %u, combo: %u " ,
xlrec - > cmin , xlrec - > cmax , xlrec - > combocid ) ;
xlrec - > cmin , xlrec - > cmax , xlrec - > combocid ) ;
}
}
else
}
appendStringInfoString ( buf , " UNKNOWN " ) ;
static const char *
append_init ( const char * str )
{
static char x [ 32 ] ;
strcpy ( x , str ) ;
strcat ( x , " +INIT " ) ;
return x ;
}
const char *
heap_identify ( uint8 info )
{
const char * id = NULL ;
switch ( info & XLOG_HEAP_OPMASK )
{
case XLOG_HEAP_INSERT :
id = " INSERT " ;
break ;
case XLOG_HEAP_DELETE :
id = " DELETE " ;
break ;
case XLOG_HEAP_UPDATE :
id = " UPDATE " ;
break ;
case XLOG_HEAP_HOT_UPDATE :
id = " HOT_UPDATE " ;
break ;
case XLOG_HEAP_LOCK :
id = " LOCK " ;
break ;
case XLOG_HEAP_INPLACE :
id = " INPLACE " ;
break ;
}
if ( info & XLOG_HEAP_INIT_PAGE )
id = append_init ( id ) ;
return id ;
}
const char *
heap2_identify ( uint8 info )
{
const char * id = NULL ;
switch ( info & XLOG_HEAP_OPMASK )
{
case XLOG_HEAP2_CLEAN :
id = " CLEAN " ;
break ;
case XLOG_HEAP2_FREEZE_PAGE :
id = " FREEZE_PAGE " ;
break ;
case XLOG_HEAP2_CLEANUP_INFO :
id = " CLEANUP_INFO " ;
break ;
case XLOG_HEAP2_VISIBLE :
id = " VISIBLE " ;
break ;
case XLOG_HEAP2_MULTI_INSERT :
id = " MULTI_INSERT " ;
break ;
case XLOG_HEAP2_LOCK_UPDATED :
id = " LOCK_UPDATED " ;
break ;
case XLOG_HEAP2_NEW_CID :
id = " NEW_CID " ;
break ;
case XLOG_HEAP2_REWRITE :
id = " REWRITE " ;
break ;
}
if ( info & XLOG_HEAP_INIT_PAGE )
id = append_init ( id ) ;
return id ;
}
}