summaryrefslogtreecommitdiff
path: root/src/bin/scripts/droplang.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/scripts/droplang.c')
-rw-r--r--src/bin/scripts/droplang.c64
1 files changed, 49 insertions, 15 deletions
diff --git a/src/bin/scripts/droplang.c b/src/bin/scripts/droplang.c
index 5be336dd6d..5c3c226b75 100644
--- a/src/bin/scripts/droplang.c
+++ b/src/bin/scripts/droplang.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/droplang.c,v 1.15 2005/06/14 02:57:45 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/scripts/droplang.c,v 1.16 2005/07/10 14:26:30 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -52,6 +52,8 @@ main(int argc, char *argv[])
Oid lanvalidator;
char *handler;
char *validator;
+ char *handler_ns;
+ char *validator_ns;
bool keephandler;
bool keepvalidator;
@@ -135,9 +137,13 @@ main(int argc, char *argv[])
{
printQueryOpt popt;
- conn = connectDatabase(dbname, host, port, username, password, progname);
+ 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));
@@ -153,8 +159,10 @@ main(int argc, char *argv[])
if (langname == NULL)
{
- fprintf(stderr, _("%s: missing required argument language name\n"), progname);
- fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ fprintf(stderr, _("%s: missing required argument language name\n"),
+ progname);
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"),
+ progname);
exit(1);
}
@@ -168,12 +176,15 @@ main(int argc, char *argv[])
* Make sure the language is installed and find the OIDs of the
* handler and validator functions
*/
- printfPQExpBuffer(&sql, "SELECT lanplcallfoid, lanvalidator FROM pg_language WHERE lanname = '%s' AND lanispl;", langname);
+ printfPQExpBuffer(&sql, "SELECT lanplcallfoid, lanvalidator "
+ "FROM pg_language WHERE lanname = '%s' AND lanispl;",
+ langname);
result = executeQuery(conn, sql.data, progname, echo);
if (PQntuples(result) == 0)
{
PQfinish(conn);
- fprintf(stderr, _("%s: language \"%s\" is not installed in database \"%s\"\n"),
+ fprintf(stderr, _("%s: language \"%s\" is not installed in "
+ "database \"%s\"\n"),
progname, langname, dbname);
exit(1);
}
@@ -184,13 +195,16 @@ main(int argc, char *argv[])
/*
* Check that there are no functions left defined in that language
*/
- printfPQExpBuffer(&sql, "SELECT count(proname) FROM pg_proc P, pg_language L WHERE P.prolang = L.oid AND L.lanname = '%s';", langname);
+ printfPQExpBuffer(&sql, "SELECT count(proname) FROM pg_proc P, "
+ "pg_language L WHERE P.prolang = L.oid "
+ "AND L.lanname = '%s';", langname);
result = executeQuery(conn, sql.data, progname, echo);
if (strcmp(PQgetvalue(result, 0, 0), "0") != 0)
{
PQfinish(conn);
fprintf(stderr,
- _("%s: still %s functions declared in language \"%s\"; language not removed\n"),
+ _("%s: still %s functions declared in language \"%s\"; "
+ "language not removed\n"),
progname, PQgetvalue(result, 0, 0), langname);
exit(1);
}
@@ -199,7 +213,9 @@ main(int argc, char *argv[])
/*
* Check that the handler function isn't used by some other language
*/
- printfPQExpBuffer(&sql, "SELECT count(*) FROM pg_language WHERE lanplcallfoid = %u AND lanname <> '%s';", lanplcallfoid, langname);
+ printfPQExpBuffer(&sql, "SELECT count(*) FROM pg_language "
+ "WHERE lanplcallfoid = %u AND lanname <> '%s';",
+ lanplcallfoid, langname);
result = executeQuery(conn, sql.data, progname, echo);
if (strcmp(PQgetvalue(result, 0, 0), "0") == 0)
keephandler = false;
@@ -212,20 +228,29 @@ main(int argc, char *argv[])
*/
if (!keephandler)
{
- printfPQExpBuffer(&sql, "SELECT proname FROM pg_proc WHERE oid = %u;", lanplcallfoid);
+ printfPQExpBuffer(&sql, "SELECT proname, (SELECT nspname "
+ "FROM pg_namespace ns WHERE ns.oid = pronamespace) "
+ "AS prons FROM pg_proc WHERE oid = %u;",
+ lanplcallfoid);
result = executeQuery(conn, sql.data, progname, echo);
handler = strdup(PQgetvalue(result, 0, 0));
+ handler_ns = strdup(PQgetvalue(result, 0, 1));
PQclear(result);
}
else
+ {
handler = NULL;
+ handler_ns = NULL;
+ }
/*
* Check that the validator function isn't used by some other language
*/
if (OidIsValid(lanvalidator))
{
- printfPQExpBuffer(&sql, "SELECT count(*) FROM pg_language WHERE lanvalidator = %u AND lanname <> '%s';", lanvalidator, langname);
+ printfPQExpBuffer(&sql, "SELECT count(*) FROM pg_language WHERE "
+ "lanvalidator = %u AND lanname <> '%s';",
+ lanvalidator, langname);
result = executeQuery(conn, sql.data, progname, echo);
if (strcmp(PQgetvalue(result, 0, 0), "0") == 0)
keepvalidator = false;
@@ -241,22 +266,31 @@ main(int argc, char *argv[])
*/
if (!keepvalidator)
{
- printfPQExpBuffer(&sql, "SELECT proname FROM pg_proc WHERE oid = %u;", lanvalidator);
+ printfPQExpBuffer(&sql, "SELECT proname, (SELECT nspname "
+ "FROM pg_namespace ns WHERE ns.oid = pronamespace) "
+ "AS prons FROM pg_proc WHERE oid = %u;",
+ lanvalidator);
result = executeQuery(conn, sql.data, progname, echo);
validator = strdup(PQgetvalue(result, 0, 0));
+ validator_ns = strdup(PQgetvalue(result, 0, 1));
PQclear(result);
}
else
+ {
validator = NULL;
+ validator_ns = NULL;
+ }
/*
* Drop the language and the functions
*/
printfPQExpBuffer(&sql, "DROP LANGUAGE \"%s\";\n", langname);
if (!keephandler)
- appendPQExpBuffer(&sql, "DROP FUNCTION \"%s\" ();\n", handler);
+ appendPQExpBuffer(&sql, "DROP FUNCTION \"%s\".\"%s\" ();\n",
+ handler_ns, handler);
if (!keepvalidator)
- appendPQExpBuffer(&sql, "DROP FUNCTION \"%s\" (oid);\n", validator);
+ appendPQExpBuffer(&sql, "DROP FUNCTION \"%s\".\"%s\" (oid);\n",
+ validator_ns, validator);
if (echo)
printf("%s", sql.data);
result = PQexec(conn, sql.data);