Better formatting of functions in pg_dump

Greg Sabino Mullane <[email protected]>
Newsgroups gmane.comp.db.postgresql.devel.patches
Message-ID <20080612091033.40e02ebd@greg-laptop>
Attached patch puts the "metadata" about a function, especially the
language name, at the top of the CREATE FUNCTION statement, above the
possibly long, multi-line function definition.

-- 
Greg Sabino Mullane


-- 
Sent via pgsql-patches mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-patches
better.pg_dump.function.format.patch (text/x-patch, 4.2 KB)
Index: pg_dump.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v
retrieving revision 1.492
diff -c -r1.492 pg_dump.c
*** pg_dump.c	16 May 2008 23:36:05 -0000	1.492
--- pg_dump.c	12 Jun 2008 13:07:28 -0000
***************
*** 6775,6784 ****
  	rettypename = getFormattedTypeName(finfo->prorettype, zeroAsOpaque);
  
  	appendPQExpBuffer(q, "CREATE FUNCTION %s ", funcsig);
! 	appendPQExpBuffer(q, "RETURNS %s%s\n    %s\n    LANGUAGE %s",
  					  (proretset[0] == 't') ? "SETOF " : "",
  					  rettypename,
- 					  asPart->data,
  					  fmtId(lanname));
  
  	free(rettypename);
--- 6775,6783 ----
  	rettypename = getFormattedTypeName(finfo->prorettype, zeroAsOpaque);
  
  	appendPQExpBuffer(q, "CREATE FUNCTION %s ", funcsig);
! 	appendPQExpBuffer(q, "RETURNS %s%s\n    LANGUAGE %s\n",
  					  (proretset[0] == 't') ? "SETOF " : "",
  					  rettypename,
  					  fmtId(lanname));
  
  	free(rettypename);
***************
*** 6786,6794 ****
  	if (provolatile[0] != PROVOLATILE_VOLATILE)
  	{
  		if (provolatile[0] == PROVOLATILE_IMMUTABLE)
! 			appendPQExpBuffer(q, " IMMUTABLE");
  		else if (provolatile[0] == PROVOLATILE_STABLE)
! 			appendPQExpBuffer(q, " STABLE");
  		else if (provolatile[0] != PROVOLATILE_VOLATILE)
  		{
  			write_msg(NULL, "unrecognized provolatile value for function \"%s\"\n",
--- 6785,6793 ----
  	if (provolatile[0] != PROVOLATILE_VOLATILE)
  	{
  		if (provolatile[0] == PROVOLATILE_IMMUTABLE)
! 			appendPQExpBuffer(q, "    IMMUTABLE\n");
  		else if (provolatile[0] == PROVOLATILE_STABLE)
! 			appendPQExpBuffer(q, "    STABLE\n");
  		else if (provolatile[0] != PROVOLATILE_VOLATILE)
  		{
  			write_msg(NULL, "unrecognized provolatile value for function \"%s\"\n",
***************
*** 6798,6807 ****
  	}
  
  	if (proisstrict[0] == 't')
! 		appendPQExpBuffer(q, " STRICT");
  
  	if (prosecdef[0] == 't')
! 		appendPQExpBuffer(q, " SECURITY DEFINER");
  
  	/*
  	 * COST and ROWS are emitted only if present and not default, so as not to
--- 6797,6806 ----
  	}
  
  	if (proisstrict[0] == 't')
! 		appendPQExpBuffer(q, "    STRICT\n");
  
  	if (prosecdef[0] == 't')
! 		appendPQExpBuffer(q, "    SECURITY DEFINER\n");
  
  	/*
  	 * COST and ROWS are emitted only if present and not default, so as not to
***************
*** 6814,6831 ****
  		{
  			/* default cost is 1 */
  			if (strcmp(procost, "1") != 0)
! 				appendPQExpBuffer(q, " COST %s", procost);
  		}
  		else
  		{
  			/* default cost is 100 */
  			if (strcmp(procost, "100") != 0)
! 				appendPQExpBuffer(q, " COST %s", procost);
  		}
  	}
  	if (proretset[0] == 't' &&
  		strcmp(prorows, "0") != 0 && strcmp(prorows, "1000") != 0)
! 		appendPQExpBuffer(q, " ROWS %s", prorows);
  
  	for (i = 0; i < nconfigitems; i++)
  	{
--- 6813,6830 ----
  		{
  			/* default cost is 1 */
  			if (strcmp(procost, "1") != 0)
! 				appendPQExpBuffer(q, "    COST %s\n", procost);
  		}
  		else
  		{
  			/* default cost is 100 */
  			if (strcmp(procost, "100") != 0)
! 				appendPQExpBuffer(q, "   COST %s\n", procost);
  		}
  	}
  	if (proretset[0] == 't' &&
  		strcmp(prorows, "0") != 0 && strcmp(prorows, "1000") != 0)
! 		appendPQExpBuffer(q, "   ROWS %s\n", prorows);
  
  	for (i = 0; i < nconfigitems; i++)
  	{
***************
*** 6837,6843 ****
  		if (pos == NULL)
  			continue;
  		*pos++ = '\0';
! 		appendPQExpBuffer(q, "\n    SET %s TO ", fmtId(configitem));
  
  		/*
  		 * Some GUC variable names are 'LIST' type and hence must not be
--- 6836,6842 ----
  		if (pos == NULL)
  			continue;
  		*pos++ = '\0';
! 		appendPQExpBuffer(q, "    SET %s TO ", fmtId(configitem));
  
  		/*
  		 * Some GUC variable names are 'LIST' type and hence must not be
***************
*** 6848,6856 ****
  			appendPQExpBuffer(q, "%s", pos);
  		else
  			appendStringLiteralAH(q, pos, fout);
  	}
  
! 	appendPQExpBuffer(q, ";\n");
  
  	ArchiveEntry(fout, finfo->dobj.catId, finfo->dobj.dumpId,
  				 funcsig_tag,
--- 6847,6857 ----
  			appendPQExpBuffer(q, "%s", pos);
  		else
  			appendStringLiteralAH(q, pos, fout);
+ 
+ 		appendPQExpBuffer(q, "\n");
  	}
  
! 	appendPQExpBuffer(q, "    %s;\n", asPart->data);
  
  	ArchiveEntry(fout, finfo->dobj.catId, finfo->dobj.dumpId,
  				 funcsig_tag,
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.