173 Oid **p_argtypes,
char ***p_argnames,
222 #define HeapTupleGetDatum(tuple) HeapTupleHeaderGetDatum((tuple)->t_data)
224 #define TupleGetDatum(_slot, _tuple) HeapTupleGetDatum(_tuple)
285 #define SRF_IS_FIRSTCALL() (fcinfo->flinfo->fn_extra == NULL)
287 #define SRF_FIRSTCALL_INIT() init_MultiFuncCall(fcinfo)
289 #define SRF_PERCALL_SETUP() per_MultiFuncCall(fcinfo)
291 #define SRF_RETURN_NEXT(_funcctx, _result) \
293 ReturnSetInfo *rsi; \
294 (_funcctx)->call_cntr++; \
295 rsi = (ReturnSetInfo *) fcinfo->resultinfo; \
296 rsi->isDone = ExprMultipleResult; \
297 PG_RETURN_DATUM(_result); \
300 #define SRF_RETURN_NEXT_NULL(_funcctx) \
302 ReturnSetInfo *rsi; \
303 (_funcctx)->call_cntr++; \
304 rsi = (ReturnSetInfo *) fcinfo->resultinfo; \
305 rsi->isDone = ExprMultipleResult; \
309 #define SRF_RETURN_DONE(_funcctx) \
311 ReturnSetInfo *rsi; \
312 end_MultiFuncCall(fcinfo, _funcctx); \
313 rsi = (ReturnSetInfo *) fcinfo->resultinfo; \
314 rsi->isDone = ExprEndResult; \
Datum HeapTupleHeaderGetDatum(HeapTupleHeader tuple)
int get_func_trftypes(HeapTuple procTup, Oid **p_trftypes)
TupleDesc build_function_result_tupdesc_t(HeapTuple procTuple)
TypeFuncClass get_call_result_type(FunctionCallInfo fcinfo, Oid *resultTypeId, TupleDesc *resultTupleDesc)
int get_func_arg_info(HeapTuple procTup, Oid **p_argtypes, char ***p_argnames, char **p_argmodes)
static char * relname(char const *dir, char const *base)
int get_func_input_arg_names(Datum proargnames, Datum proargmodes, char ***arg_names)
TupleDesc TypeGetTupleDesc(Oid typeoid, List *colaliases)
TupleDesc build_function_result_tupdesc_d(Datum proallargtypes, Datum proargmodes, Datum proargnames)
TupleDesc RelationNameGetTupleDesc(const char *relname)
AttInMetadata * attinmeta
struct FuncCallContext FuncCallContext
void end_MultiFuncCall(PG_FUNCTION_ARGS, FuncCallContext *funcctx)
FuncCallContext * init_MultiFuncCall(PG_FUNCTION_ARGS)
struct AttInMetadata AttInMetadata
TypeFuncClass get_expr_result_type(Node *expr, Oid *resultTypeId, TupleDesc *resultTupleDesc)
TypeFuncClass get_func_result_type(Oid functionId, Oid *resultTypeId, TupleDesc *resultTupleDesc)
TupleDesc BlessTupleDesc(TupleDesc tupdesc)
MemoryContext multi_call_memory_ctx
char * get_func_result_name(Oid functionId)
FuncCallContext * per_MultiFuncCall(PG_FUNCTION_ARGS)
AttInMetadata * TupleDescGetAttInMetadata(TupleDesc tupdesc)
static Datum values[MAXATTR]
bool resolve_polymorphic_argtypes(int numargs, Oid *argtypes, char *argmodes, Node *call_expr)
HeapTuple BuildTupleFromCStrings(AttInMetadata *attinmeta, char **values)
TupleTableSlot * TupleDescGetSlot(TupleDesc tupdesc)