From 25794e841e5b86a0f90fac7f7f851e5d950e51e2 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Mon, 5 Sep 2016 18:53:25 -0400
Subject: [PATCH] Cosmetic code cleanup in commands/extension.c.

Some of the comments added by the CREATE EXTENSION CASCADE patch were
a bit sloppy, and I didn't care for redeclaring the same local variable
inside a nested block either.  No functional changes.
---
 src/backend/commands/extension.c | 34 ++++++++++++++++----------------
 1 file changed, 17 insertions(+), 17 deletions(-)

diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c
index 518fefcf09b..fa861e670b7 100644
--- a/src/backend/commands/extension.c
+++ b/src/backend/commands/extension.c
@@ -1169,10 +1169,10 @@ find_update_path(List *evi_list,
 /*
  * CREATE EXTENSION worker
  *
- * When CASCADE is specified CreateExtensionInternal() recurses if required
- * extensions need to be installed. To sanely handle cyclic dependencies
- * cascade_parent contains the dependency chain leading to the current
- * invocation; thus allowing to error out if there's a cyclic dependency.
+ * When CASCADE is specified, CreateExtensionInternal() recurses if required
+ * extensions need to be installed.  To sanely handle cyclic dependencies,
+ * the "parents" list contains a list of names of extensions already being
+ * installed, allowing us to error out if we recurse to one of those.
  */
 static ObjectAddress
 CreateExtensionInternal(CreateExtensionStmt *stmt, List *parents)
@@ -1400,8 +1400,8 @@ CreateExtensionInternal(CreateExtensionStmt *stmt, List *parents)
 	 */
 
 	/*
-	 * Look up the prerequisite extensions, and build lists of their OIDs and
-	 * the OIDs of their target schemas.
+	 * Look up the prerequisite extensions, install them if necessary, and
+	 * build lists of their OIDs and the OIDs of their target schemas.
 	 */
 	requiredExtensions = NIL;
 	requiredSchemas = NIL;
@@ -1416,18 +1416,19 @@ CreateExtensionInternal(CreateExtensionStmt *stmt, List *parents)
 		{
 			if (cascade)
 			{
+				/* Must install it. */
 				CreateExtensionStmt *ces;
-				ListCell   *lc;
+				ListCell   *lc2;
 				ObjectAddress addr;
 				List	   *cascade_parents;
 
-				/* Check extension name validity before trying to cascade */
+				/* Check extension name validity before trying to cascade. */
 				check_valid_extension_name(curreq);
 
 				/* Check for cyclic dependency between extensions. */
-				foreach(lc, parents)
+				foreach(lc2, parents)
 				{
-					char	   *pname = (char *) lfirst(lc);
+					char	   *pname = (char *) lfirst(lc2);
 
 					if (strcmp(pname, curreq) == 0)
 						ereport(ERROR,
@@ -1440,26 +1441,26 @@ CreateExtensionInternal(CreateExtensionStmt *stmt, List *parents)
 						(errmsg("installing required extension \"%s\"",
 								curreq)));
 
-				/* Create and execute new CREATE EXTENSION statement. */
+				/* Build a CREATE EXTENSION statement to pass down. */
 				ces = makeNode(CreateExtensionStmt);
 				ces->extname = curreq;
+				ces->if_not_exists = false;
 
-				/* Propagate the CASCADE option */
+				/* Propagate the CASCADE option. */
 				ces->options = list_make1(d_cascade);
 
 				/* Propagate the SCHEMA option if given. */
 				if (d_schema && d_schema->arg)
 					ces->options = lappend(ces->options, d_schema);
 
-				/*
-				 * Pass the current list of parents + the current extension to
-				 * the "child" CreateExtensionInternal().
-				 */
+				/* Add current extension to list of parents to pass down. */
 				cascade_parents =
 					lappend(list_copy(parents), stmt->extname);
 
 				/* Create the required extension. */
 				addr = CreateExtensionInternal(ces, cascade_parents);
+
+				/* Get its newly-assigned OID. */
 				reqext = addr.objectId;
 			}
 			else
@@ -1551,7 +1552,6 @@ CreateExtension(CreateExtensionStmt *stmt)
 				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
 				 errmsg("nested CREATE EXTENSION is not supported")));
 
-
 	/* Finally create the extension. */
 	return CreateExtensionInternal(stmt, NIL);
 }
-- 
GitLab