3 # -------------------------------------------------------------------
4 # Copyright (C) 2002-2009 SQLFairy Authors
6 # This program is free software; you can redistribute it and/or
7 # modify it under the terms of the GNU General Public License as
8 # published by the Free Software Foundation; version 2.
10 # This program is distributed in the hope that it will be useful, but
11 # WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 # General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, write to the Free Software
17 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19 # -------------------------------------------------------------------
23 sqlt-diagram - Automatically create a diagram from a database schema
27 ./sqlt-diagram -d|-f|--from|--db=db_parser [options] schema.sql
31 -o|--output Output file name (default STDOUT)
32 -i|--image Output image type ("png" or "jpeg," default "png")
33 -t|--title Title to give schema
34 -c|--cols Number of columns
35 -n|--no-lines Don't draw lines
36 --font-size Font size ("small," "medium," "large," or "huge,"
38 --gutter Gutter size between tables
40 --show-fk-only Only show fields that act as primary
43 --natural-join Perform natural joins
44 --natural-join-pk Perform natural joins from primary keys only
45 -s|--skip Fields to skip in natural joins
46 --debug Print debugging information
50 This script will create a picture of your schema. Only the database
51 driver argument (for SQL::Translator) is required. If no output file
52 name is given, then image will be printed to STDOUT, so you should
53 redirect the output into a file.
55 The default action is to assume the presence of foreign key
56 relationships defined via "REFERENCES" or "FOREIGN KEY" constraints on
57 the tables. If you are parsing the schema of a file that does not
58 have these, you will find the natural join options helpful. With
59 natural joins, like-named fields will be considered foreign keys.
60 This can prove too permissive, however, as you probably don't want a
61 field called "name" to be considered a foreign key, so you could
62 include it in the "skip" option, and all fields called "name" will be
63 excluded from natural joins. A more efficient method, however, might
64 be to simply deduce the foriegn keys from primary keys to other fields
65 named the same in other tables. Use the "natural-join-pk" option
83 $out_file, $image_type, $db_driver, $title, $no_columns,
84 $no_lines, $font_size, $add_color, $debug, $show_fk_only,
85 $gutter, $natural_join, $join_pk_only, $skip_fields, $help
89 'd|db|f|from=s' => \$db_driver,
90 'o|output:s' => \$out_file,
91 'i|image:s' => \$image_type,
92 't|title:s' => \$title,
93 'c|columns:i' => \$no_columns,
94 'n|no-lines' => \$no_lines,
95 'font-size:s' => \$font_size,
96 'gutter:i' => \$gutter,
97 'color' => \$add_color,
98 'show-fk-only' => \$show_fk_only,
99 'natural-join' => \$natural_join,
100 'natural-join-pk' => \$join_pk_only,
101 's|skip:s' => \$skip_fields,
105 my @files = @ARGV; # the create script(s) for the original db
107 pod2usage(1) if $help;
108 pod2usage( -message => "No db driver specified" ) unless $db_driver;
109 pod2usage( -message => 'No input file' ) unless @files;
111 my $translator = SQL::Translator->new(
114 debug => $debug || 0,
116 out_file => $out_file,
117 image_type => $image_type,
118 gutter => $gutter || 0,
120 no_columns => $no_columns,
121 no_lines => $no_lines,
122 font_size => $font_size,
123 add_color => $add_color,
124 show_fk_only => $show_fk_only,
125 natural_join => $natural_join,
126 join_pk_only => $join_pk_only,
127 skip_fields => $skip_fields,
129 ) or die SQL::Translator->error;
131 for my $file (@files) {
132 my $output = $translator->translate( $file ) or die
133 "Error: " . $translator->error;
135 print "Image written to '$out_file'. Done.\n";
142 # -------------------------------------------------------------------
148 Ken Y. Clark E<lt>kclark@cpan.orgE<gt>.