Обсуждение: Returning null from Userdefined C function

Поиск
Список
Период
Сортировка

Returning null from Userdefined C function

От
Andrew Selle
Дата:
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


Re: Returning null from Userdefined C function

От
Tom Lane
Дата:
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