WIP: parameterized function scan

Antonin Houska <antonin.houska@gmail.com>

From: Antonin Houska <antonin.houska@gmail.com>
To: pgsql-hackers@postgresql.org
Date: 2012-05-11T21:52:39Z
Lists: pgsql-hackers

Attachments

Hello,
following this short discussion
http://archives.postgresql.org/message-id/4F5AA202.9020906@gmail.com
I gave it one more try and hacked the optimizer so that function can 
become an inner relation in NL join, parametrized with values from the 
outer relation.

I tried to explain my thoughts in comments. Other than that:

1. I haven't tried to use SpecialJoinInfo to constrain join order. Even 
if the order matters in query like
SELECT * from a, func(a.i)
it's still inner join by nature. SpecialJoinInfo is used for INNER join 
rarely, but never stored in PlannerInfo. Doing so only for these lateral 
functions would be rather disruptive.

2. Simple SQL function (i.e. one that gets pulled-up into the main 
query) is a special case. The query that results from such a pull-up no 
longer contains any function (and thus is not affected by this patch) 
but such cases need to be newly taken into account and examined / tested 
(the patch unblocks them at parsing stage too).

3. There might be some open questions about SQL conformance.

I've spent quite a while looking into the optimizer code and after all I 
was surprised that it didn't require that many changes. At least to make 
few simple examples work. Do I ignore any important fact(s) ?

Thanks,
Tony.