mirror of
https://github.com/postgres/postgres.git
synced 2025-09-08 00:47:37 +03:00
Correct constness of system attributes in heap.c & prerequisites.
This allows the compiler / linker to mark affected pages as read-only. There's a fair number of pre-requisite changes, to allow the const properly be propagated. Most of consts were already required for correctness anyway, just not represented on the type-level. Arguably we could be more aggressive in using consts in related code, but.. This requires using a few of the types underlying typedefs that removes pointers (e.g. const NameData *) as declaring the typedefed type constant doesn't have the same meaning (it makes the variable const, not what it points to). Discussion: https://postgr.es/m/20181015200754.7y7zfuzsoux2c4ya@alap3.anarazel.de
This commit is contained in:
@@ -1025,6 +1025,7 @@ expanded_record_lookup_field(ExpandedRecordHeader *erh, const char *fieldname,
|
||||
TupleDesc tupdesc;
|
||||
int fno;
|
||||
Form_pg_attribute attr;
|
||||
const FormData_pg_attribute *sysattr;
|
||||
|
||||
tupdesc = expanded_record_get_tupdesc(erh);
|
||||
|
||||
@@ -1044,13 +1045,13 @@ expanded_record_lookup_field(ExpandedRecordHeader *erh, const char *fieldname,
|
||||
}
|
||||
|
||||
/* How about system attributes? */
|
||||
attr = SystemAttributeByName(fieldname, tupdesc->tdhasoid);
|
||||
if (attr != NULL)
|
||||
sysattr = SystemAttributeByName(fieldname, tupdesc->tdhasoid);
|
||||
if (sysattr != NULL)
|
||||
{
|
||||
finfo->fnumber = attr->attnum;
|
||||
finfo->ftypeid = attr->atttypid;
|
||||
finfo->ftypmod = attr->atttypmod;
|
||||
finfo->fcollation = attr->attcollation;
|
||||
finfo->fnumber = sysattr->attnum;
|
||||
finfo->ftypeid = sysattr->atttypid;
|
||||
finfo->ftypmod = sysattr->atttypmod;
|
||||
finfo->fcollation = sysattr->attcollation;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user