• Robert Haas's avatar
    Modify tqueue infrastructure to support transient record types. · 6e71dd7c
    Robert Haas authored
    Commit 4a4e6893, which introduced this
    mechanism, failed to account for the fact that the RECORD pseudo-type
    uses transient typmods that are only meaningful within a single
    backend.  Transferring such tuples without modification between two
    cooperating backends does not work.  This commit installs a system
    for passing the tuple descriptors over the same shm_mq being used to
    send the tuples themselves.  The two sides might not assign the same
    transient typmod to any given tuple descriptor, so we must also
    substitute the appropriate receiver-side typmod for the one used by
    the sender.  That adds some CPU overhead, but still seems better than
    being unable to pass records between cooperating parallel processes.
    
    Along the way, move the logic for handling multiple tuple queues from
    tqueue.c to nodeGather.c; tqueue.c now provides a TupleQueueReader,
    which reads from a single queue, rather than a TupleQueueFunnel, which
    potentially reads from multiple queues.  This change was suggested
    previously as a way to make sure that nodeGather.c rather than tqueue.c
    had policy control over the order in which to read from queues, but
    it wasn't clear to me until now how good an idea it was.  typmod
    mapping needs to be performed separately for each queue, and it is
    much simpler if the tqueue.c code handles that and leaves multiplexing
    multiple queues to higher layers of the stack.
    6e71dd7c
execnodes.h 72.3 KB