diff --git a/doc/src/sgml/ref/create_language.sgml b/doc/src/sgml/ref/create_language.sgml index 6e72892375..0995b13623 100644 --- a/doc/src/sgml/ref/create_language.sgml +++ b/doc/src/sgml/ref/create_language.sgml @@ -143,9 +143,8 @@ CREATE [ OR REPLACE ] [ TRUSTED ] [ PROCEDURAL ] LANGUAGE withClause, &isStrict, &volatility); - interpret_AS_clause(languageOid, languageName, funcname, as_clause, + interpret_AS_clause(languageOid, language, funcname, as_clause, &prosrc_str, &probin_str); /* @@ -1964,7 +1960,6 @@ ExecuteDoStmt(DoStmt *stmt) DefElem *as_item = NULL; DefElem *language_item = NULL; char *language; - char *languageName; Oid laninline; HeapTuple languageTuple; Form_pg_language languageStruct; @@ -2008,16 +2003,13 @@ ExecuteDoStmt(DoStmt *stmt) else language = "plpgsql"; - /* Convert language name to canonical case */ - languageName = case_translate_language_name(language); - /* Look up the language and validate permissions */ - languageTuple = SearchSysCache1(LANGNAME, PointerGetDatum(languageName)); + languageTuple = SearchSysCache1(LANGNAME, PointerGetDatum(language)); if (!HeapTupleIsValid(languageTuple)) ereport(ERROR, (errcode(ERRCODE_UNDEFINED_OBJECT), - errmsg("language \"%s\" does not exist", languageName), - (PLTemplateExists(languageName) ? + errmsg("language \"%s\" does not exist", language), + (PLTemplateExists(language) ? errhint("Use CREATE LANGUAGE to load the language into the database.") : 0))); codeblock->langOid = HeapTupleGetOid(languageTuple); diff --git a/src/backend/commands/proclang.c b/src/backend/commands/proclang.c index 98770c5a61..7a37e96c40 100644 --- a/src/backend/commands/proclang.c +++ b/src/backend/commands/proclang.c @@ -64,7 +64,6 @@ static void AlterLanguageOwner_internal(HeapTuple tup, Relation rel, void CreateProceduralLanguage(CreatePLangStmt *stmt) { - char *languageName; PLTemplate *pltemplate; Oid handlerOid, inlineOid, @@ -72,16 +71,11 @@ CreateProceduralLanguage(CreatePLangStmt *stmt) Oid funcrettype; Oid funcargtypes[1]; - /* - * Translate the language name to lower case - */ - languageName = case_translate_language_name(stmt->plname); - /* * If we have template information for the language, ignore the supplied * parameters (if any) and use the template information. */ - if ((pltemplate = find_language_template(languageName)) != NULL) + if ((pltemplate = find_language_template(stmt->plname)) != NULL) { List *funcname; @@ -101,7 +95,7 @@ CreateProceduralLanguage(CreatePLangStmt *stmt) ereport(ERROR, (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), errmsg("must be superuser to create procedural language \"%s\"", - languageName))); + stmt->plname))); if (!pg_database_ownercheck(MyDatabaseId, GetUserId())) aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_DATABASE, get_database_name(MyDatabaseId)); @@ -226,7 +220,7 @@ CreateProceduralLanguage(CreatePLangStmt *stmt) valOid = InvalidOid; /* ok, create it */ - create_proc_lang(languageName, stmt->replace, GetUserId(), + create_proc_lang(stmt->plname, stmt->replace, GetUserId(), handlerOid, inlineOid, valOid, pltemplate->tmpltrusted); } @@ -241,7 +235,7 @@ CreateProceduralLanguage(CreatePLangStmt *stmt) ereport(ERROR, (errcode(ERRCODE_UNDEFINED_OBJECT), errmsg("unsupported language \"%s\"", - languageName), + stmt->plname), errhint("The supported languages are listed in the pg_pltemplate system catalog."))); /* @@ -301,7 +295,7 @@ CreateProceduralLanguage(CreatePLangStmt *stmt) valOid = InvalidOid; /* ok, create it */ - create_proc_lang(languageName, stmt->replace, GetUserId(), + create_proc_lang(stmt->plname, stmt->replace, GetUserId(), handlerOid, inlineOid, valOid, stmt->pltrusted); } @@ -521,21 +515,15 @@ PLTemplateExists(const char *languageName) void DropProceduralLanguage(DropPLangStmt *stmt) { - char *languageName; Oid oid; ObjectAddress object; - /* - * Translate the language name, check that the language exists - */ - languageName = case_translate_language_name(stmt->plname); - - oid = get_language_oid(languageName, stmt->missing_ok); + oid = get_language_oid(stmt->plname, stmt->missing_ok); if (!OidIsValid(oid)) { ereport(NOTICE, (errmsg("language \"%s\" does not exist, skipping", - languageName))); + stmt->plname))); return; } @@ -544,7 +532,7 @@ DropProceduralLanguage(DropPLangStmt *stmt) */ if (!pg_language_ownercheck(oid, GetUserId())) aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_LANGUAGE, - languageName); + stmt->plname); object.classId = LanguageRelationId; object.objectId = oid; @@ -587,10 +575,6 @@ RenameLanguage(const char *oldname, const char *newname) HeapTuple tup; Relation rel; - /* Translate both names for consistency with CREATE */ - oldname = case_translate_language_name(oldname); - newname = case_translate_language_name(newname); - rel = heap_open(LanguageRelationId, RowExclusiveLock); tup = SearchSysCacheCopy1(LANGNAME, CStringGetDatum(oldname)); @@ -628,9 +612,6 @@ AlterLanguageOwner(const char *name, Oid newOwnerId) HeapTuple tup; Relation rel; - /* Translate name for consistency with CREATE */ - name = case_translate_language_name(name); - rel = heap_open(LanguageRelationId, RowExclusiveLock); tup = SearchSysCache1(LANGNAME, CStringGetDatum(name)); diff --git a/src/include/commands/defrem.h b/src/include/commands/defrem.h index 64eeb73670..a466e2edb0 100644 --- a/src/include/commands/defrem.h +++ b/src/include/commands/defrem.h @@ -174,8 +174,6 @@ extern Datum transformGenericOptions(Oid catalogId, /* support routines in commands/define.c */ -extern char *case_translate_language_name(const char *input); - extern char *defGetString(DefElem *def); extern double defGetNumeric(DefElem *def); extern bool defGetBoolean(DefElem *def);