Re: Savepoints and SPI

Поиск
Список
Период
Сортировка
Искать

Re: Savepoints and SPI

От:
Alvaro Herrera <alvherre@dcc.uchile.cl>
Дата:
On Wed, Mar 16, 2005 at 07:35:57PM +0100, Thomas Hallgren wrote:
> I have some test code that utilize SPI and does the following:
> 
> 1. SPI_connect
> 2. set a savepoint (using BeginInternalSubTransaction)
> 3. execute a statement that contains a syntax error (within PG_TRY/PG_CATCH)
> 4. rollback to the savepoint (RollbackAndReleaseCurrentSubTransaction)
> 5. execute some other statement.
> 
> it errors out in step 5 with SPI_ERROR_UNCONNECTED. It seems that step 
> 3, when it encounters an error, automatically executes a SPI_finish. Is 
> that the desired behavior?

I'd expect the code to close an SPI connection that is opened inside the
savepoint, but if you open it before setting the savepoint then it
should remain open.

-- 
Alvaro Herrera ()
"Endurecerse, pero jamás perder la ternura" (E. Guevara)

Savepoints and SPI

От:
Thomas Hallgren <thhal@mailblocks.com>
Дата:
I have some test code that utilize SPI and does the following:

1. SPI_connect
2. set a savepoint (using BeginInternalSubTransaction)
3. execute a statement that contains a syntax error (within PG_TRY/PG_CATCH)
4. rollback to the savepoint (RollbackAndReleaseCurrentSubTransaction)
5. execute some other statement.

it errors out in step 5 with SPI_ERROR_UNCONNECTED. It seems that step 
3, when it encounters an error, automatically executes a SPI_finish. Is 
that the desired behavior?

Should I assume that _all_ errors will act this way, i.e. should I 
assume that if I end up in a PG_CATCH() that my SPI has been 
disconnected always?

Regards,
Thomas Hallgren

Re: Savepoints and SPI

От:
Thomas Hallgren <thhal@mailblocks.com>
Дата:
Alvaro Herrera wrote:

>On Wed, Mar 16, 2005 at 07:35:57PM +0100, Thomas Hallgren wrote:
>  
>
>>I have some test code that utilize SPI and does the following:
>>
>>1. SPI_connect
>>2. set a savepoint (using BeginInternalSubTransaction)
>>3. execute a statement that contains a syntax error (within PG_TRY/PG_CATCH)
>>4. rollback to the savepoint (RollbackAndReleaseCurrentSubTransaction)
>>5. execute some other statement.
>>
>>it errors out in step 5 with SPI_ERROR_UNCONNECTED. It seems that step 
>>3, when it encounters an error, automatically executes a SPI_finish. Is 
>>that the desired behavior?
>>    
>>
>
>I'd expect the code to close an SPI connection that is opened inside the
>savepoint, but if you open it before setting the savepoint then it
>should remain open.
>  
>
That doesn't seem to be what happens. ISTM that the AtEOSubXact_SPI will 
do this always:
       _SPI_connected--;       _SPI_curid = _SPI_connected;

which in essence puts SPI in an unconnected state regardless of what the 
values where before on the _SPI_connected and _SPI_curid.

Regards,
Thomas Hallgren



FAQ