++ed by:
KENTNL PWBENNETT

2 PAUSE user(s)
1 non-PAUSE user(s).

Ron Savage

NAME

GraphViz2::DBI - Visualize a database schema as a graph

Synopsis

        #!/usr/bin/env perl

        use strict;
        use warnings;

        use DBI;

        use GraphViz2;
        use GraphViz2::DBI;

        use Log::Handler;

        # ---------------

        exit 0 if (! $ENV{DBI_DSN});

        my($logger) = Log::Handler -> new;

        $logger -> add
                (
                 screen =>
                 {
                         maxlevel       => 'debug',
                         message_layout => '%m',
                         minlevel       => 'error',
                 }
                );

        my($graph) = GraphViz2 -> new
                (
                 edge   => {color => 'grey'},
                 global => {directed => 1},
                 graph  => {rankdir => 'TB'},
                 logger => $logger,
                 node   => {color => 'blue', shape => 'oval'},
                );
        my($attr)              = {};
        $$attr{sqlite_unicode} = 1 if ($ENV{DBI_DSN} =~ /SQLite/i);
        my($dbh)               = DBI -> connect($ENV{DBI_DSN}, $ENV{DBI_USER}, $ENV{DBI_PASS}, $attr);

        $dbh -> do('PRAGMA foreign_keys = ON') if ($ENV{DBI_DSN} =~ /SQLite/i);

        my($g) = GraphViz2::DBI -> new(dbh => $dbh, graph => $graph);

        $g -> create(name => '');

        my($format)      = shift || 'svg';
        my($output_file) = shift || File::Spec -> catfile('html', "dbi.schema.$format");

        $graph -> run(format => $format, output_file => $output_file);

See scripts/dbi.schema.pl ("Scripts Shipped with this Module" in GraphViz2).

Description

Takes a database handle, and graphs the schema.

You can write the result in any format supported by Graphviz.

Here is the list of output formats.

Distributions

This module is available as a Unix-style distro (*.tgz).

See http://savage.net.au/Perl-modules/html/installing-a-module.html for help on unpacking and installing distros.

Installation

Install GraphViz2 as you would for any Perl module:

Run:

        cpanm GraphViz2

or run:

        sudo cpan GraphViz2

or unpack the distro, and then either:

        perl Build.PL
        ./Build
        ./Build test
        sudo ./Build install

or:

        perl Makefile.PL
        make (or dmake or nmake)
        make test
        make install

Constructor and Initialization

Calling new()

new() is called as my($obj) = GraphViz2::DBI -> new(k1 => v1, k2 => v2, ...).

It returns a new object of type GraphViz2::DBI.

Key-value pairs accepted in the parameter list:

o dbh => $dbh

This options specifies the database handle to use.

This key is mandatory.

o graph => $graphviz_object

This option specifies the GraphViz2 object to use. This allows you to configure it as desired.

The default is GraphViz2 -> new. The default attributes are the same as in the synopsis, above, except for the graph label of course.

This key is optional.

Methods

create(exclude => [], include => [], name => $name)

Creates the graph, which is accessible via the graph() method, or via the graph object you passed to new().

Returns $self to allow method chaining.

Parameters:

o exclude

An optional arrayref of table names to exclude.

If none are listed for exclusion, all tables are included.

o include

An optional arrayref of table names to include.

If none are listed for inclusion, all tables are included.

o name

$name is the string which will be placed in the root node of the tree. It may be omitted, in which case the root node is omitted.

graph()

Returns the graph object, either the one supplied to new() or the one created during the call to new().

FAQ

Does GraphViz2::DBI work with MySQL/MariaDB databases?

Yes. But see these warnings when using MySQL/MariaDB.

I'm currently using MariaDB V 5.5.38.

Does GraphViz2::DBI work with SQLite databases?

Yes. As of V 2.07, this module uses SQLite's "pragma foreign_key_list($table_name)" to emulate DBI's $dbh -> foreign_key_info(...).

What is returned by SQLite's "pragma foreign_key_list($table_name)"?

        Fields returned are:
        0: COUNT   (0, 1, ...)
        1: KEY_SEQ (0, or column # (1, 2, ...) within multi-column key)
        2: FKTABLE_NAME
        3: PKCOLUMN_NAME
        4: FKCOLUMN_NAME
        5: UPDATE_RULE
        6: DELETE_RULE
        7: 'NONE' (Constant string)

Are any sample scripts shipped with this module?

Yes. See "FAQ" in GraphViz2 and "Scripts Shipped with this Module" in GraphViz2.

Thanks

Many thanks are due to the people who chose to make Graphviz Open Source.

And thanks to Leon Brocard, who wrote GraphViz, and kindly gave me co-maint of the module.

Version Numbers

Version numbers < 1.00 represent development versions. From 1.00 up, they are production versions.

Machine-Readable Change Log

The file CHANGES was converted into Changelog.ini by Module::Metadata::Changes.

Support

Email the author, or log a bug on RT:

https://rt.cpan.org/Public/Dist/Display.html?Name=GraphViz2.

Author

GraphViz2 was written by Ron Savage <ron@savage.net.au> in 2011.

Home page: http://savage.net.au/index.html.

Copyright

Australian copyright (c) 2011, Ron Savage.

        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



Hosting generously
sponsored by Bytemark