diff options
author | Jan Wieck <JanWieck@Yahoo.com> | 2001-05-21 14:22:19 +0000 |
---|---|---|
committer | Jan Wieck <JanWieck@Yahoo.com> | 2001-05-21 14:22:19 +0000 |
commit | d27f363e3fceb7612997ae89a8fc84de6754a213 (patch) | |
tree | 844989e8d2c1b8f4ab444a5d439eab50142abbf3 /src/include/executor/spi.h | |
parent | be03eb25f34c9c95c400504ef76c8abe0081d09f (diff) |
Enhancement of SPI to get access to portals
- New functions to create a portal using a prepared/saved
SPI plan or lookup an existing portal by name.
- Functions to fetch/move from/in portals. Results are placed
in the usual SPI_processed and SPI_tuptable, so the entire
set of utility functions can be used to gain attribute access.
- Prepared/saved SPI plans now use their own memory context
and SPI_freeplan(plan) can remove them.
- Tuple result sets (SPI_tuptable) now uses it's own memory
context and can be free'd by SPI_freetuptable(tuptab).
Enhancement of PL/pgSQL
- Uses generic named portals internally in FOR ... SELECT
loops to avoid running out of memory on huge result sets.
- Support for CURSOR and REFCURSOR syntax using the new SPI
functionality. Cursors used internally only need no explicit
transaction block. Refcursor variables can be used inside
of explicit transaction block to pass cursors between main
application and functions.
Jan
Diffstat (limited to 'src/include/executor/spi.h')
-rw-r--r-- | src/include/executor/spi.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/include/executor/spi.h b/src/include/executor/spi.h index b95eaae4e9e..3a7c7807942 100644 --- a/src/include/executor/spi.h +++ b/src/include/executor/spi.h @@ -41,6 +41,7 @@ typedef struct { + MemoryContext tuptabcxt; /* memory context of result table */ uint32 alloced; /* # of alloced vals */ uint32 free; /* # of free vals */ TupleDesc tupdesc; /* tuple descriptor */ @@ -83,6 +84,7 @@ extern int SPI_exec(char *src, int tcount); extern int SPI_execp(void *plan, Datum *values, char *Nulls, int tcount); extern void *SPI_prepare(char *src, int nargs, Oid *argtypes); extern void *SPI_saveplan(void *plan); +extern int SPI_freeplan(void *plan); extern HeapTuple SPI_copytuple(HeapTuple tuple); extern HeapTuple SPI_modifytuple(Relation rel, HeapTuple tuple, int natts, @@ -98,6 +100,14 @@ extern void *SPI_palloc(Size size); extern void *SPI_repalloc(void *pointer, Size size); extern void SPI_pfree(void *pointer); extern void SPI_freetuple(HeapTuple pointer); +extern void SPI_freetuptable(SPITupleTable *tuptable); + +extern Portal SPI_cursor_open(char *name, void *plan, + Datum *Values, char *Nulls); +extern Portal SPI_cursor_find(char *name); +extern void SPI_cursor_fetch(Portal portal, bool forward, int count); +extern void SPI_cursor_move(Portal portal, bool forward, int count); +extern void SPI_cursor_close(Portal portal); extern void AtEOXact_SPI(void); |