Returning null from Userdefined C function

Started by Andrew Selleover 25 years ago2 messages
#1Andrew Selle
aselle@upl.cs.wisc.edu

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

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Selle (#1)
Re: Returning null from Userdefined C function

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