mirror of
https://github.com/postgres/postgres.git
synced 2025-07-09 22:41:56 +03:00
Provide a parenthesized-options syntax for VACUUM, analogous to that recently
adopted for EXPLAIN. This will allow additional options to be implemented in future without having to make them fully-reserved keywords. The old syntax remains available for existing options, however. Itagaki Takahiro
This commit is contained in:
@ -11,7 +11,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.692 2009/11/11 20:31:26 alvherre Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.693 2009/11/16 21:32:06 tgl Exp $
|
||||
*
|
||||
* HISTORY
|
||||
* AUTHOR DATE MAJOR EVENT
|
||||
@ -229,6 +229,7 @@ static TypeName *TableFuncTypeName(List *columns);
|
||||
transaction_mode_item
|
||||
|
||||
%type <ival> opt_lock lock_type cast_context
|
||||
%type <ival> vacuum_option_list vacuum_option_elem
|
||||
%type <boolean> opt_force opt_or_replace
|
||||
opt_grant_grant_option opt_grant_admin_option
|
||||
opt_nowait opt_if_exists opt_with_data
|
||||
@ -6625,12 +6626,13 @@ cluster_index_specification:
|
||||
VacuumStmt: VACUUM opt_full opt_freeze opt_verbose
|
||||
{
|
||||
VacuumStmt *n = makeNode(VacuumStmt);
|
||||
n->vacuum = true;
|
||||
n->analyze = false;
|
||||
n->full = $2;
|
||||
n->options = VACOPT_VACUUM;
|
||||
if ($2)
|
||||
n->options |= VACOPT_FULL;
|
||||
if ($4)
|
||||
n->options |= VACOPT_VERBOSE;
|
||||
n->freeze_min_age = $3 ? 0 : -1;
|
||||
n->freeze_table_age = $3 ? 0 : -1;
|
||||
n->verbose = $4;
|
||||
n->relation = NULL;
|
||||
n->va_cols = NIL;
|
||||
$$ = (Node *)n;
|
||||
@ -6638,12 +6640,13 @@ VacuumStmt: VACUUM opt_full opt_freeze opt_verbose
|
||||
| VACUUM opt_full opt_freeze opt_verbose qualified_name
|
||||
{
|
||||
VacuumStmt *n = makeNode(VacuumStmt);
|
||||
n->vacuum = true;
|
||||
n->analyze = false;
|
||||
n->full = $2;
|
||||
n->options = VACOPT_VACUUM;
|
||||
if ($2)
|
||||
n->options |= VACOPT_FULL;
|
||||
if ($4)
|
||||
n->options |= VACOPT_VERBOSE;
|
||||
n->freeze_min_age = $3 ? 0 : -1;
|
||||
n->freeze_table_age = $3 ? 0 : -1;
|
||||
n->verbose = $4;
|
||||
n->relation = $5;
|
||||
n->va_cols = NIL;
|
||||
$$ = (Node *)n;
|
||||
@ -6651,25 +6654,64 @@ VacuumStmt: VACUUM opt_full opt_freeze opt_verbose
|
||||
| VACUUM opt_full opt_freeze opt_verbose AnalyzeStmt
|
||||
{
|
||||
VacuumStmt *n = (VacuumStmt *) $5;
|
||||
n->vacuum = true;
|
||||
n->full = $2;
|
||||
n->options |= VACOPT_VACUUM;
|
||||
if ($2)
|
||||
n->options |= VACOPT_FULL;
|
||||
if ($4)
|
||||
n->options |= VACOPT_VERBOSE;
|
||||
n->freeze_min_age = $3 ? 0 : -1;
|
||||
n->freeze_table_age = $3 ? 0 : -1;
|
||||
n->verbose |= $4;
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
| VACUUM '(' vacuum_option_list ')'
|
||||
{
|
||||
VacuumStmt *n = makeNode(VacuumStmt);
|
||||
n->options = VACOPT_VACUUM | $3;
|
||||
if (n->options & VACOPT_FREEZE)
|
||||
n->freeze_min_age = n->freeze_table_age = 0;
|
||||
else
|
||||
n->freeze_min_age = n->freeze_table_age = -1;
|
||||
n->relation = NULL;
|
||||
n->va_cols = NIL;
|
||||
$$ = (Node *) n;
|
||||
}
|
||||
| VACUUM '(' vacuum_option_list ')' qualified_name opt_name_list
|
||||
{
|
||||
VacuumStmt *n = makeNode(VacuumStmt);
|
||||
n->options = VACOPT_VACUUM | $3;
|
||||
if (n->options & VACOPT_FREEZE)
|
||||
n->freeze_min_age = n->freeze_table_age = 0;
|
||||
else
|
||||
n->freeze_min_age = n->freeze_table_age = -1;
|
||||
n->relation = $5;
|
||||
n->va_cols = $6;
|
||||
if (n->va_cols != NIL) /* implies analyze */
|
||||
n->options |= VACOPT_ANALYZE;
|
||||
$$ = (Node *) n;
|
||||
}
|
||||
;
|
||||
|
||||
vacuum_option_list:
|
||||
vacuum_option_elem { $$ = $1; }
|
||||
| vacuum_option_list ',' vacuum_option_elem { $$ = $1 | $3; }
|
||||
;
|
||||
|
||||
vacuum_option_elem:
|
||||
analyze_keyword { $$ = VACOPT_ANALYZE; }
|
||||
| VERBOSE { $$ = VACOPT_VERBOSE; }
|
||||
| FREEZE { $$ = VACOPT_FREEZE; }
|
||||
| FULL { $$ = VACOPT_FULL; }
|
||||
;
|
||||
|
||||
AnalyzeStmt:
|
||||
analyze_keyword opt_verbose
|
||||
{
|
||||
VacuumStmt *n = makeNode(VacuumStmt);
|
||||
n->vacuum = false;
|
||||
n->analyze = true;
|
||||
n->full = false;
|
||||
n->options = VACOPT_ANALYZE;
|
||||
if ($2)
|
||||
n->options |= VACOPT_VERBOSE;
|
||||
n->freeze_min_age = -1;
|
||||
n->freeze_table_age = -1;
|
||||
n->verbose = $2;
|
||||
n->relation = NULL;
|
||||
n->va_cols = NIL;
|
||||
$$ = (Node *)n;
|
||||
@ -6677,12 +6719,11 @@ AnalyzeStmt:
|
||||
| analyze_keyword opt_verbose qualified_name opt_name_list
|
||||
{
|
||||
VacuumStmt *n = makeNode(VacuumStmt);
|
||||
n->vacuum = false;
|
||||
n->analyze = true;
|
||||
n->full = false;
|
||||
n->options = VACOPT_ANALYZE;
|
||||
if ($2)
|
||||
n->options |= VACOPT_VERBOSE;
|
||||
n->freeze_min_age = -1;
|
||||
n->freeze_table_age = -1;
|
||||
n->verbose = $2;
|
||||
n->relation = $3;
|
||||
n->va_cols = $4;
|
||||
$$ = (Node *)n;
|
||||
|
Reference in New Issue
Block a user