I don't think it belongs in the DBI distribution.

Tim.

On Thu, Feb 19, 2004 at 11:49:08AM +0100, Lubomir Host wrote:
> Hi!
> 
> I'm working on database plugin for editor vim. I need print data fetched
> from database to stdout. I write method DBI::st::dump_data(). This peace
> of code follows. This code can be found (with little modification) also
> on website:
> 
>    http://platon.sk/cvs/cvs.php/vimconfig/vim/modules/database-client.vim
> 
> Output produced by this method look like output from standard MySQL
> client: (output from executed SQL command 'SHOW DATABASES')
> 
> +----------+
> | Database |
> +----------+
> | mysql    |
> | system   |
> | test     |
> +----------+
> 
> Can be this method included into DBI Perl module?
> 
> Have a nice day, Lubomir Host.
> 
> 
> -----------------------------------%<-----------------------------------
>       package DBI::st;
> 
>       # fetch and print data from _executed_ DBI statement handler
>       sub dump_data ($)
>       { # {{{
>               my $sth = shift;
> 
>               my $numFields     = $sth->{'NUM_OF_FIELDS'};
>               my $column_names  = $sth->{'NAME'};
>               my $column_sizes  = $sth->{'mysql_max_length'};
>               my $column_is_num = $sth->{'mysql_is_num'};
> 
>               # build column name's line
>               my $header_names = "";
>               foreach (my $i = 0; $i < $numFields; $i++) {
>                       # numeric columns have smaller length as column name, 
> overwrite ...
>                       $$column_sizes[$i] = $$column_sizes[$i] > 
> length($$column_names[$i])
>                               ? $$column_sizes[$i]
>                               : ($$column_is_num[$i] ? -1 : 1) * 
> length($$column_names[$i]); # WARN: negative length! - used for right aligment of 
> numbers
>                       $header_names .= sprintf("%s%s", $i ? " | " : "| ", 
> $$column_names[$i] . " " x ($$column_sizes[$i] - length($$column_names[$i])));
>               }
>               $header_names .= " |\n";
> 
>               # build header separator
>               my $separator = "";
>               foreach (my $i = 0; $i < $numFields; $i++) {
>                       $separator .= "+" . ("-" x (abs($$column_sizes[$i]) + 2));
>               }
>               $separator .= "+\n"; # the end
> 
>               # print header
>               print $separator;
>               print $header_names;
>               print $separator;
> 
>               # print data
>               while (my @row = $sth->fetchrow_array()) {
>                       my $line = "";
>                       foreach (my $i = 0; $i < $numFields; $i++) {
>                               $line .= sprintf("%s%s", $i ? " | " : "| ",
>                                       $$column_sizes[$i] > 0 # usage of negative 
> length
>                                               ? $row[$i] . " " x ($$column_sizes[$i] 
> - length($row[$i]))
>                                               : " " x (- $$column_sizes[$i] - 
> length($row[$i])) . $row[$i]
>                               );
>                       }
>                       print "$line |\n";
>               }
> 
>               # print footer
>               print $separator;
> 
>       } # }}}
> -----------------------------------%<-----------------------------------
> 
> -- 
> Lubomir Host 'rajo' <rajo AT platon.sk>        ICQ #:  257322664
> Platon Software Development Group              http://platon.sk/
> http://www.gnu.org/philosophy/no-word-attachments.html

Reply via email to