From 558dcc487a06c16d41464a45906c2e6b022fcc6c Mon Sep 17 00:00:00 2001
From: David Rowley <dgrowley@gmail.com>
Date: Thu, 10 Apr 2025 15:40:32 +1200
Subject: [PATCH v1 2/2] Improve various appendStringInfo calls that are new to
 v18

Here we adjust a few new locations which were not using the most suitable
appendStringInfo* function for the intended purpose.
---
 contrib/dblink/dblink.c                        |  2 +-
 contrib/pg_overexplain/pg_overexplain.c        | 18 +++++++++---------
 src/backend/commands/explain.c                 |  4 ++--
 .../libpqwalreceiver/libpqwalreceiver.c        |  2 +-
 src/backend/replication/logical/conflict.c     |  6 +++---
 src/backend/replication/logical/relation.c     |  2 +-
 src/backend/replication/logical/tablesync.c    | 12 ++++++------
 src/backend/utils/adt/ri_triggers.c            | 12 ++++++------
 src/bin/pg_dump/pg_restore.c                   |  2 +-
 9 files changed, 30 insertions(+), 30 deletions(-)

diff --git a/contrib/dblink/dblink.c b/contrib/dblink/dblink.c
index c2e695e364e..092f0753ff5 100644
--- a/contrib/dblink/dblink.c
+++ b/contrib/dblink/dblink.c
@@ -3228,7 +3228,7 @@ appendSCRAMKeysInfo(StringInfo buf)
 
 	appendStringInfo(buf, "scram_client_key='%s' ", client_key);
 	appendStringInfo(buf, "scram_server_key='%s' ", server_key);
-	appendStringInfo(buf, "require_auth='scram-sha-256' ");
+	appendStringInfoString(buf, "require_auth='scram-sha-256' ");
 
 	pfree(client_key);
 	pfree(server_key);
diff --git a/contrib/pg_overexplain/pg_overexplain.c b/contrib/pg_overexplain/pg_overexplain.c
index afc34ad5f2f..68c40fc98ea 100644
--- a/contrib/pg_overexplain/pg_overexplain.c
+++ b/contrib/pg_overexplain/pg_overexplain.c
@@ -292,7 +292,7 @@ overexplain_debug(PlannedStmt *plannedstmt, ExplainState *es)
 	if (es->format == EXPLAIN_FORMAT_TEXT)
 	{
 		ExplainIndentText(es);
-		appendStringInfo(es->str, "PlannedStmt:\n");
+		appendStringInfoString(es->str, "PlannedStmt:\n");
 		es->indent++;
 	}
 
@@ -329,19 +329,19 @@ overexplain_debug(PlannedStmt *plannedstmt, ExplainState *es)
 	/* Print various properties as a comma-separated list of flags. */
 	initStringInfo(&flags);
 	if (plannedstmt->hasReturning)
-		appendStringInfo(&flags, ", hasReturning");
+		appendStringInfoString(&flags, ", hasReturning");
 	if (plannedstmt->hasModifyingCTE)
-		appendStringInfo(&flags, ", hasModifyingCTE");
+		appendStringInfoString(&flags, ", hasModifyingCTE");
 	if (plannedstmt->canSetTag)
-		appendStringInfo(&flags, ", canSetTag");
+		appendStringInfoString(&flags, ", canSetTag");
 	if (plannedstmt->transientPlan)
-		appendStringInfo(&flags, ", transientPlan");
+		appendStringInfoString(&flags, ", transientPlan");
 	if (plannedstmt->dependsOnRole)
-		appendStringInfo(&flags, ", dependsOnRole");
+		appendStringInfoString(&flags, ", dependsOnRole");
 	if (plannedstmt->parallelModeNeeded)
-		appendStringInfo(&flags, ", parallelModeNeeded");
+		appendStringInfoString(&flags, ", parallelModeNeeded");
 	if (flags.len == 0)
-		appendStringInfo(&flags, ", none");
+		appendStringInfoString(&flags, ", none");
 	ExplainPropertyText("Flags", flags.data + 2, es);
 
 	/* Various lists of integers. */
@@ -763,7 +763,7 @@ overexplain_intlist(const char *qlabel, List *list, ExplainState *es)
 	}
 	else
 	{
-		appendStringInfo(&buf, " not an integer list");
+		appendStringInfoString(&buf, " not an integer list");
 		Assert(false);
 	}
 
diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c
index ef8aa489af8..786ee865f14 100644
--- a/src/backend/commands/explain.c
+++ b/src/backend/commands/explain.c
@@ -1848,7 +1848,7 @@ ExplainNode(PlanState *planstate, List *ancestors,
 
 		if (es->format == EXPLAIN_FORMAT_TEXT)
 		{
-			appendStringInfo(es->str, " (actual ");
+			appendStringInfoString(es->str, " (actual ");
 
 			if (es->timing)
 				appendStringInfo(es->str, "time=%.3f..%.3f ", startup_ms, total_ms);
@@ -1917,7 +1917,7 @@ ExplainNode(PlanState *planstate, List *ancestors,
 			if (es->format == EXPLAIN_FORMAT_TEXT)
 			{
 				ExplainIndentText(es);
-				appendStringInfo(es->str, "actual ");
+				appendStringInfoString(es->str, "actual ");
 				if (es->timing)
 					appendStringInfo(es->str, "time=%.3f..%.3f ", startup_ms, total_ms);
 
diff --git a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c
index 200e8f1aabd..7b4ddf7a8f5 100644
--- a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c
+++ b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c
@@ -1012,7 +1012,7 @@ libpqrcv_alter_slot(WalReceiverConn *conn, const char *slotname,
 						 *failover ? "true" : "false");
 
 	if (failover && two_phase)
-		appendStringInfo(&cmd, ", ");
+		appendStringInfoString(&cmd, ", ");
 
 	if (two_phase)
 		appendStringInfo(&cmd, "TWO_PHASE %s",
diff --git a/src/backend/replication/logical/conflict.c b/src/backend/replication/logical/conflict.c
index f1e92f2fc1a..97c4e26b586 100644
--- a/src/backend/replication/logical/conflict.c
+++ b/src/backend/replication/logical/conflict.c
@@ -262,7 +262,7 @@ errdetail_apply_conflict(EState *estate, ResultRelInfo *relinfo,
 			break;
 
 		case CT_UPDATE_MISSING:
-			appendStringInfo(&err_detail, _("Could not find the row to be updated."));
+			appendStringInfoString(&err_detail, _("Could not find the row to be updated."));
 			break;
 
 		case CT_DELETE_ORIGIN_DIFFERS:
@@ -281,7 +281,7 @@ errdetail_apply_conflict(EState *estate, ResultRelInfo *relinfo,
 			break;
 
 		case CT_DELETE_MISSING:
-			appendStringInfo(&err_detail, _("Could not find the row to be deleted."));
+			appendStringInfoString(&err_detail, _("Could not find the row to be deleted."));
 			break;
 	}
 
@@ -304,7 +304,7 @@ errdetail_apply_conflict(EState *estate, ResultRelInfo *relinfo,
 	if (err_msg->len > 0)
 		appendStringInfoChar(err_msg, '\n');
 
-	appendStringInfo(err_msg, "%s", err_detail.data);
+	appendStringInfoString(err_msg, err_detail.data);
 }
 
 /*
diff --git a/src/backend/replication/logical/relation.c b/src/backend/replication/logical/relation.c
index 46d15b824e3..f59046ad620 100644
--- a/src/backend/replication/logical/relation.c
+++ b/src/backend/replication/logical/relation.c
@@ -238,7 +238,7 @@ logicalrep_get_attrs_str(LogicalRepRelation *remoterel, Bitmapset *atts)
 	{
 		attcnt++;
 		if (attcnt > 1)
-			appendStringInfo(&attsbuf, _(", "));
+			appendStringInfoString(&attsbuf, _(", "));
 
 		appendStringInfo(&attsbuf, _("\"%s\""), remoterel->attnames[i]);
 	}
diff --git a/src/backend/replication/logical/tablesync.c b/src/backend/replication/logical/tablesync.c
index 65b98aa905f..8e1e8762f62 100644
--- a/src/backend/replication/logical/tablesync.c
+++ b/src/backend/replication/logical/tablesync.c
@@ -940,15 +940,15 @@ fetch_remote_table_info(char *nspname, char *relname, LogicalRepRelation *lrel,
 	 * Now fetch column names and types.
 	 */
 	resetStringInfo(&cmd);
-	appendStringInfo(&cmd,
-					 "SELECT a.attnum,"
-					 "       a.attname,"
-					 "       a.atttypid,"
-					 "       a.attnum = ANY(i.indkey)");
+	appendStringInfoString(&cmd,
+						   "SELECT a.attnum,"
+						   "       a.attname,"
+						   "       a.atttypid,"
+						   "       a.attnum = ANY(i.indkey)");
 
 	/* Generated columns can be replicated since version 18. */
 	if (server_version >= 180000)
-		appendStringInfo(&cmd, ", a.attgenerated != ''");
+		appendStringInfoString(&cmd, ", a.attgenerated != ''");
 
 	appendStringInfo(&cmd,
 					 "  FROM pg_catalog.pg_attribute a"
diff --git a/src/backend/utils/adt/ri_triggers.c b/src/backend/utils/adt/ri_triggers.c
index c4ff18ce65e..6239900fa28 100644
--- a/src/backend/utils/adt/ri_triggers.c
+++ b/src/backend/utils/adt/ri_triggers.c
@@ -428,13 +428,13 @@ RI_FKey_check(TriggerData *trigdata)
 		{
 			Oid			fk_type = RIAttType(fk_rel, riinfo->fk_attnums[riinfo->nkeys - 1]);
 
-			appendStringInfo(&querybuf, ") x1 HAVING ");
+			appendStringInfoString(&querybuf, ") x1 HAVING ");
 			sprintf(paramname, "$%d", riinfo->nkeys);
 			ri_GenerateQual(&querybuf, "",
 							paramname, fk_type,
 							riinfo->agged_period_contained_by_oper,
 							"pg_catalog.range_agg", ANYMULTIRANGEOID);
-			appendStringInfo(&querybuf, "(x1.r)");
+			appendStringInfoString(&querybuf, "(x1.r)");
 		}
 
 		/* Prepare and save the plan */
@@ -597,13 +597,13 @@ ri_Check_Pk_Match(Relation pk_rel, Relation fk_rel,
 		{
 			Oid			fk_type = RIAttType(fk_rel, riinfo->fk_attnums[riinfo->nkeys - 1]);
 
-			appendStringInfo(&querybuf, ") x1 HAVING ");
+			appendStringInfoString(&querybuf, ") x1 HAVING ");
 			sprintf(paramname, "$%d", riinfo->nkeys);
 			ri_GenerateQual(&querybuf, "",
 							paramname, fk_type,
 							riinfo->agged_period_contained_by_oper,
 							"pg_catalog.range_agg", ANYMULTIRANGEOID);
-			appendStringInfo(&querybuf, "(x1.r)");
+			appendStringInfoString(&querybuf, "(x1.r)");
 		}
 
 		/* Prepare and save the plan */
@@ -838,12 +838,12 @@ ri_restrict(TriggerData *trigdata, bool is_no_action)
 
 			/* Intersect the fk with the old pk range */
 			initStringInfo(&intersectbuf);
-			appendStringInfoString(&intersectbuf, "(");
+			appendStringInfoChar(&intersectbuf, '(');
 			ri_GenerateQual(&intersectbuf, "",
 							attname, fk_period_type,
 							riinfo->period_intersect_oper,
 							paramname, pk_period_type);
-			appendStringInfoString(&intersectbuf, ")");
+			appendStringInfoChar(&intersectbuf, ')');
 
 			/* Find the remaining history */
 			initStringInfo(&replacementsbuf);
diff --git a/src/bin/pg_dump/pg_restore.c b/src/bin/pg_dump/pg_restore.c
index 06c28ab3149..a22b3124fb9 100644
--- a/src/bin/pg_dump/pg_restore.c
+++ b/src/bin/pg_dump/pg_restore.c
@@ -1310,7 +1310,7 @@ process_global_sql_commands(PGconn *conn, const char *dumpdirpath, const char *o
 	appendStringInfoString(&user_create, "CREATE ROLE ");
 	/* should use fmtId here, but we don't know the encoding */
 	appendStringInfoString(&user_create, PQuser(conn));
-	appendStringInfoString(&user_create, ";");
+	appendStringInfoChar(&user_create, ';');
 
 	/* Process file till EOF and execute sql statements. */
 	while (read_one_statement(&sqlstatement, pfile) != EOF)
-- 
2.43.0

