Re: pull-up subquery if JOIN-ON contains refs to upper-query

Ilia Evdokimov <ilya.evdokimov@tantorlabs.com>

From: Ilia Evdokimov <ilya.evdokimov@tantorlabs.com>
To: Alena Rybakina <a.rybakina@postgrespro.ru>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Cc: Ranier Vilela <ranier.vf@gmail.com>
Date: 2025-02-10T20:51:29Z
Lists: pgsql-hackers

Attachments

On 09.02.2025 18:14, Alena Rybakina wrote:
> Hi! I found another example where the transformation worked 
> incorrectly and reconsidered the idea.
>
> As for conversion of exists_sublink_to_ANY, we need to get the 
> flattened implicit-AND list of clauses and pull out the chunks of the 
> WHERE clause that belong to the parent query,
> since we are called halfway through the parent's 
> preprocess_expression() and earlier steps of preprocess_expression() 
> wouldn't get applied to the pulled-up stuff unless we do them here.
> We also do some processing for vars depending on which side the var is 
> on - if it's in a subquery, we only need to lower its level (varlevel) 
> because subquery will be flatted, while
> for other vars that belong to the parent query, we need to do 
> preparation to pull up the sub-select into top range table.
>
> For those expressions that we couldn't assign to either list, we 
> define newWhere and apply both cases.
>

When I run 'make -C contrib/ check', tests of postgres_fdw extension 
failed. I might be wrong, but you should be careful with LIMIT.

--
Best regards,
Ilia Evdokimov,
Tantor Labs LLC.