Re: pgsql crollable cursor doesn't support one form of postgresql's cu
От | Pavel Stehule |
---|---|
Тема | Re: pgsql crollable cursor doesn't support one form of postgresql's cu |
Дата | |
Msg-id | BAY20-F252869E03AEC7189F6AEEAF9560@phx.gbl обсуждение исходный текст |
Ответ на | Re: pgsql crollable cursor doesn't support one form of postgresql's cursors (Tom Lane <tgl@sss.pgh.pa.us>) |
Ответы |
Re: pgsql crollable cursor doesn't support one form
of postgresql's cu
|
Список | pgsql-hackers |
> >"Pavel Stehule" <pavel.stehule@hotmail.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/
В списке pgsql-hackers по дате отправления: