hi. simple question.... The following one works. ------------------------------------------------------------ Datum test_direct_inputcall(PG_FUNCTION_ARGS) { char *token = PG_GETARG_CSTRING(0); Datum numd; if (!DirectInputFunctionCallSafe(numeric_in, token, InvalidOid, -1, fcinfo->context, &numd)) { elog(INFO,"convert to cstring failed"); PG_RETURN_BOOL(false); } elog(INFO,"%s",DatumGetCString(DirectFunctionCall1(numeric_out,numd))); PG_RETURN_BOOL(true); } ------------------------------------------------------------ --the following one does not work. will print out something is wrong
Datum test_direct_inputcall(PG_FUNCTION_ARGS) { char *token = PG_GETARG_CSTRING(0); Datum numd; numd = return_numeric_datum(token); elog(INFO,"%s",DatumGetCString(DirectFunctionCall1(numeric_out,numd))); PG_RETURN_BOOL(true); } static Datum return_numeric_datum(char *token) { Datum numd; Node *escontext; if (!DirectInputFunctionCallSafe(numeric_in, token, InvalidOid, -1, escontext, &numd)); elog(INFO,"something is wrong"); return numd; } ------------------------------------------------------------ I wonder how to make it return_numeric_datum works in functions that arguments are not PG_FUNCTION_ARGS. To make it work, I need to understand the Node *context, which is kind of a vague idea for me. In the top level function (input as PG_FUNCTION_ARGS) the Node *context can be used to print out errors and back to normal state, I kind of get it. I really appreciate someone showing a minimal, reproducible example based on return_numeric_datum....