Well, I finally solved the linking problem

that kept me from making perl secure.

Attached is uuencoded tarball to add PL/perl
to postgresql.

Things I know don't work.
-- triggers
-- SPI


The README file has a _VERY_ short tutorial.

Mark Hollomon
This commit is contained in:
Bruce Momjian 2000-01-20 05:08:58 +00:00
parent d242b64ba2
commit c02f1ead48
3 changed files with 2329 additions and 0 deletions

113
src/pl/plperl/Makefile.pl Normal file
View File

@ -0,0 +1,113 @@
use DynaLoader;
use Config;
use ExtUtils::Embed;
#
# massage the ld options
#
my $ldopts = ldopts();
chomp($ldopts);
#
# get the location of the Opcode module
#
my $opcode = '';
{
$modname = 'Opcode';
my $dir;
foreach (@INC) {
if (-d "$_/auto/$modname") {
$dir = "$_/auto/$modname";
last;
}
}
if (defined $dir) {
$opcode = DynaLoader::dl_findfile("-L$dir", $modname);
}
}
open(MAKEFILE, ">Makefile");
print MAKEFILE <<_STATIC_;
#-------------------------------------------------------------------------
#
# Makefile
# Makefile for the plperl shared object
#
# AUTOGENERATED Makefile.pl
#
#
# Tell make where the postgresql sources live
#
SRCDIR= ../../../src
include \$(SRCDIR)/Makefile.global
# use the same compiler as perl did
CC= $Config{cc}
# get the compiler options that perl wants.
CFLAGS+= @{[ccopts()]}
# including the ones for dynamic loading
CFLAGS+= $Config{cccdlflags}
# add the includes for postgreSQL
CFLAGS+= -I\$(LIBPQDIR) -I\$(SRCDIR)/include
# For fmgr.h
CFLAGS+= -I\$(SRCDIR)/backend
# add the postgreSQL libraries
LDADD+= -L\$(LIBPQDIR) -lpq
LDFLAGS+= $Config{lddlflags} \\
$ldopts \\
-lperl
#
# DLOBJS is the dynamically-loaded object file.
#
DLOBJS= plperl\$(DLSUFFIX)
INFILES= \$(DLOBJS)
SHLIB_EXTRA_LIBS+= $opcode
#
# plus exports files
#
ifdef EXPSUFF
INFILES+= \$(DLOBJS:.o=\$(EXPSUFF))
endif
%.so: %.o
\$(CC) -o \$@ \$< \$(LDFLAGS) \$(SHLIB_EXTRA_LIBS) \$(LDADD)
#
# Build the shared lib
#
plperl : plperl.lo
libtool \$(CC) -o plperl.so plperl.lo \$(SHLIB_EXTRA_LIBS) \$(LDADD) \$(LDFLAGS)
%.lo : %.c
libtool \$(CC) -c \$(CFLAGS) \$<
#
# Clean
#
clean:
rm -f \$(INFILES) *.o *.lo
rm -rf .libs
rm -f Makefile
dep depend:
_STATIC_

41
src/pl/plperl/README Normal file
View File

@ -0,0 +1,41 @@
>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();

2175
src/pl/plperl/plperl.c Normal file

File diff suppressed because it is too large Load Diff