"Pavel Stehule" <[EMAIL PROTECTED]> writes:
> I found one unsupported form plpgsql's fetch statement which is supported
> by postgresql.

> PostgreSQL knows
> FETCH 3 FROM ....

> but plpgsql needs everytime direction's keyword.

No, I think that's OK, because that form specifies fetching 3 rows,
which plpgsql's FETCH doesn't support.


it's true. There is same question for move statement too. Other difference is unsupported keyword IN.

It can be fixed:

*** ./gram.y.orig       2007-04-19 20:27:17.000000000 +0200
--- ./gram.y    2007-04-19 20:41:16.000000000 +0200
***************
*** 2059,2071 ****
        else if (pg_strcasecmp(yytext, "absolute") == 0)
        {
                fetch->direction = FETCH_ABSOLUTE;
!               fetch->expr = plpgsql_read_expression(K_FROM, "FROM");
                check_FROM = false;
        }
        else if (pg_strcasecmp(yytext, "relative") == 0)
        {
                fetch->direction = FETCH_RELATIVE;
!               fetch->expr = plpgsql_read_expression(K_FROM, "FROM");
                check_FROM = false;
        }
        else if (pg_strcasecmp(yytext, "forward") == 0)
--- 2059,2071 ----
        else if (pg_strcasecmp(yytext, "absolute") == 0)
        {
                fetch->direction = FETCH_ABSOLUTE;
! fetch->expr = read_sql_construct(K_FROM, K_IN, "FROM/IN", "SELECT ", true, true, NULL);
                check_FROM = false;
        }
        else if (pg_strcasecmp(yytext, "relative") == 0)
        {
                fetch->direction = FETCH_RELATIVE;
! fetch->expr = read_sql_construct(K_FROM, K_IN, "FROM/IN", "SELECT ", true, true, NULL);
                check_FROM = false;
        }
        else if (pg_strcasecmp(yytext, "forward") == 0)
***************
*** 2076,2081 ****
--- 2076,2087 ----
        {
                fetch->direction = FETCH_BACKWARD;
        }
+       else if (tok != T_SCALAR)
+       {
+               plpgsql_push_back_token(tok);
+ fetch->expr = read_sql_construct(K_FROM, K_IN, "FROM/IN", "SELECT ", true, true, NULL);
+               check_FROM = false;
+       }
        else
        {
                /* Assume there's no direction clause */
***************
*** 2083,2091 ****
                check_FROM = false;
        }

!       /* check FROM keyword after direction's specification */
!       if (check_FROM && yylex() != K_FROM)
!               yyerror("expected \"FROM\"");

        return fetch;
 }
--- 2089,2097 ----
                check_FROM = false;
        }

!       /* check FROM or IN keyword after direction's specification */
!       if (check_FROM && (yylex() != K_FROM && yylex() != K_IN))
!               yyerror("expected \"FROM/IN\"");

        return fetch;
 }

Regards
Pavel Stehule

_________________________________________________________________
Najdete si svou lasku a nove pratele na Match.com. http://www.msn.cz/


---------------------------(end of broadcast)---------------------------
TIP 1: if posting/reading through Usenet, please send an appropriate
      subscribe-nomail command to [EMAIL PROTECTED] so that your
      message can get through to the mailing list cleanly

Reply via email to