@@ -197,7 +197,7 @@ make_name(void)
197
197
SCHEMA , SCROLL , SECOND_P , SELECT , SESSION , SESSION_USER , SET , SOME , SUBSTRING ,
198
198
TABLE , TEMPORARY , THEN , TIME , TIMESTAMP
199
199
TO , TRAILING , TRANSACTION , TRIM , TRUE_P ,
200
- UNENCRYPTED , UNION , UNIQUE , UNKNOWN , UPDATE , USER , USING ,
200
+ UNENCRYPTED , UNION , UNIQUE , UNKNOWN , UPDATE , USAGE , USER , USING ,
201
201
VALUES , VARCHAR , VARYING , VIEW ,
202
202
WHEN , WHERE , WITH , WITHOUT , WORK , YEAR_P , ZONE
203
203
@@ -228,7 +228,8 @@ make_name(void)
228
228
NONE , NOTHING , NOTIFY , NOTNULL , OFFSET , OIDS ,
229
229
OPERATOR , OWNER , PASSWORD , PROCEDURAL , REINDEX , RENAME , RESET ,
230
230
RETURNS , ROW , RULE , SEQUENCE , SETOF , SHARE ,
231
- SHOW , START , STATEMENT , STATISTICS , STDIN , STDOUT , SYSID TEMP ,
231
+ SHOW , START , STATEMENT , STATISTICS , STDIN , STDOUT , STORAGE ,
232
+ SYSID , TEMP ,
232
233
TEMPLATE , TOAST , TRUNCATE , TRUSTED , UNLISTEN , UNTIL , VACUUM ,
233
234
VALID , VERBOSE , VERSION
234
235
@@ -327,12 +328,16 @@ make_name(void)
327
328
%type <str> TriggerActionTime CreateTrigStmt DropPLangStmt
328
329
%type <str> CreatePLangStmt TriggerFuncArgs TriggerFuncArg simple_select
329
330
%type <str> ViewStmt LoadStmt CreatedbStmt createdb_opt_item
330
- %type <str> createdb_opt_list opt_encoding OptInherit
331
+ %type <str> createdb_opt_list opt_encoding OptInherit opt_equal
332
+ %type <str> AlterUserSetStmt privilege_list privilege privilege_target
333
+ %type <str> opt_grant_grant_option opt_revoke_grant_option
334
+ %type <str> function_with_argtypes_list function_with_argtypes
331
335
%type <str> DropdbStmt ClusterStmt grantee RevokeStmt Bit bit
332
- %type <str> GrantStmt privileges operation_commalist operation PosAllConst
333
- %type <str> opt_with_grant opt_cursor ConstraintsSetStmt AllConst
336
+ %type <str> GrantStmt privileges PosAllConst
337
+ %type <str> opt_cursor ConstraintsSetStmt AllConst
334
338
%type <str> case_expr when_clause_list case_default case_arg when_clause
335
- %type <str> select_clause opt_select_limit select_limit_value ConstraintTimeSpec
339
+ %type <str> select_clause opt_select_limit select_limit_value
340
+ %type <str> ConstraintTimeSpec AlterDatabaseSetStmt
336
341
%type <str> select_offset_value ReindexStmt join_type opt_boolean
337
342
%type <str> join_qual update_list AlterSchemaStmt joined_table
338
343
%type <str> opt_level opt_lock lock_type OptGroupList OptGroupElem
@@ -406,10 +411,12 @@ opt_at: AT connection_target {
406
411
argsinsert = NULL ;
407
412
};
408
413
409
- stmt : AlterSchemaStmt { output_statement($1 , 0 , connection); }
410
- | AlterTableStmt { output_statement($1 , 0 , connection); }
414
+ stmt : AlterDatabaseSetStmt { output_statement($1 , 0 , connection); }
411
415
| AlterGroupStmt { output_statement($1 , 0 , connection); }
416
+ | AlterSchemaStmt { output_statement($1 , 0 , connection); }
417
+ | AlterTableStmt { output_statement($1 , 0 , connection); }
412
418
| AlterUserStmt { output_statement($1 , 0 , connection); }
419
+ | AlterUserSetStmt { output_statement($1 , 0 , connection); }
413
420
| ClosePortalStmt { output_statement($1 , 0 , connection); }
414
421
| CommentStmt { output_statement($1 , 0 , connection); }
415
422
| CopyStmt { output_statement($1 , 0 , connection); }
@@ -634,6 +641,16 @@ AlterUserStmt: ALTER USER UserId OptUserList
634
641
}
635
642
;
636
643
644
+ AlterUserSetStmt : ALTER USER UserId VariableSetStmt
645
+ {
646
+ $$ = cat_str(3 , make_str(" alter user" ), $3 , $4 );
647
+ }
648
+ | ALTER USER UserId VariableResetStmt
649
+ {
650
+ $$ = cat_str(3 , make_str(" alter user" ), $3 , $4 );
651
+ }
652
+ ;
653
+
637
654
/* ****************************************************************************
638
655
*
639
656
* Drop a postgresql DBMS user
@@ -976,6 +993,11 @@ AlterTableStmt:
976
993
{
977
994
$$ = cat_str(7 , make_str(" alter table" ), $3 , make_str(" alter" ), $5 , $6 , make_str(" set statistics" ), $9 );
978
995
}
996
+ /* ALTER TABLE <relation> ALTER [COLUMN] <colname> SET STORAGE <storagemode> */
997
+ | ALTER TABLE relation_expr ALTER opt_column ColId SET STORAGE ColId
998
+ {
999
+ $$ = cat_str(7 , make_str(" alter table" ), $3 , make_str(" alter" ), $5 , $6 , make_str(" set storage" ), $9 );
1000
+ }
979
1001
/* ALTER TABLE <relation> DROP [COLUMN] <colname> {RESTRICT|CASCADE} */
980
1002
| ALTER TABLE relation_expr DROP opt_column ColId drop_behavior
981
1003
{
@@ -1714,13 +1736,19 @@ comment_text: StringConst { $$ = $1; }
1714
1736
/* ****************************************************************************
1715
1737
*
1716
1738
* QUERY:
1717
- * GRANT [privileges] ON [TABLE] relation_name_list TO [GROUP] grantee, ...
1739
+ * GRANT and REVOKE statements
1718
1740
*
1719
1741
*****************************************************************************/
1720
1742
1721
- GrantStmt : GRANT privileges ON opt_table relation_name_list TO grantee_list opt_with_grant
1743
+ GrantStmt : GRANT privileges ON privilege_target TO grantee_list opt_grant_grant_option
1744
+ {
1745
+ $$ = cat_str(7 , make_str(" grant" ), $2 , make_str(" on" ), $4 , make_str(" to" ), $6 , $7 );
1746
+ }
1747
+ ;
1748
+
1749
+ RevokeStmt : REVOKE opt_revoke_grant_option privileges ON privilege_target FROM grantee_list
1722
1750
{
1723
- $$ = cat_str(8 , make_str(" grant " ), $2 , make_str(" on" ), $4 , $ 5 , make_str(" to " ), $7 , $8 );
1751
+ $$ = cat_str(8 , make_str(" revoke " ), $2 , $3 , make_str(" on" ), $5 , make_str(" from " ), $7 );
1724
1752
}
1725
1753
;
1726
1754
@@ -1732,23 +1760,23 @@ privileges: ALL PRIVILEGES
1732
1760
{
1733
1761
$$ = make_str(" all" );
1734
1762
}
1735
- | operation_commalist
1763
+ | privilege_list
1736
1764
{
1737
1765
$$ = $1 ;
1738
1766
}
1739
1767
;
1740
1768
1741
- operation_commalist : operation
1769
+ privilege_list : privilege
1742
1770
{
1743
1771
$$ = $1 ;
1744
1772
}
1745
- | operation_commalist ' ,' operation
1773
+ | privilege_list ' ,' privilege
1746
1774
{
1747
1775
$$ = cat_str(3 , $1 , make_str(" ," ), $3 );
1748
1776
}
1749
1777
;
1750
1778
1751
- operation : SELECT
1779
+ privilege : SELECT
1752
1780
{
1753
1781
$$ = make_str(" select" );
1754
1782
}
@@ -1776,8 +1804,38 @@ operation: SELECT
1776
1804
{
1777
1805
$$ = make_str(" trigger" );
1778
1806
}
1807
+ | EXECUTE
1808
+ {
1809
+ $$ = make_str(" execute" );
1810
+ }
1811
+ | USAGE
1812
+ {
1813
+ $$ = make_str(" usage" );
1814
+ }
1779
1815
;
1780
1816
1817
+ privilege_target : relation_name_list
1818
+ {
1819
+ $$ = $1 ;
1820
+ }
1821
+ | TABLE relation_name_list
1822
+ {
1823
+ $$ = cat2_str(make_str(" table" ), $2 );
1824
+ }
1825
+ | FUNCTION function_with_argtypes_list
1826
+ {
1827
+ $$ = cat2_str(make_str(" function" ), $2 );
1828
+ }
1829
+ | LANGUAGE name_list
1830
+ {
1831
+ $$ = cat2_str(make_str(" language" ) , $2 );
1832
+ }
1833
+ ;
1834
+
1835
+ grantee_list : grantee { $$ = $1 ; }
1836
+ | grantee_list ' ,' grantee { $$ = cat_str(3 , $1 , make_str(" ," ), $3 ); }
1837
+ ;
1838
+
1781
1839
grantee : PUBLIC
1782
1840
{
1783
1841
$$ = make_str(" public" );
@@ -1792,33 +1850,30 @@ grantee: PUBLIC
1792
1850
}
1793
1851
;
1794
1852
1795
- grantee_list : grantee { $$ = $1 ; }
1796
- | grantee_list ' ,' grantee { $$ = cat_str(3 , $1 , make_str(" ," ), $3 ); }
1797
- ;
1798
-
1799
- opt_with_grant : WITH GRANT OPTION
1800
- {
1801
- mmerror (PARSE_ERROR, ET_WARNING, " Currently unsupported GRANT/WITH GRANT OPTION will be passed to backend" );
1802
- $$ = make_str(" with grant option" );
1803
- }
1853
+ opt_grant_grant_option : WITH GRANT OPTION
1854
+ {
1855
+ mmerror (PARSE_ERROR, ET_WARNING, " Currently unsupported GRANT/WITH GRANT OPTION will be passed to backend" );
1856
+ $$ = make_str(" with grant option" );
1857
+ }
1804
1858
| /* EMPTY*/ { $$ = EMPTY; }
1805
1859
;
1806
1860
1861
+ opt_revoke_grant_option : GRANT OPTION FOR
1862
+ {
1863
+ mmerror (PARSE_ERROR, ET_WARNING, " Currently unsupported REVOKE/GRANT OPTION FOR will be passed to backend" );
1864
+ $$ = make_str(" with grant option" );
1865
+ }
1866
+ | /* EMPTY*/ { $$ = EMPTY; }
1867
+ ;
1807
1868
1808
- /* ****************************************************************************
1809
- *
1810
- * QUERY:
1811
- * REVOKE privileges ON [TABLE relation_name_list FROM [user], ...
1812
- *
1813
- *****************************************************************************/
1814
-
1815
- RevokeStmt : REVOKE privileges ON opt_table relation_name_list FROM grantee_list
1816
- {
1817
- $$ = cat_str(8 , make_str(" revoke" ), $2 , make_str(" on" ), $4 , $5 , make_str(" from" ), $7 );
1818
- }
1869
+ function_with_argtypes_list : function_with_argtypes
1870
+ { $$ = $1 ; }
1871
+ | function_with_argtypes_list ' ,' function_with_argtypes
1872
+ { $$ = cat_str(3 , $1 , make_str(" ," ), $3 ); }
1819
1873
;
1820
1874
1821
-
1875
+ function_with_argtypes : func_name func_args
1876
+ { $$ = cat2_str($1 , $2 ); };
1822
1877
1823
1878
/* ****************************************************************************
1824
1879
*
@@ -2188,9 +2243,9 @@ TransactionStmt: ABORT_TRANS opt_trans { $$ = make_str("rollback"); }
2188
2243
| ROLLBACK opt_trans opt_chain { $$ = cat2_str(make_str(" rollback" ), $3 ); }
2189
2244
;
2190
2245
2191
- opt_trans : WORK { $$ = " " ; }
2192
- | TRANSACTION { $$ = " " ; }
2193
- | /* EMPTY*/ { $$ = " " ; }
2246
+ opt_trans : WORK { $$ = EMPTY ; }
2247
+ | TRANSACTION { $$ = EMPTY ; }
2248
+ | /* EMPTY*/ { $$ = EMPTY ; }
2194
2249
;
2195
2250
2196
2251
opt_chain : AND NO CHAIN { $$ = make_str(" and no chain" ); }
@@ -2252,20 +2307,49 @@ createdb_opt_list: createdb_opt_item
2252
2307
{ $$ = cat2_str($1 , $2 ); }
2253
2308
;
2254
2309
2255
- createdb_opt_item : LOCATION ' =' StringConst { $$ = cat2_str(make_str(" location =" ), $3 ); }
2256
- | LOCATION ' =' DEFAULT { $$ = make_str(" location = default" ); }
2257
- | TEMPLATE ' =' name { $$ = cat2_str(make_str(" template =" ), $3 ); }
2258
- | TEMPLATE ' =' DEFAULT { $$ = make_str(" template = default" ); }
2259
- | ENCODING ' =' PosIntStringConst
2310
+ createdb_opt_item : LOCATION opt_equal StringConst { $$ = cat_str(3 ,make_str(" location" ), $2 , $3 ); }
2311
+ | LOCATION opt_equal DEFAULT { $$ = cat_str(3 , make_str(" location" ), $2 , make_str(" default" )); }
2312
+ | TEMPLATE opt_equal name { $$ = cat_str(3 , make_str(" template" ), $2 , $3 ); }
2313
+ | TEMPLATE opt_equal DEFAULT { $$ = cat_str(3 , make_str(" template" ), $2 , make_str(" default" )); }
2314
+ | ENCODING opt_equal PosIntStringConst
2315
+ {
2316
+ $$ = cat_str(3 , make_str(" encoding" ), $2 , $3 );
2317
+ }
2318
+ | ENCODING opt_equal DEFAULT
2319
+ {
2320
+ $$ = cat_str(3 , make_str(" encoding" ), $2 , make_str(" default" ));
2321
+ }
2322
+ | OWNER opt_equal name
2260
2323
{
2261
- $$ = cat2_str( make_str(" encoding = " ) , $3 );
2324
+ $$ = cat_str( 3 , make_str(" owner " ), $2 , $3 );
2262
2325
}
2263
- | ENCODING ' = ' DEFAULT
2326
+ | OWNER opt_equal DEFAULT
2264
2327
{
2265
- $$ = make_str(" encoding = default" );
2328
+ $$ = cat_str( 3 , make_str(" owner " ), $2 , make_str( " default" ) );
2266
2329
}
2267
2330
;
2268
2331
2332
+ opt_equal : ' =' { $$ = make_str(" =" ); }
2333
+ | /* EMPTY */ { $$ = EMPTY; }
2334
+ ;
2335
+
2336
+ /* ****************************************************************************
2337
+ *
2338
+ * ALTER DATABASE
2339
+ *
2340
+ *
2341
+ *****************************************************************************/
2342
+
2343
+ AlterDatabaseSetStmt : ALTER DATABASE database_name VariableSetStmt
2344
+ {
2345
+ $$ = cat_str(3 , make_str(" alter database" ), $3 , $4 );
2346
+ }
2347
+ | ALTER DATABASE database_name VariableResetStmt
2348
+ {
2349
+ $$ = cat_str(3 , make_str(" alter database" ), $3 , $4 );
2350
+ }
2351
+ ;
2352
+
2269
2353
/* ****************************************************************************
2270
2354
*
2271
2355
* DROP DATABASE
@@ -2702,10 +2786,7 @@ select_limit: LIMIT select_limit_value OFFSET select_offset_value
2702
2786
| OFFSET select_offset_value
2703
2787
{ $$ = cat2_str(make_str(" offset" ), $2 ); }
2704
2788
| LIMIT select_limit_value ' ,' select_offset_value
2705
- { $$ = cat_str(4 , make_str(" limit" ), $2 , make_str(" ," ), $4 ); }
2706
- /* enable this in 7.3, bjm 2001-10-22
2707
2789
{ mmerror(PARSE_ERROR, ET_WARNING, " No longer supported LIMIT #,# syntax passed to backend." ); }
2708
- */
2709
2790
;
2710
2791
2711
2792
opt_select_limit : select_limit { $$ = $1 ; }
@@ -5147,6 +5228,7 @@ unreserved_keyword:
5147
5228
| STATISTICS { $$ = make_str(" statistics" ); }
5148
5229
| STDIN { $$ = make_str(" stdin" ); }
5149
5230
| STDOUT { $$ = make_str(" stdout" ); }
5231
+ | STORAGE { $$ = make_str(" storage" ); }
5150
5232
| SYSID { $$ = make_str(" sysid" ); }
5151
5233
| TEMP { $$ = make_str(" temp" ); }
5152
5234
| TEMPLATE { $$ = make_str(" template" ); }
@@ -5162,6 +5244,7 @@ unreserved_keyword:
5162
5244
| UNLISTEN { $$ = make_str(" unlisten" ); }
5163
5245
| UNTIL { $$ = make_str(" until" ); }
5164
5246
| UPDATE { $$ = make_str(" update" ); }
5247
+ | USAGE { $$ = make_str(" usage" ); }
5165
5248
| VACUUM { $$ = make_str(" vacuum" ); }
5166
5249
| VALID { $$ = make_str(" valid" ); }
5167
5250
| VALUES { $$ = make_str(" values" ); }
0 commit comments