提交 eec61086 编写于 作者: V Vadim B. Mikheev

+ SPI_palloc(), SPI_repalloc(), SPI_pfree() - for allocations

in upper Executor memory context.
上级 af5c86e2
...@@ -69,6 +69,8 @@ extern void ShowUsage(void); ...@@ -69,6 +69,8 @@ extern void ShowUsage(void);
#endif #endif
/* =================== interface functions =================== */
int int
SPI_connect() SPI_connect()
{ {
...@@ -487,6 +489,69 @@ SPI_getrelname(Relation rel) ...@@ -487,6 +489,69 @@ SPI_getrelname(Relation rel)
return (pstrdup(rel->rd_rel->relname.data)); return (pstrdup(rel->rd_rel->relname.data));
} }
void *
SPI_palloc (Size size)
{
MemoryContext oldcxt = NULL;
void *pointer;
if (_SPI_curid + 1 == _SPI_connected) /* connected */
{
if (_SPI_current != &(_SPI_stack[_SPI_curid + 1]))
elog(FATAL, "SPI: stack corrupted");
oldcxt = MemoryContextSwitchTo(_SPI_current->savedcxt);
}
pointer = palloc (size);
if (oldcxt)
MemoryContextSwitchTo(oldcxt);
return (pointer);
}
void *
SPI_repalloc (void *pointer, Size size)
{
MemoryContext oldcxt = NULL;
if (_SPI_curid + 1 == _SPI_connected) /* connected */
{
if (_SPI_current != &(_SPI_stack[_SPI_curid + 1]))
elog(FATAL, "SPI: stack corrupted");
oldcxt = MemoryContextSwitchTo(_SPI_current->savedcxt);
}
pointer = repalloc (pointer, size);
if (oldcxt)
MemoryContextSwitchTo(oldcxt);
return (pointer);
}
void
SPI_pfree (void *pointer)
{
MemoryContext oldcxt = NULL;
if (_SPI_curid + 1 == _SPI_connected) /* connected */
{
if (_SPI_current != &(_SPI_stack[_SPI_curid + 1]))
elog(FATAL, "SPI: stack corrupted");
oldcxt = MemoryContextSwitchTo(_SPI_current->savedcxt);
}
pfree (pointer);
if (oldcxt)
MemoryContextSwitchTo(oldcxt);
return;
}
/* =================== private functions =================== */
/* /*
* spi_printtup -- * spi_printtup --
* store tuple retrieved by Executor into SPITupleTable * store tuple retrieved by Executor into SPITupleTable
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册