postgresql/src/include/nodes
Tom Lane e9e26b5e71 Invent "multibitmapsets", and use them to speed up antijoin detection.
Implement a data structure that is a List of Bitmapsets, which is
essentially a 2-D boolean array except that the rows need not all
be the same width.  Operations such as union and intersection are
meaningful for these, just as they are for Bitmapsets.  Eventually
we might build many of the same operations that we have written for
Bitmapsets, but for the first use-case we just need a few.

That first use-case is for antijoin detection: reduce_outer_joins
needs to find the set of Vars that are certain to be non-null in a
successfully joined (not null-extended) left join row, and also
find the set of Vars subject to higher-level IS NULL constraints,
and intersect them.  We had been doing this by making Lists of
the Var nodes and then using list_intersect, which works but is
pretty inefficient compared to a bitmapset-like intersection.
Potentially it's O(N^2) if there are a lot of Vars involved,
which fortunately there generally aren't; still it's not great.
Moreover, that method requires the Vars of interest to be exactly
equal() in the join condition and the upper IS NULL condition,
which is problematic for my WIP patch that labels Vars according
to which outer joins have possibly nulled them.

Discussion: https://postgr.es/m/892228.1668437838@sss.pgh.pa.us
Discussion: https://postgr.es/m/CAMbWs4-mvPPCJ1W6iK6dD5HiNwoJdi6mZp=-7mE8N9Sh+cd0tQ@mail.gmail.com
2022-11-16 13:58:44 -05:00
..
.gitignore Automatically generate node support functions 2022-07-09 08:53:59 +02:00
bitmapset.h Make Bitmapsets be valid Nodes. 2022-11-13 10:22:45 -05:00
execnodes.h Doc: rearrange high-level commentary about node support coverage. 2022-07-09 15:10:15 -04:00
extensible.h Harmonize more parameter names in bulk. 2022-09-20 13:09:30 -07:00
lockoptions.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
makefuncs.h Revert SQL/JSON features 2022-09-01 17:07:14 -04:00
memnodes.h Improve performance of and reduce overheads of memory management 2022-08-29 17:15:00 +12:00
meson.build Make Bitmapsets be valid Nodes. 2022-11-13 10:22:45 -05:00
multibitmapset.h Invent "multibitmapsets", and use them to speed up antijoin detection. 2022-11-16 13:58:44 -05:00
nodeFuncs.h Revise tree-walk APIs to improve spec compliance & silence warnings. 2022-09-20 18:03:22 -04:00
nodes.h Harmonize more parameter names in bulk. 2022-09-20 13:09:30 -07:00
params.h Harmonize more parameter names in bulk. 2022-09-20 13:09:30 -07:00
parsenodes.h Resolve partition strategy during early parsing 2022-11-03 16:25:54 +01:00
pathnodes.h Make Bitmapsets be valid Nodes. 2022-11-13 10:22:45 -05:00
pg_list.h Harmonize more parameter names in bulk. 2022-09-20 13:09:30 -07:00
plannodes.h Update some comments that should've covered MERGE 2022-10-24 12:52:43 +02:00
primnodes.h Update some comments that should've covered MERGE 2022-10-24 12:52:43 +02:00
print.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
readfuncs.h Apply PGDLLIMPORT markings broadly. 2022-04-08 08:16:38 -04:00
replnodes.h Fix limitations on what SQL commands can be issued to a walsender. 2022-01-24 15:33:38 -05:00
subscripting.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
supportnodes.h Teach planner and executor about monotonic window funcs 2022-04-08 10:34:36 +12:00
tidbitmap.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
value.h Harmonize more parameter names in bulk. 2022-09-20 13:09:30 -07:00