@@ -463,9 +463,8 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
463
463
%type <boolean> copy_from opt_program
464
464
465
465
%type <ival> opt_column event cursor_options opt_hold opt_set_data
466
- %type <objtype> drop_type_any_name drop_type_name drop_type_name_on_any_name
467
- comment_type_any_name comment_type_name
468
- security_label_type_any_name security_label_type_name
466
+ %type <objtype> object_type_any_name object_type_name object_type_name_on_any_name
467
+ drop_type_name
469
468
470
469
%type <node> fetch_args select_limit_value
471
470
offset_clause select_offset_value
@@ -6190,7 +6189,7 @@ ReassignOwnedStmt:
6190
6189
*
6191
6190
*****************************************************************************/
6192
6191
6193
- DropStmt : DROP drop_type_any_name IF_P EXISTS any_name_list opt_drop_behavior
6192
+ DropStmt : DROP object_type_any_name IF_P EXISTS any_name_list opt_drop_behavior
6194
6193
{
6195
6194
DropStmt *n = makeNode(DropStmt);
6196
6195
n->removeType = $2 ;
@@ -6200,7 +6199,7 @@ DropStmt: DROP drop_type_any_name IF_P EXISTS any_name_list opt_drop_behavior
6200
6199
n->concurrent = false ;
6201
6200
$$ = (Node *)n;
6202
6201
}
6203
- | DROP drop_type_any_name any_name_list opt_drop_behavior
6202
+ | DROP object_type_any_name any_name_list opt_drop_behavior
6204
6203
{
6205
6204
DropStmt *n = makeNode(DropStmt);
6206
6205
n->removeType = $2 ;
@@ -6230,7 +6229,7 @@ DropStmt: DROP drop_type_any_name IF_P EXISTS any_name_list opt_drop_behavior
6230
6229
n->concurrent = false ;
6231
6230
$$ = (Node *)n;
6232
6231
}
6233
- | DROP drop_type_name_on_any_name name ON any_name opt_drop_behavior
6232
+ | DROP object_type_name_on_any_name name ON any_name opt_drop_behavior
6234
6233
{
6235
6234
DropStmt *n = makeNode(DropStmt);
6236
6235
n->removeType = $2 ;
@@ -6240,7 +6239,7 @@ DropStmt: DROP drop_type_any_name IF_P EXISTS any_name_list opt_drop_behavior
6240
6239
n->concurrent = false ;
6241
6240
$$ = (Node *) n;
6242
6241
}
6243
- | DROP drop_type_name_on_any_name IF_P EXISTS name ON any_name opt_drop_behavior
6242
+ | DROP object_type_name_on_any_name IF_P EXISTS name ON any_name opt_drop_behavior
6244
6243
{
6245
6244
DropStmt *n = makeNode(DropStmt);
6246
6245
n->removeType = $2 ;
@@ -6312,8 +6311,8 @@ DropStmt: DROP drop_type_any_name IF_P EXISTS any_name_list opt_drop_behavior
6312
6311
}
6313
6312
;
6314
6313
6315
- /* object types taking any_name_list */
6316
- drop_type_any_name :
6314
+ /* object types taking any_name/ any_name_list */
6315
+ object_type_any_name :
6317
6316
TABLE { $$ = OBJECT_TABLE; }
6318
6317
| SEQUENCE { $$ = OBJECT_SEQUENCE; }
6319
6318
| VIEW { $$ = OBJECT_VIEW; }
@@ -6329,7 +6328,20 @@ drop_type_any_name:
6329
6328
| TEXT_P SEARCH CONFIGURATION { $$ = OBJECT_TSCONFIGURATION; }
6330
6329
;
6331
6330
6332
- /* object types taking name_list */
6331
+ /*
6332
+ * object types taking name/name_list
6333
+ *
6334
+ * DROP handles some of them separately
6335
+ */
6336
+
6337
+ object_type_name :
6338
+ drop_type_name { $$ = $1 ; }
6339
+ | DATABASE { $$ = OBJECT_DATABASE; }
6340
+ | ROLE { $$ = OBJECT_ROLE; }
6341
+ | SUBSCRIPTION { $$ = OBJECT_SUBSCRIPTION; }
6342
+ | TABLESPACE { $$ = OBJECT_TABLESPACE; }
6343
+ ;
6344
+
6333
6345
drop_type_name :
6334
6346
ACCESS METHOD { $$ = OBJECT_ACCESS_METHOD; }
6335
6347
| EVENT TRIGGER { $$ = OBJECT_EVENT_TRIGGER; }
@@ -6342,7 +6354,7 @@ drop_type_name:
6342
6354
;
6343
6355
6344
6356
/* object types attached to a table */
6345
- drop_type_name_on_any_name :
6357
+ object_type_name_on_any_name :
6346
6358
POLICY { $$ = OBJECT_POLICY; }
6347
6359
| RULE { $$ = OBJECT_RULE; }
6348
6360
| TRIGGER { $$ = OBJECT_TRIGGER; }
@@ -6394,44 +6406,28 @@ opt_restart_seqs:
6394
6406
6395
6407
/* ****************************************************************************
6396
6408
*
6397
- * The COMMENT ON statement can take different forms based upon the type of
6398
- * the object associated with the comment. The form of the statement is:
6399
- *
6400
- * COMMENT ON [ [ ACCESS METHOD | CONVERSION | COLLATION |
6401
- * DATABASE | DOMAIN |
6402
- * EXTENSION | EVENT TRIGGER | FOREIGN DATA WRAPPER |
6403
- * FOREIGN TABLE | INDEX | [PROCEDURAL] LANGUAGE |
6404
- * MATERIALIZED VIEW | POLICY | ROLE | SCHEMA | SEQUENCE |
6405
- * SERVER | STATISTICS | TABLE | TABLESPACE |
6406
- * TEXT SEARCH CONFIGURATION | TEXT SEARCH DICTIONARY |
6407
- * TEXT SEARCH PARSER | TEXT SEARCH TEMPLATE | TYPE |
6408
- * VIEW] <objname> |
6409
- * AGGREGATE <aggname> (arg1, ...) |
6410
- * CAST (<src type> AS <dst type>) |
6411
- * COLUMN <relname>.<colname> |
6412
- * CONSTRAINT <constraintname> ON <relname> |
6413
- * CONSTRAINT <constraintname> ON DOMAIN <domainname> |
6414
- * FUNCTION <funcname> (arg1, arg2, ...) |
6415
- * LARGE OBJECT <oid> |
6416
- * OPERATOR <op> (leftoperand_typ, rightoperand_typ) |
6417
- * OPERATOR CLASS <name> USING <access-method> |
6418
- * OPERATOR FAMILY <name> USING <access-method> |
6419
- * RULE <rulename> ON <relname> |
6420
- * TRIGGER <triggername> ON <relname> ]
6421
- * IS { 'text' | NULL }
6409
+ * COMMENT ON <object> IS <text>
6422
6410
*
6423
6411
*****************************************************************************/
6424
6412
6425
6413
CommentStmt :
6426
- COMMENT ON comment_type_any_name any_name IS comment_text
6414
+ COMMENT ON object_type_any_name any_name IS comment_text
6427
6415
{
6428
6416
CommentStmt *n = makeNode(CommentStmt);
6429
6417
n->objtype = $3 ;
6430
6418
n->object = (Node *) $4 ;
6431
6419
n->comment = $6 ;
6432
6420
$$ = (Node *) n;
6433
6421
}
6434
- | COMMENT ON comment_type_name name IS comment_text
6422
+ | COMMENT ON COLUMN any_name IS comment_text
6423
+ {
6424
+ CommentStmt *n = makeNode(CommentStmt);
6425
+ n->objtype = OBJECT_COLUMN;
6426
+ n->object = (Node *) $4 ;
6427
+ n->comment = $6 ;
6428
+ $$ = (Node *) n;
6429
+ }
6430
+ | COMMENT ON object_type_name name IS comment_text
6435
6431
{
6436
6432
CommentStmt *n = makeNode(CommentStmt);
6437
6433
n->objtype = $3 ;
@@ -6500,10 +6496,10 @@ CommentStmt:
6500
6496
n->comment = $9 ;
6501
6497
$$ = (Node *) n;
6502
6498
}
6503
- | COMMENT ON POLICY name ON any_name IS comment_text
6499
+ | COMMENT ON object_type_name_on_any_name name ON any_name IS comment_text
6504
6500
{
6505
6501
CommentStmt *n = makeNode(CommentStmt);
6506
- n->objtype = OBJECT_POLICY ;
6502
+ n->objtype = $3 ;
6507
6503
n->object = (Node *) lappend($6 , makeString($4 ));
6508
6504
n->comment = $8 ;
6509
6505
$$ = (Node *) n;
@@ -6524,14 +6520,6 @@ CommentStmt:
6524
6520
n->comment = $6 ;
6525
6521
$$ = (Node *) n;
6526
6522
}
6527
- | COMMENT ON RULE name ON any_name IS comment_text
6528
- {
6529
- CommentStmt *n = makeNode(CommentStmt);
6530
- n->objtype = OBJECT_RULE;
6531
- n->object = (Node *) lappend($6 , makeString($4 ));
6532
- n->comment = $8 ;
6533
- $$ = (Node *) n;
6534
- }
6535
6523
| COMMENT ON TRANSFORM FOR Typename LANGUAGE name IS comment_text
6536
6524
{
6537
6525
CommentStmt *n = makeNode(CommentStmt);
@@ -6540,14 +6528,6 @@ CommentStmt:
6540
6528
n->comment = $9 ;
6541
6529
$$ = (Node *) n;
6542
6530
}
6543
- | COMMENT ON TRIGGER name ON any_name IS comment_text
6544
- {
6545
- CommentStmt *n = makeNode(CommentStmt);
6546
- n->objtype = OBJECT_TRIGGER;
6547
- n->object = (Node *) lappend($6 , makeString($4 ));
6548
- n->comment = $8 ;
6549
- $$ = (Node *) n;
6550
- }
6551
6531
| COMMENT ON OPERATOR CLASS any_name USING name IS comment_text
6552
6532
{
6553
6533
CommentStmt *n = makeNode(CommentStmt);
@@ -6582,40 +6562,6 @@ CommentStmt:
6582
6562
}
6583
6563
;
6584
6564
6585
- /* object types taking any_name */
6586
- comment_type_any_name :
6587
- COLUMN { $$ = OBJECT_COLUMN; }
6588
- | INDEX { $$ = OBJECT_INDEX; }
6589
- | SEQUENCE { $$ = OBJECT_SEQUENCE; }
6590
- | STATISTICS { $$ = OBJECT_STATISTIC_EXT; }
6591
- | TABLE { $$ = OBJECT_TABLE; }
6592
- | VIEW { $$ = OBJECT_VIEW; }
6593
- | MATERIALIZED VIEW { $$ = OBJECT_MATVIEW; }
6594
- | COLLATION { $$ = OBJECT_COLLATION; }
6595
- | CONVERSION_P { $$ = OBJECT_CONVERSION; }
6596
- | FOREIGN TABLE { $$ = OBJECT_FOREIGN_TABLE; }
6597
- | TEXT_P SEARCH CONFIGURATION { $$ = OBJECT_TSCONFIGURATION; }
6598
- | TEXT_P SEARCH DICTIONARY { $$ = OBJECT_TSDICTIONARY; }
6599
- | TEXT_P SEARCH PARSER { $$ = OBJECT_TSPARSER; }
6600
- | TEXT_P SEARCH TEMPLATE { $$ = OBJECT_TSTEMPLATE; }
6601
- ;
6602
-
6603
- /* object types taking name */
6604
- comment_type_name :
6605
- ACCESS METHOD { $$ = OBJECT_ACCESS_METHOD; }
6606
- | DATABASE { $$ = OBJECT_DATABASE; }
6607
- | EVENT TRIGGER { $$ = OBJECT_EVENT_TRIGGER; }
6608
- | EXTENSION { $$ = OBJECT_EXTENSION; }
6609
- | FOREIGN DATA_P WRAPPER { $$ = OBJECT_FDW; }
6610
- | opt_procedural LANGUAGE { $$ = OBJECT_LANGUAGE; }
6611
- | PUBLICATION { $$ = OBJECT_PUBLICATION; }
6612
- | ROLE { $$ = OBJECT_ROLE; }
6613
- | SCHEMA { $$ = OBJECT_SCHEMA; }
6614
- | SERVER { $$ = OBJECT_FOREIGN_SERVER; }
6615
- | SUBSCRIPTION { $$ = OBJECT_SUBSCRIPTION; }
6616
- | TABLESPACE { $$ = OBJECT_TABLESPACE; }
6617
- ;
6618
-
6619
6565
comment_text :
6620
6566
Sconst { $$ = $1 ; }
6621
6567
| NULL_P { $$ = NULL ; }
@@ -6632,7 +6578,7 @@ comment_text:
6632
6578
*****************************************************************************/
6633
6579
6634
6580
SecLabelStmt :
6635
- SECURITY LABEL opt_provider ON security_label_type_any_name any_name
6581
+ SECURITY LABEL opt_provider ON object_type_any_name any_name
6636
6582
IS security_label
6637
6583
{
6638
6584
SecLabelStmt *n = makeNode(SecLabelStmt);
@@ -6642,7 +6588,17 @@ SecLabelStmt:
6642
6588
n->label = $8 ;
6643
6589
$$ = (Node *) n;
6644
6590
}
6645
- | SECURITY LABEL opt_provider ON security_label_type_name name
6591
+ | SECURITY LABEL opt_provider ON COLUMN any_name
6592
+ IS security_label
6593
+ {
6594
+ SecLabelStmt *n = makeNode(SecLabelStmt);
6595
+ n->provider = $3 ;
6596
+ n->objtype = OBJECT_COLUMN;
6597
+ n->object = (Node *) $6 ;
6598
+ n->label = $8 ;
6599
+ $$ = (Node *) n;
6600
+ }
6601
+ | SECURITY LABEL opt_provider ON object_type_name name
6646
6602
IS security_label
6647
6603
{
6648
6604
SecLabelStmt *n = makeNode(SecLabelStmt);
@@ -6728,28 +6684,6 @@ opt_provider: FOR NonReservedWord_or_Sconst { $$ = $2; }
6728
6684
| /* empty */ { $$ = NULL ; }
6729
6685
;
6730
6686
6731
- /* object types taking any_name */
6732
- security_label_type_any_name :
6733
- COLUMN { $$ = OBJECT_COLUMN; }
6734
- | FOREIGN TABLE { $$ = OBJECT_FOREIGN_TABLE; }
6735
- | SEQUENCE { $$ = OBJECT_SEQUENCE; }
6736
- | TABLE { $$ = OBJECT_TABLE; }
6737
- | VIEW { $$ = OBJECT_VIEW; }
6738
- | MATERIALIZED VIEW { $$ = OBJECT_MATVIEW; }
6739
- ;
6740
-
6741
- /* object types taking name */
6742
- security_label_type_name :
6743
- DATABASE { $$ = OBJECT_DATABASE; }
6744
- | EVENT TRIGGER { $$ = OBJECT_EVENT_TRIGGER; }
6745
- | opt_procedural LANGUAGE { $$ = OBJECT_LANGUAGE; }
6746
- | PUBLICATION { $$ = OBJECT_PUBLICATION; }
6747
- | ROLE { $$ = OBJECT_ROLE; }
6748
- | SCHEMA { $$ = OBJECT_SCHEMA; }
6749
- | SUBSCRIPTION { $$ = OBJECT_SUBSCRIPTION; }
6750
- | TABLESPACE { $$ = OBJECT_TABLESPACE; }
6751
- ;
6752
-
6753
6687
security_label : Sconst { $$ = $1 ; }
6754
6688
| NULL_P { $$ = NULL ; }
6755
6689
;
0 commit comments