> Uh, isn't the correct fix
authorBruce Momjian
Mon, 15 Oct 2001 18:16:31 +0000 (18:16 +0000)
committerBruce Momjian
Mon, 15 Oct 2001 18:16:31 +0000 (18:16 +0000)
 > ! $$ = cat_str(8, make_str("grant"), $2, make_str("on"), $4, $5,
 > make_str("to"), $7, $8);
 > ISTM your patch loses the opt_with_grant clause.  (Of course the
 > backend doesn't currently accept that clause anyway, but that's no
 > reason for ecpg to drop it.)

My patch doesn't loose the option, it's never been passed on anyway:

 opt_with_grant:  WITH GRANT OPTION
                                {
                                        mmerror(ET_ERROR, "WITH GRANT OPTION is not supported.  Only relation owners can
 set privileges");
                                 }
                | /*EMPTY*/
                ;

The existing code in ecpg/preproc/preproc.y to handle the WITH option
simply throws an error and aborts the processing... The patch below
prevents the segfault and also passes on the WITH option to the
backend, probably a better fix.

Lee Kindness

src/interfaces/ecpg/preproc/preproc.y

index 8db1982c2cdc4d6edf975301db0d52452097f14f..f35f21c1e63d6d8ef48fc68bd8ca78a4f48dca5b 100644 (file)
@@ -1693,7 +1693,7 @@ comment_text:    StringConst      { $$ = $1; }
 
 GrantStmt:  GRANT privileges ON opt_table relation_name_list TO grantee_list opt_with_grant
                {
-                   $$ = cat_str(7, make_str("grant"), $2, make_str("on"), $4, $5, make_str("to"), $7);
+                   $$ = cat_str(8, make_str("grant"), $2, make_str("on"), $4, $5, make_str("to"), $7, $8);
                }
        ;
 
@@ -1769,11 +1769,8 @@ grantee_list: grantee                { $$ = $1; }
        | grantee_list ',' grantee  { $$ = cat_str(3, $1, make_str(","), $3); }
        ;
 
-opt_with_grant:  WITH GRANT OPTION
-               {
-                   mmerror(ET_ERROR, "WITH GRANT OPTION is not supported.  Only relation owners can set privileges");
-                }
-       | /*EMPTY*/ 
+opt_with_grant:  WITH GRANT OPTION { $$ = make_str("with grant option"); }
+       | /*EMPTY*/ { $$ = EMPTY; }
        ;