84#define ATTNULLABLE_UNRESTRICTED 'f'
85#define ATTNULLABLE_UNKNOWN 'u'
86#define ATTNULLABLE_VALID 'v'
87#define ATTNULLABLE_INVALID 'i'
153#define TupleDescAttrAddress(desc) \
154 (Form_pg_attribute) ((char *) (desc) + \
155 (offsetof(struct TupleDescData, compact_attrs) + \
156 (desc)->natts * sizeof(CompactAttribute)))
167#undef TupleDescAttrAddress
179#ifdef USE_ASSERT_CHECKING
198#define TupleDescSize(src) \
199 (offsetof(struct TupleDescData, compact_attrs) + \
200 (src)->natts * sizeof(CompactAttribute) + \
201 (src)->natts * sizeof(FormData_pg_attribute))
213#define PinTupleDesc(tupdesc) \
215 if ((tupdesc)->tdrefcount >= 0) \
216 IncrTupleDescRefCount(tupdesc); \
219#define ReleaseTupleDesc(tupdesc) \
221 if ((tupdesc)->tdrefcount >= 0) \
222 DecrTupleDescRefCount(tupdesc); \
231 const char *attributeName,
238 const char *attributeName,
#define FLEXIBLE_ARRAY_MEMBER
FormData_pg_attribute * Form_pg_attribute
bool has_generated_virtual
bool has_generated_stored
struct AttrMissing * missing
CompactAttribute compact_attrs[FLEXIBLE_ARRAY_MEMBER]
#define TupleDescAttrAddress(desc)
TupleDesc CreateTupleDescCopyConstr(TupleDesc tupdesc)
void TupleDescCopy(TupleDesc dst, TupleDesc src)
Node * TupleDescGetDefault(TupleDesc tupdesc, AttrNumber attnum)
void DecrTupleDescRefCount(TupleDesc tupdesc)
struct TupleConstr TupleConstr
void FreeTupleDesc(TupleDesc tupdesc)
void IncrTupleDescRefCount(TupleDesc tupdesc)
TupleDesc CreateTemplateTupleDesc(int natts)
struct AttrDefault AttrDefault
void verify_compact_attribute(TupleDesc, int attnum)
static FormData_pg_attribute * TupleDescAttr(TupleDesc tupdesc, int i)
static CompactAttribute * TupleDescCompactAttr(TupleDesc tupdesc, int i)
uint32 hashRowType(TupleDesc desc)
TupleDesc CreateTupleDescTruncatedCopy(TupleDesc tupdesc, int natts)
TupleDesc CreateTupleDescCopy(TupleDesc tupdesc)
void TupleDescInitBuiltinEntry(TupleDesc desc, AttrNumber attributeNumber, const char *attributeName, Oid oidtypeid, int32 typmod, int attdim)
TupleDesc BuildDescFromLists(const List *names, const List *types, const List *typmods, const List *collations)
struct TupleDescData TupleDescData
struct CompactAttribute CompactAttribute
void populate_compact_attribute(TupleDesc tupdesc, int attnum)
bool equalRowTypes(TupleDesc tupdesc1, TupleDesc tupdesc2)
struct TupleDescData * TupleDesc
void TupleDescInitEntryCollation(TupleDesc desc, AttrNumber attributeNumber, Oid collationid)
TupleDesc CreateTupleDesc(int natts, Form_pg_attribute *attrs)
void TupleDescInitEntry(TupleDesc desc, AttrNumber attributeNumber, const char *attributeName, Oid oidtypeid, int32 typmod, int attdim)
bool equalTupleDescs(TupleDesc tupdesc1, TupleDesc tupdesc2)
void TupleDescCopyEntry(TupleDesc dst, AttrNumber dstAttno, TupleDesc src, AttrNumber srcAttno)
struct ConstrCheck ConstrCheck