diff --git a/src/backend/tcop/fastpath.c b/src/backend/tcop/fastpath.c index 74971c49c5..37b7c3d8d9 100644 --- a/src/backend/tcop/fastpath.c +++ b/src/backend/tcop/fastpath.c @@ -8,7 +8,7 @@ * * * 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 * This cruft is the server side of PQfn. @@ -273,6 +273,7 @@ HandleFunctionRequest(StringInfo msgBuf) Datum retval; struct fp_info my_fp; struct fp_info *fip; + bool callit; /* * Read message contents if not already done. @@ -341,8 +342,34 @@ HandleFunctionRequest(StringInfo msgBuf) /* Verify we reached the end of the message where expected. */ 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);