aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands/proclang.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/commands/proclang.c')
-rw-r--r--src/backend/commands/proclang.c30
1 files changed, 13 insertions, 17 deletions
diff --git a/src/backend/commands/proclang.c b/src/backend/commands/proclang.c
index ec8aec7005f..5d4d3f09bf7 100644
--- a/src/backend/commands/proclang.c
+++ b/src/backend/commands/proclang.c
@@ -48,7 +48,6 @@ void
CreateProceduralLanguage(CreatePLangStmt *stmt)
{
char languageName[NAMEDATALEN];
- HeapTuple langTup;
HeapTuple procTup;
Oid typev[FUNC_MAX_ARGS];
@@ -77,10 +76,9 @@ CreateProceduralLanguage(CreatePLangStmt *stmt)
*/
case_translate_language_name(stmt->plname, languageName);
- langTup = SearchSysCacheTuple(LANGNAME,
- PointerGetDatum(languageName),
- 0, 0, 0);
- if (HeapTupleIsValid(langTup))
+ if (SearchSysCacheExists(LANGNAME,
+ PointerGetDatum(languageName),
+ 0, 0, 0))
elog(ERROR, "Language %s already exists", languageName);
/* ----------------
@@ -89,21 +87,17 @@ CreateProceduralLanguage(CreatePLangStmt *stmt)
* ----------------
*/
memset(typev, 0, sizeof(typev));
- procTup = SearchSysCacheTuple(PROCNAME,
- PointerGetDatum(stmt->plhandler),
- Int32GetDatum(0),
- PointerGetDatum(typev),
- 0);
+ procTup = SearchSysCache(PROCNAME,
+ PointerGetDatum(stmt->plhandler),
+ Int32GetDatum(0),
+ PointerGetDatum(typev),
+ 0);
if (!HeapTupleIsValid(procTup))
- {
elog(ERROR, "PL handler function %s() doesn't exist",
stmt->plhandler);
- }
if (((Form_pg_proc) GETSTRUCT(procTup))->prorettype != InvalidOid)
- {
elog(ERROR, "PL handler function %s() isn't of return type Opaque",
stmt->plhandler);
- }
/* ----------------
* Insert the new language into pg_language
@@ -123,6 +117,8 @@ CreateProceduralLanguage(CreatePLangStmt *stmt)
values[i++] = DirectFunctionCall1(textin,
CStringGetDatum(stmt->plcompiler));
+ ReleaseSysCache(procTup);
+
rel = heap_openr(LanguageRelationName, RowExclusiveLock);
tupDesc = rel->rd_att;
@@ -173,9 +169,9 @@ DropProceduralLanguage(DropPLangStmt *stmt)
rel = heap_openr(LanguageRelationName, RowExclusiveLock);
- langTup = SearchSysCacheTupleCopy(LANGNAME,
- PointerGetDatum(languageName),
- 0, 0, 0);
+ langTup = SearchSysCacheCopy(LANGNAME,
+ PointerGetDatum(languageName),
+ 0, 0, 0);
if (!HeapTupleIsValid(langTup))
elog(ERROR, "Language %s doesn't exist", languageName);