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