Merlin, Oh, I didnt realized that it does not support to return scalar, thanks a lot.
When it returns a single value, I see it use the following function, SendFunctionCall result = DatumGetByteaP(FunctionCall1(flinfo, val)); I still can not see how it return a single return value to the client, and why it call FunctionCall1() again when it want to send the result. Regards Clipper 2011/5/8 Merlin Moncure <mmonc...@gmail.com> > On Sun, May 8, 2011 at 8:01 AM, lee Richard <clipper.ken...@gmail.com> > wrote: > > Hi, > > > > I am reading the source code of fastpath to understand the internal of > > fastpath. I can not understand how does it send result to the client, I > hope > > somebody can help me on this. > > > > I see it call it invoke the function in > > > > HandleFunctionRequest() > > -> retval = FunctionCallInvoke(&fcinfo); > > -> SendFunctionResult(retval, fcinfo.isnull, fip->rettype, rformat); > > ->OidOutputFunctionCall() > > -> OutputFunctionCall() > > -> result = > > DatumGetCString(FunctionCall1(flinfo, val)); > > -> result = > > FunctionCallInvoke(&fcinfo); > > > > but I can not see in where it send the tuples to the client, instead it > > invoke FunctionCallInvoke again. Can anyone tell me how it copy the > tuples > > and send it to the client. > > It can't: the fastpath function can only return a scalar. See the > client side docs. The whole system is a kludge more or less. > > merlin >