Обсуждение: Returning null from Userdefined C function
I'm trying to write a function that takes a text input and returns
a text output. I can get this to work. The problem is that I want
to return NULL when the input string doesn't match the criteria I
desire. Unfortunately, returning NULL seems to crash the backend.
i.e. if I did
#include "postgres.h"
text * andytest ( text * str )
{ return NULL;
}
The backend would quit unexpectantly when I ran
select andytest('fds');
or select andytest(NULL);
Obviously, there must be some way to create a NULL text * return
variable, but I haven't been able to find it. I've looked at all
the code I've been able to find to no avail.
-Andy
Andrew Selle <aselle@upl.cs.wisc.edu> writes:
> Obviously, there must be some way to create a NULL text * return
> variable,
You would think that, but you'd be wrong :-( --- at least for current
releases; this problem has been fixed for 7.1 by creating a new API
for user-defined functions.
With the old API, for the case of single-argument functions, you can
fake it via an ugly kluge: declare a second argument "bool *isNull"
(at the C level only, not in the SQL definition) and set *isNull to
TRUE if you want to return a NULL. This does not work if the function
doesn't have exactly one SQL argument, however.
regards, tom lane