1 /*-------------------------------------------------------------------------
2  *
3  * tupconvert.h
4  *	  Tuple conversion support.
5  *
6  *
7  * Portions Copyright (c) 1996-2018, 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 #include "nodes/bitmapset.h"
20 
21 
22 typedef struct TupleConversionMap
23 {
24 	TupleDesc	indesc;			/* tupdesc for source rowtype */
25 	TupleDesc	outdesc;		/* tupdesc for result rowtype */
26 	AttrNumber *attrMap;		/* indexes of input fields, or 0 for null */
27 	Datum	   *invalues;		/* workspace for deconstructing source */
28 	bool	   *inisnull;
29 	Datum	   *outvalues;		/* workspace for constructing result */
30 	bool	   *outisnull;
31 } TupleConversionMap;
32 
33 
34 extern TupleConversionMap *convert_tuples_by_position(TupleDesc indesc,
35 						   TupleDesc outdesc,
36 						   const char *msg);
37 
38 extern TupleConversionMap *convert_tuples_by_name(TupleDesc indesc,
39 					   TupleDesc outdesc,
40 					   const char *msg);
41 
42 extern AttrNumber *convert_tuples_by_name_map(TupleDesc indesc,
43 						   TupleDesc outdesc,
44 						   const char *msg);
45 
46 extern HeapTuple do_convert_tuple(HeapTuple tuple, TupleConversionMap *map);
47 extern Bitmapset *execute_attr_map_cols(Bitmapset *inbitmap, TupleConversionMap *map);
48 
49 extern void free_conversion_map(TupleConversionMap *map);
50 
51 #endif							/* TUPCONVERT_H */
52