| /*------------------------------------------------------------------------- |
| * |
| * attmap.h |
| * Definitions for PostgreSQL attribute mappings |
| * |
| * |
| * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group |
| * Portions Copyright (c) 1994, Regents of the University of California |
| * |
| * src/include/access/attmap.h |
| * |
| *------------------------------------------------------------------------- |
| */ |
| #ifndef ATTMAP_H |
| #define ATTMAP_H |
| |
| #include "access/attnum.h" |
| #include "access/tupdesc.h" |
| |
| /* |
| * Attribute mapping structure |
| * |
| * This maps attribute numbers between a pair of relations, designated |
| * 'input' and 'output' (most typically inheritance parent and child |
| * relations), whose common columns may have different attribute numbers. |
| * Such difference may arise due to the columns being ordered differently |
| * in the two relations or the two relations having dropped columns at |
| * different positions. |
| * |
| * 'maplen' is set to the number of attributes of the 'output' relation, |
| * taking into account any of its dropped attributes, with the corresponding |
| * elements of the 'attnums' array set to 0. |
| */ |
| typedef struct AttrMap |
| { |
| AttrNumber *attnums; |
| int maplen; |
| } AttrMap; |
| |
| extern AttrMap *make_attrmap(int maplen); |
| extern void free_attrmap(AttrMap *map); |
| |
| /* Conversion routines to build mappings */ |
| extern AttrMap *build_attrmap_by_name(TupleDesc indesc, |
| TupleDesc outdesc, |
| bool missing_ok); |
| extern AttrMap *build_attrmap_by_name_if_req(TupleDesc indesc, |
| TupleDesc outdesc, |
| bool missing_ok); |
| extern AttrMap *build_attrmap_by_position(TupleDesc indesc, |
| TupleDesc outdesc, |
| const char *msg); |
| |
| #endif /* ATTMAP_H */ |