postgresql/src/pl/plperl
Tom Lane 0f1e39643d Third round of fmgr updates: eliminate calls using fmgr() and
fmgr_faddr() in favor of new-style calls.  Lots of cleanup of
sloppy casts to use XXXGetDatum and DatumGetXXX ...
2000-05-30 04:25:00 +00:00
..
eloglvl.c Ye-old pgindent run. Same 4-space tabs. 2000-04-12 17:17:23 +00:00
eloglvl.h Ye-old pgindent run. Same 4-space tabs. 2000-04-12 17:17:23 +00:00
Makefile.PL Generated header files parse.h and fmgroids.h are now copied into 2000-05-29 05:45:56 +00:00
plperl.c Third round of fmgr updates: eliminate calls using fmgr() and 2000-05-30 04:25:00 +00:00
README Well, I finally solved the linking problem 2000-01-20 05:08:58 +00:00
SPI.xs Attached is a uuencoded tarball that contains 2000-01-29 01:58:50 +00:00

>perl Makefile.pl
>make

copy the resulting library somewhere that
the postgresql backend can see it. assume
that path is /usr/local/pgsql/modules/plperl.so

CREATE FUNCTION plperl_call_handler() RETURNS opaque
AS '/usr/local/pgsql/modules/plperl.so' LANGUAGE 'C';

CREATE TRUSTED PROCEDURAL LANGUAGE 'plperl'
HANDLER plperl_call_handler
LANCOMPILER 'PL/Perl';

-- here is simple example
CREATE FUNCTION addints(int4, int4) RETURNS int4 AS '
return $_[0] + $_[1]
' LANGUAGE 'plperl';

SELECT addints(3,4);

-- of course, you can pass tuples;
CREATE TABLE twoints ( a integer, b integer);
CREATE FUNCTION addtwoints(twoints) RETURNS integer AS '
$tup = shift;
return $tup->{"a"} + $tup->{"b"};
' LANGUAGE 'plperl';

SELECT addtwoints(twoints) from twoints;

-- here is one that will fail. Creating the function
-- will work, but using it will fail.
CREATE FUNCTION badfunc() RETURNS int4 AS '
open(TEMP, ">/tmp/badfile");
print TEMP "Gotcha!\n";
return 1;
' LANGUAGE 'plperl';

SELECT badfunc();