Re: Optimize IS DISTINCT FROM with non-nullable inputs
Richard Guo <guofenglinux@gmail.com>
From: Richard Guo <guofenglinux@gmail.com>
To: Pg Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2026-01-26T08:00:08Z
Lists: pgsql-hackers
Attachments
- v2-0001-Optimize-IS-DISTINCT-FROM-with-non-nullable-input.patch (application/octet-stream) patch v2-0001
- v2-0002-Optimize-BooleanTest-with-non-nullable-input.patch (application/octet-stream) patch v2-0002
On Fri, Jan 23, 2026 at 10:40 PM Richard Guo <guofenglinux@gmail.com> wrote: > I'm kind of concerned about whether there are edge cases where this > transformation is not safe, specifically regarding "rowtype" inputs. After a second thought, I think this should be safe even for "rowtype" inputs. The executor (ExecInterpExpr) evaluates a DistinctExpr with non-null inputs by simply applying the underlying equality function and then negating the result. Also, record_eq explicitly treats two NULLs as equal. Therefore, in this case, converting IS DISTINCT FROM to the inequality operator in the planner produces the exact same behavior as the executor. Also, I think we can play this same trick with BooleanTest (IS [NOT] TRUE/FALSE/UNKNOWN). A BooleanTest treats a NULL input as the logical value "unknown". If we know that the input can not be NULL, we can simplify it directly to a boolean expression or a constant. Please see 0002. - Richard
Commits
-
Teach planner to transform "x IS [NOT] DISTINCT FROM NULL" to a NullTest
- f41ab51573a4 19 (unreleased) landed
-
Optimize BooleanTest with non-nullable input
- 0aaf0de7fed8 19 (unreleased) landed
-
Optimize IS DISTINCT FROM with non-nullable inputs
- 0a379612540c 19 (unreleased) landed