On Sun, Jul 9, 2023 at 12:17 PM David Rowley <dgrowle...@gmail.com> wrote:
> I just pushed a fix for this. Thanks for reporting it. BTW, I noticed a typo in the comment inside paraminfo_get_equal_hashops. foreach(lc, innerrel->lateral_vars) { Node *expr = (Node *) lfirst(lc); TypeCacheEntry *typentry; /* Reject if there are any volatile functions in PHVs */ if (contain_volatile_functions(expr)) { list_free(*operators); list_free(*param_exprs); return false; } The expressions in RelOptInfo.lateral_vars are not necessarily from PHVs. For instance explain (costs off) select * from t t1 join lateral (select * from t t2 where t1.a = t2.a offset 0) on true; QUERY PLAN ---------------------------------- Nested Loop -> Seq Scan on t t1 -> Memoize Cache Key: t1.a Cache Mode: binary -> Seq Scan on t t2 Filter: (t1.a = a) (7 rows) The lateral Var 't1.a' comes from the lateral subquery, not PHV. This seems a typo from 63e4f13d. How about we change it to the below? - /* Reject if there are any volatile functions in PHVs */ + /* Reject if there are any volatile functions in lateral vars */ Thanks Richard