aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/optimizer/util/plancat.c32
1 files changed, 16 insertions, 16 deletions
diff --git a/src/backend/optimizer/util/plancat.c b/src/backend/optimizer/util/plancat.c
index 86cc640cf26..9c11b09cbcc 100644
--- a/src/backend/optimizer/util/plancat.c
+++ b/src/backend/optimizer/util/plancat.c
@@ -408,17 +408,20 @@ get_relation_info(PlannerInfo *root, Oid relationObjectId, bool inhparent,
foreach(l, fkoidlist)
{
- int i;
- ArrayType *arr;
+ Oid fkoid = lfirst_oid(l);
+ HeapTuple htup;
+ Form_pg_constraint constraint;
+ ForeignKeyOptInfo *info;
Datum adatum;
bool isnull;
+ ArrayType *arr;
int numkeys;
- Oid fkoid = lfirst_oid(l);
-
- HeapTuple htup = SearchSysCache1(CONSTROID, ObjectIdGetDatum(fkoid));
- Form_pg_constraint constraint = (Form_pg_constraint) GETSTRUCT(htup);
+ int i;
- ForeignKeyOptInfo *info;
+ htup = SearchSysCache1(CONSTROID, ObjectIdGetDatum(fkoid));
+ if (!HeapTupleIsValid(htup)) /* should not happen */
+ elog(ERROR, "cache lookup failed for constraint %u", fkoid);
+ constraint = (Form_pg_constraint) GETSTRUCT(htup);
Assert(constraint->contype == CONSTRAINT_FOREIGN);
@@ -434,8 +437,7 @@ get_relation_info(PlannerInfo *root, Oid relationObjectId, bool inhparent,
arr = DatumGetArrayTypeP(adatum);
numkeys = ARR_DIMS(arr)[0];
- info->conkeys = (int*)palloc0(numkeys * sizeof(int));
-
+ info->conkeys = (int*)palloc(numkeys * sizeof(int));
for (i = 0; i < numkeys; i++)
info->conkeys[i] = ((int16 *) ARR_DATA_PTR(arr))[i];
@@ -445,9 +447,8 @@ get_relation_info(PlannerInfo *root, Oid relationObjectId, bool inhparent,
Assert(!isnull);
arr = DatumGetArrayTypeP(adatum);
- numkeys = ARR_DIMS(arr)[0];
- info->confkeys = (int*)palloc0(numkeys * sizeof(int));
-
+ Assert(numkeys == ARR_DIMS(arr)[0]);
+ info->confkeys = (int*)palloc(numkeys * sizeof(int));
for (i = 0; i < numkeys; i++)
info->confkeys[i] = ((int16 *) ARR_DATA_PTR(arr))[i];
@@ -457,9 +458,8 @@ get_relation_info(PlannerInfo *root, Oid relationObjectId, bool inhparent,
Assert(!isnull);
arr = DatumGetArrayTypeP(adatum);
- numkeys = ARR_DIMS(arr)[0];
- info->conpfeqop = (Oid*)palloc0(numkeys * sizeof(Oid));
-
+ Assert(numkeys == ARR_DIMS(arr)[0]);
+ info->conpfeqop = (Oid*)palloc(numkeys * sizeof(Oid));
for (i = 0; i < numkeys; i++)
info->conpfeqop[i] = ((Oid *) ARR_DATA_PTR(arr))[i];
@@ -467,7 +467,7 @@ get_relation_info(PlannerInfo *root, Oid relationObjectId, bool inhparent,
ReleaseSysCache(htup);
- fkinfos = lcons(info, fkinfos);
+ fkinfos = lappend(fkinfos, info);
}
list_free(fkoidlist);