mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-27 08:39:28 +08:00
Fix order of parameters in BRIN minmax-multi calls
The BRIN minmax-multi consistent function incorrectly assumed it can lookup an operator, and then swap the arguments to get the commutator. For example <(a,b) would be called as <(b,a) to get >(a,b). This works when the arguments are of the same type, but with cross-type opclasses this fails. We can't swap <(float4,float8) arguments, for example. Fixed by passing arguments in the right order. Discussion: https://postgr.es/m/CAJKUy5jLZFLCxyxfT%3DMfK5mtPfSzHA1rVLowR-j4RRsFVvKm7A%40mail.gmail.com
This commit is contained in:
parent
e1fbe1181c
commit
1dad2a5ea3
@ -2606,16 +2606,16 @@ brin_minmax_multi_consistent(PG_FUNCTION_ARGS)
|
||||
* value in the array.
|
||||
*/
|
||||
cmpFn = minmax_multi_get_strategy_procinfo(bdesc, attno, subtype,
|
||||
BTLessStrategyNumber);
|
||||
compar = FunctionCall2Coll(cmpFn, colloid, value, minval);
|
||||
BTGreaterStrategyNumber);
|
||||
compar = FunctionCall2Coll(cmpFn, colloid, minval, value);
|
||||
|
||||
/* smaller than the smallest value in this range */
|
||||
if (DatumGetBool(compar))
|
||||
break;
|
||||
|
||||
cmpFn = minmax_multi_get_strategy_procinfo(bdesc, attno, subtype,
|
||||
BTGreaterStrategyNumber);
|
||||
compar = FunctionCall2Coll(cmpFn, colloid, value, maxval);
|
||||
BTLessStrategyNumber);
|
||||
compar = FunctionCall2Coll(cmpFn, colloid, maxval, value);
|
||||
|
||||
/* larger than the largest value in this range */
|
||||
if (DatumGetBool(compar))
|
||||
|
Loading…
Reference in New Issue
Block a user