postgres.git / summary / log / commit / refs

commit    88ebd62fcc2ea7c55c0858f6dd4800d51383529f
Author:   Andres Freund <andres@anarazel.de>
Date:     Thu Aug 23 23:58:53 2018 +0000

    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


src/backend/access/common/heaptuple.c | 45 ----------------------------------- src/include/executor/tuptable.h | 13 +++++++++- 2 files changed, 12 insertions(+), 46 deletions(-) diff --git a/src/backend/access/common/heaptuple.c b/src/backend/access/common/heaptuple.c index 2ec7e6a4392..d8b06bca7e7 100644 --- a/src/backend/access/common/heaptuple.c +++ b/src/backend/access/common/heaptuple.c @@ -1601,51 +1601,6 @@ slot_getattr(TupleTableSlot *slot, int attnum, bool *isnull) 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 * This function forces the entries of the slot's Datum/isnull diff --git a/src/include/executor/tuptable.h b/src/include/executor/tuptable.h index 0b874d97638..bb38aa655c0 100644 --- a/src/include/executor/tuptable.h +++ b/src/include/executor/tuptable.h @@ -174,11 +174,22 @@ extern TupleTableSlot *ExecCopySlot(TupleTableSlot *dstslot, /* in access/common/heaptuple.c */ 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 bool slot_attisnull(TupleTableSlot *slot, int attnum); extern bool slot_getsysattr(TupleTableSlot *slot, int attnum, Datum *value, bool *isnull); 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 */ [parent: a40631a920ac]