|
3 | 3 | * |
4 | 4 | * Copyright (c) 2000-2008, PostgreSQL Global Development Group |
5 | 5 | * |
6 | | - * $PostgreSQL: pgsql/src/bin/psql/print.c,v 1.103 2008/05/16 18:35:38 tgl Exp $ |
| 6 | + * $PostgreSQL: pgsql/src/bin/psql/print.c,v 1.104 2008/05/17 17:52:14 tgl Exp $ |
7 | 7 | */ |
8 | 8 | #include "postgres_fe.h" |
9 | 9 |
|
@@ -522,7 +522,7 @@ print_aligned_text(const printTableContent *cont, FILE *fout) |
522 | 522 | int rows = cell_count / col_count; |
523 | 523 |
|
524 | 524 | for (i = 0; i < col_count; i++) |
525 | | - width_average[i % col_count] /= rows; |
| 525 | + width_average[i] /= rows; |
526 | 526 | } |
527 | 527 |
|
528 | 528 | /* adjust the total display width based on border style */ |
@@ -645,30 +645,36 @@ print_aligned_text(const printTableContent *cont, FILE *fout) |
645 | 645 | if (!is_pager) |
646 | 646 | { |
647 | 647 | /* scan all cells, find maximum width, compute cell_count */ |
648 | | - for (i = 0, ptr = cont->cells; *ptr; ptr++, i++, cell_count++) |
| 648 | + for (i = 0, ptr = cont->cells; *ptr; ptr++, cell_count++) |
649 | 649 | { |
650 | 650 | int width, |
651 | 651 | nl_lines, |
652 | 652 | bytes_required; |
653 | 653 |
|
654 | 654 | pg_wcssize((unsigned char *) *ptr, strlen(*ptr), encoding, |
655 | 655 | &width, &nl_lines, &bytes_required); |
656 | | - if (opt_numeric_locale && cont->align[i % col_count] == 'r') |
| 656 | + if (opt_numeric_locale && cont->align[i] == 'r') |
657 | 657 | width += additional_numeric_locale_len(*ptr); |
658 | 658 |
|
659 | 659 | /* |
660 | 660 | * A row can have both wrapping and newlines that cause |
661 | 661 | * it to display across multiple lines. We check |
662 | 662 | * for both cases below. |
663 | 663 | */ |
664 | | - if (width > 0 && width_wrap[i] && |
665 | | - (width-1) / width_wrap[i] + nl_lines > extra_row_output_lines) |
666 | | - extra_row_output_lines = (width-1) / width_wrap[i] + nl_lines; |
| 664 | + if (width > 0 && width_wrap[i]) |
| 665 | + { |
| 666 | + unsigned int extra_lines; |
| 667 | + |
| 668 | + extra_lines = (width-1) / width_wrap[i] + nl_lines; |
| 669 | + if (extra_lines > extra_row_output_lines) |
| 670 | + extra_row_output_lines = extra_lines; |
| 671 | + } |
667 | 672 |
|
668 | | - /* If last column, add tallest column height */ |
669 | | - if (i % col_count == col_count - 1) |
| 673 | + /* i is the current column number: increment with wrap */ |
| 674 | + if (++i >= col_count) |
670 | 675 | { |
671 | | - /* Add height of tallest row */ |
| 676 | + i = 0; |
| 677 | + /* At last column of each row, add tallest column height */ |
672 | 678 | extra_output_lines += extra_row_output_lines; |
673 | 679 | extra_row_output_lines = 0; |
674 | 680 | } |
@@ -780,7 +786,7 @@ print_aligned_text(const printTableContent *cont, FILE *fout) |
780 | 786 | col_lineptrs[j], max_nl_lines[j]); |
781 | 787 | curr_nl_line[j] = 0; |
782 | 788 |
|
783 | | - if (opt_numeric_locale && cont->aligns[j % col_count] == 'r') |
| 789 | + if (opt_numeric_locale && cont->aligns[j] == 'r') |
784 | 790 | { |
785 | 791 | char *my_cell; |
786 | 792 |
|
|
0 commit comments