This patch set adds 0007 "FIX NaN special cases"
filter the index pathkeys that could produce NaN values out of order
By special values I mean the non-real numeric values +Infinity, -Infinity, NaN.
Cases considered.
(1) Input type supports special values, and functions are decreasing.
(2) Adding or subtracting infinity to a variable of a type that supports special values.
(3) Multiplication by infinity, as the 0 * Infinity is out of order.
(4) Dividing by infinity a variable that supports special values.
The case (1) is treated when building the pathkey to handle properly cases
like (1 - (1 - x)) where the expression is increased but depends on some
decreasing sub expression.
Regards,
Alexandre
I found one more corner case with infinities (same applies also with
negative infinity):
This will restrict a lot of cases.
slope_corner_cases.sql enumerate experssions and orders producing
permutations of (-inf, -1, 0, 1, +inf, nan) mapped to (1,2,3,4,5,6)
to visualize other similar corner cases.
Apparently the violations boil down to two cases
* All basic arithmetic operations with infinity constant (with a lucky exception x - inf)
* Every decreasing function where the index key.
e.g. `-x desc` would have NaNs first
Should I simply detect and disable the above cases?
sqrt(x < 0) already raise an exception, is it safe to assume that for all the limited domain functions?