@ -3859,9 +3859,6 @@ heap_attr_equals(TupleDesc tupdesc, int attrnum, Datum value1, Datum value2,
* has_external indicates if any of the unmodified attributes ( from those
* has_external indicates if any of the unmodified attributes ( from those
* listed as interesting ) of the old tuple is a member of external_cols and is
* listed as interesting ) of the old tuple is a member of external_cols and is
* stored externally .
* stored externally .
*
* The input interesting_cols bitmapset is destructively modified ; that is OK
* since this is invoked at most once in heap_update .
*/
*/
static Bitmapset *
static Bitmapset *
HeapDetermineColumnsInfo ( Relation relation ,
HeapDetermineColumnsInfo ( Relation relation ,
@ -3870,19 +3867,20 @@ HeapDetermineColumnsInfo(Relation relation,
HeapTuple oldtup , HeapTuple newtup ,
HeapTuple oldtup , HeapTuple newtup ,
bool * has_external )
bool * has_external )
{
{
int attrnum ;
int attidx ;
Bitmapset * modified = NULL ;
Bitmapset * modified = NULL ;
TupleDesc tupdesc = RelationGetDescr ( relation ) ;
TupleDesc tupdesc = RelationGetDescr ( relation ) ;
while ( ( attrnum = bms_first_member ( interesting_cols ) ) > = 0 )
attidx = - 1 ;
while ( ( attidx = bms_next_member ( interesting_cols , attidx ) ) > = 0 )
{
{
/* attidx is zero-based, attrnum is the normal attribute number */
AttrNumber attrnum = attidx + FirstLowInvalidHeapAttributeNumber ;
Datum value1 ,
Datum value1 ,
value2 ;
value2 ;
bool isnull1 ,
bool isnull1 ,
isnull2 ;
isnull2 ;
attrnum + = FirstLowInvalidHeapAttributeNumber ;
/*
/*
* If it ' s a whole - tuple reference , say " not equal " . It ' s not really
* If it ' s a whole - tuple reference , say " not equal " . It ' s not really
* worth supporting this case , since it could only succeed after a
* worth supporting this case , since it could only succeed after a
@ -3890,9 +3888,7 @@ HeapDetermineColumnsInfo(Relation relation,
*/
*/
if ( attrnum = = 0 )
if ( attrnum = = 0 )
{
{
modified = bms_add_member ( modified ,
modified = bms_add_member ( modified , attidx ) ;
attrnum -
FirstLowInvalidHeapAttributeNumber ) ;
continue ;
continue ;
}
}
@ -3905,9 +3901,7 @@ HeapDetermineColumnsInfo(Relation relation,
{
{
if ( attrnum ! = TableOidAttributeNumber )
if ( attrnum ! = TableOidAttributeNumber )
{
{
modified = bms_add_member ( modified ,
modified = bms_add_member ( modified , attidx ) ;
attrnum -
FirstLowInvalidHeapAttributeNumber ) ;
continue ;
continue ;
}
}
}
}
@ -3924,9 +3918,7 @@ HeapDetermineColumnsInfo(Relation relation,
if ( ! heap_attr_equals ( tupdesc , attrnum , value1 ,
if ( ! heap_attr_equals ( tupdesc , attrnum , value1 ,
value2 , isnull1 , isnull2 ) )
value2 , isnull1 , isnull2 ) )
{
{
modified = bms_add_member ( modified ,
modified = bms_add_member ( modified , attidx ) ;
attrnum -
FirstLowInvalidHeapAttributeNumber ) ;
continue ;
continue ;
}
}
@ -3943,8 +3935,7 @@ HeapDetermineColumnsInfo(Relation relation,
* member of external_cols .
* member of external_cols .
*/
*/
if ( VARATT_IS_EXTERNAL ( ( struct varlena * ) DatumGetPointer ( value1 ) ) & &
if ( VARATT_IS_EXTERNAL ( ( struct varlena * ) DatumGetPointer ( value1 ) ) & &
bms_is_member ( attrnum - FirstLowInvalidHeapAttributeNumber ,
bms_is_member ( attidx , external_cols ) )
external_cols ) )
* has_external = true ;
* has_external = true ;
}
}