diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-13 13:44:03 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-13 13:44:03 +0000 |
commit | 293913568e6a7a86fd1479e1cff8e2ecb58d6568 (patch) | |
tree | fc3b469a3ec5ab71b36ea97cc7aaddb838423a0c /src/pl/plpython/plpy_procedure.h | |
parent | Initial commit. (diff) | |
download | postgresql-16-293913568e6a7a86fd1479e1cff8e2ecb58d6568.tar.xz postgresql-16-293913568e6a7a86fd1479e1cff8e2ecb58d6568.zip |
Adding upstream version 16.2.upstream/16.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/pl/plpython/plpy_procedure.h')
-rw-r--r-- | src/pl/plpython/plpy_procedure.h | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/pl/plpython/plpy_procedure.h b/src/pl/plpython/plpy_procedure.h new file mode 100644 index 0000000..8968b5c --- /dev/null +++ b/src/pl/plpython/plpy_procedure.h @@ -0,0 +1,70 @@ +/* + * src/pl/plpython/plpy_procedure.h + */ + +#ifndef PLPY_PROCEDURE_H +#define PLPY_PROCEDURE_H + +#include "plpy_typeio.h" + + +extern void init_procedure_caches(void); + + +/* saved arguments for outer recursion level or set-returning function */ +typedef struct PLySavedArgs +{ + struct PLySavedArgs *next; /* linked-list pointer */ + PyObject *args; /* "args" element of globals dict */ + int nargs; /* length of namedargs array */ + PyObject *namedargs[FLEXIBLE_ARRAY_MEMBER]; /* named args */ +} PLySavedArgs; + +/* cached procedure data */ +typedef struct PLyProcedure +{ + MemoryContext mcxt; /* context holding this PLyProcedure and its + * subsidiary data */ + char *proname; /* SQL name of procedure */ + char *pyname; /* Python name of procedure */ + TransactionId fn_xmin; + ItemPointerData fn_tid; + bool fn_readonly; + bool is_setof; /* true, if function returns result set */ + bool is_procedure; + PLyObToDatum result; /* Function result output conversion info */ + PLyDatumToOb result_in; /* For converting input tuples in a trigger */ + char *src; /* textual procedure code, after mangling */ + char **argnames; /* Argument names */ + PLyDatumToOb *args; /* Argument input conversion info */ + int nargs; /* Number of elements in above arrays */ + Oid langid; /* OID of plpython pg_language entry */ + List *trftypes; /* OID list of transform types */ + PyObject *code; /* compiled procedure code */ + PyObject *statics; /* data saved across calls, local scope */ + PyObject *globals; /* data saved across calls, global scope */ + long calldepth; /* depth of recursive calls of function */ + PLySavedArgs *argstack; /* stack of outer-level call arguments */ +} PLyProcedure; + +/* the procedure cache key */ +typedef struct PLyProcedureKey +{ + Oid fn_oid; /* function OID */ + Oid fn_rel; /* triggered-on relation or InvalidOid */ +} PLyProcedureKey; + +/* the procedure cache entry */ +typedef struct PLyProcedureEntry +{ + PLyProcedureKey key; /* hash key */ + PLyProcedure *proc; +} PLyProcedureEntry; + +/* PLyProcedure manipulation */ +extern char *PLy_procedure_name(PLyProcedure *proc); +extern PLyProcedure *PLy_procedure_get(Oid fn_oid, Oid fn_rel, bool is_trigger); +extern void PLy_procedure_compile(PLyProcedure *proc, const char *src); +extern void PLy_procedure_delete(PLyProcedure *proc); + +#endif /* PLPY_PROCEDURE_H */ |