On Wed, Mar 25, 2015 at 09:12:41AM -0400, Bruce Momjian wrote:
> On Wed, Mar 25, 2015 at 09:37:08PM +0900, Michael Paquier wrote:
> > On Wed, Mar 25, 2015 at 4:59 PM, Bruce Momjian <br...@momjian.us> wrote:
> > > On Wed, Mar 25, 2015 at 02:18:58PM +0900, Michael Paquier wrote:
> > >> > [options="header",cols="<l,<l",frame="none"]
> > >> > |====
> > >> > |5 2.2+^.^ |4 2.2+^.^
> > >> > |2 2.2+^.^ |3 2.2+^.^
> > >> > |====
> > >>
> > >> Hm. This is still incorrect. You should remove options="header" here
> > >> or the first tuple is treated as a header in the case
> > >> non-expanded/tuple-only. Your patch removes correctly the header for
> > >> the expanded/tuple-only case though.
> > >> Regards,
> > >
> > > OK, fixed.  Thanks for the testing.  Patch attached.  New output:
> > 
> > This time things look good from my side. I have played with this patch
> > some time, testing some crazy scenarios and I have not found problems.
> > That's cool stuff, thanks!
> 
> Wow, thanks.  I never would have gotten here without your help.

Slightly updated patch attached and applied.  I moved asciidoc after
HTML in the list, rather than at the end.  Thanks for everyone's hard
work on this.

-- 
  Bruce Momjian  <br...@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + Everyone has their own god. +
diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml
new file mode 100644
index a33e460..1f29615
*** a/doc/src/sgml/ref/psql-ref.sgml
--- b/doc/src/sgml/ref/psql-ref.sgml
*************** lo_import 152801
*** 2090,2096 ****
            <para>
            Sets the output format to one of <literal>unaligned</literal>,
            <literal>aligned</literal>, <literal>wrapped</literal>,
!           <literal>html</literal>,
            <literal>latex</literal> (uses <literal>tabular</literal>),
            <literal>latex-longtable</literal>, or
            <literal>troff-ms</literal>.
--- 2090,2096 ----
            <para>
            Sets the output format to one of <literal>unaligned</literal>,
            <literal>aligned</literal>, <literal>wrapped</literal>,
!           <literal>html</literal>, <literal>asciidoc</literal>,
            <literal>latex</literal> (uses <literal>tabular</literal>),
            <literal>latex-longtable</literal>, or
            <literal>troff-ms</literal>.
*************** lo_import 152801
*** 2119,2125 ****
            </para>
  
            <para>
!           The <literal>html</>, <literal>latex</>,
            <literal>latex-longtable</literal>, and <literal>troff-ms</>
            formats put out tables that are intended to
            be included in documents using the respective mark-up
--- 2119,2125 ----
            </para>
  
            <para>
!           The <literal>html</>, <literal>asciidoc</>, <literal>latex</>,
            <literal>latex-longtable</literal>, and <literal>troff-ms</>
            formats put out tables that are intended to
            be included in documents using the respective mark-up
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
new file mode 100644
index e64c033..916f1c6
*** a/src/bin/psql/command.c
--- b/src/bin/psql/command.c
*************** _align2string(enum printFormat in)
*** 2249,2254 ****
--- 2249,2257 ----
  		case PRINT_HTML:
  			return "html";
  			break;
+ 		case PRINT_ASCIIDOC:
+ 			return "asciidoc";
+ 			break;
  		case PRINT_LATEX:
  			return "latex";
  			break;
*************** do_pset(const char *param, const char *v
*** 2325,2330 ****
--- 2328,2335 ----
  			popt->topt.format = PRINT_WRAPPED;
  		else if (pg_strncasecmp("html", value, vallen) == 0)
  			popt->topt.format = PRINT_HTML;
+ 		else if (pg_strncasecmp("asciidoc", value, vallen) == 0)
+ 			popt->topt.format = PRINT_ASCIIDOC;
  		else if (pg_strncasecmp("latex", value, vallen) == 0)
  			popt->topt.format = PRINT_LATEX;
  		else if (pg_strncasecmp("latex-longtable", value, vallen) == 0)
*************** do_pset(const char *param, const char *v
*** 2333,2339 ****
  			popt->topt.format = PRINT_TROFF_MS;
  		else
  		{
! 			psql_error("\\pset: allowed formats are unaligned, aligned, wrapped, html, latex, troff-ms\n");
  			return false;
  		}
  
--- 2338,2344 ----
  			popt->topt.format = PRINT_TROFF_MS;
  		else
  		{
! 			psql_error("\\pset: allowed formats are unaligned, aligned, wrapped, html, asciidoc, latex, troff-ms\n");
  			return false;
  		}
  
diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c
new file mode 100644
index 2da444b..f58f5e5
*** a/src/bin/psql/help.c
--- b/src/bin/psql/help.c
*************** helpVariables(unsigned short int pager)
*** 351,357 ****
  	fprintf(output, _("  expanded (or x)    toggle expanded output\n"));
  	fprintf(output, _("  fieldsep           field separator for unaligned output (default '|')\n"));
  	fprintf(output, _("  fieldsep_zero      set field separator in unaligned mode to zero\n"));
! 	fprintf(output, _("  format             set output format [unaligned, aligned, wrapped, html, latex, ..]\n"));
  	fprintf(output, _("  footer             enable or disable display of the table footer [on, off]\n"));
  	fprintf(output, _("  linestyle          set the border line drawing style [ascii, old-ascii, unicode]\n"));
  	fprintf(output, _("  null               set the string to be printed in place of a null value\n"));
--- 351,357 ----
  	fprintf(output, _("  expanded (or x)    toggle expanded output\n"));
  	fprintf(output, _("  fieldsep           field separator for unaligned output (default '|')\n"));
  	fprintf(output, _("  fieldsep_zero      set field separator in unaligned mode to zero\n"));
! 	fprintf(output, _("  format             set output format [unaligned, aligned, wrapped, html, asciidoc, ...]\n"));
  	fprintf(output, _("  footer             enable or disable display of the table footer [on, off]\n"));
  	fprintf(output, _("  linestyle          set the border line drawing style [ascii, old-ascii, unicode]\n"));
  	fprintf(output, _("  null               set the string to be printed in place of a null value\n"));
diff --git a/src/bin/psql/print.c b/src/bin/psql/print.c
new file mode 100644
index 9c12dbe..e97b563
*** a/src/bin/psql/print.c
--- b/src/bin/psql/print.c
*************** print_html_vertical(const printTableCont
*** 1879,1884 ****
--- 1879,2105 ----
  
  
  /*************************/
+ /* ASCIIDOC		 */
+ /*************************/
+ 
+ static void
+ asciidoc_escaped_print(const char *in, FILE *fout)
+ {
+ 	const char *p;
+ 	for (p = in; *p; p++)
+ 	{
+ 		switch(*p)
+ 		{
+ 			case '|':
+ 				fputs("\\|", fout);
+ 				break;
+ 			default:
+ 				fputc(*p, fout);
+ 		}
+ 	}
+ }
+ 
+ static void
+ print_asciidoc_text(const printTableContent *cont, FILE *fout)
+ {
+ 	bool		opt_tuples_only = cont->opt->tuples_only;
+ 	unsigned short opt_border = cont->opt->border;
+ 	unsigned int i;
+ 	const char *const * ptr;
+ 
+ 	if (cancel_pressed)
+ 		return;
+ 
+ 	if (cont->opt->start_table)
+ 	{
+ 		/* print table in new paragraph - enforce preliminary new line */
+ 		fputs("\n", fout);
+ 
+ 		/* print title */
+ 		if (!opt_tuples_only && cont->title)
+ 		{
+ 			fputs(".", fout);
+ 			fputs(cont->title, fout);
+ 			fputs("\n", fout);
+ 		}
+ 
+ 		/* print table [] header definition */
+ 		fprintf(fout, "[%scols=\"", !opt_tuples_only ? "options=\"header\"," : "");
+ 		for(i = 0; i < cont->ncolumns; i++)
+ 		{
+ 			if (i != 0)
+ 				fputs(",", fout);
+ 			fprintf(fout, "%s", cont->aligns[(i) % cont->ncolumns] == 'r' ? ">l" : "<l");
+ 		}
+ 		fputs("\"", fout);
+ 		switch (opt_border)
+ 		{
+ 			case 0:
+ 				fputs(",frame=\"none\",grid=\"none\"", fout);
+ 				break;
+ 			case 1:
+ 				fputs(",frame=\"none\"", fout);
+ 				break;
+ 			case 2:
+ 				fputs(",frame=\"all\",grid=\"all\"", fout);
+ 				break;
+ 		}
+ 		fputs("]\n", fout);
+ 		fputs("|====\n", fout);
+ 
+ 		/* print headers */
+ 		if (!opt_tuples_only)
+ 		{
+ 			for (ptr = cont->headers; *ptr; ptr++)
+ 			{
+ 				if (ptr != cont->headers)
+ 					fputs(" ", fout);
+ 				fputs("^l|", fout);
+ 				asciidoc_escaped_print(*ptr, fout);
+ 			}
+ 			fputs("\n", fout);
+ 		}
+ 	}
+ 
+ 	/* print cells */
+ 	for (i = 0, ptr = cont->cells; *ptr; i++, ptr++)
+ 	{
+ 		if (i % cont->ncolumns == 0)
+ 		{
+ 			if (cancel_pressed)
+ 				break;
+ 		}
+ 
+ 		if (i % cont->ncolumns != 0)
+ 			fputs(" ", fout);
+ 		fputs("|", fout);
+ 
+ 		/* protect against needless spaces */
+ 		if ((*ptr)[strspn(*ptr, " \t")] == '\0')
+ 		{
+ 			if ((i + 1) % cont->ncolumns != 0)
+ 				fputs(" ", fout);
+ 		}
+ 		else
+ 			asciidoc_escaped_print(*ptr, fout);
+ 
+ 		if ((i + 1) % cont->ncolumns == 0)
+ 			fputs("\n", fout);
+ 	}
+ 
+ 	fputs("|====\n", fout);
+ 
+ 	if (cont->opt->stop_table)
+ 	{
+ 		printTableFooter *footers = footers_with_default(cont);
+ 
+ 		/* print footers */
+ 		if (!opt_tuples_only && footers != NULL && !cancel_pressed)
+ 		{
+ 			printTableFooter *f;
+ 
+ 			fputs("\n....\n", fout);
+ 			for (f = footers; f; f = f->next)
+ 			{
+ 				fputs(f->data, fout);
+ 				fputs("\n", fout);
+ 			}
+ 			fputs("....\n", fout);
+ 		}
+ 	}
+ }
+ 
+ static void
+ print_asciidoc_vertical(const printTableContent *cont, FILE *fout)
+ {
+ 	bool		opt_tuples_only = cont->opt->tuples_only;
+ 	unsigned short opt_border = cont->opt->border;
+ 	unsigned long record = cont->opt->prior_records + 1;
+ 	unsigned int i;
+ 	const char *const * ptr;
+ 
+ 	if (cancel_pressed)
+ 		return;
+ 
+ 	if (cont->opt->start_table)
+ 	{
+ 		/* print table in new paragraph - enforce preliminary new line */
+ 		fputs("\n", fout);
+ 
+ 		/* print title */
+ 		if (!opt_tuples_only && cont->title)
+ 		{
+ 			fputs(".", fout);
+ 			fputs(cont->title, fout);
+ 			fputs("\n", fout);
+ 		}
+ 
+ 		/* print table [] header definition */
+ 		fputs("[cols=\"h,l\"", fout);
+ 		switch (opt_border)
+ 		{
+ 			case 0:
+ 				fputs(",frame=\"none\",grid=\"none\"", fout);
+ 				break;
+ 			case 1:
+ 				fputs(",frame=\"none\"", fout);
+ 				break;
+ 			case 2:
+ 				fputs(",frame=\"all\",grid=\"all\"", fout);
+ 			break;
+ 		}
+ 		fputs("]\n", fout);
+ 		fputs("|====\n", fout);
+ 	}
+ 
+ 	/* print records */
+ 	for (i = 0, ptr = cont->cells; *ptr; i++, ptr++)
+ 	{
+ 		if (i % cont->ncolumns == 0)
+ 		{
+ 			if (cancel_pressed)
+ 				break;
+ 			if (!opt_tuples_only)
+ 				fprintf(fout,
+ 						"2+^|Record %lu\n",
+ 						record++);
+ 			else
+ 				fputs("2+|\n", fout);
+ 		}
+ 
+ 		fputs("<l|", fout);
+ 		asciidoc_escaped_print(cont->headers[i % cont->ncolumns], fout);
+ 
+ 		fprintf(fout, " %s|", cont->aligns[i % cont->ncolumns] == 'r' ? ">l" : "<l");
+ 		/* is string only whitespace? */
+ 		if ((*ptr)[strspn(*ptr, " \t")] == '\0')
+ 			fputs(" ", fout);
+ 		else
+ 			asciidoc_escaped_print(*ptr, fout);
+ 		fputs("\n", fout);
+ 	}
+ 
+ 	fputs("|====\n", fout);
+ 
+ 	if (cont->opt->stop_table)
+ 	{
+ 		/* print footers */
+ 		if (!opt_tuples_only && cont->footers != NULL && !cancel_pressed)
+ 		{
+ 			printTableFooter *f;
+ 
+ 			fputs("\n....\n", fout);
+ 			for (f = cont->footers; f; f = f->next)
+ 			{
+ 				fputs(f->data, fout);
+ 				fputs("\n", fout);
+ 			}
+ 			fputs("....\n", fout);
+ 		}
+ 	}
+ }
+ 
+ /*************************/
  /* LaTeX				 */
  /*************************/
  
*************** printTable(const printTableContent *cont
*** 2872,2877 ****
--- 3093,3104 ----
  			else
  				print_html_text(cont, fout);
  			break;
+ 		case PRINT_ASCIIDOC:
+ 			if (cont->opt->expanded == 1)
+ 				print_asciidoc_vertical(cont, fout);
+ 			else
+ 				print_asciidoc_text(cont, fout);
+ 			break;
  		case PRINT_LATEX:
  			if (cont->opt->expanded == 1)
  				print_latex_vertical(cont, fout);
diff --git a/src/bin/psql/print.h b/src/bin/psql/print.h
new file mode 100644
index 66cdaf3..322db4d
*** a/src/bin/psql/print.h
--- b/src/bin/psql/print.h
*************** enum printFormat
*** 18,23 ****
--- 18,24 ----
  	PRINT_ALIGNED,
  	PRINT_WRAPPED,
  	PRINT_HTML,
+ 	PRINT_ASCIIDOC,
  	PRINT_LATEX,
  	PRINT_LATEX_LONGTABLE,
  	PRINT_TROFF_MS
diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
new file mode 100644
index e39a07c..dfcb66b
*** a/src/bin/psql/tab-complete.c
--- b/src/bin/psql/tab-complete.c
*************** psql_completion(const char *text, int st
*** 3790,3797 ****
  		if (strcmp(prev_wd, "format") == 0)
  		{
  			static const char *const my_list[] =
! 			{"unaligned", "aligned", "wrapped", "html", "latex",
! 			"troff-ms", NULL};
  
  			COMPLETE_WITH_LIST_CS(my_list);
  		}
--- 3790,3797 ----
  		if (strcmp(prev_wd, "format") == 0)
  		{
  			static const char *const my_list[] =
! 			{"unaligned", "aligned", "wrapped", "html", "asciidoc",
! 			"latex", "latex-longtable", "troff-ms", NULL};
  
  			COMPLETE_WITH_LIST_CS(my_list);
  		}
diff --git a/src/test/regress/expected/psql.out b/src/test/regress/expected/psql.out
new file mode 100644
index a2a2615..6ff9be1
*** a/src/test/regress/expected/psql.out
--- b/src/test/regress/expected/psql.out
*************** execute q;
*** 2126,2128 ****
--- 2126,2334 ----
  +------------------+-------------------+
  
  deallocate q;
+ prepare q as select ' | = | lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&' as " | -- | 012345678 9abc def!*@#&!@(*&*~~_+-=\ \", '11' as "0123456789", 11 as int from generate_series(1,10) as n;
+ \pset format asciidoc
+ \pset expanded off
+ \pset border 0
+ execute q;
+ 
+ [options="header",cols="<l,<l,>l",frame="none",grid="none"]
+ |====
+ ^l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ ^l|0123456789 ^l|int
+ | \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (& |11 |11
+ | \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (& |11 |11
+ | \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (& |11 |11
+ | \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (& |11 |11
+ | \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (& |11 |11
+ | \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (& |11 |11
+ | \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (& |11 |11
+ | \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (& |11 |11
+ | \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (& |11 |11
+ | \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (& |11 |11
+ |====
+ 
+ ....
+ (10 rows)
+ ....
+ \pset border 1
+ execute q;
+ 
+ [options="header",cols="<l,<l,>l",frame="none"]
+ |====
+ ^l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ ^l|0123456789 ^l|int
+ | \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (& |11 |11
+ | \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (& |11 |11
+ | \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (& |11 |11
+ | \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (& |11 |11
+ | \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (& |11 |11
+ | \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (& |11 |11
+ | \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (& |11 |11
+ | \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (& |11 |11
+ | \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (& |11 |11
+ | \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (& |11 |11
+ |====
+ 
+ ....
+ (10 rows)
+ ....
+ \pset border 2
+ execute q;
+ 
+ [options="header",cols="<l,<l,>l",frame="all",grid="all"]
+ |====
+ ^l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ ^l|0123456789 ^l|int
+ | \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (& |11 |11
+ | \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (& |11 |11
+ | \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (& |11 |11
+ | \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (& |11 |11
+ | \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (& |11 |11
+ | \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (& |11 |11
+ | \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (& |11 |11
+ | \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (& |11 |11
+ | \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (& |11 |11
+ | \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (& |11 |11
+ |====
+ 
+ ....
+ (10 rows)
+ ....
+ \pset expanded on
+ \pset border 0
+ execute q;
+ 
+ [cols="h,l",frame="none",grid="none"]
+ |====
+ 2+^|Record 1
+ <l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ <l| \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&
+ <l|0123456789 <l|11
+ <l|int >l|11
+ 2+^|Record 2
+ <l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ <l| \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&
+ <l|0123456789 <l|11
+ <l|int >l|11
+ 2+^|Record 3
+ <l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ <l| \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&
+ <l|0123456789 <l|11
+ <l|int >l|11
+ 2+^|Record 4
+ <l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ <l| \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&
+ <l|0123456789 <l|11
+ <l|int >l|11
+ 2+^|Record 5
+ <l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ <l| \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&
+ <l|0123456789 <l|11
+ <l|int >l|11
+ 2+^|Record 6
+ <l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ <l| \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&
+ <l|0123456789 <l|11
+ <l|int >l|11
+ 2+^|Record 7
+ <l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ <l| \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&
+ <l|0123456789 <l|11
+ <l|int >l|11
+ 2+^|Record 8
+ <l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ <l| \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&
+ <l|0123456789 <l|11
+ <l|int >l|11
+ 2+^|Record 9
+ <l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ <l| \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&
+ <l|0123456789 <l|11
+ <l|int >l|11
+ 2+^|Record 10
+ <l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ <l| \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&
+ <l|0123456789 <l|11
+ <l|int >l|11
+ |====
+ \pset border 1
+ execute q;
+ 
+ [cols="h,l",frame="none"]
+ |====
+ 2+^|Record 1
+ <l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ <l| \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&
+ <l|0123456789 <l|11
+ <l|int >l|11
+ 2+^|Record 2
+ <l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ <l| \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&
+ <l|0123456789 <l|11
+ <l|int >l|11
+ 2+^|Record 3
+ <l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ <l| \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&
+ <l|0123456789 <l|11
+ <l|int >l|11
+ 2+^|Record 4
+ <l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ <l| \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&
+ <l|0123456789 <l|11
+ <l|int >l|11
+ 2+^|Record 5
+ <l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ <l| \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&
+ <l|0123456789 <l|11
+ <l|int >l|11
+ 2+^|Record 6
+ <l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ <l| \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&
+ <l|0123456789 <l|11
+ <l|int >l|11
+ 2+^|Record 7
+ <l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ <l| \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&
+ <l|0123456789 <l|11
+ <l|int >l|11
+ 2+^|Record 8
+ <l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ <l| \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&
+ <l|0123456789 <l|11
+ <l|int >l|11
+ 2+^|Record 9
+ <l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ <l| \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&
+ <l|0123456789 <l|11
+ <l|int >l|11
+ 2+^|Record 10
+ <l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ <l| \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&
+ <l|0123456789 <l|11
+ <l|int >l|11
+ |====
+ \pset border 2
+ execute q;
+ 
+ [cols="h,l",frame="all",grid="all"]
+ |====
+ 2+^|Record 1
+ <l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ <l| \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&
+ <l|0123456789 <l|11
+ <l|int >l|11
+ 2+^|Record 2
+ <l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ <l| \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&
+ <l|0123456789 <l|11
+ <l|int >l|11
+ 2+^|Record 3
+ <l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ <l| \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&
+ <l|0123456789 <l|11
+ <l|int >l|11
+ 2+^|Record 4
+ <l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ <l| \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&
+ <l|0123456789 <l|11
+ <l|int >l|11
+ 2+^|Record 5
+ <l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ <l| \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&
+ <l|0123456789 <l|11
+ <l|int >l|11
+ 2+^|Record 6
+ <l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ <l| \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&
+ <l|0123456789 <l|11
+ <l|int >l|11
+ 2+^|Record 7
+ <l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ <l| \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&
+ <l|0123456789 <l|11
+ <l|int >l|11
+ 2+^|Record 8
+ <l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ <l| \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&
+ <l|0123456789 <l|11
+ <l|int >l|11
+ 2+^|Record 9
+ <l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ <l| \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&
+ <l|0123456789 <l|11
+ <l|int >l|11
+ 2+^|Record 10
+ <l| \| -- \| 012345678 9abc def!*@#&!@(*&*~~_+-=\ \ <l| \| = \| lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&
+ <l|0123456789 <l|11
+ <l|int >l|11
+ |====
+ deallocate q;
diff --git a/src/test/regress/sql/psql.sql b/src/test/regress/sql/psql.sql
new file mode 100644
index 5ccc68f..fa1df8b
*** a/src/test/regress/sql/psql.sql
--- b/src/test/regress/sql/psql.sql
*************** execute q;
*** 276,278 ****
--- 276,303 ----
  execute q;
  
  deallocate q;
+ 
+ prepare q as select ' | = | lkjsafi\\/ /oeu rio)(!@&*#)*(!&@*) \ (&' as " | -- | 012345678 9abc def!*@#&!@(*&*~~_+-=\ \", '11' as "0123456789", 11 as int from generate_series(1,10) as n;
+ 
+ \pset format asciidoc
+ \pset expanded off
+ \pset border 0
+ execute q;
+ 
+ \pset border 1
+ execute q;
+ 
+ \pset border 2
+ execute q;
+ 
+ \pset expanded on
+ \pset border 0
+ execute q;
+ 
+ \pset border 1
+ execute q;
+ 
+ \pset border 2
+ execute q;
+ 
+ deallocate q;
-- 
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