]> granicus.if.org Git - postgresql/blob - src/include/executor/spi.h
+ SPI_palloc(), SPI_repalloc(), SPI_pfree()
[postgresql] / src / include / executor / spi.h
1 /*-------------------------------------------------------------------------
2  *
3  * spi.h--
4  *
5  *
6  *-------------------------------------------------------------------------
7  */
8 #ifndef SPI_H
9 #define SPI_H
10
11 #include <string.h>
12 #include "postgres.h"
13 #include "nodes/primnodes.h"
14 #include "nodes/relation.h"
15 #include "nodes/execnodes.h"
16 #include "nodes/plannodes.h"
17 #include "catalog/pg_proc.h"
18 #include "parser/parse_query.h"
19 #include "tcop/pquery.h"
20 #include "tcop/tcopprot.h"
21 #include "tcop/utility.h"
22 #include "tcop/dest.h"
23 #include "nodes/params.h"
24 #include "utils/fcache.h"
25 #include "utils/datum.h"
26 #include "utils/elog.h"
27 #include "utils/palloc.h"
28 #include "utils/syscache.h"
29 #include "utils/mcxt.h"
30 #include "utils/portal.h"
31 #include "utils/builtins.h"
32 #include "catalog/pg_language.h"
33 #include "access/heapam.h"
34 #include "access/xact.h"
35 #include "executor/executor.h"
36 #include "executor/execdefs.h"
37
38 typedef struct
39 {
40         uint32          alloced;                /* # of alloced vals */
41         uint32          free;                   /* # of free vals */
42         TupleDesc       tupdesc;                /* tuple descriptor */
43         HeapTuple  *vals;                       /* tuples */
44 }                       SPITupleTable;
45
46 #define SPI_ERROR_CONNECT               -1
47 #define SPI_ERROR_COPY                  -2
48 #define SPI_ERROR_OPUNKNOWN             -3
49 #define SPI_ERROR_UNCONNECTED   -4
50 #define SPI_ERROR_CURSOR                -5
51 #define SPI_ERROR_ARGUMENT              -6
52 #define SPI_ERROR_PARAM                 -7
53 #define SPI_ERROR_TRANSACTION   -8
54 #define SPI_ERROR_NOATTRIBUTE   -9
55 #define SPI_ERROR_NOOUTFUNC             -10
56 #define SPI_ERROR_TYPUNKNOWN    -11
57
58 #define SPI_OK_CONNECT                  1
59 #define SPI_OK_FINISH                   2
60 #define SPI_OK_FETCH                    3
61 #define SPI_OK_UTILITY                  4
62 #define SPI_OK_SELECT                   5
63 #define SPI_OK_SELINTO                  6
64 #define SPI_OK_INSERT                   7
65 #define SPI_OK_DELETE                   8
66 #define SPI_OK_UPDATE                   9
67 #define SPI_OK_CURSOR                   10
68
69 extern uint32 SPI_processed;
70 extern SPITupleTable *SPI_tuptable;
71 extern int      SPI_result;
72
73 extern int      SPI_connect(void);
74 extern int      SPI_finish(void);
75 extern int      SPI_exec(char *src, int tcount);
76 extern int      SPI_execp(void *plan, Datum * values, char *Nulls, int tcount);
77 extern void *SPI_prepare(char *src, int nargs, Oid * argtypes);
78 extern void *SPI_saveplan(void *plan);
79
80 extern HeapTuple SPI_copytuple(HeapTuple tuple);
81 extern HeapTuple
82 SPI_modifytuple(Relation rel, HeapTuple tuple, int natts,
83                                 int *attnum, Datum * Values, char *Nulls);
84 extern int      SPI_fnumber(TupleDesc tupdesc, char *fname);
85 extern char *SPI_fname(TupleDesc tupdesc, int fnumber);
86 extern char *SPI_getvalue(HeapTuple tuple, TupleDesc tupdesc, int fnumber);
87 extern Datum SPI_getbinval(HeapTuple tuple, TupleDesc tupdesc, int fnumber, bool * isnull);
88 extern char *SPI_gettype(TupleDesc tupdesc, int fnumber);
89 extern Oid      SPI_gettypeid(TupleDesc tupdesc, int fnumber);
90 extern char *SPI_getrelname(Relation rel);
91 extern void     *SPI_palloc (Size size);
92 extern void     *SPI_repalloc(void *pointer, Size size);
93 extern void     SPI_pfree(void *pointer);
94
95 #endif                                                  /* SPI_H */