Обсуждение: Arguments not being passed to a function
I am trying to call PL/pgSQL functions from JDBC via the Fastpath
interface. The function is executing but none of the arguments to the
function are getting set.
here is a simple example:
create function testcall (int4) returns int4 as '
begin
return $1;
end;
' language 'plpgsql';
In java I call it via:
FastpathArg args[] = new FastpathArg[1];
args[0] = new FastpathArg(55555);
Integer l_return = (Integer)fp.fastpath("testcall", true, args);
The result is always zero. I know that the function is executing
because if I change it to do an insert the insert happens (but if I use
a parameter in the insert, i.e. $1, it is always null).
However if I run the function from a select, (ie. select
testcall(55555); ) it works correctly.
Can anyone shed some light on this?
thanks,
--Barry
Barry Lind <barry@xythos.com> writes:
> I am trying to call PL/pgSQL functions from JDBC via the Fastpath
> interface. The function is executing but none of the arguments to the
> function are getting set.
Looks like fastpath.c is passing a garbage isNull flag to the function
it calls :-(. None of the functions "usually" called this way pay
attention to isNull, but plpgsql functions sure do.
Turns out I had already fixed this for 7.1 as a side-effect of some
other work, but I will stick a patch into 7.0.1. If you're in a hurry,
the bug is in src/backend/tcop/fastpath.c, and the appropriate patch is
#ifndef NO_FASTPATH
+ isNull = false;
retval = fmgr_array_args(fid, nargs, arg, &isNull);
#else
retval = NULL;
#endif /* NO_FASTPATH */
regards, tom lane