1 /*-------------------------------------------------------------------------
2  *
3  * tupconvert.h
4  *	  Tuple conversion support.
5  *
6  *
7  * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group
8  * Portions Copyright (c) 1994, Regents of the University of California
9  *
10  * src/include/access/tupconvert.h
11  *
12  *-------------------------------------------------------------------------
13  */
14 #ifndef TUPCONVERT_H
15 #define TUPCONVERT_H
16 
17 #include "access/htup.h"
18 #include "access/tupdesc.h"
19 
20 
21 typedef struct TupleConversionMap
22 {
23 	TupleDesc	indesc;			/* tupdesc for source rowtype */
24 	TupleDesc	outdesc;		/* tupdesc for result rowtype */
25 	AttrNumber *attrMap;		/* indexes of input fields, or 0 for null */
26 	Datum	   *invalues;		/* workspace for deconstructing source */
27 	bool	   *inisnull;
28 	Datum	   *outvalues;		/* workspace for constructing result */
29 	bool	   *outisnull;
30 } TupleConversionMap;
31 
32 
33 extern TupleConversionMap *convert_tuples_by_position(TupleDesc indesc,
34 						   TupleDesc outdesc,
35 						   const char *msg);
36 
37 extern TupleConversionMap *convert_tuples_by_name(TupleDesc indesc,
38 					   TupleDesc outdesc,
39 					   const char *msg);
40 
41 extern AttrNumber *convert_tuples_by_name_map(TupleDesc indesc,
42 						   TupleDesc outdesc,
43 						   const char *msg);
44 
45 extern HeapTuple do_convert_tuple(HeapTuple tuple, TupleConversionMap *map);
46 
47 extern void free_conversion_map(TupleConversionMap *map);
48 
49 #endif							/* TUPCONVERT_H */
50