Re: SLOPE - Planner optimizations on monotonic expressions.
Alexandre Felipe <o.alexandre.felipe@gmail.com>
From: Alexandre Felipe <o.alexandre.felipe@gmail.com>
To: Zsolt Parragi <zsolt.parragi@percona.com>
Cc: Dean Rasheed <dean.a.rasheed@gmail.com>,
Corey Huinker <corey.huinker@gmail.com>, pgsql-hackers@postgresql.org
Date: 2026-06-01T13:07:47Z
Lists: pgsql-hackers
Attachments
- v8-0003-SLOPE-prosupport-definitions.patch (application/octet-stream) patch v8-0003
- v8-0004-SLOPE-catalog-changes.patch (application/octet-stream) patch v8-0004
- v8-0001-benchmark.patch (application/octet-stream) patch v8-0001
- v8-0005-SLOPE-Planner-support.patch (application/octet-stream) patch v8-0005
- v8-0002-Optimized-reverse-pathkeys.patch (application/octet-stream) patch v8-0002
- v8-0006-SLOPE-redundancy-checks.patch (application/octet-stream) patch v8-0006
- v8-0007-FIX-NaN-special-cases.patch (application/octet-stream) patch v8-0007
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 On Sun, May 10, 2026 at 4:53 PM Alexandre Felipe < o.alexandre.felipe@gmail.com> wrote: > > On Fri, May 8, 2026 at 11:19 PM Zsolt Parragi <zsolt.parragi@percona.com> > wrote: > >> 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? > > > >