C<DBIx::Admin::TableInfo> - A wrapper around DBI's table_info

- NAME
- Synopsis
- Description
- Distributions
- Constructor and initialization
- Method: columns($table_name, $by_position)
- Method: `info()`
- Method: `tables()`
- Example code
- Related Modules
- Required Modules
- Changes
- Author
- Copyright

# 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.

# Related Modules

I have written a set of modules - which are still being tested - under the DBIx::Admin::* namespace.

These will be released shortly, but the first release will only be for demonstration purposes.

They are based around the Model-View-Controller pattern.

DBIx::Admin is the Controller, DBIx::Admin::Model is the Model, and yes, DBIx::Admin::View is the Viewer.

They will form the core of myadmin.cgi V 2. See http://savage.net.au/Perl-tutorials.html#tut_35

# 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