@@ -306,8 +306,9 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
306
306
create_extension_opt_item alter_extension_opt_item
307
307
308
308
%type <ival> opt_lock lock_type cast_context
309
- %type <ival> vacuum_option_list vacuum_option_elem
310
- analyze_option_list analyze_option_elem
309
+ %type <str> vac_analyze_option_name
310
+ %type <defelt> vac_analyze_option_elem
311
+ %type <list> vac_analyze_option_list
311
312
%type <boolean> opt_or_replace
312
313
opt_grant_grant_option opt_grant_admin_option
313
314
opt_nowait opt_if_exists opt_with_data
@@ -10460,85 +10461,62 @@ cluster_index_specification:
10460
10461
VacuumStmt : VACUUM opt_full opt_freeze opt_verbose opt_analyze opt_vacuum_relation_list
10461
10462
{
10462
10463
VacuumStmt *n = makeNode(VacuumStmt);
10463
- n->options = VACOPT_VACUUM ;
10464
+ n->options = NIL ;
10464
10465
if ($2 )
10465
- n->options |= VACOPT_FULL;
10466
+ n->options = lappend(n->options,
10467
+ makeDefElem (" full" , NULL , @2 ));
10466
10468
if ($3 )
10467
- n->options |= VACOPT_FREEZE;
10469
+ n->options = lappend(n->options,
10470
+ makeDefElem (" freeze" , NULL , @3 ));
10468
10471
if ($4 )
10469
- n->options |= VACOPT_VERBOSE;
10472
+ n->options = lappend(n->options,
10473
+ makeDefElem (" verbose" , NULL , @4 ));
10470
10474
if ($5 )
10471
- n->options |= VACOPT_ANALYZE;
10475
+ n->options = lappend(n->options,
10476
+ makeDefElem (" analyze" , NULL , @5 ));
10472
10477
n->rels = $6 ;
10478
+ n->is_vacuumcmd = true ;
10473
10479
$$ = (Node *)n;
10474
10480
}
10475
- | VACUUM ' (' vacuum_option_list ' )' opt_vacuum_relation_list
10481
+ | VACUUM ' (' vac_analyze_option_list ' )' opt_vacuum_relation_list
10476
10482
{
10477
10483
VacuumStmt *n = makeNode(VacuumStmt);
10478
- n->options = VACOPT_VACUUM | $3 ;
10484
+ n->options = $3 ;
10479
10485
n->rels = $5 ;
10486
+ n->is_vacuumcmd = true ;
10480
10487
$$ = (Node *) n;
10481
10488
}
10482
10489
;
10483
10490
10484
- vacuum_option_list :
10485
- vacuum_option_elem { $$ = $1 ; }
10486
- | vacuum_option_list ' ,' vacuum_option_elem { $$ = $1 | $3 ; }
10487
- ;
10488
-
10489
- vacuum_option_elem :
10490
- analyze_keyword { $$ = VACOPT_ANALYZE; }
10491
- | VERBOSE { $$ = VACOPT_VERBOSE; }
10492
- | FREEZE { $$ = VACOPT_FREEZE; }
10493
- | FULL { $$ = VACOPT_FULL; }
10494
- | IDENT
10495
- {
10496
- if (strcmp($1 , " disable_page_skipping" ) == 0 )
10497
- $$ = VACOPT_DISABLE_PAGE_SKIPPING;
10498
- else if (strcmp($1 , " skip_locked" ) == 0 )
10499
- $$ = VACOPT_SKIP_LOCKED;
10500
- else
10501
- ereport (ERROR,
10502
- (errcode(ERRCODE_SYNTAX_ERROR),
10503
- errmsg(" unrecognized VACUUM option \" %s\" " , $1 ),
10504
- parser_errposition(@1 )));
10505
- }
10506
- ;
10507
-
10508
10491
AnalyzeStmt : analyze_keyword opt_verbose opt_vacuum_relation_list
10509
10492
{
10510
10493
VacuumStmt *n = makeNode(VacuumStmt);
10511
- n->options = VACOPT_ANALYZE ;
10494
+ n->options = NIL ;
10512
10495
if ($2 )
10513
- n->options |= VACOPT_VERBOSE;
10496
+ n->options = lappend(n->options,
10497
+ makeDefElem (" verbose" , NULL , @2 ));
10514
10498
n->rels = $3 ;
10499
+ n->is_vacuumcmd = false ;
10515
10500
$$ = (Node *)n;
10516
10501
}
10517
- | analyze_keyword ' (' analyze_option_list ' )' opt_vacuum_relation_list
10502
+ | analyze_keyword ' (' vac_analyze_option_list ' )' opt_vacuum_relation_list
10518
10503
{
10519
10504
VacuumStmt *n = makeNode(VacuumStmt);
10520
- n->options = VACOPT_ANALYZE | $3 ;
10505
+ n->options = $3 ;
10521
10506
n->rels = $5 ;
10507
+ n->is_vacuumcmd = false ;
10522
10508
$$ = (Node *) n;
10523
10509
}
10524
10510
;
10525
10511
10526
- analyze_option_list :
10527
- analyze_option_elem { $$ = $1 ; }
10528
- | analyze_option_list ' ,' analyze_option_elem { $$ = $1 | $3 ; }
10529
- ;
10530
-
10531
- analyze_option_elem :
10532
- VERBOSE { $$ = VACOPT_VERBOSE; }
10533
- | IDENT
10512
+ vac_analyze_option_list :
10513
+ vac_analyze_option_elem
10534
10514
{
10535
- if (strcmp($1 , " skip_locked" ) == 0 )
10536
- $$ = VACOPT_SKIP_LOCKED;
10537
- else
10538
- ereport (ERROR,
10539
- (errcode(ERRCODE_SYNTAX_ERROR),
10540
- errmsg(" unrecognized ANALYZE option \" %s\" " , $1 ),
10541
- parser_errposition(@1 )));
10515
+ $$ = list_make1($1 );
10516
+ }
10517
+ | vac_analyze_option_list ' ,' vac_analyze_option_elem
10518
+ {
10519
+ $$ = lappend($1 , $3 );
10542
10520
}
10543
10521
;
10544
10522
@@ -10547,6 +10525,18 @@ analyze_keyword:
10547
10525
| ANALYSE /* British */ {}
10548
10526
;
10549
10527
10528
+ vac_analyze_option_elem :
10529
+ vac_analyze_option_name
10530
+ {
10531
+ $$ = makeDefElem($1 , NULL , @1 );
10532
+ }
10533
+ ;
10534
+
10535
+ vac_analyze_option_name :
10536
+ NonReservedWord { $$ = $1 ; }
10537
+ | analyze_keyword { $$ = " analyze" ; }
10538
+ ;
10539
+
10550
10540
opt_analyze :
10551
10541
analyze_keyword { $$ = true ; }
10552
10542
| /* EMPTY*/ { $$ = false ; }
0 commit comments