diff options
author | Bruce Momjian <bruce@momjian.us> | 2005-07-10 14:26:30 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 2005-07-10 14:26:30 +0000 |
commit | 07931080360021376af8128b0ca297406a9ab121 (patch) | |
tree | 675954074715d0ea7b31a3eec7de6ea63fd29930 /src/bin/scripts/createlang.c | |
parent | d51df918970bcf42f915a3882bfdee5972aa9bad (diff) |
This patch implements putting language handlers for the optional PLs
into pg_catalog rather than public, and supports dumping languages whose
handlers are found there. This will make it easier to drop the public
schema if desired.
Unlike the previous patch, the comments have been updated and I have
reformatted some code to meet Alvarro's request to stick to 80 cols. (I
actually aghree with this - it makes printing the code much nicer).
I think I did the right thing w.r.t versions earlier than 7.3, but I
have no real way of checking, so that should be checked by someone with
more/older knowledge than me ;-)
Andrew Dunstan
Diffstat (limited to 'src/bin/scripts/createlang.c')
-rw-r--r-- | src/bin/scripts/createlang.c | 38 |
1 files changed, 26 insertions, 12 deletions
diff --git a/src/bin/scripts/createlang.c b/src/bin/scripts/createlang.c index d088dad4f97..78a46ed4a17 100644 --- a/src/bin/scripts/createlang.c +++ b/src/bin/scripts/createlang.c @@ -5,7 +5,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/bin/scripts/createlang.c,v 1.17 2005/06/22 16:45:50 tgl Exp $ + * $PostgreSQL: pgsql/src/bin/scripts/createlang.c,v 1.18 2005/07/10 14:26:30 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -140,7 +140,10 @@ main(int argc, char *argv[]) conn = connectDatabase(dbname, host, port, username, password, progname); - printfPQExpBuffer(&sql, "SELECT lanname as \"%s\", (CASE WHEN lanpltrusted THEN '%s' ELSE '%s' END) as \"%s\" FROM pg_language WHERE lanispl IS TRUE;", _("Name"), _("yes"), _("no"), _("Trusted?")); + printfPQExpBuffer(&sql, "SELECT lanname as \"%s\", (CASE WHEN lanpltrusted " + "THEN '%s' ELSE '%s' END) as \"%s\" FROM pg_language " + "WHERE lanispl IS TRUE;", + _("Name"), _("yes"), _("no"), _("Trusted?")); result = executeQuery(conn, sql.data, progname, echo); memset(&popt, 0, sizeof(popt)); @@ -209,8 +212,10 @@ main(int argc, char *argv[]) } else { - fprintf(stderr, _("%s: unsupported language \"%s\"\n"), progname, langname); - fprintf(stderr, _("Supported languages are plpgsql, pltcl, pltclu, plperl, plperlu, and plpythonu.\n")); + fprintf(stderr, _("%s: unsupported language \"%s\"\n"), + progname, langname); + fprintf(stderr, _("Supported languages are plpgsql, pltcl, pltclu, " + "plperl, plperlu, and plpythonu.\n")); exit(1); } @@ -219,13 +224,16 @@ main(int argc, char *argv[]) /* * Make sure the language isn't already installed */ - printfPQExpBuffer(&sql, "SELECT oid FROM pg_language WHERE lanname = '%s';", langname); + printfPQExpBuffer(&sql, + "SELECT oid FROM pg_language WHERE lanname = '%s';", + langname); result = executeQuery(conn, sql.data, progname, echo); if (PQntuples(result) > 0) { PQfinish(conn); fprintf(stderr, - _("%s: language \"%s\" is already installed in database \"%s\"\n"), + _("%s: language \"%s\" is already installed in " + "database \"%s\"\n"), progname, langname, dbname); /* separate exit status for "already installed" */ exit(2); @@ -235,7 +243,9 @@ main(int argc, char *argv[]) /* * Check whether the call handler exists */ - printfPQExpBuffer(&sql, "SELECT oid FROM pg_proc WHERE proname = '%s' AND prorettype = 'pg_catalog.language_handler'::regtype AND pronargs = 0;", handler); + printfPQExpBuffer(&sql, "SELECT oid FROM pg_proc WHERE proname = '%s' " + "AND prorettype = 'pg_catalog.language_handler'::regtype " + "AND pronargs = 0;", handler); result = executeQuery(conn, sql.data, progname, echo); handlerexists = (PQntuples(result) > 0); PQclear(result); @@ -245,7 +255,9 @@ main(int argc, char *argv[]) */ if (validator) { - printfPQExpBuffer(&sql, "SELECT oid FROM pg_proc WHERE proname = '%s' AND proargtypes[0] = 'pg_catalog.oid'::regtype AND pronargs = 1;", validator); + printfPQExpBuffer(&sql, "SELECT oid FROM pg_proc WHERE proname = '%s'" + " AND proargtypes[0] = 'pg_catalog.oid'::regtype " + " AND pronargs = 1;", validator); result = executeQuery(conn, sql.data, progname, echo); validatorexists = (PQntuples(result) > 0); PQclear(result); @@ -260,20 +272,22 @@ main(int argc, char *argv[]) if (!handlerexists) appendPQExpBuffer(&sql, - "CREATE FUNCTION \"%s\" () RETURNS language_handler AS '%s/%s' LANGUAGE C;\n", + "CREATE FUNCTION pg_catalog.\"%s\" () RETURNS " + "language_handler AS '%s/%s' LANGUAGE C;\n", handler, pglib, object); if (!validatorexists) appendPQExpBuffer(&sql, - "CREATE FUNCTION \"%s\" (oid) RETURNS void AS '%s/%s' LANGUAGE C;\n", + "CREATE FUNCTION pg_catalog.\"%s\" (oid) RETURNS " + "void AS '%s/%s' LANGUAGE C;\n", validator, pglib, object); appendPQExpBuffer(&sql, - "CREATE %sLANGUAGE \"%s\" HANDLER \"%s\"", + "CREATE %sLANGUAGE \"%s\" HANDLER pg_catalog.\"%s\"", (trusted ? "TRUSTED " : ""), langname, handler); if (validator) - appendPQExpBuffer(&sql, " VALIDATOR \"%s\"", validator); + appendPQExpBuffer(&sql, " VALIDATOR pg_catalog.\"%s\"", validator); appendPQExpBuffer(&sql, ";\n"); |