rsi->returnMode = SFRM_Materialize;
- (void) get_call_result_type(fcinfo, NULL, &tupdesc);
+ if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE)
+ ereport(ERROR,
+ (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+ errmsg("function returning record called in context "
+ "that cannot accept type record")));
/* make these in a sufficiently long-lived memory context */
old_cxt = MemoryContextSwitchTo(rsi->econtext->ecxt_per_query_memory);
json = PG_GETARG_TEXT_P(0);
- get_call_result_type(fcinfo, NULL, &tupdesc);
+ if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE)
+ ereport(ERROR,
+ (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+ errmsg("function returning record called in context "
+ "that cannot accept type record"),
+ errhint("Try calling the function in the FROM clause "
+ "using a column definition list.")));
}
json_hash = get_json_object_as_hash(json, "json_populate_record",
* get the tupdesc from the result set info - it must be a record type
* because we already checked that arg1 is a record type.
*/
- (void) get_call_result_type(fcinfo, NULL, &tupdesc);
+ if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE)
+ ereport(ERROR,
+ (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+ errmsg("function returning record called in context "
+ "that cannot accept type record")));
state = palloc0(sizeof(PopulateRecordsetState));
sem = palloc0(sizeof(JsonSemAction));