SPI_exec shouldn't return SPI_OK_SELECT if it hasn't actually returned
a tuple table. Fixes core dump in pltcl (and probably other PLs) when executing a query rewritten by a rule. Per bug report from Wolfgang Walter.
This commit is contained in:
parent
6976205b4b
commit
26f56131ae
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/executor/spi.c,v 1.84 2003/01/21 22:06:12 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/backend/executor/spi.c,v 1.85 2003/01/29 15:24:46 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -124,6 +124,14 @@ SPI_finish(void)
|
|||||||
MemoryContextDelete(_SPI_current->execCxt);
|
MemoryContextDelete(_SPI_current->execCxt);
|
||||||
MemoryContextDelete(_SPI_current->procCxt);
|
MemoryContextDelete(_SPI_current->procCxt);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Reset result variables, especially SPI_tuptable which is probably
|
||||||
|
* pointing at a just-deleted tuptable
|
||||||
|
*/
|
||||||
|
SPI_processed = 0;
|
||||||
|
SPI_lastoid = InvalidOid;
|
||||||
|
SPI_tuptable = NULL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* After _SPI_begin_call _SPI_connected == _SPI_curid. Now we are
|
* After _SPI_begin_call _SPI_connected == _SPI_curid. Now we are
|
||||||
* closing connection to SPI and returning to upper Executor and so
|
* closing connection to SPI and returning to upper Executor and so
|
||||||
@ -1314,6 +1322,11 @@ _SPI_pquery(QueryDesc *queryDesc, bool runit, int tcount)
|
|||||||
SPI_lastoid = save_lastoid;
|
SPI_lastoid = save_lastoid;
|
||||||
SPI_tuptable = _SPI_current->tuptable;
|
SPI_tuptable = _SPI_current->tuptable;
|
||||||
}
|
}
|
||||||
|
else if (res == SPI_OK_SELECT)
|
||||||
|
{
|
||||||
|
/* Don't return SPI_OK_SELECT if we discarded the result */
|
||||||
|
res = SPI_OK_UTILITY;
|
||||||
|
}
|
||||||
|
|
||||||
ExecutorEnd(queryDesc);
|
ExecutorEnd(queryDesc);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user