@@ -337,7 +337,7 @@ make_name(void)
337
337
%type <str> constraints_set_mode comment_type comment_cl comment_ag
338
338
%type <str> CreateGroupStmt AlterGroupStmt DropGroupStmt key_delete
339
339
%type <str> opt_force key_update CreateSchemaStmt PosIntStringConst
340
- %type <str> IntConst PosIntConst
340
+ %type <str> IntConst PosIntConst grantee_list func_type
341
341
%type <str> select_limit opt_for_update_clause CheckPointStmt
342
342
343
343
%type <str> ECPGWhenever ECPGConnect connection_target ECPGOpen
@@ -852,6 +852,10 @@ VariableShowStmt: SHOW ColId
852
852
{
853
853
$$ = make_str(" show time zone" );
854
854
}
855
+ | SHOW ALL
856
+ {
857
+ $$ = make_str(" show all" );
858
+ }
855
859
| SHOW TRANSACTION ISOLATION LEVEL
856
860
{
857
861
$$ = make_str(" show transaction isolation level" );
@@ -870,6 +874,10 @@ VariableResetStmt: RESET ColId
870
874
{
871
875
$$ = make_str(" reset transaction isolation level" );
872
876
}
877
+ | RESET ALL
878
+ {
879
+ $$ = make_str(" reset all" );
880
+ }
873
881
;
874
882
875
883
ConstraintsSetStmt : SET CONSTRAINTS constraints_set_list constraints_set_mode
@@ -1681,11 +1689,11 @@ comment_text: StringConst { $$ = $1; }
1681
1689
/* ****************************************************************************
1682
1690
*
1683
1691
* QUERY:
1684
- * GRANT [privileges] ON [relation_name_list] TO [GROUP] grantee
1692
+ * GRANT [privileges] ON [TABLE] relation_name_list TO [GROUP] grantee, ...
1685
1693
*
1686
1694
*****************************************************************************/
1687
1695
1688
- GrantStmt : GRANT privileges ON opt_table relation_name_list TO grantee opt_with_grant
1696
+ GrantStmt : GRANT privileges ON opt_table relation_name_list TO grantee_list opt_with_grant
1689
1697
{
1690
1698
$$ = cat_str(8 , make_str(" grant" ), $2 , make_str(" on" ), $4 , $5 , make_str(" to" ), $7 );
1691
1699
}
@@ -1759,6 +1767,10 @@ grantee: PUBLIC
1759
1767
}
1760
1768
;
1761
1769
1770
+ grantee_list : grantee { $$ = $1 ; }
1771
+ | grantee_list ' ,' grantee { $$ = cat_str(3 , $1 , make_str(" ," ), $3 ); }
1772
+ ;
1773
+
1762
1774
opt_with_grant : WITH GRANT OPTION
1763
1775
{
1764
1776
mmerror (ET_ERROR, " WITH GRANT OPTION is not supported. Only relation owners can set privileges" );
@@ -1770,11 +1782,11 @@ opt_with_grant: WITH GRANT OPTION
1770
1782
/* ****************************************************************************
1771
1783
*
1772
1784
* QUERY:
1773
- * REVOKE [ privileges] ON [relation_name] FROM [user]
1785
+ * REVOKE privileges ON [TABLE relation_name_list FROM [user], ...
1774
1786
*
1775
1787
*****************************************************************************/
1776
1788
1777
- RevokeStmt : REVOKE privileges ON opt_table relation_name_list FROM grantee
1789
+ RevokeStmt : REVOKE privileges ON opt_table relation_name_list FROM grantee_list
1778
1790
{
1779
1791
$$ = cat_str(8 , make_str(" revoke" ), $2 , make_str(" on" ), $4 , $5 , make_str(" from" ), $7 );
1780
1792
}
@@ -1914,15 +1926,15 @@ func_args_list: func_arg { $$ = $1; }
1914
1926
{ $$ = cat_str(3 , $1 , make_str(" ," ), $3 ); }
1915
1927
;
1916
1928
1917
- func_arg : opt_arg Typename
1929
+ func_arg : opt_arg func_type
1918
1930
{
1919
1931
/* We can catch over-specified arguments here if we want to,
1920
1932
* but for now better to silently swallow typmod, etc.
1921
1933
* - thomas 2000-03-22
1922
1934
*/
1923
1935
$$ = cat2_str($1 , $2 );
1924
1936
}
1925
- | Typename
1937
+ | func_type
1926
1938
{
1927
1939
$$ = $1 ;
1928
1940
}
@@ -1944,7 +1956,7 @@ opt_arg: IN { $$ = make_str("in"); }
1944
1956
func_as : StringConst { $$ = $1 ; }
1945
1957
| StringConst ' ,' StringConst { $$ = cat_str(3 , $1 , make_str(" ," ), $3 ); }
1946
1958
1947
- func_return : Typename
1959
+ func_return : func_type
1948
1960
{
1949
1961
/* We can catch over-specified arguments here if we want to,
1950
1962
* but for now better to silently swallow typmod, etc.
@@ -1954,6 +1966,16 @@ func_return: Typename
1954
1966
}
1955
1967
;
1956
1968
1969
+ func_type : Typename
1970
+ {
1971
+ $$ = $1 ;
1972
+ }
1973
+ | IDENT ' .' ColId ' %' TYPE_P
1974
+ {
1975
+ $$ = cat_str(4 , $1 , make_str(" ." ), $3 , make_str(" % type" ));
1976
+ }
1977
+ ;
1978
+
1957
1979
/* ****************************************************************************
1958
1980
*
1959
1981
* QUERY:
@@ -3869,7 +3891,7 @@ connection_target: database_name opt_server opt_port
3869
3891
/* old style: dbname[@server][:port] */
3870
3892
if (strlen($2 ) > 0 && *($2 ) != ' @' )
3871
3893
{
3872
- sprintf (errortext, " parse error at or near '%s'" , $2 );
3894
+ sprintf (errortext, " Expected '@', found '%s'" , $2 );
3873
3895
mmerror (ET_ERROR, errortext);
3874
3896
}
3875
3897
@@ -3880,7 +3902,7 @@ connection_target: database_name opt_server opt_port
3880
3902
/* new style: <tcp|unix>:postgresql://server[:port][/dbname] */
3881
3903
if (strncmp($3 , " //" , strlen(" //" )) != 0 )
3882
3904
{
3883
- sprintf (errortext, " parse error at or near '%s'" , $3 );
3905
+ sprintf (errortext, " Expected '://', found '%s'" , $3 );
3884
3906
mmerror (ET_ERROR, errortext);
3885
3907
}
3886
3908
@@ -3926,7 +3948,7 @@ db_prefix: ident cvariable
3926
3948
{
3927
3949
if (strcmp($2 , " postgresql" ) != 0 && strcmp($2 , " postgres" ) != 0 )
3928
3950
{
3929
- sprintf (errortext, " parse error at or near '%s'" , $2 );
3951
+ sprintf (errortext, " Expected 'postgresql', found '%s'" , $2 );
3930
3952
mmerror (ET_ERROR, errortext);
3931
3953
}
3932
3954
@@ -3943,7 +3965,7 @@ server: Op server_name
3943
3965
{
3944
3966
if (strcmp($1 , " @" ) != 0 && strcmp($1 , " //" ) != 0 )
3945
3967
{
3946
- sprintf (errortext, " parse error at or near '%s'" , $1 );
3968
+ sprintf (errortext, " Expected '@' or '://', found '%s'" , $1 );
3947
3969
mmerror (ET_ERROR, errortext);
3948
3970
}
3949
3971
@@ -4037,11 +4059,11 @@ char_variable: cvariable
4037
4059
opt_options : Op ColId
4038
4060
{
4039
4061
if (strlen($1 ) == 0 )
4040
- mmerror (ET_ERROR, " parse error " );
4062
+ mmerror (ET_ERROR, " incomplete statement " );
4041
4063
4042
4064
if (strcmp($1 , " ?" ) != 0 )
4043
4065
{
4044
- sprintf (errortext, " parse error at or near %s " , $1 );
4066
+ sprintf (errortext, " unrecognised token '%s' " , $1 );
4045
4067
mmerror (ET_ERROR, errortext);
4046
4068
}
4047
4069
0 commit comments