@@ -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 ornear '%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