/* saved arguments for outer recursion level or set-returning function */ typedefstruct PLySavedArgs
{ struct PLySavedArgs *next; /* linked-list pointer */
PyObject *args; /* "args" element of globals dict */
PyObject *td; /* "TD" element of globals dict, if trigger */ int nargs; /* length of namedargs array */
PyObject *namedargs[FLEXIBLE_ARRAY_MEMBER]; /* named args */
} PLySavedArgs;
/* cached procedure data */ typedefstruct 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; bool is_trigger; /* called as trigger? */
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 */ typedefstruct PLyProcedureKey
{
Oid fn_oid; /* function OID */
Oid fn_rel; /* triggered-on relation or InvalidOid */
} PLyProcedureKey;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.