text: /*-------------------------------------------------------------------------
   *
   * tupconvert.h
   *      Tuple conversion support.
   *
   *
   * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group
   * Portions Copyright (c) 1994, Regents of the University of California
   *
   * src/include/access/tupconvert.h
   *
   *-------------------------------------------------------------------------
   */
  #ifndef TUPCONVERT_H
  #define TUPCONVERT_H
  
  #include "access/htup.h"
  #include "access/tupdesc.h"
  #include "utils/rel.h"
  
  typedef struct TupleConversionMap
  {
      TupleDesc    indesc;            /* tupdesc for source rowtype */
      TupleDesc    outdesc;        /* tupdesc for result rowtype */
      AttrNumber *attrMap;        /* indexes of input fields, or 0 for null */
      Datum       *invalues;        /* workspace for deconstructing source */
      bool       *inisnull;
      Datum       *outvalues;        /* workspace for constructing result */
      bool       *outisnull;
  } TupleConversionMap;
  
  
  extern TupleConversionMap *convert_tuples_by_position(TupleDesc indesc,
                             TupleDesc outdesc,
                             const char *msg);
  
  extern TupleConversionMap *convert_tuples_by_name(TupleDesc indesc,
                         TupleDesc outdesc,
                         const char *msg);
  
  extern AttrNumber *convert_tuples_by_name_map(TupleDesc indesc,
                             TupleDesc outdesc,
                             const char *msg);
  
  extern HeapTuple do_convert_tuple(HeapTuple tuple, TupleConversionMap *map, Relation rel);
  
  extern void free_conversion_map(TupleConversionMap *map);
  
  #endif                            /* TUPCONVERT_H */
  