|
|
|
@ -146,7 +146,6 @@ typedef struct pltcl_proc_desc |
|
|
|
|
Oid result_typid; /* OID of fn's result type */ |
|
|
|
|
FmgrInfo result_in_func; /* input function for fn's result type */ |
|
|
|
|
Oid result_typioparam; /* param to pass to same */ |
|
|
|
|
bool fn_is_procedure; /* true if this is a procedure */ |
|
|
|
|
bool fn_retisset; /* true if function returns a set */ |
|
|
|
|
bool fn_retistuple; /* true if function returns composite */ |
|
|
|
|
bool fn_retisdomain; /* true if function returns domain */ |
|
|
|
@ -982,7 +981,7 @@ pltcl_func_handler(PG_FUNCTION_ARGS, pltcl_call_state *call_state, |
|
|
|
|
retval = (Datum) 0; |
|
|
|
|
fcinfo->isnull = true; |
|
|
|
|
} |
|
|
|
|
else if (fcinfo->isnull && !prodesc->fn_is_procedure) |
|
|
|
|
else if (fcinfo->isnull) |
|
|
|
|
{ |
|
|
|
|
retval = InputFunctionCall(&prodesc->result_in_func, |
|
|
|
|
NULL, |
|
|
|
@ -1040,13 +1039,11 @@ pltcl_func_handler(PG_FUNCTION_ARGS, pltcl_call_state *call_state, |
|
|
|
|
call_state); |
|
|
|
|
retval = HeapTupleGetDatum(tup); |
|
|
|
|
} |
|
|
|
|
else if (!prodesc->fn_is_procedure) |
|
|
|
|
else |
|
|
|
|
retval = InputFunctionCall(&prodesc->result_in_func, |
|
|
|
|
utf_u2e(Tcl_GetStringResult(interp)), |
|
|
|
|
prodesc->result_typioparam, |
|
|
|
|
-1); |
|
|
|
|
else |
|
|
|
|
retval = 0; |
|
|
|
|
|
|
|
|
|
return retval; |
|
|
|
|
} |
|
|
|
@ -1523,9 +1520,7 @@ compile_pltcl_function(Oid fn_oid, Oid tgreloid, |
|
|
|
|
* Get the required information for input conversion of the |
|
|
|
|
* return value. |
|
|
|
|
************************************************************/ |
|
|
|
|
prodesc->fn_is_procedure = (procStruct->prokind == PROKIND_PROCEDURE); |
|
|
|
|
|
|
|
|
|
if (!is_trigger && !is_event_trigger && !prodesc->fn_is_procedure) |
|
|
|
|
if (!is_trigger && !is_event_trigger) |
|
|
|
|
{ |
|
|
|
|
Oid rettype = procStruct->prorettype; |
|
|
|
|
|
|
|
|
@ -2218,7 +2213,7 @@ pltcl_returnnext(ClientData cdata, Tcl_Interp *interp, |
|
|
|
|
tuplestore_puttuple(call_state->tuple_store, tuple); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else if (!prodesc->fn_is_procedure) |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
Datum retval; |
|
|
|
|
bool isNull = false; |
|
|
|
|