mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	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
		
			
				
	
	
		
			31 lines
		
	
	
		
			418 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			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));
 | 
						|
}
 |