Tom Lane wrote:
Andrew Dunstan <and...@dunslane.net> writes:
I do have a solution that wraps when running line length over 80 instead of on every col:

 SELECT sh.shoename, sh.sh_avail, sh.slcolor, sh.slminlen,
    sh.slminlen * un.un_fact AS slminlen_cm, sh.slmaxlen,
    sh.slmaxlen * un.un_fact AS slmaxlen_cm, sh.slunit
   FROM shoe_data sh, unit un
  WHERE sh.slunit = un.un_name;

It's not a huge amount of code.

Well, let's see it?  What do you do with expressions that don't fit?

See attached.

We don't apply the wrapping unless there has been a column printed on the line (except for the SELECT line).

So we can run over the limit on a line, but if we do there's only one column spec. I think that's acceptable.

Maybe we need a couple of extra pg_get_viewdef() variants. One to wrap on some provided line length, one to wrap on every column. psql could use the first, pg_dump could use the second.

pg_dump doesn't use prettyprinting at all, and won't if I have anything
to say about it.  But I could see teaching the psql \d views to pass
along whatever psql thinks the window width is.

                        

OK, but I'd still like to have the only one col per line variant available.

cheers

andrew

Index: src/backend/utils/adt/ruleutils.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/utils/adt/ruleutils.c,v
retrieving revision 1.306
diff -c -r1.306 ruleutils.c
*** src/backend/utils/adt/ruleutils.c	1 Aug 2009 19:59:41 -0000	1.306
--- src/backend/utils/adt/ruleutils.c	26 Aug 2009 23:09:00 -0000
***************
*** 2649,2659 ****
  {
  	StringInfo	buf = context->buf;
  	char	   *sep;
! 	int			colno;
  	ListCell   *l;
  
  	sep = " ";
  	colno = 0;
  	foreach(l, targetList)
  	{
  		TargetEntry *tle = (TargetEntry *) lfirst(l);
--- 2649,2669 ----
  {
  	StringInfo	buf = context->buf;
  	char	   *sep;
! 	int			colno, linecol;
  	ListCell   *l;
+ 	int         save_len;
+ 	char       *line_start;
+ 
+ 	line_start = strrchr(buf->data,'\n');
+ 	if (line_start == NULL)
+ 		line_start = buf->data;
+ 	else
+ 		line_start++;
+ 
  
  	sep = " ";
  	colno = 0;
+ 	linecol = 1;
  	foreach(l, targetList)
  	{
  		TargetEntry *tle = (TargetEntry *) lfirst(l);
***************
*** 2666,2671 ****
--- 2676,2683 ----
  		appendStringInfoString(buf, sep);
  		sep = ", ";
  		colno++;
+ 		linecol++;
+ 		save_len = buf->len;
  
  		/*
  		 * We special-case Var nodes rather than using get_rule_expr. This is
***************
*** 2703,2708 ****
--- 2715,2748 ----
  			if (attname == NULL || strcmp(attname, colname) != 0)
  				appendStringInfo(buf, " AS %s", quote_identifier(colname));
  		}
+ 
+ 		/* handle line overflow */
+ 		if (strlen(line_start) > 80 && linecol > 1 && PRETTY_INDENT(context))
+ 		{
+ 			StringInfoData thiscol;
+ 			
+ 			initStringInfo(&thiscol);
+ 			
+ 			/* save what we just added */
+ 			appendStringInfoString(&thiscol,buf->data + save_len);
+ 
+ 			/* wipe it out from the buffer */
+ 			buf->len = save_len;
+ 			buf->data[save_len] = '\0';
+ 
+ 			/* add a line break and reindent */
+ 			appendContextKeyword(context, "", -PRETTYINDENT_STD, 
+ 								 PRETTYINDENT_STD, PRETTYINDENT_VAR);
+ 
+ 			/* and now put back what we wiped out */
+ 			appendStringInfoString(buf,thiscol.data);
+ 
+ 			/* reset the counters */
+ 			line_start = strrchr(buf->data,'\n') + 1;
+ 			linecol = 0;
+ 
+ 			pfree(thiscol.data);
+ 		}
  	}
  }
  
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to