• Tom Lane's avatar
    Implement SQL-standard LATERAL subqueries. · 5ebaaa49
    Tom Lane authored
    This patch implements the standard syntax of LATERAL attached to a
    sub-SELECT in FROM, and also allows LATERAL attached to a function in FROM,
    since set-returning function calls are expected to be one of the principal
    use-cases.
    
    The main change here is a rewrite of the mechanism for keeping track of
    which relations are visible for column references while the FROM clause is
    being scanned.  The parser "namespace" lists are no longer lists of bare
    RTEs, but are lists of ParseNamespaceItem structs, which carry an RTE
    pointer as well as some visibility-controlling flags.  Aside from
    supporting LATERAL correctly, this lets us get rid of the ancient hacks
    that required rechecking subqueries and JOIN/ON and function-in-FROM
    expressions for invalid references after they were initially parsed.
    Invalid column references are now always correctly detected on sight.
    
    In passing, remove assorted parser error checks that are now dead code by
    virtue of our having gotten rid of add_missing_from, as well as some
    comments that are obsolete for the same reason.  (It was mainly
    add_missing_from that caused so much fudging here in the first place.)
    
    The planner support for this feature is very minimal, and will be improved
    in future patches.  It works well enough for testing purposes, though.
    
    catversion bump forced due to new field in RangeTblEntry.
    5ebaaa49
kwlist.h 20.4 KB