mirror of
https://github.com/postgres/postgres.git
synced 2025-06-26 12:21:12 +03:00
Deduplicate code between slot_getallattrs() and slot_getsomeattrs().
Code in slot_getallattrs() is the same as if slot_getsomeattrs() is called with number of attributes specified in the tuple descriptor. Implement it that way instead of duplicating the code between those two functions. This is part of a patchseries abstracting TupleTableSlots so they can store arbitrary forms of tuples, but is a nice enough cleanup on its own. Author: Ashutosh Bapat Reviewed-By: Andres Freund Discussion: https://postgr.es/m/20180220224318.gw4oe5jadhpmcdnm@alap3.anarazel.de
This commit is contained in:
@ -1601,51 +1601,6 @@ slot_getattr(TupleTableSlot *slot, int attnum, bool *isnull)
|
|||||||
return slot->tts_values[attnum - 1];
|
return slot->tts_values[attnum - 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* slot_getallattrs
|
|
||||||
* This function forces all the entries of the slot's Datum/isnull
|
|
||||||
* arrays to be valid. The caller may then extract data directly
|
|
||||||
* from those arrays instead of using slot_getattr.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
slot_getallattrs(TupleTableSlot *slot)
|
|
||||||
{
|
|
||||||
int tdesc_natts = slot->tts_tupleDescriptor->natts;
|
|
||||||
int attnum;
|
|
||||||
HeapTuple tuple;
|
|
||||||
|
|
||||||
/* Quick out if we have 'em all already */
|
|
||||||
if (slot->tts_nvalid == tdesc_natts)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* otherwise we had better have a physical tuple (tts_nvalid should equal
|
|
||||||
* natts in all virtual-tuple cases)
|
|
||||||
*/
|
|
||||||
tuple = slot->tts_tuple;
|
|
||||||
if (tuple == NULL) /* internal error */
|
|
||||||
elog(ERROR, "cannot extract attribute from empty tuple slot");
|
|
||||||
|
|
||||||
/*
|
|
||||||
* load up any slots available from physical tuple
|
|
||||||
*/
|
|
||||||
attnum = HeapTupleHeaderGetNatts(tuple->t_data);
|
|
||||||
attnum = Min(attnum, tdesc_natts);
|
|
||||||
|
|
||||||
slot_deform_tuple(slot, attnum);
|
|
||||||
|
|
||||||
attnum = slot->tts_nvalid;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If tuple doesn't have all the atts indicated by tupleDesc, read the
|
|
||||||
* rest as NULLS or missing values.
|
|
||||||
*/
|
|
||||||
if (attnum < tdesc_natts)
|
|
||||||
slot_getmissingattrs(slot, attnum, tdesc_natts);
|
|
||||||
|
|
||||||
slot->tts_nvalid = tdesc_natts;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* slot_getsomeattrs
|
* slot_getsomeattrs
|
||||||
* This function forces the entries of the slot's Datum/isnull
|
* This function forces the entries of the slot's Datum/isnull
|
||||||
|
@ -174,11 +174,22 @@ extern TupleTableSlot *ExecCopySlot(TupleTableSlot *dstslot,
|
|||||||
|
|
||||||
/* in access/common/heaptuple.c */
|
/* in access/common/heaptuple.c */
|
||||||
extern Datum slot_getattr(TupleTableSlot *slot, int attnum, bool *isnull);
|
extern Datum slot_getattr(TupleTableSlot *slot, int attnum, bool *isnull);
|
||||||
extern void slot_getallattrs(TupleTableSlot *slot);
|
|
||||||
extern void slot_getsomeattrs(TupleTableSlot *slot, int attnum);
|
extern void slot_getsomeattrs(TupleTableSlot *slot, int attnum);
|
||||||
extern bool slot_attisnull(TupleTableSlot *slot, int attnum);
|
extern bool slot_attisnull(TupleTableSlot *slot, int attnum);
|
||||||
extern bool slot_getsysattr(TupleTableSlot *slot, int attnum,
|
extern bool slot_getsysattr(TupleTableSlot *slot, int attnum,
|
||||||
Datum *value, bool *isnull);
|
Datum *value, bool *isnull);
|
||||||
extern void slot_getmissingattrs(TupleTableSlot *slot, int startAttNum, int lastAttNum);
|
extern void slot_getmissingattrs(TupleTableSlot *slot, int startAttNum, int lastAttNum);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* slot_getallattrs
|
||||||
|
* This function forces all the entries of the slot's Datum/isnull
|
||||||
|
* arrays to be valid. The caller may then extract data directly
|
||||||
|
* from those arrays instead of using slot_getattr.
|
||||||
|
*/
|
||||||
|
static inline void
|
||||||
|
slot_getallattrs(TupleTableSlot *slot)
|
||||||
|
{
|
||||||
|
slot_getsomeattrs(slot, slot->tts_tupleDescriptor->natts);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* TUPTABLE_H */
|
#endif /* TUPTABLE_H */
|
||||||
|
Reference in New Issue
Block a user