mirror of
https://github.com/postgres/postgres.git
synced 2025-05-01 01:04:50 +03:00
Fix inconsistencies in SRF checks of pg_config() and string_to_table()
The execution paths of those functions have been using a set of checks inconsistent with any other SRF function: - string_to_table() missed a check on expectedDesc, the tuple descriptor expected by the caller, that should never be NULL. Introduced in 66f1630. - pg_config() should check for a ReturnSetInfo, and expectedDesc cannot be NULL. Its error messages were also inconsistent. Introduced in a5c43b8. Extracted from a larger patch by the same author, in preparation for a larger patch set aimed at refactoring the way tuplestores are created and checked in SRF functions. Author: Melanie Plageman Reviewed-by: Justin Pryzby Discussion: https://postgr.es/m/CAAKRu_azyd1Z3W_r7Ou4sorTjRCs+PxeHw1CWJeXKofkE6TuZg@mail.gmail.com
This commit is contained in:
parent
618c16707a
commit
07daca53bf
@ -4839,7 +4839,8 @@ text_to_table(PG_FUNCTION_ARGS)
|
|||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||||
errmsg("set-valued function called in context that cannot accept a set")));
|
errmsg("set-valued function called in context that cannot accept a set")));
|
||||||
if (!(rsi->allowedModes & SFRM_Materialize))
|
if (!(rsi->allowedModes & SFRM_Materialize) ||
|
||||||
|
rsi->expectedDesc == NULL)
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||||
errmsg("materialize mode required, but it is not allowed in this context")));
|
errmsg("materialize mode required, but it is not allowed in this context")));
|
||||||
|
@ -37,11 +37,15 @@ pg_config(PG_FUNCTION_ARGS)
|
|||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
/* check to see if caller supports us returning a tuplestore */
|
/* check to see if caller supports us returning a tuplestore */
|
||||||
if (!rsinfo || !(rsinfo->allowedModes & SFRM_Materialize))
|
if (rsinfo == NULL || !IsA(rsinfo, ReturnSetInfo))
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||||
errmsg("materialize mode required, but it is not "
|
errmsg("set-valued function called in context that cannot accept a set")));
|
||||||
"allowed in this context")));
|
if (!(rsinfo->allowedModes & SFRM_Materialize) ||
|
||||||
|
rsinfo->expectedDesc == NULL)
|
||||||
|
ereport(ERROR,
|
||||||
|
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||||
|
errmsg("materialize mode required, but it is not allowed in this context")));
|
||||||
|
|
||||||
per_query_ctx = rsinfo->econtext->ecxt_per_query_memory;
|
per_query_ctx = rsinfo->econtext->ecxt_per_query_memory;
|
||||||
oldcontext = MemoryContextSwitchTo(per_query_ctx);
|
oldcontext = MemoryContextSwitchTo(per_query_ctx);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user