Re: [HACKERS] WITH clause in CREATE STATISTICS

Поиск
Список
Период
Сортировка
От Alvaro Herrera
Тема Re: [HACKERS] WITH clause in CREATE STATISTICS
Дата
Msg-id 20170511193236.ecuwhixts7y3s7u5@alvherre.pgsql
обсуждение исходный текст
Ответ на Re: [HACKERS] WITH clause in CREATE STATISTICS  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: [HACKERS] WITH clause in CREATE STATISTICS  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
Tom Lane wrote:

> Have you thought further about the upthread suggestion to just borrow
> SELECT's syntax lock stock and barrel?  That is, it'd look something
> like
> 
> CREATE STATISTICS name [(list of stats types)] expression-list FROM ...
>     [ WHERE ... ] [ WITH (options) ]
> 
> This would certainly support any FROM stuff we might want later.
> Yeah, you'd need to reject any features you weren't supporting at
> execution, but doing that would allow issuing a friendlier message than
> "syntax error" anyway.
> 
> If you don't have the cycles for that, I'd be willing to look into it.

Bison seems to like the productions below.  Is this what you had in
mind?  These mostly mimic joined_table and table_ref, stripping out the
rules that we don't need.

Note that I had to put back the FOR keyword in there; without the FOR,
that is "CREATE STATS any_name opt_name_list expr_list FROM" there was
one shift/reduce conflict, which I tried to solve by splitting
opt_name_list using two rules (one with "'(' name_list ')'" and one
without), but that gave rise to two reduce/reduce conflicts, and I didn't
see any way to deal with them.

(Note that I ended up realizing that stats_type_list is unnecessary
since we can use name_list.)


CreateStatsStmt:        CREATE opt_if_not_exists STATISTICS any_name        opt_name_list FOR expr_list FROM
stats_joined_table           {                CreateStatsStmt *n = makeNode(CreateStatsStmt);
n->defnames= $4;                n->stat_types = $6;                n->if_not_exists = $2;
 
                stmt->relation = $9;                stmt->keys = $7;                $$ = (Node *)n;            }
;

stats_joined_table:      '(' stats_joined_table ')'            {            }        | stats_table_ref CROSS JOIN
stats_table_ref           {            }        | stats_table_ref join_type JOIN stats_table_ref join_qual            {
          }        | stats_table_ref JOIN stats_table_ref join_qual            {            }        | stats_table_ref
NATURALjoin_type JOIN stats_table_ref            {            }        | stats_table_ref NATURAL JOIN table_ref
  {            }    ;
 

stats_table_ref:        relation_expr opt_alias_clause            {            }        | stats_joined_table
{           }        | '(' stats_joined_table ')' alias_clause            {            }    ;
 



-- 
Álvaro Herrera                https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Andres Freund
Дата:
Сообщение: Re: [HACKERS] Cached plans and statement generalization
Следующее
От: Konstantin Knizhnik
Дата:
Сообщение: Re: [HACKERS] Cached plans and statement generalization