NAME
DBIx::Admin::TableInfo
- A wrapper around DBI's table_info() and column_info()
Synopsis
use DBIx::Admin::TableInfo;
my($dbh) = DBI -> connect
(
'DBI:mysql:mids:127.0.0.1', 'root', 'pass',
{
AutoCommit => 1,
PrintError => 0,
RaiseError => 1,
ShowErrorStatement => 1,
}
);
my($admin) = DBIx::Admin::TableInfo -> new(dbh => $dbh);
my($info) = $admin -> info();
for my $table_name (@{$admin -> tables()})
{
print "Table: $table_name\n";
print "Table attributes\n";
for (sort keys %{$$info{$table_name}{'attributes'} })
{
print "$_: $$info{$table_name}{'attributes'}{$_}\n";
}
print "\n";
for my $column_name (@{$admin -> columns($table_name)})
{
print "Column: $column_name\n";
print "Column attributes\n";
for (sort keys %{$$info{$table_name}{'columns'}{$column_name} })
{
print "$_: $$info{$table_name}{'columns'}{$column_name}{$_}\n";
}
print "\n";
}
print "\n";
}
Description
DBIx::Admin::TableInfo
is a pure Perl module.
It is a wrapper around the DBI methods table_info() and column_info().
Distributions
This module is available both as a Unix-style distro (*.tgz) and an ActiveState-style distro (*.ppd). The latter is shipped in a *.zip file.
See http://savage.net.au/Perl-modules.html for details.
See http://savage.net.au/Perl-modules/html/installing-a-module.html for help on unpacking and installing each type of distro.
Constructor and initialization
new(...) returns a DBIx::Admin::TableInfo
object.
This is the class's contructor.
Usage: DBIx::Admin::TableInfo -> new().
This method takes a set of parameters. Only the dbh parameter is mandatory.
For each parameter you wish to use, call new as new(param_1 => value_1, ...).
- column_catalog
-
This is the value passed in as the catalog parameter to column_info(catalog, schema...).
The default value is undef.
undef was chosen because it given the best results with MySQL. The MySQL driver DBD::mysql V 2.9002 has a bug in it, in that it aborts if an empty string is used here, even though an empty string is used for the catalog parameter to table_info().
This parameter is optional.
- column_schema
-
This is the value passed in as the schema parameter to column_info(catalog, schema...).
The default value is undef.
See above for comments about undef.
This parameter is optional.
- dbh
-
This is a database handle.
This parameter is mandatory.
- table_catalog
-
This is the value passed in as the catalog parameter to table_info(catalog, schema...).
The default value is '' (the empty string).
See above for comments about empty strings.
This parameter is optional.
- table_schema
-
This is the value passed in as the schema parameter to table_info(catalog, schema...).
The default value is '' (the empty string).
See above for comments about empty strings.
This parameter is optional.
Method: columns($table_name, $by_position)
Returns an array ref of column names.
By default they are sorted by name.
However, if you pass in a true value for $by_position, they are sorted by the column attribute ORDINAL_POSITION.
Method: info()
Returns a hash ref of all available data.
The structure of this hash is described next:
- First level: The keys are the names of the tables
-
my($info) = $obj -> info(); my(@table_name) = sort keys %$info;
I use singular names for my arrays, hence @table_name rather than @table_names.
- Second level: The keys are 'attributes' and 'columns'
-
my($table_attributes) = $$info{$table_name}{'attributes'};
This is a hash ref of the table's attributes.
my($columns) = $$info{$table_name}{'columns'};
This is a hash ref of the table's columns.
- Third level: Table attributes
-
while ( ($name, $value) = each(%$table_attributes) ) { Use... }
For the attributes of the tables, there are no more levels in the hash ref.
- Third level: The keys are the names of the columns.
-
my(@column_name) = sort keys %$columns;
- Fourth level: Column attributes
-
for $column_name (@column_name) { while ( ($name, $value) = each(%{$columns{$column_name} }) ) { Use... } }
Method: tables()
Returns an array ref of table names.
They are sorted by name.
Example code
See the examples/ directory in the distro.
There are 2 demo programs:
- test-admin-info.cgi
-
It outputs all possible info in HTML.
- test-admin-info.pl
-
It outputs all possible info in text.
Tested Database Formats
I have used the program in the synopsis to read databases in these formats:
- MySQL V 4.0
- MS Access V 2
-
Yes, some businesses are still running V 2 as of July, 2004.
- MS Access V 2002
It's important to note that in each case the only parameter that needed to be passed to new()
was dbh.
Related Modules
I have written a set of modules - which are still being tested - under the DBIx::Admin::* namespace.
They will form the core of myadmin.cgi V 2. See http://savage.net.au/Perl-tutorials.html#tut_41
Required Modules
Carp.
Changes
See Changes.txt.
Author
DBIx::Admin::TableInfo
was written by Ron Savage <ron@savage.net.au> in 2004.
Home page: http://savage.net.au/index.html
Copyright
Australian copyright (c) 2004, Ron Savage. All rights reserved.
All Programs of mine are 'OSI Certified Open Source Software';
you can redistribute them and/or modify them under the terms of
The Artistic License, a copy of which is available at:
http://www.opensource.org/licenses/index.html