Re: [HACKERS] [6.5.2] join problems ... - Mailing list pgsql-hackers

From Thomas Lockhart
Subject Re: [HACKERS] [6.5.2] join problems ...
Date
Msg-id 37E4F937.D2345321@alumni.caltech.edu
Whole thread Raw
In response to Re: [HACKERS] [6.5.2] join problems ...  (The Hermit Hacker <scrappy@hub.org>)
List pgsql-hackers
<snip>
> > AND (a.id,a.mid = b.id,b.mid)
> > AND (b.catid,b.indid,b.divid = c.id,c.ppid,c.pid);
> ... the above is not valid in PostgreSQL, it seems...

I have to resort to looking at gram.y for this, since I currently have
the Postgres parser in bits and pieces all over the garage floor ;)

The expressions are *almost* valid for Postgres. The difference is
that you need to put parens around each side of the "row expression":
       | '(' row_descriptor ')' row_op '(' row_descriptor ')'               {                   $$ = makeRowExpr($4,
$2,$6);               }       ;
 

I had implemented this using Date and Darwen as a reference, and afaik
the SQL standard (and any sensible parser) *requires* parens around
the row expression, referred to in gram.y as a "row descriptor".

So, the following should work:
 AND ((a.id,a.mid) = (b.id,b.mid)) AND ((b.catid,b.indid,b.divid) = (c.id,c.ppid,c.pid));

                   - Thomas

-- 
Thomas Lockhart                lockhart@alumni.caltech.edu
South Pasadena, California


pgsql-hackers by date:

Previous
From: The Hermit Hacker
Date:
Subject: All things equal, we are still alot slower then MySQL?
Next
From: "Brett W. McCoy"
Date:
Subject: Re: [INTERFACES] PERL