diff options
author | Etsuro Fujita <efujita@postgresql.org> | 2020-02-21 20:00:45 +0900 |
---|---|---|
committer | Etsuro Fujita <efujita@postgresql.org> | 2020-02-21 20:00:45 +0900 |
commit | 032f9ae012d87c730be0e261a6bae9323c2b2d6c (patch) | |
tree | 2f8dd130403b01838cdc3253bad13ec685bd4414 | |
parent | 957338418b69e9774ccc1bab59f765a62f0aa6f9 (diff) | |
download | postgresql-032f9ae012d87c730be0e261a6bae9323c2b2d6c.tar.gz postgresql-032f9ae012d87c730be0e261a6bae9323c2b2d6c.zip |
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
-rw-r--r-- | src/backend/partitioning/partbounds.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/backend/partitioning/partbounds.c b/src/backend/partitioning/partbounds.c index 2d61c3f6e36..54eb83a0d1a 100644 --- a/src/backend/partitioning/partbounds.c +++ b/src/backend/partitioning/partbounds.c @@ -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++) |