Avoid redundant checks in partition_bounds_copy().

Previously, partition_bounds_copy() checked whether the strategy for the
given partition bounds was hash or not, and then determined the number of
elements in the datums in the datums array for the partition bounds, on
each iteration of the loop for copying the datums array, but there is no
need to do that.  Perform the checks only once before the loop iteration.

Author: Etsuro Fujita
Reported-by: Amit Langote and Julien Rouhaud
Discussion: https://postgr.es/m/CAPmGK14Rvxrm8DHWvCjdoks6nwZuHBPvMnWZ6rkEx2KhFeEoPQ@mail.gmail.com
This commit is contained in:
Etsuro Fujita 2020-02-21 20:00:45 +09:00
parent 957338418b
commit 032f9ae012
1 changed files with 9 additions and 7 deletions

View File

@ -789,6 +789,8 @@ partition_bounds_copy(PartitionBoundInfo src,
int ndatums;
int partnatts;
int num_indexes;
bool hash_part;
int natts;
dest = (PartitionBoundInfo) palloc(sizeof(PartitionBoundInfoData));
@ -819,17 +821,17 @@ partition_bounds_copy(PartitionBoundInfo src,
else
dest->kind = NULL;
/*
* For hash partitioning, datums array will have two elements - modulus and
* remainder.
*/
hash_part = (key->strategy == PARTITION_STRATEGY_HASH);
natts = hash_part ? 2 : partnatts;
for (i = 0; i < ndatums; i++)
{
int j;
/*
* For a corresponding hash partition, datums array will have two
* elements - modulus and remainder.
*/
bool hash_part = (key->strategy == PARTITION_STRATEGY_HASH);
int natts = hash_part ? 2 : partnatts;
dest->datums[i] = (Datum *) palloc(sizeof(Datum) * natts);
for (j = 0; j < natts; j++)