From f23b79147b404ca09f85811080c33e0f099ef52f Mon Sep 17 00:00:00 2001
From: Alvaro Herrera <alvherre@alvh.no-ip.org>
Date: Thu, 5 Jun 2008 15:04:39 +0000
Subject: [PATCH] Fix some string building in getObjectDescription.

---
 src/backend/catalog/dependency.c | 32 +++++++++++++++++++++++++-------
 1 file changed, 25 insertions(+), 7 deletions(-)

diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c
index 0cbefc56415..24423d2837e 100644
--- a/src/backend/catalog/dependency.c
+++ b/src/backend/catalog/dependency.c
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/catalog/dependency.c,v 1.72 2008/05/12 00:00:46 alvherre Exp $
+ *	  $PostgreSQL: pgsql/src/backend/catalog/dependency.c,v 1.73 2008/06/05 15:04:39 alvherre Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -2005,6 +2005,7 @@ getObjectDescription(const ObjectAddress *object)
 				SysScanDesc amscan;
 				HeapTuple	tup;
 				Form_pg_amop amopForm;
+				StringInfoData opfam;
 
 				amopDesc = heap_open(AccessMethodOperatorRelationId,
 									 AccessShareLock);
@@ -2025,10 +2026,18 @@ getObjectDescription(const ObjectAddress *object)
 
 				amopForm = (Form_pg_amop) GETSTRUCT(tup);
 
-				appendStringInfo(&buffer, _("operator %d %s of "),
+				initStringInfo(&opfam);
+				getOpFamilyDescription(&opfam, amopForm->amopfamily);
+				/*
+				 * translator: %d is the operator strategy (a number), the
+				 * first %s is the textual form of the operator, and the second
+				 * %s is the description of the operator family.
+				 */
+				appendStringInfo(&buffer, _("operator %d %s of %s"),
 								 amopForm->amopstrategy,
-								 format_operator(amopForm->amopopr));
-				getOpFamilyDescription(&buffer, amopForm->amopfamily);
+								 format_operator(amopForm->amopopr),
+								 opfam.data);
+				pfree(opfam.data);
 
 				systable_endscan(amscan);
 				heap_close(amopDesc, AccessShareLock);
@@ -2042,6 +2051,7 @@ getObjectDescription(const ObjectAddress *object)
 				SysScanDesc amscan;
 				HeapTuple	tup;
 				Form_pg_amproc amprocForm;
+				StringInfoData opfam;
 
 				amprocDesc = heap_open(AccessMethodProcedureRelationId,
 									   AccessShareLock);
@@ -2062,10 +2072,18 @@ getObjectDescription(const ObjectAddress *object)
 
 				amprocForm = (Form_pg_amproc) GETSTRUCT(tup);
 
-				appendStringInfo(&buffer, _("function %d %s of "),
+				initStringInfo(&opfam);
+				getOpFamilyDescription(&opfam, amprocForm->amprocfamily);
+				/*
+				 * translator: %d is the function number, the first %s is the
+				 * textual form of the function with arguments, and the second
+				 * %s is the description of the operator family.
+				 */
+				appendStringInfo(&buffer, _("function %d %s of %s"),
 								 amprocForm->amprocnum,
-								 format_procedure(amprocForm->amproc));
-				getOpFamilyDescription(&buffer, amprocForm->amprocfamily);
+								 format_procedure(amprocForm->amproc),
+								 opfam.data);
+				pfree(opfam.data);
 
 				systable_endscan(amscan);
 				heap_close(amprocDesc, AccessShareLock);
-- 
GitLab