postgresql/contrib/bool_plperl/bool_plperl.c
Tom Lane 36058a3c55 Create contrib/bool_plperl to provide a bool transform for PL/Perl[U].
plperl's default handling of bool arguments or results is not terribly
satisfactory, since Perl doesn't consider the string 'f' to be false.
Ideally we'd just fix that, but the backwards-compatibility hazard
would be substantial.  Instead, build a TRANSFORM module that can
be optionally applied to provide saner semantics.

Perhaps usefully, this is also about the minimum possible skeletal
example of a plperl transform module; so it might be a better starting
point for user-written transform modules than hstore_plperl or
jsonb_plperl.

Ivan Panchenko

Discussion: https://postgr.es/m/1583013317.881182688@f390.i.mail.ru
2020-03-06 17:11:23 -05:00

31 lines
418 B
C

#include "postgres.h"
#include "fmgr.h"
#include "plperl.h"
PG_MODULE_MAGIC;
PG_FUNCTION_INFO_V1(bool_to_plperl);
Datum
bool_to_plperl(PG_FUNCTION_ARGS)
{
dTHX;
bool in = PG_GETARG_BOOL(0);
return PointerGetDatum(in ? &PL_sv_yes : &PL_sv_no);
}
PG_FUNCTION_INFO_V1(plperl_to_bool);
Datum
plperl_to_bool(PG_FUNCTION_ARGS)
{
dTHX;
SV *in = (SV *) PG_GETARG_POINTER(0);
PG_RETURN_BOOL(SvTRUE(in));
}