From: | "Pavel Stehule" <pavel(dot)stehule(at)hotmail(dot)com> |
---|---|
To: | tgl(at)sss(dot)pgh(dot)pa(dot)us |
Cc: | pgsql-hackers(at)postgresql(dot)org |
Subject: | Re: pgsql crollable cursor doesn't support one form of postgresql's cu |
Date: | 2007-04-20 05:48:20 |
Message-ID: | BAY20-F252869E03AEC7189F6AEEAF9560@phx.gbl |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
>
>"Pavel Stehule" <pavel(dot)stehule(at)hotmail(dot)com> 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/
From | Date | Subject | |
---|---|---|---|
Next Message | Koichi Suzuki | 2007-04-20 06:00:15 | Re: [HACKERS] Full page writes improvement, code update |
Previous Message | Tom Lane | 2007-04-20 05:15:28 | Re: pgsql crollable cursor doesn't support one form of postgresql's cursors |