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


Reply via email to