aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/src/sgml/ref/create_language.sgml5
-rw-r--r--src/backend/commands/define.c13
-rw-r--r--src/backend/commands/functioncmds.c22
-rw-r--r--src/backend/commands/proclang.c35
-rw-r--r--src/include/commands/defrem.h2
5 files changed, 17 insertions, 60 deletions
diff --git a/doc/src/sgml/ref/create_language.sgml b/doc/src/sgml/ref/create_language.sgml
index 6e72892375b..0995b13623c 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 <replaceable class="pa
<listitem>
<para>
- The name of the new procedural language. The language name is
- case insensitive. The name must be unique among the languages
- in the database.
+ The name of the new procedural language.
+ The name must be unique among the languages in the database.
</para>
<para>
diff --git a/src/backend/commands/define.c b/src/backend/commands/define.c
index eda3b7a9cee..9dcc581c985 100644
--- a/src/backend/commands/define.c
+++ b/src/backend/commands/define.c
@@ -42,19 +42,6 @@
#include "parser/scansup.h"
#include "utils/int8.h"
-
-/*
- * Translate the input language name to lower case, and truncate if needed.
- *
- * Returns a palloc'd string
- */
-char *
-case_translate_language_name(const char *input)
-{
- return downcase_truncate_identifier(input, strlen(input), false);
-}
-
-
/*
* Extract a string value (otherwise uninterpreted) from a DefElem.
*/
diff --git a/src/backend/commands/functioncmds.c b/src/backend/commands/functioncmds.c
index 92abd44a600..c4746618ae5 100644
--- a/src/backend/commands/functioncmds.c
+++ b/src/backend/commands/functioncmds.c
@@ -779,7 +779,6 @@ CreateFunction(CreateFunctionStmt *stmt, const char *queryString)
Oid prorettype;
bool returnsSet;
char *language;
- char *languageName;
Oid languageOid;
Oid languageValidator;
char *funcname;
@@ -828,16 +827,13 @@ CreateFunction(CreateFunctionStmt *stmt, const char *queryString)
&isStrict, &security,
&proconfig, &procost, &prorows);
- /* 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)));
languageOid = HeapTupleGetOid(languageTuple);
@@ -906,7 +902,7 @@ CreateFunction(CreateFunctionStmt *stmt, const char *queryString)
compute_attributes_with_style(stmt->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 98770c5a61a..7a37e96c402 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,
@@ -73,15 +72,10 @@ CreateProceduralLanguage(CreatePLangStmt *stmt)
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 64eeb736701..a466e2edb05 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);