]> granicus.if.org Git - postgresql/commitdiff
Handle border = 3 in expanded mode
authorStephen Frost <sfrost@snowman.net>
Fri, 12 Sep 2014 15:24:09 +0000 (11:24 -0400)
committerStephen Frost <sfrost@snowman.net>
Fri, 12 Sep 2014 15:24:36 +0000 (11:24 -0400)
In psql, expanded mode was not being displayed correctly when using
the normal ascii or unicode linestyles and border set to '3'.  Now,
per the documentation, border '3' is really only sensible for HTML
and LaTeX formats, however, that's no excuse for ascii/unicode to
break in that case, and provisions had been made for psql to cleanly
handle this case (and it did, in non-expanded mode).

This was broken when ascii/unicode was initially added a good five
years ago because print_aligned_vertical_line wasn't passed in the
border setting being used by print_aligned_vertical but instead was
given the whole printTableContent.  There really isn't a good reason
for vertical_line to have the entire printTableContent structure, so
just pass in the printTextFormat and border setting (similar to how
this is handled in horizontal_line).

Pointed out by Pavel Stehule, fix by me.

Back-patch to all currently-supported versions.

src/bin/psql/print.c

index b71e5fd4f7fe6227bbef11eff6dbe8c167e44d48..62e43400592554a47b59178d4d2d545f3f14325c 100644 (file)
@@ -1050,16 +1050,15 @@ print_aligned_text(const printTableContent *cont, FILE *fout)
 
 
 static void
-print_aligned_vertical_line(const printTableContent *cont,
+print_aligned_vertical_line(const printTextFormat *format,
+                                                       const unsigned short opt_border,
                                                        unsigned long record,
                                                        unsigned int hwidth,
                                                        unsigned int dwidth,
                                                        printTextRule pos,
                                                        FILE *fout)
 {
-       const printTextFormat *format = get_line_style(cont->opt);
        const printTextLineFormat *lformat = &format->lrule[pos];
-       unsigned short opt_border = cont->opt->border;
        unsigned int i;
        int                     reclen = 0;
 
@@ -1211,11 +1210,11 @@ print_aligned_vertical(const printTableContent *cont, FILE *fout)
                if (i % cont->ncolumns == 0)
                {
                        if (!opt_tuples_only)
-                               print_aligned_vertical_line(cont, record++, hwidth, dwidth,
-                                                                                       pos, fout);
+                               print_aligned_vertical_line(format, opt_border, record++,
+                                                                                       hwidth, dwidth, pos, fout);
                        else if (i != 0 || !cont->opt->start_table || opt_border == 2)
-                               print_aligned_vertical_line(cont, 0, hwidth, dwidth,
-                                                                                       pos, fout);
+                               print_aligned_vertical_line(format, opt_border, 0, hwidth,
+                                                                                       dwidth, pos, fout);
                }
 
                /* Format the header */
@@ -1274,7 +1273,7 @@ print_aligned_vertical(const printTableContent *cont, FILE *fout)
        if (cont->opt->stop_table)
        {
                if (opt_border == 2 && !cancel_pressed)
-                       print_aligned_vertical_line(cont, 0, hwidth, dwidth,
+                       print_aligned_vertical_line(format, opt_border, 0, hwidth, dwidth,
                                                                                PRINT_RULE_BOTTOM, fout);
 
                /* print footers */