Thread

  1. implementing outer joins

    Brett McCormick <brett@work.chicken.org> — 1998-07-03T02:35:40Z

    does anyone have any idea how difficult it would be to implement, and
    perhaps point me in the right direction?
    
    
  2. Re: [HACKERS] implementing outer joins

    Bruce Momjian <maillist@candle.pha.pa.us> — 1998-07-03T04:08:14Z

    > 
    > does anyone have any idea how difficult it would be to implement, and
    > perhaps point me in the right direction?
    > 
    > 
    
    Good question.  My guess is that you have to set a flag in the
    RangeTblEntry for OUTER, and have this flag read by all the join
    methods.  Most(all?) of them have an inner and outer loop.  I think
    OUTER has to be in the outer part of the loop, and as you are spinning
    through the outer loop, if you don't find any matches in the inner loop,
    you output the outer loop with NULLs for the inner values.  Now if you
    have only two tables joined, and they are both outer, I am not sure how
    to handle that.
    
    Check out the new backend "How PostgreSQL Processes a Query" for hints
    on where to make changes.  (I have gotten no comments on the new
    version.)  Also check out the Developers FAQ for ideas too.
    
    
    -- 
    Bruce Momjian                          |  830 Blythe Avenue
    maillist@candle.pha.pa.us              |  Drexel Hill, Pennsylvania 19026
      +  If your life is a hard drive,     |  (610) 353-9879(w)
      +  Christ can be your backup.        |  (610) 853-3000(h)
    
    
  3. RE: [HACKERS] implementing outer joins

    Stupor Genius <stuporg@erols.com> — 1998-07-03T14:49:51Z

    > 
    > does anyone have any idea how difficult it would be to implement, and
    > perhaps point me in the right direction?
    > 
    
    I forget where, but there is a place in the code where the two values
    of the join are compared to see whether the row qualifies.  Around
    this spot there is a check for one of the values being null and if it
    is, the function doesn't include the data.  Seems that modifying that
    spot or using it as a basis for your code could be a quick start for
    the left join.  The right could perhaps then be converted beforehand
    in the optimizer to a left to be handled there.
    
    But there's prolly a great and sane reason why this wouldn't work.
    
    Haven't thought about the full outer join yet.  Don't have my machine
    completely configured yet and it's hard to stay in to do that with it
    being summer and all.
    
    Later,
    darrenk