mirror of
https://github.com/postgres/postgres.git
synced 2025-10-16 17:07:43 +03:00
Change tupledesc->attrs[n] to TupleDescAttr(tupledesc, n).
This is a mechanical change in preparation for a later commit that will change the layout of TupleDesc. Introducing a macro to abstract the details of where attributes are stored will allow us to change that in separate step and revise it in future. Author: Thomas Munro, editorialized by Andres Freund Reviewed-By: Andres Freund Discussion: https://postgr.es/m/CAEepm=0ZtQ-SpsgCyzzYpsXS6e=kZWqk3g5Ygn3MDV7A8dabUA@mail.gmail.com
This commit is contained in:
@@ -685,8 +685,10 @@ DefineRelation(CreateStmt *stmt, char relkind, Oid ownerId,
|
||||
foreach(listptr, stmt->tableElts)
|
||||
{
|
||||
ColumnDef *colDef = lfirst(listptr);
|
||||
Form_pg_attribute attr;
|
||||
|
||||
attnum++;
|
||||
attr = TupleDescAttr(descriptor, attnum - 1);
|
||||
|
||||
if (colDef->raw_default != NULL)
|
||||
{
|
||||
@@ -698,7 +700,7 @@ DefineRelation(CreateStmt *stmt, char relkind, Oid ownerId,
|
||||
rawEnt->attnum = attnum;
|
||||
rawEnt->raw_default = colDef->raw_default;
|
||||
rawDefaults = lappend(rawDefaults, rawEnt);
|
||||
descriptor->attrs[attnum - 1]->atthasdef = true;
|
||||
attr->atthasdef = true;
|
||||
}
|
||||
else if (colDef->cooked_default != NULL)
|
||||
{
|
||||
@@ -715,11 +717,11 @@ DefineRelation(CreateStmt *stmt, char relkind, Oid ownerId,
|
||||
cooked->inhcount = 0; /* ditto */
|
||||
cooked->is_no_inherit = false;
|
||||
cookedDefaults = lappend(cookedDefaults, cooked);
|
||||
descriptor->attrs[attnum - 1]->atthasdef = true;
|
||||
attr->atthasdef = true;
|
||||
}
|
||||
|
||||
if (colDef->identity)
|
||||
descriptor->attrs[attnum - 1]->attidentity = colDef->identity;
|
||||
attr->attidentity = colDef->identity;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1833,7 +1835,8 @@ MergeAttributes(List *schema, List *supers, char relpersistence,
|
||||
for (parent_attno = 1; parent_attno <= tupleDesc->natts;
|
||||
parent_attno++)
|
||||
{
|
||||
Form_pg_attribute attribute = tupleDesc->attrs[parent_attno - 1];
|
||||
Form_pg_attribute attribute = TupleDescAttr(tupleDesc,
|
||||
parent_attno - 1);
|
||||
char *attributeName = NameStr(attribute->attname);
|
||||
int exist_attno;
|
||||
ColumnDef *def;
|
||||
@@ -4417,8 +4420,9 @@ ATRewriteTable(AlteredTableInfo *tab, Oid OIDNewHeap, LOCKMODE lockmode)
|
||||
*/
|
||||
for (i = 0; i < newTupDesc->natts; i++)
|
||||
{
|
||||
if (newTupDesc->attrs[i]->attnotnull &&
|
||||
!newTupDesc->attrs[i]->attisdropped)
|
||||
Form_pg_attribute attr = TupleDescAttr(newTupDesc, i);
|
||||
|
||||
if (attr->attnotnull && !attr->attisdropped)
|
||||
notnull_attrs = lappend_int(notnull_attrs, i);
|
||||
}
|
||||
if (notnull_attrs)
|
||||
@@ -4482,7 +4486,7 @@ ATRewriteTable(AlteredTableInfo *tab, Oid OIDNewHeap, LOCKMODE lockmode)
|
||||
*/
|
||||
for (i = 0; i < newTupDesc->natts; i++)
|
||||
{
|
||||
if (newTupDesc->attrs[i]->attisdropped)
|
||||
if (TupleDescAttr(newTupDesc, i)->attisdropped)
|
||||
dropped_attrs = lappend_int(dropped_attrs, i);
|
||||
}
|
||||
|
||||
@@ -4556,11 +4560,15 @@ ATRewriteTable(AlteredTableInfo *tab, Oid OIDNewHeap, LOCKMODE lockmode)
|
||||
int attn = lfirst_int(l);
|
||||
|
||||
if (heap_attisnull(tuple, attn + 1))
|
||||
{
|
||||
Form_pg_attribute attr = TupleDescAttr(newTupDesc, attn);
|
||||
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_NOT_NULL_VIOLATION),
|
||||
errmsg("column \"%s\" contains null values",
|
||||
NameStr(newTupDesc->attrs[attn]->attname)),
|
||||
NameStr(attr->attname)),
|
||||
errtablecol(oldrel, attn + 1)));
|
||||
}
|
||||
}
|
||||
|
||||
foreach(l, tab->constraints)
|
||||
@@ -4927,7 +4935,7 @@ find_composite_type_dependencies(Oid typeOid, Relation origRelation,
|
||||
continue;
|
||||
|
||||
rel = relation_open(pg_depend->objid, AccessShareLock);
|
||||
att = rel->rd_att->attrs[pg_depend->objsubid - 1];
|
||||
att = TupleDescAttr(rel->rd_att, pg_depend->objsubid - 1);
|
||||
|
||||
if (rel->rd_rel->relkind == RELKIND_RELATION ||
|
||||
rel->rd_rel->relkind == RELKIND_MATVIEW ||
|
||||
@@ -5693,7 +5701,7 @@ ATExecDropNotNull(Relation rel, const char *colName, LOCKMODE lockmode)
|
||||
AttrNumber parent_attnum;
|
||||
|
||||
parent_attnum = get_attnum(parentId, colName);
|
||||
if (tupDesc->attrs[parent_attnum - 1]->attnotnull)
|
||||
if (TupleDescAttr(tupDesc, parent_attnum - 1)->attnotnull)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_INVALID_TABLE_DEFINITION),
|
||||
errmsg("column \"%s\" is marked NOT NULL in parent table",
|
||||
@@ -7286,13 +7294,15 @@ ATAddForeignKeyConstraint(AlteredTableInfo *tab, Relation rel,
|
||||
CoercionPathType new_pathtype;
|
||||
Oid old_castfunc;
|
||||
Oid new_castfunc;
|
||||
Form_pg_attribute attr = TupleDescAttr(tab->oldDesc,
|
||||
fkattnum[i] - 1);
|
||||
|
||||
/*
|
||||
* Identify coercion pathways from each of the old and new FK-side
|
||||
* column types to the right (foreign) operand type of the pfeqop.
|
||||
* We may assume that pg_constraint.conkey is not changing.
|
||||
*/
|
||||
old_fktype = tab->oldDesc->attrs[fkattnum[i] - 1]->atttypid;
|
||||
old_fktype = attr->atttypid;
|
||||
new_fktype = fktype;
|
||||
old_pathtype = findFkeyCast(pfeqop_right, old_fktype,
|
||||
&old_castfunc);
|
||||
@@ -8963,7 +8973,8 @@ ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel,
|
||||
ColumnDef *def = (ColumnDef *) cmd->def;
|
||||
TypeName *typeName = def->typeName;
|
||||
HeapTuple heapTup;
|
||||
Form_pg_attribute attTup;
|
||||
Form_pg_attribute attTup,
|
||||
attOldTup;
|
||||
AttrNumber attnum;
|
||||
HeapTuple typeTuple;
|
||||
Form_pg_type tform;
|
||||
@@ -8989,10 +9000,11 @@ ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel,
|
||||
colName, RelationGetRelationName(rel))));
|
||||
attTup = (Form_pg_attribute) GETSTRUCT(heapTup);
|
||||
attnum = attTup->attnum;
|
||||
attOldTup = TupleDescAttr(tab->oldDesc, attnum - 1);
|
||||
|
||||
/* Check for multiple ALTER TYPE on same column --- can't cope */
|
||||
if (attTup->atttypid != tab->oldDesc->attrs[attnum - 1]->atttypid ||
|
||||
attTup->atttypmod != tab->oldDesc->attrs[attnum - 1]->atttypmod)
|
||||
if (attTup->atttypid != attOldTup->atttypid ||
|
||||
attTup->atttypmod != attOldTup->atttypmod)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot alter type of column \"%s\" twice",
|
||||
@@ -11209,7 +11221,8 @@ MergeAttributesIntoExisting(Relation child_rel, Relation parent_rel)
|
||||
|
||||
for (parent_attno = 1; parent_attno <= parent_natts; parent_attno++)
|
||||
{
|
||||
Form_pg_attribute attribute = tupleDesc->attrs[parent_attno - 1];
|
||||
Form_pg_attribute attribute = TupleDescAttr(tupleDesc,
|
||||
parent_attno - 1);
|
||||
char *attributeName = NameStr(attribute->attname);
|
||||
|
||||
/* Ignore dropped columns in the parent. */
|
||||
@@ -11822,7 +11835,7 @@ ATExecAddOf(Relation rel, const TypeName *ofTypename, LOCKMODE lockmode)
|
||||
*table_attname;
|
||||
|
||||
/* Get the next non-dropped type attribute. */
|
||||
type_attr = typeTupleDesc->attrs[type_attno - 1];
|
||||
type_attr = TupleDescAttr(typeTupleDesc, type_attno - 1);
|
||||
if (type_attr->attisdropped)
|
||||
continue;
|
||||
type_attname = NameStr(type_attr->attname);
|
||||
@@ -11835,7 +11848,8 @@ ATExecAddOf(Relation rel, const TypeName *ofTypename, LOCKMODE lockmode)
|
||||
(errcode(ERRCODE_DATATYPE_MISMATCH),
|
||||
errmsg("table is missing column \"%s\"",
|
||||
type_attname)));
|
||||
table_attr = tableTupleDesc->attrs[table_attno++ - 1];
|
||||
table_attr = TupleDescAttr(tableTupleDesc, table_attno - 1);
|
||||
table_attno++;
|
||||
} while (table_attr->attisdropped);
|
||||
table_attname = NameStr(table_attr->attname);
|
||||
|
||||
@@ -11860,7 +11874,8 @@ ATExecAddOf(Relation rel, const TypeName *ofTypename, LOCKMODE lockmode)
|
||||
/* Any remaining columns at the end of the table had better be dropped. */
|
||||
for (; table_attno <= tableTupleDesc->natts; table_attno++)
|
||||
{
|
||||
Form_pg_attribute table_attr = tableTupleDesc->attrs[table_attno - 1];
|
||||
Form_pg_attribute table_attr = TupleDescAttr(tableTupleDesc,
|
||||
table_attno - 1);
|
||||
|
||||
if (!table_attr->attisdropped)
|
||||
ereport(ERROR,
|
||||
@@ -12147,7 +12162,7 @@ ATExecReplicaIdentity(Relation rel, ReplicaIdentityStmt *stmt, LOCKMODE lockmode
|
||||
errmsg("index \"%s\" cannot be used as replica identity because column %d is a system column",
|
||||
RelationGetRelationName(indexRel), attno)));
|
||||
|
||||
attr = rel->rd_att->attrs[attno - 1];
|
||||
attr = TupleDescAttr(rel->rd_att, attno - 1);
|
||||
if (!attr->attnotnull)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
|
||||
@@ -13451,7 +13466,7 @@ PartConstraintImpliedByRelConstraint(Relation scanrel,
|
||||
|
||||
for (i = 1; i <= natts; i++)
|
||||
{
|
||||
Form_pg_attribute att = scanrel->rd_att->attrs[i - 1];
|
||||
Form_pg_attribute att = TupleDescAttr(scanrel->rd_att, i - 1);
|
||||
|
||||
if (att->attnotnull && !att->attisdropped)
|
||||
{
|
||||
@@ -13733,7 +13748,7 @@ ATExecAttachPartition(List **wqueue, Relation rel, PartitionCmd *cmd)
|
||||
natts = tupleDesc->natts;
|
||||
for (attno = 1; attno <= natts; attno++)
|
||||
{
|
||||
Form_pg_attribute attribute = tupleDesc->attrs[attno - 1];
|
||||
Form_pg_attribute attribute = TupleDescAttr(tupleDesc, attno - 1);
|
||||
char *attributeName = NameStr(attribute->attname);
|
||||
|
||||
/* Ignore dropped */
|
||||
|
Reference in New Issue
Block a user