Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit5adf98a

Browse files
committed
Add psql '\pset format wrapped' mode to wrap output to screen width, or
file/pipe output too if \pset columns' is set.Bryce Nesbitt
1 parenteb915ca commit5adf98a

File tree

6 files changed

+445
-198
lines changed

6 files changed

+445
-198
lines changed

‎doc/src/sgml/ref/psql-ref.sgml

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<!--
2-
$PostgreSQL: pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.202 2008/05/0800:27:57 momjian Exp $
2+
$PostgreSQL: pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.203 2008/05/0817:04:26 momjian Exp $
33
PostgreSQL documentation
44
-->
55

@@ -1514,7 +1514,8 @@ lo_import 152801
15141514
<listitem>
15151515
<para>
15161516
Sets the output format to one of <literal>unaligned</literal>,
1517-
<literal>aligned</literal>, <literal>html</literal>,
1517+
<literal>aligned</literal>, <literal>wrapped</literal>,
1518+
<literal>html</literal>,
15181519
<literal>latex</literal>, or <literal>troff-ms</literal>.
15191520
Unique abbreviations are allowed. (That would mean one letter
15201521
is enough.)
@@ -1526,8 +1527,21 @@ lo_import 152801
15261527
is intended to create output that might be intended to be read
15271528
in by other programs (tab-separated, comma-separated).
15281529
<quote>Aligned</quote> mode is the standard, human-readable,
1529-
nicely formatted text output that is default. The
1530-
<quote><acronym>HTML</acronym></quote> and
1530+
nicely formatted text output that is default.
1531+
</para>
1532+
1533+
<para>
1534+
<quote>Wrapped</quote> is like <literal>aligned</> but wraps
1535+
output to the specified width. If <literal>\pset columns</> is
1536+
zero (the default), <literal>wrapped</> mode only affects screen
1537+
output and wrapped width is controlled by the environment
1538+
variable <envar>COLUMNS</> or the detected screen width. If
1539+
<literal>\pset columns</> is set to a non-zero value, all output
1540+
is wrapped, including file and pipe output.
1541+
</para>
1542+
1543+
<para>
1544+
The <quote><acronym>HTML</acronym></quote> and
15311545
<quote>LaTeX</quote> modes put out tables that are intended to
15321546
be included in documents using the respective mark-up
15331547
language. They are not complete documents! (This might not be
@@ -1537,6 +1551,17 @@ lo_import 152801
15371551
</listitem>
15381552
</varlistentry>
15391553

1554+
<varlistentry>
1555+
<term><literal>columns</literal></term>
1556+
<listitem>
1557+
<para>
1558+
Controls the target width for the <literal>wrapped</> format.
1559+
Zero (the default) causes the <literal>wrapped</> format to
1560+
affect only screen output.
1561+
</para>
1562+
</listitem>
1563+
</varlistentry>
1564+
15401565
<varlistentry>
15411566
<term><literal>border</literal></term>
15421567
<listitem>
@@ -2706,6 +2731,18 @@ $endif
27062731
<title>Environment</title>
27072732

27082733
<variablelist>
2734+
2735+
<varlistentry>
2736+
<term><envar>COLUMNS</envar></term>
2737+
2738+
<listitem>
2739+
<para>
2740+
Used for the <literal>wrapped</> output format if
2741+
<literal>\pset columns</> is zero.
2742+
</para>
2743+
</listitem>
2744+
</varlistentry>
2745+
27092746
<varlistentry>
27102747
<term><envar>PAGER</envar></term>
27112748

‎src/bin/psql/command.c

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
*
44
* Copyright (c) 2000-2008, PostgreSQL Global Development Group
55
*
6-
* $PostgreSQL: pgsql/src/bin/psql/command.c,v 1.187 2008/05/02 09:27:50 petere Exp $
6+
* $PostgreSQL: pgsql/src/bin/psql/command.c,v 1.188 2008/05/08 17:04:26 momjian Exp $
77
*/
88
#include"postgres_fe.h"
99
#include"command.h"
@@ -1502,6 +1502,9 @@ _align2string(enum printFormat in)
15021502
casePRINT_ALIGNED:
15031503
return"aligned";
15041504
break;
1505+
casePRINT_WRAPPED:
1506+
return"wrapped";
1507+
break;
15051508
casePRINT_HTML:
15061509
return"html";
15071510
break;
@@ -1535,6 +1538,8 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet)
15351538
popt->topt.format=PRINT_UNALIGNED;
15361539
elseif (pg_strncasecmp("aligned",value,vallen)==0)
15371540
popt->topt.format=PRINT_ALIGNED;
1541+
elseif (pg_strncasecmp("wrapped",value,vallen)==0)
1542+
popt->topt.format=PRINT_WRAPPED;
15381543
elseif (pg_strncasecmp("html",value,vallen)==0)
15391544
popt->topt.format=PRINT_HTML;
15401545
elseif (pg_strncasecmp("latex",value,vallen)==0)
@@ -1543,7 +1548,7 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet)
15431548
popt->topt.format=PRINT_TROFF_MS;
15441549
else
15451550
{
1546-
psql_error("\\pset: allowed formats are unaligned, aligned, html, latex, troff-ms\n");
1551+
psql_error("\\pset: allowed formats are unaligned, aligned,wrapped,html, latex, troff-ms\n");
15471552
return false;
15481553
}
15491554

@@ -1724,6 +1729,16 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet)
17241729
}
17251730
}
17261731

1732+
/* set border style/width */
1733+
elseif (strcmp(param,"columns")==0)
1734+
{
1735+
if (value)
1736+
popt->topt.columns=atoi(value);
1737+
1738+
if (!quiet)
1739+
printf(_("Target width for \"wrapped\" format is %d.\n"),popt->topt.columns);
1740+
}
1741+
17271742
else
17281743
{
17291744
psql_error("\\pset: unknown option: %s\n",param);

‎src/bin/psql/mbprint.c

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
*
44
* Copyright (c) 2000-2008, PostgreSQL Global Development Group
55
*
6-
* $PostgreSQL: pgsql/src/bin/psql/mbprint.c,v 1.30 2008/04/16 18:18:00 momjian Exp $
6+
* $PostgreSQL: pgsql/src/bin/psql/mbprint.c,v 1.31 2008/05/08 17:04:26 momjian Exp $
77
*
88
* XXX this file does not really belong in psql/. Perhaps move to libpq?
99
* It also seems that the mbvalidate function is redundant with existing
@@ -204,8 +204,8 @@ pg_wcswidth(const unsigned char *pwcs, size_t len, int encoding)
204204
/*
205205
* pg_wcssize takes the given string in the given encoding and returns three
206206
* values:
207-
* result_width: Width in displaycharacter of longest line in string
208-
* result_height: Number oflines in display output
207+
* result_width: Width in displaycharacters of the longest line in string
208+
* result_height: Number ofnewlines in display output
209209
* result_format_size: Number of bytes required to store formatted representation of string
210210
*/
211211
int
@@ -279,9 +279,14 @@ pg_wcssize(unsigned char *pwcs, size_t len, int encoding, int *result_width,
279279
returnwidth;
280280
}
281281

282+
/*
283+
* Filter out unprintable characters, companion to wcs_size.
284+
* Break input into lines based on \n. lineptr[i].ptr == NULL
285+
*indicates the end of the array.
286+
*/
282287
void
283288
pg_wcsformat(unsignedchar*pwcs,size_tlen,intencoding,
284-
structlineptr*lines,intcount)
289+
structlineptr*lines,intcount)
285290
{
286291
intw,
287292
chlen=0;
@@ -307,6 +312,7 @@ pg_wcsformat(unsigned char *pwcs, size_t len, int encoding,
307312
if (count==0)
308313
exit(1);/* Screwup */
309314

315+
/* make next line point to remaining memory */
310316
lines->ptr=ptr;
311317
}
312318
elseif (*pwcs=='\r')/* Linefeed */
@@ -353,12 +359,13 @@ pg_wcsformat(unsigned char *pwcs, size_t len, int encoding,
353359
}
354360
len-=chlen;
355361
}
356-
*ptr++='\0';
357362
lines->width=linewidth;
358-
lines++;
359-
count--;
360-
if (count>0)
361-
lines->ptr=NULL;
363+
*ptr++='\0';/* Terminate formatted string */
364+
365+
if (count==0)
366+
exit(1);/* Screwup */
367+
368+
(lines+1)->ptr=NULL;/* terminate line array */
362369
}
363370

364371
unsignedchar*

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp