Re: [HACKERS] [6.5.2] join problems ...

From: Thomas Lockhart <lockhart(at)alumni(dot)caltech(dot)edu>
To: The Hermit Hacker <scrappy(at)hub(dot)org>
Cc: Mike Mascari <mascarim(at)yahoo(dot)com>, pgsql-hackers(at)postgreSQL(dot)org
Subject: Re: [HACKERS] [6.5.2] join problems ...
Date: 1999-09-19 14:54:47
Message-ID: 37E4F937.D2345321@alumni.caltech.edu
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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(at)alumni(dot)caltech(dot)edu
South Pasadena, California

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Brett W. McCoy 1999-09-19 14:57:40 Re: [INTERFACES] PERL
Previous Message The Hermit Hacker 1999-09-19 14:39:56 All things equal, we are still alot slower then MySQL?