Now that fastpath protocol allows null arguments to be passed,
fastpath.c had better check for strict functions.
This commit is contained in:
parent
0ac6298bb8
commit
38d9919d1a
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/tcop/fastpath.c,v 1.63 2003/05/09 18:08:48 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/backend/tcop/fastpath.c,v 1.64 2003/05/09 18:18:54 tgl Exp $
|
||||||
*
|
*
|
||||||
* NOTES
|
* NOTES
|
||||||
* This cruft is the server side of PQfn.
|
* This cruft is the server side of PQfn.
|
||||||
@ -273,6 +273,7 @@ HandleFunctionRequest(StringInfo msgBuf)
|
|||||||
Datum retval;
|
Datum retval;
|
||||||
struct fp_info my_fp;
|
struct fp_info my_fp;
|
||||||
struct fp_info *fip;
|
struct fp_info *fip;
|
||||||
|
bool callit;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Read message contents if not already done.
|
* Read message contents if not already done.
|
||||||
@ -341,8 +342,34 @@ HandleFunctionRequest(StringInfo msgBuf)
|
|||||||
/* Verify we reached the end of the message where expected. */
|
/* Verify we reached the end of the message where expected. */
|
||||||
pq_getmsgend(msgBuf);
|
pq_getmsgend(msgBuf);
|
||||||
|
|
||||||
/* Okay, do it ... */
|
/*
|
||||||
retval = FunctionCallInvoke(&fcinfo);
|
* If func is strict, must not call it for null args.
|
||||||
|
*/
|
||||||
|
callit = true;
|
||||||
|
if (fip->flinfo.fn_strict)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < fcinfo.nargs; i++)
|
||||||
|
{
|
||||||
|
if (fcinfo.argnull[i])
|
||||||
|
{
|
||||||
|
callit = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (callit)
|
||||||
|
{
|
||||||
|
/* Okay, do it ... */
|
||||||
|
retval = FunctionCallInvoke(&fcinfo);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fcinfo.isnull = true;
|
||||||
|
retval = (Datum) 0;
|
||||||
|
}
|
||||||
|
|
||||||
SendFunctionResult(retval, fcinfo.isnull, fip->rettype, rformat);
|
SendFunctionResult(retval, fcinfo.isnull, fip->rettype, rformat);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user