• Andres Freund's avatar
    Make TupleTableSlots extensible, finish split of existing slot type. · 4da597ed
    Andres Freund authored
    This commit completes the work prepared in 1a0586de, splitting the
    old TupleTableSlot implementation (which could store buffer, heap,
    minimal and virtual slots) into four different slot types.  As
    described in the aforementioned commit, this is done with the goal of
    making tuple table slots extensible, to allow for pluggable table
    access methods.
    
    To achieve runtime extensibility for TupleTableSlots, operations on
    slots that can differ between types of slots are performed using the
    TupleTableSlotOps struct provided at slot creation time.  That
    includes information from the size of TupleTableSlot struct to be
    allocated, initialization, deforming etc.  See the struct's definition
    for more detailed information about callbacks TupleTableSlotOps.
    
    I decided to rename TTSOpsBufferTuple to TTSOpsBufferHeapTuple and
    ExecCopySlotTuple to ExecCopySlotHeapTuple, as that seems more
    consistent with other naming introduced in recent patches.
    
    There's plenty optimization potential in the slot implementation, but
    according to benchmarking the state after this commit has similar
    performance characteristics to before this set of changes, which seems
    sufficient.
    
    There's a few changes in execReplication.c that currently need to poke
    through the slot abstraction, that'll be repaired once the pluggable
    storage patchset provides the necessary infrastructure.
    
    Author: Andres Freund and  Ashutosh Bapat, with changes by Amit Khandekar
    Discussion: https://postgr.es/m/20181105210039.hh4vvi4vwoq5ba2q@alap3.anarazel.de
    4da597ed
nodeIndexscan.c 52.1 KB