From 80648891ccc6e5db8a38e35394ee917db6a1ea32 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Sun, 28 May 2000 20:34:52 +0000
Subject: [PATCH] Miscellaneous cleanups of places that needed to account for
 new pg_language entries.

---
 src/backend/commands/remove.c  |  5 +--
 src/backend/commands/trigger.c | 17 +++++----
 src/bin/pg_dump/pg_dump.c      | 63 ++++++++++++----------------------
 src/include/nodes/parsenodes.h |  4 +--
 4 files changed, 36 insertions(+), 53 deletions(-)

diff --git a/src/backend/commands/remove.c b/src/backend/commands/remove.c
index 03b74549ee8..a90af396a05 100644
--- a/src/backend/commands/remove.c
+++ b/src/backend/commands/remove.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/commands/Attic/remove.c,v 1.48 2000/05/18 16:09:38 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/commands/Attic/remove.c,v 1.49 2000/05/28 20:34:50 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -367,7 +367,8 @@ RemoveFunction(char *functionName,		/* function name to be removed */
 		func_error("RemoveFunction", functionName, nargs, argList, NULL);
 	}
 
-	if ((((Form_pg_proc) GETSTRUCT(tup))->prolang) == INTERNALlanguageId)
+	if (((Form_pg_proc) GETSTRUCT(tup))->prolang == INTERNALlanguageId ||
+		((Form_pg_proc) GETSTRUCT(tup))->prolang == NEWINTERNALlanguageId)
 	{
 		heap_close(relation, RowExclusiveLock);
 		elog(NOTICE, "Removing built-in function \"%s\"", functionName);
diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c
index 49f5570e8fc..4deb7554047 100644
--- a/src/backend/commands/trigger.c
+++ b/src/backend/commands/trigger.c
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.65 2000/05/28 17:55:55 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.66 2000/05/28 20:34:50 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -58,6 +58,7 @@ CreateTrigger(CreateTrigStmt *stmt)
 	Relation	idescs[Num_pg_trigger_indices];
 	Relation	ridescs[Num_pg_class_indices];
 	Oid			fargtypes[FUNC_MAX_ARGS];
+	Oid			funclang;
 	int			found = 0;
 	int			i;
 	char		constrtrigname[NAMEDATALEN];
@@ -154,24 +155,26 @@ CreateTrigger(CreateTrigStmt *stmt)
 								Int32GetDatum(0),
 								PointerGetDatum(fargtypes),
 								0);
-	if (!HeapTupleIsValid(tuple) ||
-		((Form_pg_proc) GETSTRUCT(tuple))->pronargs != 0)
+	if (!HeapTupleIsValid(tuple))
 		elog(ERROR, "CreateTrigger: function %s() does not exist",
 			 stmt->funcname);
 	if (((Form_pg_proc) GETSTRUCT(tuple))->prorettype != 0)
 		elog(ERROR, "CreateTrigger: function %s() must return OPAQUE",
 			 stmt->funcname);
-	if (((Form_pg_proc) GETSTRUCT(tuple))->prolang != ClanguageId &&
-		((Form_pg_proc) GETSTRUCT(tuple))->prolang != INTERNALlanguageId)
+	funclang = ((Form_pg_proc) GETSTRUCT(tuple))->prolang;
+	if (funclang != ClanguageId &&
+		funclang != NEWClanguageId &&
+		funclang != INTERNALlanguageId &&
+		funclang != NEWINTERNALlanguageId)
 	{
 		HeapTuple	langTup;
 
 		langTup = SearchSysCacheTuple(LANGOID,
-			ObjectIdGetDatum(((Form_pg_proc) GETSTRUCT(tuple))->prolang),
+									  ObjectIdGetDatum(funclang),
 									  0, 0, 0);
 		if (!HeapTupleIsValid(langTup))
 			elog(ERROR, "CreateTrigger: cache lookup for PL %u failed",
-				 ((Form_pg_proc) GETSTRUCT(tuple))->prolang);
+				 funclang);
 		if (((Form_pg_language) GETSTRUCT(langTup))->lanispl == false)
 			elog(ERROR, "CreateTrigger: only builtin, C and PL functions are supported");
 	}
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index b6b218bdc7d..12eed924525 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -22,7 +22,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.147 2000/04/14 01:34:24 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.148 2000/05/28 20:34:52 tgl Exp $
  *
  * Modifications - 6/10/96 - dave@bensoft.com - version 1.13.dhb
  *
@@ -2575,6 +2575,10 @@ dumpOneFunc(FILE *fout, FuncInfo *finfo, int i,
 	int			j;
 	char	   *func_def;
 	char		func_lang[NAMEDATALEN + 1];
+	PGresult   *res;
+	int			nlangs;
+	int			i_lanname;
+	char		query[256];
 
 	if (finfo[i].dumped)
 		return;
@@ -2583,54 +2587,29 @@ dumpOneFunc(FILE *fout, FuncInfo *finfo, int i,
 
 	becomeUser(fout, finfo[i].usename);
 
-	if (finfo[i].lang == INTERNALlanguageId)
-	{
-		func_def = finfo[i].prosrc;
-		strcpy(func_lang, "INTERNAL");
-	}
-	else if (finfo[i].lang == ClanguageId)
+	sprintf(query, "SELECT lanname FROM pg_language WHERE oid = %u",
+			finfo[i].lang);
+	res = PQexec(g_conn, query);
+	if (!res ||
+		PQresultStatus(res) != PGRES_TUPLES_OK)
 	{
-		func_def = finfo[i].probin;
-		strcpy(func_lang, "C");
+		fprintf(stderr, "dumpOneFunc(): SELECT for procedural language failed.  Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+		exit_nicely(g_conn);
 	}
-	else if (finfo[i].lang == SQLlanguageId)
+	nlangs = PQntuples(res);
+
+	if (nlangs != 1)
 	{
-		func_def = finfo[i].prosrc;
-		strcpy(func_lang, "SQL");
+		fprintf(stderr, "dumpOneFunc(): procedural language for function %s not found\n", finfo[i].proname);
+		exit_nicely(g_conn);
 	}
-	else
-	{
-		PGresult   *res;
-		int			nlangs;
-		int			i_lanname;
-		char		query[256];
-
-		sprintf(query, "SELECT lanname FROM pg_language "
-				"WHERE oid = %u",
-				finfo[i].lang);
-		res = PQexec(g_conn, query);
-		if (!res ||
-			PQresultStatus(res) != PGRES_TUPLES_OK)
-		{
-			fprintf(stderr, "dumpOneFunc(): SELECT for procedural language failed.  Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
-			exit_nicely(g_conn);
-		}
-		nlangs = PQntuples(res);
 
-		if (nlangs != 1)
-		{
-			fprintf(stderr, "dumpOneFunc(): procedural language for function %s not found\n", finfo[i].proname);
-			exit_nicely(g_conn);
-		}
-
-		i_lanname = PQfnumber(res, "lanname");
-
-		func_def = finfo[i].prosrc;
-		strcpy(func_lang, PQgetvalue(res, 0, i_lanname));
+	i_lanname = PQfnumber(res, "lanname");
 
-		PQclear(res);
+	func_def = finfo[i].prosrc;
+	strcpy(func_lang, PQgetvalue(res, 0, i_lanname));
 
-	}
+	PQclear(res);
 
 	if (dropSchema)
 	{
diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h
index 15c370a64a6..54c57688329 100644
--- a/src/include/nodes/parsenodes.h
+++ b/src/include/nodes/parsenodes.h
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: parsenodes.h,v 1.104 2000/04/12 17:16:40 momjian Exp $
+ * $Id: parsenodes.h,v 1.105 2000/05/28 20:34:49 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -248,7 +248,7 @@ typedef struct CreateTrigStmt
 	bool		before;			/* BEFORE/AFTER */
 	bool		row;			/* ROW/STATEMENT */
 	char		actions[4];		/* Insert, Update, Delete */
-	char	   *lang;			/* NULL (which means Clanguage) */
+	char	   *lang;			/* currently not used, always NULL */
 	char	   *text;			/* AS 'text' */
 	List	   *attr;			/* UPDATE OF a, b,... (NI) or NULL */
 	char	   *when;			/* WHEN 'a > 10 ...' (NI) or NULL */
-- 
GitLab