From: | Alvaro Herrera <alvherre(at)dcc(dot)uchile(dot)cl> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | Neil Conway <neilc(at)samurai(dot)com>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: bug w/ cursors and savepoints |
Date: | 2005-01-25 18:14:07 |
Message-ID: | 20050125181407.GE1581@dcc.uchile.cl |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Tue, Jan 25, 2005 at 12:32:57PM -0500, Tom Lane wrote:
> So the right fix might involve putting the portal into PORTAL_FAILED
> state rather than just zapping it completely.
Strangely, the code comes up simpler after the fix. Patch attached.
Regression test pass. Additionaly I tried both cases mentioned in this
thread; maybe it's worthy to add tests for them too.
alvherre=# begin;
BEGIN
alvherre=# savepoint x;
SAVEPOINT
alvherre=# create table abc (a int);
CREATE TABLE
alvherre=# insert into abc values (5);
INSERT 33616 1
alvherre=# declare foo cursor for select * from abc;
DECLARE CURSOR
alvherre=# rollback to x;
ROLLBACK
alvherre=# fetch from foo; -- hits an Assert()
ERROR: no existe el cursor «foo»
alvherre=# commit;
ROLLBACK
alvherre=# begin;
BEGIN
alvherre=# declare c cursor for select 1 union all select 2;
DECLARE CURSOR
alvherre=# savepoint x;
SAVEPOINT
alvherre=# fetch from c;
?column?
----------
1
(1 fila)
alvherre=# rollback to x;
ROLLBACK
alvherre=# fetch from c;
?column?
----------
2
(1 fila)
alvherre=# commit;
COMMIT
--
Alvaro Herrera (<alvherre[(at)]dcc(dot)uchile(dot)cl>)
"The ability to monopolize a planet is insignificant
next to the power of the source"
Attachment | Content-Type | Size |
---|---|---|
cursor-fix.patch | text/plain | 2.3 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2005-01-25 18:14:50 | Re: strxfrm implementation |
Previous Message | noman naeem | 2005-01-25 18:12:11 | Re: how to add a new column in pg_proc table |