Re: Making Vars outer-join aware

From: "Anton A(dot) Melnikov" <aamelnikov(at)inbox(dot)ru>
To: Justin Pryzby <pryzby(at)telsasoft(dot)com>, Richard Guo <guofenglinux(at)gmail(dot)com>
Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, pgsql-hackers(at)lists(dot)postgresql(dot)org, "Finnerty, Jim" <jfinnert(at)amazon(dot)com>
Subject: Re: Making Vars outer-join aware
Date: 2023-05-04 07:22:36
Message-ID: 5b370a46-f6d2-373d-9dbc-0d55250e82c1@inbox.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hello!

I'm having doubts about this fix but most likely i don't understand something.
Could you help me to figure it out, please.

The thing is that for custom scan nodes as readme says:
"INDEX_VAR is abused to signify references to columns of a custom scan tuple type"
But INDEX_VAR has a negative value, so it can not be used in varnullingrels bitmapset.
And therefore this improvement seems will not work with custom scan nodes and some
extensions that use such nodes.

If i'm wrong in my doubts and bitmapset for varnullingrels is ok, may be add a check before
adjust_relid_set() call like this:

@@ -569,9 +569,10 @@ ChangeVarNodes_walker(Node *node, ChangeVarNodes_context *context)
{
if (var->varno == context->rt_index)
var->varno = context->new_index;
- var->varnullingrels = adjust_relid_set(var->varnullingrels,
- context->rt_index,
- context->new_index);
+ if (context->rt_index >= 0 && context->new_index >= 0)
+ var->varnullingrels = adjust_relid_set(var->varnullingrels,
+ context->rt_index,
+

With the best wishes,

--
Anton A. Melnikov
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Richard Guo 2023-05-04 08:07:10 Introduce join_info_array for direct lookups of SpecialJoinInfo by ojrelid
Previous Message Drouvot, Bertrand 2023-05-04 06:45:07 Re: Autogenerate some wait events code and documentation