Commit 6546ffb3 authored by Robert Haas's avatar Robert Haas

Fix comparison logic in partition_bounds_equal for non-finite bounds.

If either bound is infinite, then we shouldn't even try to perform a
comparison of the values themselves.  Rearrange the logic so that
we don't.

Per buildfarm member skink and Tom Lane.
parent 50cf1c80
......@@ -624,16 +624,28 @@ partition_bounds_equal(PartitionKey key,
{
int32 cmpval;
/* For range partitions, the bounds might not be finite. */
if (b1->content != NULL)
{
/*
* A finite bound always differs from an infinite bound, and
* different kinds of infinities differ from each other.
*/
if (b1->content[i][j] != b2->content[i][j])
return false;
/* Non-finite bounds are equal without further examination. */
if (b1->content[i][j] != RANGE_DATUM_FINITE)
continue;
}
/* Compare the actual values */
cmpval = DatumGetInt32(FunctionCall2Coll(&key->partsupfunc[j],
key->partcollation[j],
b1->datums[i][j],
b2->datums[i][j]));
if (cmpval != 0)
return false;
/* Range partitions can have infinite datums */
if (b1->content != NULL && b1->content[i][j] != b2->content[i][j])
return false;
}
if (b1->indexes[i] != b2->indexes[i])
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment