PostgreSQL Source Code: src/pl/plpython/plpy_procedure.h Source File

PostgreSQL Source Code git master
plpy_procedure.h
Go to the documentation of this file.
1/*
2 * src/pl/plpython/plpy_procedure.h
3 */
4
5#ifndef PLPY_PROCEDURE_H
6#define PLPY_PROCEDURE_H
7
8#include "plpy_typeio.h"
9
10
11extern void init_procedure_caches(void);
12
13
14/*
15 * Trigger type
16 */
17 typedef enum PLyTrigType
18{
19 PLPY_TRIGGER,
20 PLPY_EVENT_TRIGGER,
21 PLPY_NOT_TRIGGER,
22 } PLyTrigType;
23
24/* saved arguments for outer recursion level or set-returning function */
25 typedef struct PLySavedArgs
26{
27 struct PLySavedArgs *next; /* linked-list pointer */
28 PyObject *args; /* "args" element of globals dict */
29 PyObject *td; /* "TD" element of globals dict, if trigger */
30 int nargs; /* length of namedargs array */
31 PyObject *namedargs[FLEXIBLE_ARRAY_MEMBER]; /* named args */
32 } PLySavedArgs;
33
34/* cached procedure data */
35 typedef struct PLyProcedure
36{
37 MemoryContext mcxt; /* context holding this PLyProcedure and its
38 * subsidiary data */
39 char *proname; /* SQL name of procedure */
40 char *pyname; /* Python name of procedure */
41 TransactionId fn_xmin;
42 ItemPointerData fn_tid;
43 bool fn_readonly;
44 bool is_setof; /* true, if function returns result set */
45 bool is_procedure;
46 PLyTrigType is_trigger; /* called as trigger? */
47 PLyObToDatum result; /* Function result output conversion info */
48 PLyDatumToOb result_in; /* For converting input tuples in a trigger */
49 char *src; /* textual procedure code, after mangling */
50 char **argnames; /* Argument names */
51 PLyDatumToOb *args; /* Argument input conversion info */
52 int nargs; /* Number of elements in above arrays */
53 Oid langid; /* OID of plpython pg_language entry */
54 List *trftypes; /* OID list of transform types */
55 PyObject *code; /* compiled procedure code */
56 PyObject *statics; /* data saved across calls, local scope */
57 PyObject *globals; /* data saved across calls, global scope */
58 long calldepth; /* depth of recursive calls of function */
59 PLySavedArgs *argstack; /* stack of outer-level call arguments */
60 } PLyProcedure;
61
62/* the procedure cache key */
63 typedef struct PLyProcedureKey
64{
65 Oid fn_oid; /* function OID */
66 Oid fn_rel; /* triggered-on relation or InvalidOid */
67 } PLyProcedureKey;
68
69/* the procedure cache entry */
70 typedef struct PLyProcedureEntry
71{
72 PLyProcedureKey key; /* hash key */
73 PLyProcedure *proc;
74 } PLyProcedureEntry;
75
76/* PLyProcedure manipulation */
77extern char *PLy_procedure_name(PLyProcedure *proc);
78extern PLyProcedure *PLy_procedure_get(Oid fn_oid, Oid fn_rel, PLyTrigType is_trigger);
79extern void PLy_procedure_compile(PLyProcedure *proc, const char *src);
80extern void PLy_procedure_delete(PLyProcedure *proc);
81
82#endif /* PLPY_PROCEDURE_H */
#define FLEXIBLE_ARRAY_MEMBER
Definition: c.h:470
uint32 TransactionId
Definition: c.h:657
char * PLy_procedure_name(PLyProcedure *proc)
Definition: plpy_procedure.c:46
PLyTrigType
Definition: plpy_procedure.h:18
@ PLPY_EVENT_TRIGGER
Definition: plpy_procedure.h:20
@ PLPY_TRIGGER
Definition: plpy_procedure.h:19
@ PLPY_NOT_TRIGGER
Definition: plpy_procedure.h:21
struct PLySavedArgs PLySavedArgs
void init_procedure_caches(void)
Definition: plpy_procedure.c:30
struct PLyProcedureKey PLyProcedureKey
PLyProcedure * PLy_procedure_get(Oid fn_oid, Oid fn_rel, PLyTrigType is_trigger)
Definition: plpy_procedure.c:66
struct PLyProcedure PLyProcedure
void PLy_procedure_compile(PLyProcedure *proc, const char *src)
void PLy_procedure_delete(PLyProcedure *proc)
struct PLyProcedureEntry PLyProcedureEntry
unsigned int Oid
Definition: postgres_ext.h:32
Definition: pg_list.h:54
PLyProcedure * proc
Definition: plpy_procedure.h:73
PLyProcedureKey key
Definition: plpy_procedure.h:72
char * proname
Definition: plpy_procedure.h:39
bool fn_readonly
Definition: plpy_procedure.h:43
bool is_procedure
Definition: plpy_procedure.h:45
PLyDatumToOb * args
Definition: plpy_procedure.h:51
PLyTrigType is_trigger
Definition: plpy_procedure.h:46
char * pyname
Definition: plpy_procedure.h:40
PLyObToDatum result
Definition: plpy_procedure.h:47
PyObject * code
Definition: plpy_procedure.h:55
char * src
Definition: plpy_procedure.h:49
PLyDatumToOb result_in
Definition: plpy_procedure.h:48
List * trftypes
Definition: plpy_procedure.h:54
PLySavedArgs * argstack
Definition: plpy_procedure.h:59
MemoryContext mcxt
Definition: plpy_procedure.h:37
char ** argnames
Definition: plpy_procedure.h:50
PyObject * globals
Definition: plpy_procedure.h:57
ItemPointerData fn_tid
Definition: plpy_procedure.h:42
TransactionId fn_xmin
Definition: plpy_procedure.h:41
long calldepth
Definition: plpy_procedure.h:58
PyObject * statics
Definition: plpy_procedure.h:56
PyObject * args
Definition: plpy_procedure.h:28
struct PLySavedArgs * next
Definition: plpy_procedure.h:27
PyObject * namedargs[FLEXIBLE_ARRAY_MEMBER]
Definition: plpy_procedure.h:31
PyObject * td
Definition: plpy_procedure.h:29

AltStyle によって変換されたページ (->オリジナル) /