Re: SELECT documentation - Mailing list pgsql-hackers

From Bruce Momjian
Subject Re: SELECT documentation
Date
Msg-id YvsGnuR1RCXO0Qqk@momjian.us
Whole thread Raw
In response to Re: SELECT documentation  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: SELECT documentation
List pgsql-hackers
On Sat, Aug 13, 2022 at 10:21:26PM -0400, Tom Lane wrote:
> Bruce Momjian <bruce@momjian.us> writes:
> > Hi, I agree we should show the more modern JOIN sytax.  However, this is
> > just an example, so one example should be sufficient.  I went with the
> > first one in the attached patch.
> 
> You should not remove the CROSS JOIN mention at l. 604, first because
> the references to it just below would become odd, and second because
> then it's not explained anywhere on the page.  Perhaps you could
> put back a definition of CROSS JOIN just below the entry for NATURAL,
> but you'll still have to do something with the references at l. 614,
> 628, 632.

Good point.  I restrutured the docs to move CROSS JOIN to a separate
section like NATURAL and adjusted the text, patch attached.

> Also, doesn't "[ AS join_using_alias ]" apply to NATURAL and CROSS
> joins?  You've left that out of the syntax summary.

Uh, I only see it for USING in gram.y:

    /* JOIN qualification clauses
     * Possibilities are:
     *  USING ( column list ) [ AS alias ]
     *                        allows only unqualified column names,
     *                        which must match between tables.
     *  ON expr allows more general qualifications.
     *
     * We return USING as a two-element List (the first item being a sub-List
     * of the common column names, and the second either an Alias item or NULL).
     * An ON-expr will not be a List, so it can be told apart that way.
     */
    
    join_qual: USING '(' name_list ')' opt_alias_clause_for_join_using
                    {
                        $$ = (Node *) list_make2($3, $5);
                    }
                | ON a_expr
                    {
                        $$ = $2;
                    }
            ;

    ...

    /*
     * The alias clause after JOIN ... USING only accepts the AS ColId spelling,
     * per SQL standard.  (The grammar could parse the other variants, but they
     * don't seem to be useful, and it might lead to parser problems in the
     * future.)
     */
    opt_alias_clause_for_join_using:
                AS ColId
                    {
                        $$ = makeNode(Alias);
                        $$->aliasname = $2;
                        /* the column name list will be inserted later */
                    }
                | /*EMPTY*/                             { $$ = NULL; }
            ;

which is only used in:

    | table_ref join_type JOIN table_ref join_qual
    | table_ref JOIN table_ref join_qual

I have updated my private build:

    https://momjian.us/tmp/pgsql/sql-select.html

-- 
  Bruce Momjian  <bruce@momjian.us>        https://momjian.us
  EDB                                      https://enterprisedb.com

  Indecision is a decision.  Inaction is an action.  Mark Batterson


Attachment

pgsql-hackers by date:

Previous
From: Junwang Zhao
Date:
Subject: Re: Wrong comment in statscmds.c/CreateStatistics?
Next
From: Andres Freund
Date:
Subject: Re: pg_upgrade test writes to source directory