mirror of
https://github.com/postgres/postgres.git
synced 2025-04-27 22:56:53 +03:00
Clean up some unnecessary fragility in EXECUTE command.
This commit is contained in:
parent
f9d6ffc5c4
commit
afeb8c4819
@ -3,7 +3,7 @@
|
|||||||
* procedural language
|
* procedural language
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.33 2000/12/01 20:43:59 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.34 2001/01/04 02:38:02 tgl Exp $
|
||||||
*
|
*
|
||||||
* This software is copyrighted by Jan Wieck - Hamburg.
|
* This software is copyrighted by Jan Wieck - Hamburg.
|
||||||
*
|
*
|
||||||
@ -1951,6 +1951,7 @@ exec_stmt_dynexecute(PLpgSQL_execstate * estate,
|
|||||||
HeapTuple typetup;
|
HeapTuple typetup;
|
||||||
Form_pg_type typeStruct;
|
Form_pg_type typeStruct;
|
||||||
FmgrInfo finfo_output;
|
FmgrInfo finfo_output;
|
||||||
|
int exec_res;
|
||||||
|
|
||||||
/* ----------
|
/* ----------
|
||||||
* First we evaluate the string expression after the
|
* First we evaluate the string expression after the
|
||||||
@ -1960,7 +1961,7 @@ exec_stmt_dynexecute(PLpgSQL_execstate * estate,
|
|||||||
*/
|
*/
|
||||||
query = exec_eval_expr(estate, stmt->query, &isnull, &restype);
|
query = exec_eval_expr(estate, stmt->query, &isnull, &restype);
|
||||||
if (isnull)
|
if (isnull)
|
||||||
elog(ERROR, "cannot EXECUTE NULL-query");
|
elog(ERROR, "cannot EXECUTE NULL query");
|
||||||
|
|
||||||
/* ----------
|
/* ----------
|
||||||
* Get the C-String representation.
|
* Get the C-String representation.
|
||||||
@ -1986,26 +1987,30 @@ exec_stmt_dynexecute(PLpgSQL_execstate * estate,
|
|||||||
|
|
||||||
/* ----------
|
/* ----------
|
||||||
* Call SPI_exec() without preparing a saved plan.
|
* Call SPI_exec() without preparing a saved plan.
|
||||||
* The returncode can be any OK except for OK_SELECT.
|
* The returncode can be any standard OK. Note that
|
||||||
|
* while a SELECT is allowed, its results will be discarded.
|
||||||
* ----------
|
* ----------
|
||||||
*/
|
*/
|
||||||
switch(SPI_exec(querystr, 0))
|
exec_res = SPI_exec(querystr, 0);
|
||||||
|
switch (exec_res)
|
||||||
{
|
{
|
||||||
case SPI_OK_UTILITY:
|
case SPI_OK_SELECT:
|
||||||
case SPI_OK_SELINTO:
|
case SPI_OK_SELINTO:
|
||||||
case SPI_OK_INSERT:
|
case SPI_OK_INSERT:
|
||||||
case SPI_OK_UPDATE:
|
case SPI_OK_UPDATE:
|
||||||
case SPI_OK_DELETE:
|
case SPI_OK_DELETE:
|
||||||
|
case SPI_OK_UTILITY:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SPI_OK_SELECT:
|
case 0:
|
||||||
elog(ERROR, "unexpected SELECT operation in EXECUTE of query '%s'",
|
/* Also allow a zero return, which implies the querystring
|
||||||
querystr);
|
* contained no commands.
|
||||||
|
*/
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
elog(ERROR, "unexpected error in EXECUTE for query '%s'",
|
elog(ERROR, "unexpected error %d in EXECUTE of query '%s'",
|
||||||
querystr);
|
exec_res, querystr);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2095,7 +2100,7 @@ exec_stmt_dynfors(PLpgSQL_execstate * estate, PLpgSQL_stmt_dynfors * stmt)
|
|||||||
* ----------
|
* ----------
|
||||||
*/
|
*/
|
||||||
if (SPI_exec(querystr, 0) != SPI_OK_SELECT)
|
if (SPI_exec(querystr, 0) != SPI_OK_SELECT)
|
||||||
elog(ERROR, "FOR ... EXECUTE query '%s' was no SELECT", querystr);
|
elog(ERROR, "FOR ... EXECUTE query '%s' was not SELECT", querystr);
|
||||||
pfree(querystr);
|
pfree(querystr);
|
||||||
|
|
||||||
n = SPI_processed;
|
n = SPI_processed;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user