David Rowley <dgrowle...@gmail.com> writes: > I'd feel better about doing it your way if Tom could comment on if > there was a reason he put the function calls that way around in > 5ebaaa494.
Apologies for not having noticed this thread before. I'm taking a look at it now. However, while sniffing around this I found what seems like an oversight in paramassign.c's assign_param_for_var(): it says it should compare all the same fields as _equalVar except for varlevelsup, but it's failing to compare varnullingrels. Is that a bug? It's conceivable that it's not possible to get here with varnullingrels different and all else the same, but I don't feel good about that proposition. I tried adding @@ -91,7 +91,10 @@ assign_param_for_var(PlannerInfo *root, Var *var) pvar->vartype == var->vartype && pvar->vartypmod == var->vartypmod && pvar->varcollid == var->varcollid) + { + Assert(bms_equal(pvar->varnullingrels, var->varnullingrels)); return pitem->paramId; + } } } This triggers no failures in the regression tests, but we know how little that proves. Anyway, that's just a side observation unrelated to the problem at hand. More later. regards, tom lane