mirror of
https://github.com/postgres/postgres.git
synced 2025-11-22 12:22:45 +03:00
Add SysCacheGetAttrNotNull for guaranteed not-null attrs
When extracting an attr from a cached tuple in the syscache with SysCacheGetAttr the isnull parameter must be checked in case the attr cannot be NULL. For cases when this is known beforehand, a wrapper is introduced which perform the errorhandling internally on behalf of the caller, invoking an elog in case of a NULL attr. Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Reviewed-by: Peter Eisentraut <peter.eisentraut@enterprisedb.com> Reviewed-by: David Rowley <dgrowleyml@gmail.com> Discussion: https://postgr.es/m/AD76405E-DB45-46B6-941F-17B1EB3A9076@yesql.se
This commit is contained in:
@@ -1320,14 +1320,12 @@ index_concurrently_create_copy(Relation heapRelation, Oid oldIndexId,
|
||||
indexTuple = SearchSysCache1(INDEXRELID, ObjectIdGetDatum(oldIndexId));
|
||||
if (!HeapTupleIsValid(indexTuple))
|
||||
elog(ERROR, "cache lookup failed for index %u", oldIndexId);
|
||||
indclassDatum = SysCacheGetAttr(INDEXRELID, indexTuple,
|
||||
Anum_pg_index_indclass, &isnull);
|
||||
Assert(!isnull);
|
||||
indclassDatum = SysCacheGetAttrNotNull(INDEXRELID, indexTuple,
|
||||
Anum_pg_index_indclass);
|
||||
indclass = (oidvector *) DatumGetPointer(indclassDatum);
|
||||
|
||||
colOptionDatum = SysCacheGetAttr(INDEXRELID, indexTuple,
|
||||
Anum_pg_index_indoption, &isnull);
|
||||
Assert(!isnull);
|
||||
colOptionDatum = SysCacheGetAttrNotNull(INDEXRELID, indexTuple,
|
||||
Anum_pg_index_indoption);
|
||||
indcoloptions = (int2vector *) DatumGetPointer(colOptionDatum);
|
||||
|
||||
/* Fetch options of index if any */
|
||||
@@ -1347,9 +1345,8 @@ index_concurrently_create_copy(Relation heapRelation, Oid oldIndexId,
|
||||
Datum exprDatum;
|
||||
char *exprString;
|
||||
|
||||
exprDatum = SysCacheGetAttr(INDEXRELID, indexTuple,
|
||||
Anum_pg_index_indexprs, &isnull);
|
||||
Assert(!isnull);
|
||||
exprDatum = SysCacheGetAttrNotNull(INDEXRELID, indexTuple,
|
||||
Anum_pg_index_indexprs);
|
||||
exprString = TextDatumGetCString(exprDatum);
|
||||
indexExprs = (List *) stringToNode(exprString);
|
||||
pfree(exprString);
|
||||
@@ -1359,9 +1356,8 @@ index_concurrently_create_copy(Relation heapRelation, Oid oldIndexId,
|
||||
Datum predDatum;
|
||||
char *predString;
|
||||
|
||||
predDatum = SysCacheGetAttr(INDEXRELID, indexTuple,
|
||||
Anum_pg_index_indpred, &isnull);
|
||||
Assert(!isnull);
|
||||
predDatum = SysCacheGetAttrNotNull(INDEXRELID, indexTuple,
|
||||
Anum_pg_index_indpred);
|
||||
predString = TextDatumGetCString(predDatum);
|
||||
indexPreds = (List *) stringToNode(predString);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user