From 5cef2ced3221252f6dda1d2fd82149485bc7d22d Mon Sep 17 00:00:00 2001 From: David Rowley Date: Mon, 2 Dec 2024 13:39:04 +1300 Subject: [PATCH v5 2/5] Use CompactAttribute instead of FormData_pg_attribute This adds more usages of TupleDesc's CompactAttribute rather than using FormData_pg_attribute. Author: David Rowley Discussion: https://postgr.es/m/CAApHDvrBztXP3yx=NKNmo3xwFAFhEdyPnvrDg3=M0RhDs+4vYw@mail.gmail.com --- contrib/amcheck/verify_heapam.c | 4 ++-- contrib/pageinspect/heapfuncs.c | 4 ++-- contrib/postgres_fdw/postgres_fdw.c | 6 +++--- src/backend/access/brin/brin_inclusion.c | 8 ++++---- src/backend/access/brin/brin_tuple.c | 2 +- src/backend/access/common/attmap.c | 8 +++++--- src/backend/access/gin/ginbulk.c | 4 ++-- src/backend/access/gin/ginget.c | 4 ++-- src/backend/access/gist/gistbuild.c | 6 ++++-- src/backend/access/heap/heapam.c | 8 ++++---- src/backend/access/heap/heapam_handler.c | 2 +- src/backend/access/heap/heaptoast.c | 6 +++--- src/backend/access/nbtree/nbtutils.c | 4 ++-- src/backend/access/spgist/spgdoinsert.c | 2 +- src/backend/access/table/toast_helper.c | 2 +- src/backend/commands/copy.c | 6 +++--- src/backend/executor/execExpr.c | 4 ++-- src/backend/executor/execExprInterp.c | 6 +++--- src/backend/executor/execJunk.c | 2 +- src/backend/executor/execTuples.c | 4 ++-- src/backend/executor/functions.c | 2 +- src/backend/executor/nodeMemoize.c | 8 ++++---- src/backend/executor/nodeModifyTable.c | 4 ++-- src/backend/executor/nodeValuesscan.c | 4 ++-- src/backend/executor/tstoreReceiver.c | 4 ++-- src/backend/jit/llvm/llvmjit_deform.c | 4 ++-- src/backend/optimizer/util/plancat.c | 4 ++-- src/backend/replication/pgoutput/pgoutput.c | 2 +- src/backend/utils/adt/expandedrecord.c | 10 +++++----- src/backend/utils/adt/ri_triggers.c | 2 +- 30 files changed, 70 insertions(+), 66 deletions(-) diff --git a/contrib/amcheck/verify_heapam.c b/contrib/amcheck/verify_heapam.c index 9c74daacee..f6d91aaa74 100644 --- a/contrib/amcheck/verify_heapam.c +++ b/contrib/amcheck/verify_heapam.c @@ -1571,11 +1571,11 @@ check_tuple_attribute(HeapCheckContext *ctx) struct varlena *attr; char *tp; /* pointer to the tuple data */ uint16 infomask; - Form_pg_attribute thisatt; + CompactAttribute *thisatt; struct varatt_external toast_pointer; infomask = ctx->tuphdr->t_infomask; - thisatt = TupleDescAttr(RelationGetDescr(ctx->rel), ctx->attnum); + thisatt = TupleDescCompactAttr(RelationGetDescr(ctx->rel), ctx->attnum); tp = (char *) ctx->tuphdr + ctx->tuphdr->t_hoff; diff --git a/contrib/pageinspect/heapfuncs.c b/contrib/pageinspect/heapfuncs.c index 3dc705e43f..8c1b7d38aa 100644 --- a/contrib/pageinspect/heapfuncs.c +++ b/contrib/pageinspect/heapfuncs.c @@ -334,11 +334,11 @@ tuple_data_split_internal(Oid relid, char *tupdata, for (i = 0; i < nattrs; i++) { - Form_pg_attribute attr; + CompactAttribute *attr; bool is_null; bytea *attr_data = NULL; - attr = TupleDescAttr(tupdesc, i); + attr = TupleDescCompactAttr(tupdesc, i); /* * Tuple header can specify fewer attributes than tuple descriptor as diff --git a/contrib/postgres_fdw/postgres_fdw.c b/contrib/postgres_fdw/postgres_fdw.c index c0810fbd7c..cf56434118 100644 --- a/contrib/postgres_fdw/postgres_fdw.c +++ b/contrib/postgres_fdw/postgres_fdw.c @@ -1818,7 +1818,7 @@ postgresPlanForeignModify(PlannerInfo *root, for (attnum = 1; attnum <= tupdesc->natts; attnum++) { - Form_pg_attribute attr = TupleDescAttr(tupdesc, attnum - 1); + CompactAttribute *attr = TupleDescCompactAttr(tupdesc, attnum - 1); if (!attr->attisdropped) targetAttrs = lappend_int(targetAttrs, attnum); @@ -2191,7 +2191,7 @@ postgresBeginForeignInsert(ModifyTableState *mtstate, /* We transmit all columns that are defined in the foreign table. */ for (attnum = 1; attnum <= tupdesc->natts; attnum++) { - Form_pg_attribute attr = TupleDescAttr(tupdesc, attnum - 1); + CompactAttribute *attr = TupleDescCompactAttr(tupdesc, attnum - 1); if (!attr->attisdropped) targetAttrs = lappend_int(targetAttrs, attnum); @@ -4311,7 +4311,7 @@ convert_prep_stmt_params(PgFdwModifyState *fmstate, foreach(lc, fmstate->target_attrs) { int attnum = lfirst_int(lc); - Form_pg_attribute attr = TupleDescAttr(tupdesc, attnum - 1); + CompactAttribute *attr = TupleDescCompactAttr(tupdesc, attnum - 1); Datum value; bool isnull; diff --git a/src/backend/access/brin/brin_inclusion.c b/src/backend/access/brin/brin_inclusion.c index 750276998c..faec0a9da8 100644 --- a/src/backend/access/brin/brin_inclusion.c +++ b/src/backend/access/brin/brin_inclusion.c @@ -146,12 +146,12 @@ brin_inclusion_add_value(PG_FUNCTION_ARGS) Datum result; bool new = false; AttrNumber attno; - Form_pg_attribute attr; + CompactAttribute *attr; Assert(!isnull); attno = column->bv_attno; - attr = TupleDescAttr(bdesc->bd_tupdesc, attno - 1); + attr = TupleDescCompactAttr(bdesc->bd_tupdesc, attno - 1); /* * If the recorded value is null, copy the new value (which we know to be @@ -479,7 +479,7 @@ brin_inclusion_union(PG_FUNCTION_ARGS) BrinValues *col_b = (BrinValues *) PG_GETARG_POINTER(2); Oid colloid = PG_GET_COLLATION(); AttrNumber attno; - Form_pg_attribute attr; + CompactAttribute *attr; FmgrInfo *finfo; Datum result; @@ -487,7 +487,7 @@ brin_inclusion_union(PG_FUNCTION_ARGS) Assert(!col_a->bv_allnulls && !col_b->bv_allnulls); attno = col_a->bv_attno; - attr = TupleDescAttr(bdesc->bd_tupdesc, attno - 1); + attr = TupleDescCompactAttr(bdesc->bd_tupdesc, attno - 1); /* If B includes empty elements, mark A similarly, if needed. */ if (!DatumGetBool(col_a->bv_values[INCLUSION_CONTAINS_EMPTY]) && diff --git a/src/backend/access/brin/brin_tuple.c b/src/backend/access/brin/brin_tuple.c index 997eb6d822..aae646be5d 100644 --- a/src/backend/access/brin/brin_tuple.c +++ b/src/backend/access/brin/brin_tuple.c @@ -699,7 +699,7 @@ brin_deconstruct_tuple(BrinDesc *brdesc, datumno < brdesc->bd_info[attnum]->oi_nstored; datumno++) { - Form_pg_attribute thisatt = TupleDescAttr(diskdsc, stored); + CompactAttribute *thisatt = TupleDescCompactAttr(diskdsc, stored); if (thisatt->attlen == -1) { diff --git a/src/backend/access/common/attmap.c b/src/backend/access/common/attmap.c index b0fe27ef57..0805c4121e 100644 --- a/src/backend/access/common/attmap.c +++ b/src/backend/access/common/attmap.c @@ -135,7 +135,7 @@ build_attrmap_by_position(TupleDesc indesc, /* Check for unused input columns */ for (; j < indesc->natts; j++) { - if (TupleDescAttr(indesc, j)->attisdropped) + if (TupleDescCompactAttr(indesc, j)->attisdropped) continue; nincols++; same = false; /* we'll complain below */ @@ -299,8 +299,8 @@ check_attrmap_match(TupleDesc indesc, for (i = 0; i < attrMap->maplen; i++) { - Form_pg_attribute inatt = TupleDescAttr(indesc, i); - Form_pg_attribute outatt = TupleDescAttr(outdesc, i); + CompactAttribute *inatt = TupleDescCompactAttr(indesc, i); + CompactAttribute *outatt; /* * If the input column has a missing attribute, we need a conversion. @@ -311,6 +311,8 @@ check_attrmap_match(TupleDesc indesc, if (attrMap->attnums[i] == (i + 1)) continue; + outatt = TupleDescCompactAttr(outdesc, i); + /* * If it's a dropped column and the corresponding input column is also * dropped, we don't need a conversion. However, attlen and attalign diff --git a/src/backend/access/gin/ginbulk.c b/src/backend/access/gin/ginbulk.c index f08b66ab79..d86b75bd63 100644 --- a/src/backend/access/gin/ginbulk.c +++ b/src/backend/access/gin/ginbulk.c @@ -127,10 +127,10 @@ ginInitBA(BuildAccumulator *accum) static Datum getDatumCopy(BuildAccumulator *accum, OffsetNumber attnum, Datum value) { - Form_pg_attribute att; + CompactAttribute *att; Datum res; - att = TupleDescAttr(accum->ginstate->origTupdesc, attnum - 1); + att = TupleDescCompactAttr(accum->ginstate->origTupdesc, attnum - 1); if (att->attbyval) res = value; else diff --git a/src/backend/access/gin/ginget.c b/src/backend/access/gin/ginget.c index 0b4f2ebadb..2e347b6a32 100644 --- a/src/backend/access/gin/ginget.c +++ b/src/backend/access/gin/ginget.c @@ -122,7 +122,7 @@ collectMatchBitmap(GinBtreeData *btree, GinBtreeStack *stack, GinScanEntry scanEntry, Snapshot snapshot) { OffsetNumber attnum; - Form_pg_attribute attr; + CompactAttribute *attr; /* Initialize empty bitmap result */ scanEntry->matchBitmap = tbm_create(work_mem * 1024L, NULL); @@ -134,7 +134,7 @@ collectMatchBitmap(GinBtreeData *btree, GinBtreeStack *stack, /* Locate tupdesc entry for key column (for attbyval/attlen data) */ attnum = scanEntry->attnum; - attr = TupleDescAttr(btree->ginstate->origTupdesc, attnum - 1); + attr = TupleDescCompactAttr(btree->ginstate->origTupdesc, attnum - 1); /* * Predicate lock entry leaf page, following pages will be locked by diff --git a/src/backend/access/gist/gistbuild.c b/src/backend/access/gist/gistbuild.c index 63d1914b37..3a2759b446 100644 --- a/src/backend/access/gist/gistbuild.c +++ b/src/backend/access/gist/gistbuild.c @@ -657,10 +657,12 @@ gistInitBuffering(GISTBuildState *buildstate) itupMinSize = (Size) MAXALIGN(sizeof(IndexTupleData)); for (i = 0; i < index->rd_att->natts; i++) { - if (TupleDescAttr(index->rd_att, i)->attlen < 0) + CompactAttribute *attr = TupleDescCompactAttr(index->rd_att, i); + + if (attr->attlen < 0) itupMinSize += VARHDRSZ; else - itupMinSize += TupleDescAttr(index->rd_att, i)->attlen; + itupMinSize += attr->attlen; } /* Calculate average and maximal number of index tuples which fit to page */ diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index d00300c5dc..207e313bda 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -4197,8 +4197,6 @@ static bool heap_attr_equals(TupleDesc tupdesc, int attrnum, Datum value1, Datum value2, bool isnull1, bool isnull2) { - Form_pg_attribute att; - /* * If one value is NULL and other is not, then they are certainly not * equal @@ -4228,8 +4226,10 @@ heap_attr_equals(TupleDesc tupdesc, int attrnum, Datum value1, Datum value2, } else { + CompactAttribute *att; + Assert(attrnum <= tupdesc->natts); - att = TupleDescAttr(tupdesc, attrnum - 1); + att = TupleDescCompactAttr(tupdesc, attrnum - 1); return datumIsEqual(value1, value2, att->attbyval, att->attlen); } } @@ -4311,7 +4311,7 @@ HeapDetermineColumnsInfo(Relation relation, * that system attributes can't be stored externally. */ if (attrnum < 0 || isnull1 || - TupleDescAttr(tupdesc, attrnum - 1)->attlen != -1) + TupleDescCompactAttr(tupdesc, attrnum - 1)->attlen != -1) continue; /* diff --git a/src/backend/access/heap/heapam_handler.c b/src/backend/access/heap/heapam_handler.c index a8d95e0f1c..ee1392facf 100644 --- a/src/backend/access/heap/heapam_handler.c +++ b/src/backend/access/heap/heapam_handler.c @@ -2553,7 +2553,7 @@ reform_and_rewrite_tuple(HeapTuple tuple, /* Be sure to null out any dropped columns */ for (i = 0; i < newTupDesc->natts; i++) { - if (TupleDescAttr(newTupDesc, i)->attisdropped) + if (TupleDescCompactAttr(newTupDesc, i)->attisdropped) isnull[i] = true; } diff --git a/src/backend/access/heap/heaptoast.c b/src/backend/access/heap/heaptoast.c index a420e16530..c3a85d8d32 100644 --- a/src/backend/access/heap/heaptoast.c +++ b/src/backend/access/heap/heaptoast.c @@ -369,7 +369,7 @@ toast_flatten_tuple(HeapTuple tup, TupleDesc tupleDesc) /* * Look at non-null varlena attributes */ - if (!toast_isnull[i] && TupleDescAttr(tupleDesc, i)->attlen == -1) + if (!toast_isnull[i] && TupleDescCompactAttr(tupleDesc, i)->attlen == -1) { struct varlena *new_value; @@ -483,7 +483,7 @@ toast_flatten_tuple_to_datum(HeapTupleHeader tup, */ if (toast_isnull[i]) has_nulls = true; - else if (TupleDescAttr(tupleDesc, i)->attlen == -1) + else if (TupleDescCompactAttr(tupleDesc, i)->attlen == -1) { struct varlena *new_value; @@ -584,7 +584,7 @@ toast_build_flattened_tuple(TupleDesc tupleDesc, /* * Look at non-null varlena attributes */ - if (!isnull[i] && TupleDescAttr(tupleDesc, i)->attlen == -1) + if (!isnull[i] && TupleDescCompactAttr(tupleDesc, i)->attlen == -1) { struct varlena *new_value; diff --git a/src/backend/access/nbtree/nbtutils.c b/src/backend/access/nbtree/nbtutils.c index 50cbf06cb4..e5e4f3bfbb 100644 --- a/src/backend/access/nbtree/nbtutils.c +++ b/src/backend/access/nbtree/nbtutils.c @@ -4886,11 +4886,11 @@ _bt_keep_natts_fast(Relation rel, IndexTuple lastleft, IndexTuple firstright) datum2; bool isNull1, isNull2; - Form_pg_attribute att; + CompactAttribute *att; datum1 = index_getattr(lastleft, attnum, itupdesc, &isNull1); datum2 = index_getattr(firstright, attnum, itupdesc, &isNull2); - att = TupleDescAttr(itupdesc, attnum - 1); + att = TupleDescCompactAttr(itupdesc, attnum - 1); if (isNull1 != isNull2) break; diff --git a/src/backend/access/spgist/spgdoinsert.c b/src/backend/access/spgist/spgdoinsert.c index a4995c168b..2cb7ce43ba 100644 --- a/src/backend/access/spgist/spgdoinsert.c +++ b/src/backend/access/spgist/spgdoinsert.c @@ -1974,7 +1974,7 @@ spgdoinsert(Relation index, SpGistState *state, { if (!isnulls[i]) { - if (TupleDescAttr(leafDescriptor, i)->attlen == -1) + if (TupleDescCompactAttr(leafDescriptor, i)->attlen == -1) leafDatums[i] = PointerGetDatum(PG_DETOAST_DATUM(datums[i])); else leafDatums[i] = datums[i]; diff --git a/src/backend/access/table/toast_helper.c b/src/backend/access/table/toast_helper.c index 53224932f0..b16fd21b8d 100644 --- a/src/backend/access/table/toast_helper.c +++ b/src/backend/access/table/toast_helper.c @@ -324,7 +324,7 @@ toast_delete_external(Relation rel, const Datum *values, const bool *isnull, for (i = 0; i < numAttrs; i++) { - if (TupleDescAttr(tupleDesc, i)->attlen == -1) + if (TupleDescCompactAttr(tupleDesc, i)->attlen == -1) { Datum value = values[i]; diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c index 2d98ecf3f4..edcdb7c2d4 100644 --- a/src/backend/commands/copy.c +++ b/src/backend/commands/copy.c @@ -954,9 +954,9 @@ CopyGetAttnums(TupleDesc tupDesc, Relation rel, List *attnamelist) for (i = 0; i < attr_count; i++) { - if (TupleDescAttr(tupDesc, i)->attisdropped) - continue; - if (TupleDescAttr(tupDesc, i)->attgenerated) + CompactAttribute *attr = TupleDescCompactAttr(tupDesc, i); + + if (attr->attisdropped || attr->attgenerated) continue; attnums = lappend_int(attnums, i + 1); } diff --git a/src/backend/executor/execExpr.c b/src/backend/executor/execExpr.c index e0eb96fd5a..0737207862 100644 --- a/src/backend/executor/execExpr.c +++ b/src/backend/executor/execExpr.c @@ -598,7 +598,7 @@ ExecBuildUpdateProjection(List *targetList, */ for (int attnum = relDesc->natts; attnum > 0; attnum--) { - Form_pg_attribute attr = TupleDescAttr(relDesc, attnum - 1); + CompactAttribute *attr = TupleDescCompactAttr(relDesc, attnum - 1); if (attr->attisdropped) continue; @@ -694,7 +694,7 @@ ExecBuildUpdateProjection(List *targetList, */ for (int attnum = 1; attnum <= relDesc->natts; attnum++) { - Form_pg_attribute attr = TupleDescAttr(relDesc, attnum - 1); + CompactAttribute *attr = TupleDescCompactAttr(relDesc, attnum - 1); if (attr->attisdropped) { diff --git a/src/backend/executor/execExprInterp.c b/src/backend/executor/execExprInterp.c index bad7b195bf..a2e5e19e4a 100644 --- a/src/backend/executor/execExprInterp.c +++ b/src/backend/executor/execExprInterp.c @@ -2948,7 +2948,7 @@ ExecEvalRowNullInt(ExprState *state, ExprEvalStep *op, for (int att = 1; att <= tupDesc->natts; att++) { /* ignore dropped columns */ - if (TupleDescAttr(tupDesc, att - 1)->attisdropped) + if (TupleDescCompactAttr(tupDesc, att - 1)->attisdropped) continue; if (heap_attisnull(&tmptup, att, tupDesc)) { @@ -5092,8 +5092,8 @@ ExecEvalWholeRowVar(ExprState *state, ExprEvalStep *op, ExprContext *econtext) for (int i = 0; i < var_tupdesc->natts; i++) { - Form_pg_attribute vattr = TupleDescAttr(var_tupdesc, i); - Form_pg_attribute sattr = TupleDescAttr(tupleDesc, i); + CompactAttribute *vattr = TupleDescCompactAttr(var_tupdesc, i); + CompactAttribute *sattr = TupleDescCompactAttr(tupleDesc, i); if (!vattr->attisdropped) continue; /* already checked non-dropped cols */ diff --git a/src/backend/executor/execJunk.c b/src/backend/executor/execJunk.c index b962c31383..7d0afca418 100644 --- a/src/backend/executor/execJunk.c +++ b/src/backend/executor/execJunk.c @@ -169,7 +169,7 @@ ExecInitJunkFilterConversion(List *targetList, t = list_head(targetList); for (i = 0; i < cleanLength; i++) { - if (TupleDescAttr(cleanTupType, i)->attisdropped) + if (TupleDescCompactAttr(cleanTupType, i)->attisdropped) continue; /* map entry is already zero */ for (;;) { diff --git a/src/backend/executor/execTuples.c b/src/backend/executor/execTuples.c index a09aa251e6..875515777b 100644 --- a/src/backend/executor/execTuples.c +++ b/src/backend/executor/execTuples.c @@ -187,7 +187,7 @@ tts_virtual_materialize(TupleTableSlot *slot) /* compute size of memory required */ for (int natt = 0; natt < desc->natts; natt++) { - Form_pg_attribute att = TupleDescAttr(desc, natt); + CompactAttribute *att = TupleDescCompactAttr(desc, natt); Datum val; if (att->attbyval || slot->tts_isnull[natt]) @@ -223,7 +223,7 @@ tts_virtual_materialize(TupleTableSlot *slot) /* and copy all attributes into the pre-allocated space */ for (int natt = 0; natt < desc->natts; natt++) { - Form_pg_attribute att = TupleDescAttr(desc, natt); + CompactAttribute *att = TupleDescCompactAttr(desc, natt); Datum val; if (att->attbyval || slot->tts_isnull[natt]) diff --git a/src/backend/executor/functions.c b/src/backend/executor/functions.c index 8d1fda2ddc..5d52e0ab81 100644 --- a/src/backend/executor/functions.c +++ b/src/backend/executor/functions.c @@ -1886,7 +1886,7 @@ check_sql_fn_retval(List *queryTreeLists, /* remaining columns in rettupdesc had better all be dropped */ for (colindex++; colindex <= tupnatts; colindex++) { - if (!TupleDescAttr(rettupdesc, colindex - 1)->attisdropped) + if (!TupleDescCompactAttr(rettupdesc, colindex - 1)->attisdropped) ereport(ERROR, (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), errmsg("return type mismatch in function declared to return %s", diff --git a/src/backend/executor/nodeMemoize.c b/src/backend/executor/nodeMemoize.c index df8e3fff08..aff3d9d921 100644 --- a/src/backend/executor/nodeMemoize.c +++ b/src/backend/executor/nodeMemoize.c @@ -175,10 +175,10 @@ MemoizeHash_hash(struct memoize_hash *tb, const MemoizeKey *key) if (!pslot->tts_isnull[i]) /* treat nulls as having hash key 0 */ { - Form_pg_attribute attr; + CompactAttribute *attr; uint32 hkey; - attr = TupleDescAttr(pslot->tts_tupleDescriptor, i); + attr = TupleDescCompactAttr(pslot->tts_tupleDescriptor, i); hkey = datum_image_hash(pslot->tts_values[i], attr->attbyval, attr->attlen); @@ -242,7 +242,7 @@ MemoizeHash_equal(struct memoize_hash *tb, const MemoizeKey *key1, for (int i = 0; i < numkeys; i++) { - Form_pg_attribute attr; + CompactAttribute *attr; if (tslot->tts_isnull[i] != pslot->tts_isnull[i]) { @@ -255,7 +255,7 @@ MemoizeHash_equal(struct memoize_hash *tb, const MemoizeKey *key1, continue; /* perform binary comparison on the two datums */ - attr = TupleDescAttr(tslot->tts_tupleDescriptor, i); + attr = TupleDescCompactAttr(tslot->tts_tupleDescriptor, i); if (!datum_image_eq(tslot->tts_values[i], pslot->tts_values[i], attr->attbyval, attr->attlen)) { diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c index 1161520f76..c445c433df 100644 --- a/src/backend/executor/nodeModifyTable.c +++ b/src/backend/executor/nodeModifyTable.c @@ -496,14 +496,14 @@ ExecComputeStoredGenerated(ResultRelInfo *resultRelInfo, for (int i = 0; i < natts; i++) { - Form_pg_attribute attr = TupleDescAttr(tupdesc, i); + CompactAttribute *attr = TupleDescCompactAttr(tupdesc, i); if (ri_GeneratedExprs[i]) { Datum val; bool isnull; - Assert(attr->attgenerated == ATTRIBUTE_GENERATED_STORED); + Assert(TupleDescAttr(tupdesc, i)->attgenerated == ATTRIBUTE_GENERATED_STORED); econtext->ecxt_scantuple = slot; diff --git a/src/backend/executor/nodeValuesscan.c b/src/backend/executor/nodeValuesscan.c index 92948917a0..9838977f08 100644 --- a/src/backend/executor/nodeValuesscan.c +++ b/src/backend/executor/nodeValuesscan.c @@ -142,8 +142,8 @@ ValuesNext(ValuesScanState *node) foreach(lc, exprstatelist) { ExprState *estate = (ExprState *) lfirst(lc); - Form_pg_attribute attr = TupleDescAttr(slot->tts_tupleDescriptor, - resind); + CompactAttribute *attr = TupleDescCompactAttr(slot->tts_tupleDescriptor, + resind); values[resind] = ExecEvalExpr(estate, econtext, diff --git a/src/backend/executor/tstoreReceiver.c b/src/backend/executor/tstoreReceiver.c index de4646b5c2..658d1724c8 100644 --- a/src/backend/executor/tstoreReceiver.c +++ b/src/backend/executor/tstoreReceiver.c @@ -65,7 +65,7 @@ tstoreStartupReceiver(DestReceiver *self, int operation, TupleDesc typeinfo) { for (i = 0; i < natts; i++) { - Form_pg_attribute attr = TupleDescAttr(typeinfo, i); + CompactAttribute *attr = TupleDescCompactAttr(typeinfo, i); if (attr->attisdropped) continue; @@ -154,7 +154,7 @@ tstoreReceiveSlot_detoast(TupleTableSlot *slot, DestReceiver *self) for (i = 0; i < natts; i++) { Datum val = slot->tts_values[i]; - Form_pg_attribute attr = TupleDescAttr(typeinfo, i); + CompactAttribute *attr = TupleDescCompactAttr(typeinfo, i); if (!attr->attisdropped && attr->attlen == -1 && !slot->tts_isnull[i]) { diff --git a/src/backend/jit/llvm/llvmjit_deform.c b/src/backend/jit/llvm/llvmjit_deform.c index b07f8e7f75..f49e7bce7d 100644 --- a/src/backend/jit/llvm/llvmjit_deform.c +++ b/src/backend/jit/llvm/llvmjit_deform.c @@ -110,7 +110,7 @@ slot_compile_deform(LLVMJitContext *context, TupleDesc desc, */ for (attnum = 0; attnum < desc->natts; attnum++) { - Form_pg_attribute att = TupleDescAttr(desc, attnum); + CompactAttribute *att = TupleDescCompactAttr(desc, attnum); /* * If the column is declared NOT NULL then it must be present in every @@ -393,7 +393,7 @@ slot_compile_deform(LLVMJitContext *context, TupleDesc desc, */ for (attnum = 0; attnum < natts; attnum++) { - Form_pg_attribute att = TupleDescAttr(desc, attnum); + CompactAttribute *att = TupleDescCompactAttr(desc, attnum); LLVMValueRef v_incby; int alignto; LLVMValueRef l_attno = l_int16_const(lc, attnum); diff --git a/src/backend/optimizer/util/plancat.c b/src/backend/optimizer/util/plancat.c index 37b0ca2e43..561db6058b 100644 --- a/src/backend/optimizer/util/plancat.c +++ b/src/backend/optimizer/util/plancat.c @@ -175,12 +175,12 @@ get_relation_info(PlannerInfo *root, Oid relationObjectId, bool inhparent, { for (int i = 0; i < relation->rd_att->natts; i++) { - Form_pg_attribute attr = TupleDescAttr(relation->rd_att, i); + CompactAttribute *attr = TupleDescCompactAttr(relation->rd_att, i); if (attr->attnotnull) { rel->notnullattnums = bms_add_member(rel->notnullattnums, - attr->attnum); + i + 1); /* * Per RemoveAttributeById(), dropped columns will have their diff --git a/src/backend/replication/pgoutput/pgoutput.c b/src/backend/replication/pgoutput/pgoutput.c index 5e23453f07..149f1e5a25 100644 --- a/src/backend/replication/pgoutput/pgoutput.c +++ b/src/backend/replication/pgoutput/pgoutput.c @@ -1340,7 +1340,7 @@ pgoutput_row_filter(Relation relation, TupleTableSlot *old_slot, */ for (i = 0; i < desc->natts; i++) { - Form_pg_attribute att = TupleDescAttr(desc, i); + CompactAttribute *att = TupleDescCompactAttr(desc, i); /* * if the column in the new tuple or old tuple is null, nothing to do diff --git a/src/backend/utils/adt/expandedrecord.c b/src/backend/utils/adt/expandedrecord.c index d2842495b5..913c08b06e 100644 --- a/src/backend/utils/adt/expandedrecord.c +++ b/src/backend/utils/adt/expandedrecord.c @@ -699,7 +699,7 @@ ER_get_flat_size(ExpandedObjectHeader *eohptr) { for (i = 0; i < erh->nfields; i++) { - Form_pg_attribute attr = TupleDescAttr(tupdesc, i); + CompactAttribute *attr = TupleDescCompactAttr(tupdesc, i); if (!erh->dnulls[i] && !attr->attbyval && attr->attlen == -1 && @@ -1115,7 +1115,7 @@ expanded_record_set_field_internal(ExpandedRecordHeader *erh, int fnumber, bool check_constraints) { TupleDesc tupdesc; - Form_pg_attribute attr; + CompactAttribute *attr; Datum *dvalues; bool *dnulls; char *oldValue; @@ -1146,7 +1146,7 @@ expanded_record_set_field_internal(ExpandedRecordHeader *erh, int fnumber, * Copy new field value into record's context, and deal with detoasting, * if needed. */ - attr = TupleDescAttr(tupdesc, fnumber - 1); + attr = TupleDescCompactAttr(tupdesc, fnumber - 1); if (!isnull && !attr->attbyval) { MemoryContext oldcxt; @@ -1279,7 +1279,7 @@ expanded_record_set_fields(ExpandedRecordHeader *erh, for (fnumber = 0; fnumber < erh->nfields; fnumber++) { - Form_pg_attribute attr = TupleDescAttr(tupdesc, fnumber); + CompactAttribute *attr = TupleDescCompactAttr(tupdesc, fnumber); Datum newValue; bool isnull; @@ -1541,7 +1541,7 @@ check_domain_for_new_field(ExpandedRecordHeader *erh, int fnumber, */ if (!isnull) { - Form_pg_attribute attr = TupleDescAttr(erh->er_tupdesc, fnumber - 1); + CompactAttribute *attr = TupleDescCompactAttr(erh->er_tupdesc, fnumber - 1); if (!attr->attbyval && attr->attlen == -1 && VARATT_IS_EXTERNAL(DatumGetPointer(newValue))) diff --git a/src/backend/utils/adt/ri_triggers.c b/src/backend/utils/adt/ri_triggers.c index 3185f48afa..093a3f1b66 100644 --- a/src/backend/utils/adt/ri_triggers.c +++ b/src/backend/utils/adt/ri_triggers.c @@ -2932,7 +2932,7 @@ ri_KeysEqual(Relation rel, TupleTableSlot *oldslot, TupleTableSlot *newslot, * difference for ON UPDATE CASCADE, but for consistency we treat * all changes to the PK the same. */ - Form_pg_attribute att = TupleDescAttr(oldslot->tts_tupleDescriptor, attnums[i] - 1); + CompactAttribute *att = TupleDescCompactAttr(oldslot->tts_tupleDescriptor, attnums[i] - 1); if (!datum_image_eq(oldvalue, newvalue, att->attbyval, att->attlen)) return false; -- 2.34.1