aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands/proclang.c
diff options
context:
space:
mode:
authorPeter Eisentraut <peter_e@gmx.net>2003-06-27 14:45:32 +0000
committerPeter Eisentraut <peter_e@gmx.net>2003-06-27 14:45:32 +0000
commitb256f2426433c56b4bea3a8102757749885b81ba (patch)
treebd2b9b75720dd850bffbf40bf3d2440b1639a904 /src/backend/commands/proclang.c
parent5bac7d11ddbf19688fd5da87ffbd991a1b06aa4a (diff)
downloadpostgresql-b256f2426433c56b4bea3a8102757749885b81ba.tar.gz
postgresql-b256f2426433c56b4bea3a8102757749885b81ba.zip
First batch of object rename commands.
Diffstat (limited to 'src/backend/commands/proclang.c')
-rw-r--r--src/backend/commands/proclang.c46
1 files changed, 45 insertions, 1 deletions
diff --git a/src/backend/commands/proclang.c b/src/backend/commands/proclang.c
index 03d022f1f4f..1e93c07fec5 100644
--- a/src/backend/commands/proclang.c
+++ b/src/backend/commands/proclang.c
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/proclang.c,v 1.43 2002/09/21 18:39:25 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/proclang.c,v 1.44 2003/06/27 14:45:27 petere Exp $
*
*-------------------------------------------------------------------------
*/
@@ -231,3 +231,47 @@ DropProceduralLanguageById(Oid langOid)
heap_close(rel, RowExclusiveLock);
}
+
+/*
+ * Rename language
+ */
+void
+RenameLanguage(const char *oldname, const char *newname)
+{
+ HeapTuple tup;
+ Relation rel;
+
+ rel = heap_openr(ShadowRelationName, RowExclusiveLock);
+
+ tup = SearchSysCacheCopy(LANGNAME,
+ CStringGetDatum(oldname),
+ 0, 0, 0);
+ if (!HeapTupleIsValid(tup))
+ ereport(ERROR,
+ (errcode(ERRCODE_SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION),
+ errmsg("language \"%s\" does not exist", oldname)));
+
+ /* make sure the new name doesn't exist */
+ if (SearchSysCacheExists(LANGNAME,
+ CStringGetDatum(newname),
+ 0, 0, 0))
+ {
+ ereport(ERROR,
+ (errcode(ERRCODE_SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION),
+ errmsg("language \"%s\" already exists", newname)));
+ }
+
+ /* must be superuser */
+ if (!superuser())
+ ereport(ERROR,
+ (errcode(ERRCODE_SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION),
+ errmsg("permission denied")));
+
+ /* rename */
+ namestrcpy(&(((Form_pg_language) GETSTRUCT(tup))->lanname), newname);
+ simple_heap_update(rel, &tup->t_self, tup);
+ CatalogUpdateIndexes(rel, tup);
+
+ heap_close(rel, NoLock);
+ heap_freetuple(tup);
+}