1999-12-05 15:02:49 -05:00
#!/bin/sh
#-------------------------------------------------------------------------
#
# createlang.sh--
# Install a procedural language in a database
#
# Copyright (c) 1994, Regents of the University of California
#
#
# IDENTIFICATION
2000-09-08 14:29:28 -04:00
# $Header: /cvsroot/pgsql/src/bin/scripts/Attic/createlang.sh,v 1.15 2000/09/08 18:29:28 petere Exp $
1999-12-05 15:02:49 -05:00
#
#-------------------------------------------------------------------------
CMDNAME = ` basename $0 `
2000-01-19 15:08:36 -05:00
PATHNAME = ` echo $0 | sed " s, $CMDNAME \$,, " `
1999-12-05 15:02:49 -05:00
PSQLOPT =
dbname =
langname =
list =
# Check for echo -n vs echo \c
if echo '\c' | grep -s c >/dev/null 2>& 1
then
ECHO_N = "echo -n"
ECHO_C = ""
else
ECHO_N = "echo"
ECHO_C = '\c'
fi
# ----------
# Get options, language name and dbname
# ----------
while [ $# -gt 0 ]
do
case " $1 " in
--help| -\? )
usage = t
2000-01-12 14:36:36 -05:00
break
1999-12-05 15:02:49 -05:00
; ;
--list| -l)
list = t
; ;
# options passed on to psql
--host| -h)
PSQLOPT = " $PSQLOPT -h $2 "
shift; ;
-h*)
PSQLOPT = " $PSQLOPT $1 "
; ;
--host= *)
PSQLOPT = " $PSQLOPT -h " ` echo $1 | sed 's/^--host=//' `
; ;
--port| -p)
PSQLOPT = " $PSQLOPT -p $2 "
shift; ;
-p*)
PSQLOPT = " $PSQLOPT $1 "
; ;
--port= *)
PSQLOPT = " $PSQLOPT -p " ` echo $1 | sed 's/^--port=//' `
; ;
2000-01-19 15:08:36 -05:00
--username| -U)
PSQLOPT = " $PSQLOPT -U $2 "
1999-12-05 15:02:49 -05:00
shift; ;
-U*)
PSQLOPT = " $PSQLOPT $1 "
; ;
--username= *)
PSQLOPT = " $PSQLOPT -U " ` echo $1 | sed 's/^--username=//' `
; ;
--password| -W)
PSQLOPT = " $PSQLOPT -W "
; ;
2000-01-19 15:08:36 -05:00
--dbname| -d)
1999-12-05 15:02:49 -05:00
dbname = " $2 "
shift; ;
-d*)
dbname = ` echo $1 | sed 's/^-d//' `
; ;
--dbname= *)
dbname = ` echo $1 | sed 's/^--dbname=//' `
; ;
# misc options
--pglib| -L)
PGLIB = " $2 "
shift; ;
-L*)
PGLIB = ` echo $1 | sed 's/^-L//' `
; ;
--pglib= *)
PGLIB = ` echo $1 | sed 's/^--pglib=//' `
; ;
2000-01-12 14:36:36 -05:00
-*)
2000-01-19 15:08:36 -05:00
echo " $CMDNAME : invalid option: $1 "
2000-01-12 14:36:36 -05:00
echo "Try -? for help."
exit 1
; ;
1999-12-05 15:02:49 -05:00
*)
2000-05-15 12:16:23 -04:00
if [ " $list " != "t" ]
then langname = " $1 "
2000-05-15 12:20:45 -04:00
if [ " $2 " ]
2000-05-15 12:12:39 -04:00
then
2000-05-15 12:20:45 -04:00
shift
2000-05-15 12:12:39 -04:00
dbname = " $1 "
fi
2000-05-15 12:16:23 -04:00
else dbname = " $1 "
1999-12-05 15:02:49 -05:00
fi
; ;
esac
shift
done
1999-12-16 15:10:02 -05:00
if [ " $usage " ] ; then
2000-01-19 15:08:36 -05:00
echo " $CMDNAME installs a procedural language into a PostgreSQL database. "
echo
echo "Usage:"
echo " $CMDNAME [options] [langname [dbname]] "
echo
echo "Options:"
2000-01-12 14:36:36 -05:00
echo " -h, --host=HOSTNAME Database server host"
echo " -p, --port=PORT Database server port"
echo " -U, --username=USERNAME Username to connect as"
echo " -W, --password Prompt for password"
echo " -d, --dbname=DBNAME Database to install language in"
2000-08-20 07:56:29 -04:00
echo " -L, --pglib=DIRECTORY Find language interpreter file in DIRECTORY"
2000-01-12 14:36:36 -05:00
echo " -l, --list Show a list of currently installed languages"
2000-01-19 15:08:36 -05:00
echo
echo "Report bugs to <pgsql-bugs@postgresql.org>."
2000-01-12 14:36:36 -05:00
exit 0
1999-12-05 15:02:49 -05:00
fi
# ----------
# Check that we have a database
# ----------
if [ -z " $dbname " ] ; then
2000-01-12 14:36:36 -05:00
echo " $CMDNAME : missing required argument database name "
echo "Try -? for help."
1999-12-05 15:02:49 -05:00
exit 1
fi
2000-01-19 15:08:36 -05:00
# ----------
# List option
# ----------
if [ " $list " ] ; then
${ PATHNAME } psql $PSQLOPT -d " $dbname " -P 'title=Procedural languages' -c "SELECT lanname as \"Name\", lanpltrusted as \"Trusted?\", lancompiler as \"Compiler\" FROM pg_language WHERE lanispl = 't'"
exit $?
fi
1999-12-05 15:02:49 -05:00
# ----------
# Check that we have PGLIB
# ----------
if [ -z " $PGLIB " ] ; then
2000-09-08 14:29:28 -04:00
PGLIB = '@libdir@'
1999-12-05 15:02:49 -05:00
fi
# ----------
# If not given on the command line, ask for the language
# ----------
if [ -z " $langname " ] ; then
$ECHO_N " Language to install in database $dbname : " $ECHO_C
read langname
fi
# ----------
# Check if supported and set related values
# ----------
case " $langname " in
plpgsql)
2000-07-19 07:53:02 -04:00
lancomp = "PL/pgSQL"
1999-12-05 15:02:49 -05:00
trusted = "TRUSTED "
handler = "plpgsql_call_handler"
2000-07-19 07:53:02 -04:00
object = "plpgsql"
; ;
1999-12-05 15:02:49 -05:00
pltcl)
lancomp = "PL/Tcl"
trusted = "TRUSTED "
2000-07-19 07:53:02 -04:00
handler = "pltcl_call_handler"
object = "pltcl"
; ;
pltclu)
lancomp = "PL/Tcl (untrusted)"
trusted = ""
handler = "pltclu_call_handler"
object = "pltcl"
; ;
2000-03-25 14:10:27 -05:00
plperl)
lancomp = "PL/Perl"
trusted = "TRUSTED "
2000-07-19 07:53:02 -04:00
handler = "plperl_call_handler"
object = "plperl"
; ;
1999-12-05 15:02:49 -05:00
*)
2000-01-12 14:36:36 -05:00
echo " $CMDNAME : unsupported language ' $langname ' "
2000-03-25 14:10:27 -05:00
echo "Supported languages are 'plpgsql', 'pltcl', and 'plperl'."
1999-12-05 15:02:49 -05:00
exit 1
; ;
esac
2000-09-08 14:29:28 -04:00
DLSUFFIX = '@DLSUFFIX@'
1999-12-05 15:02:49 -05:00
# ----------
# Check that the shared object for the call handler is installed
# in PGLIB
# ----------
2000-09-08 14:29:28 -04:00
if [ ! -f " $PGLIB / $object $DLSUFFIX " ] ; then
echo " $CMDNAME : cannot find the file \` $PGLIB / $langname $DLSUFFIX ' "
1999-12-05 15:02:49 -05:00
echo ""
echo " This file contains the call handler for $lancomp . By default, "
echo "only PL/pgSQL is built and installed; other languages must be"
echo "explicitly enabled at configure time."
echo ""
echo "To install PL/Tcl, make sure the option --with-tcl is given to"
echo "configure, then recompile and install."
exit 1
fi
2000-01-19 15:08:36 -05:00
PSQL = " ${ PATHNAME } psql -A -t -q $PSQLOPT -d $dbname -c "
1999-12-05 15:02:49 -05:00
# ----------
# Make sure the language isn't already installed
# ----------
res = ` $PSQL " SELECT oid FROM pg_language WHERE lanname = ' $langname ' " `
if [ $? -ne 0 ] ; then
2000-01-12 14:36:36 -05:00
echo " $CMDNAME : external error "
1999-12-05 15:02:49 -05:00
exit 1
fi
if [ " $res " ] ; then
2000-01-12 14:36:36 -05:00
echo " $CMDNAME : ' $langname ' is already installed in database $dbname "
exit 1
1999-12-05 15:02:49 -05:00
fi
# ----------
# Check that there is no function named as the call handler
# ----------
res = ` $PSQL " SELECT oid FROM pg_proc WHERE proname = ' $handler ' " `
if [ ! -z " $res " ] ; then
2000-01-12 14:36:36 -05:00
echo " $CMDNAME : A function named ' $handler ' already exists. Installation aborted. "
1999-12-05 15:02:49 -05:00
exit 1
fi
# ----------
# Create the call handler and the language
# ----------
2000-09-08 14:29:28 -04:00
$PSQL " CREATE FUNCTION $handler () RETURNS OPAQUE AS ' $PGLIB / ${ object } $DLSUFFIX ' LANGUAGE 'newC' "
1999-12-05 15:02:49 -05:00
if [ $? -ne 0 ] ; then
2000-01-12 14:36:36 -05:00
echo " $CMDNAME : language installation failed "
1999-12-05 15:02:49 -05:00
exit 1
fi
2000-03-14 18:06:59 -05:00
1999-12-05 15:02:49 -05:00
$PSQL " CREATE ${ trusted } PROCEDURAL LANGUAGE ' $langname ' HANDLER $handler LANCOMPILER ' $lancomp ' "
if [ $? -ne 0 ] ; then
2000-01-12 14:36:36 -05:00
echo " $CMDNAME : language installation failed "
1999-12-05 15:02:49 -05:00
exit 1
fi
exit 0