@@ -408,17 +408,20 @@ get_relation_info(PlannerInfo *root, Oid relationObjectId, bool inhparent,
408
408
409
409
foreach (l , fkoidlist )
410
410
{
411
- int i ;
412
- ArrayType * arr ;
411
+ Oid fkoid = lfirst_oid (l );
412
+ HeapTuple htup ;
413
+ Form_pg_constraint constraint ;
414
+ ForeignKeyOptInfo * info ;
413
415
Datum adatum ;
414
416
bool isnull ;
417
+ ArrayType * arr ;
415
418
int numkeys ;
416
- Oid fkoid = lfirst_oid (l );
417
-
418
- HeapTuple htup = SearchSysCache1 (CONSTROID , ObjectIdGetDatum (fkoid ));
419
- Form_pg_constraint constraint = (Form_pg_constraint ) GETSTRUCT (htup );
419
+ int i ;
420
420
421
- ForeignKeyOptInfo * info ;
421
+ htup = SearchSysCache1 (CONSTROID , ObjectIdGetDatum (fkoid ));
422
+ if (!HeapTupleIsValid (htup )) /* should not happen */
423
+ elog (ERROR , "cache lookup failed for constraint %u" , fkoid );
424
+ constraint = (Form_pg_constraint ) GETSTRUCT (htup );
422
425
423
426
Assert (constraint -> contype == CONSTRAINT_FOREIGN );
424
427
@@ -434,8 +437,7 @@ get_relation_info(PlannerInfo *root, Oid relationObjectId, bool inhparent,
434
437
435
438
arr = DatumGetArrayTypeP (adatum );
436
439
numkeys = ARR_DIMS (arr )[0 ];
437
- info -> conkeys = (int * )palloc0 (numkeys * sizeof (int ));
438
-
440
+ info -> conkeys = (int * )palloc (numkeys * sizeof (int ));
439
441
for (i = 0 ; i < numkeys ; i ++ )
440
442
info -> conkeys [i ] = ((int16 * ) ARR_DATA_PTR (arr ))[i ];
441
443
@@ -445,9 +447,8 @@ get_relation_info(PlannerInfo *root, Oid relationObjectId, bool inhparent,
445
447
Assert (!isnull );
446
448
447
449
arr = DatumGetArrayTypeP (adatum );
448
- numkeys = ARR_DIMS (arr )[0 ];
449
- info -> confkeys = (int * )palloc0 (numkeys * sizeof (int ));
450
-
450
+ Assert (numkeys == ARR_DIMS (arr )[0 ]);
451
+ info -> confkeys = (int * )palloc (numkeys * sizeof (int ));
451
452
for (i = 0 ; i < numkeys ; i ++ )
452
453
info -> confkeys [i ] = ((int16 * ) ARR_DATA_PTR (arr ))[i ];
453
454
@@ -457,17 +458,16 @@ get_relation_info(PlannerInfo *root, Oid relationObjectId, bool inhparent,
457
458
Assert (!isnull );
458
459
459
460
arr = DatumGetArrayTypeP (adatum );
460
- numkeys = ARR_DIMS (arr )[0 ];
461
- info -> conpfeqop = (Oid * )palloc0 (numkeys * sizeof (Oid ));
462
-
461
+ Assert (numkeys == ARR_DIMS (arr )[0 ]);
462
+ info -> conpfeqop = (Oid * )palloc (numkeys * sizeof (Oid ));
463
463
for (i = 0 ; i < numkeys ; i ++ )
464
464
info -> conpfeqop [i ] = ((Oid * ) ARR_DATA_PTR (arr ))[i ];
465
465
466
466
info -> nkeys = numkeys ;
467
467
468
468
ReleaseSysCache (htup );
469
469
470
- fkinfos = lcons ( info , fkinfos );
470
+ fkinfos = lappend ( fkinfos , info );
471
471
}
472
472
473
473
list_free (fkoidlist );
0 commit comments