Fix usage of palloc() in MERGE/SPLIT PARTITION(s) code

f2e4cc4279 and 4b3d173629 implement ALTER TABLE ... MERGE/SPLIT
PARTITION(s) commands.  In several places, these commits use palloc(),
where we should use palloc_object() and palloc_array().  This commit
provides appropriate usage of palloc_object() and palloc_array().

Reported-by: Man Zeng <zengman@halodbtech.com>
Discussion: https://postgr.es/m/tencent_3661BB522D5466B33EA33666%40qq.com
pull/258/head
Alexander Korotkov 5 days ago
parent 4b3d173629
commit c5ae07a90a
  1. 6
      src/backend/commands/tablecmds.c
  2. 12
      src/backend/partitioning/partbounds.c

@ -22317,7 +22317,7 @@ createTableConstraints(List **wqueue, AlteredTableInfo *tab,
*/ */
if (attribute->attgenerated == ATTRIBUTE_GENERATED_STORED) if (attribute->attgenerated == ATTRIBUTE_GENERATED_STORED)
{ {
newval = (NewColumnValue *) palloc0(sizeof(NewColumnValue)); newval = palloc0_object(NewColumnValue);
newval->attnum = num; newval->attnum = num;
newval->expr = expression_planner((Expr *) def); newval->expr = expression_planner((Expr *) def);
newval->is_generated = (attribute->attgenerated != '\0'); newval->is_generated = (attribute->attgenerated != '\0');
@ -22406,7 +22406,7 @@ createTableConstraints(List **wqueue, AlteredTableInfo *tab,
{ {
NewConstraint *newcon; NewConstraint *newcon;
newcon = (NewConstraint *) palloc0(sizeof(NewConstraint)); newcon = palloc0_object(NewConstraint);
newcon->name = ccon->name; newcon->name = ccon->name;
newcon->contype = CONSTR_CHECK; newcon->contype = CONSTR_CHECK;
newcon->qual = qual; newcon->qual = qual;
@ -22944,7 +22944,7 @@ createSplitPartitionContext(Relation partRel)
{ {
SplitPartitionContext *pc; SplitPartitionContext *pc;
pc = (SplitPartitionContext *) palloc0(sizeof(SplitPartitionContext)); pc = palloc0_object(SplitPartitionContext);
pc->partRel = partRel; pc->partRel = partRel;
/* /*

@ -5115,8 +5115,7 @@ calculate_partition_bound_for_merge(Relation parent,
int nparts = list_length(partOids); int nparts = list_length(partOids);
List *bounds = NIL; List *bounds = NIL;
lower_bounds = (PartitionRangeBound **) lower_bounds = palloc0_array(PartitionRangeBound *, nparts);
palloc0(nparts * sizeof(PartitionRangeBound *));
/* /*
* Create an array of lower bounds and a list of * Create an array of lower bounds and a list of
@ -5755,8 +5754,7 @@ check_partitions_for_split(Relation parent,
* Make an array new_parts with new partitions except the DEFAULT * Make an array new_parts with new partitions except the DEFAULT
* partition. * partition.
*/ */
new_parts = (SinglePartitionSpec **) new_parts = palloc0_array(SinglePartitionSpec *, list_length(partlist));
palloc0(list_length(partlist) * sizeof(SinglePartitionSpec *));
/* isSplitPartDefault flag: is split partition a DEFAULT partition? */ /* isSplitPartDefault flag: is split partition a DEFAULT partition? */
isSplitPartDefault = (defaultPartOid == splitPartOid); isSplitPartDefault = (defaultPartOid == splitPartOid);
@ -5786,8 +5784,7 @@ check_partitions_for_split(Relation parent,
* all partitions in ascending order of their bounds (we compare the * all partitions in ascending order of their bounds (we compare the
* lower bound only). * lower bound only).
*/ */
lower_bounds = (PartitionRangeBound **) lower_bounds = palloc0_array(PartitionRangeBound *, nparts);
palloc0(nparts * sizeof(PartitionRangeBound *));
/* Create an array of lower bounds. */ /* Create an array of lower bounds. */
for (i = 0; i < nparts; i++) for (i = 0; i < nparts; i++)
@ -5802,8 +5799,7 @@ check_partitions_for_split(Relation parent,
/* Reorder the array of partitions. */ /* Reorder the array of partitions. */
tmp_new_parts = new_parts; tmp_new_parts = new_parts;
new_parts = (SinglePartitionSpec **) new_parts = palloc0_array(SinglePartitionSpec *, nparts);
palloc0(nparts * sizeof(SinglePartitionSpec *));
for (i = 0; i < nparts; i++) for (i = 0; i < nparts; i++)
new_parts[i] = tmp_new_parts[lower_bounds[i]->index]; new_parts[i] = tmp_new_parts[lower_bounds[i]->index];

Loading…
Cancel
Save