@@ -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
+ * GRANTand 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" ); }