3 # -------------------------------------------------------------------
4 # $Id: sqlt-diagram,v 1.3 2004-02-06 17:48:16 kycl4rk Exp $
5 # -------------------------------------------------------------------
6 # Copyright (C) 2002-4 SQLFairy Authors
8 # This program is free software; you can redistribute it and/or
9 # modify it under the terms of the GNU General Public License as
10 # published by the Free Software Foundation; version 2.
12 # This program is distributed in the hope that it will be useful, but
13 # WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 # General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with this program; if not, write to the Free Software
19 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
21 # -------------------------------------------------------------------
25 sqlt-diagram - Automatically create a diagram from a database schema
29 ./sqlt-diagram -d|-f|--from|--db=db_parser [options] schema.sql
33 -o|--output Output file name (default STDOUT)
34 -i|--image Output image type ("png" or "jpeg," default "png")
35 -t|--title Title to give schema
36 -c|--cols Number of columns
37 -n|--no-lines Don't draw lines
38 -f|--font-size Font size ("small," "medium," "large," or "huge,"
41 --show-fk-only Only show fields that act as primary
44 --natural-join Perform natural joins
45 --natural-join-pk Perform natural joins from primary keys only
46 -s|--skip Fields to skip in natural joins
47 --debug Print debugging information
51 This script will create a picture of your schema. Only the database
52 driver argument (for SQL::Translator) is required. If no output file
53 name is given, then image will be printed to STDOUT, so you should
54 redirect the output into a file.
56 The default action is to assume the presence of foreign key
57 relationships defined via "REFERENCES" or "FOREIGN KEY" constraints on
58 the tables. If you are parsing the schema of a file that does not
59 have these, you will find the natural join options helpful. With
60 natural joins, like-named fields will be considered foreign keys.
61 This can prove too permissive, however, as you probably don't want a
62 field called "name" to be considered a foreign key, so you could
63 include it in the "skip" option, and all fields called "name" will be
64 excluded from natural joins. A more efficient method, however, might
65 be to simply deduce the foriegn keys from primary keys to other fields
66 named the same in other tables. Use the "natural-join-pk" option
78 $VERSION = sprintf "%d.%02d", q$Revision: 1.3 $ =~ /(\d+)\.(\d+)/;
84 $out_file, $image_type, $db_driver, $title, $no_columns,
85 $no_lines, $font_size, $add_color, $debug, $show_fk_only,
86 $natural_join, $join_pk_only, $skip_fields, $help
90 'd|db|f|from=s' => \$db_driver,
91 'o|output:s' => \$out_file,
92 'i|image:s' => \$image_type,
93 't|title:s' => \$title,
94 'c|columns:i' => \$no_columns,
95 'n|no-lines' => \$no_lines,
96 'f|font-size:s' => \$font_size,
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,
119 no_columns => $no_columns,
120 no_lines => $no_lines,
121 font_size => $font_size,
122 add_color => $add_color,
123 show_fk_only => $show_fk_only,
124 natural_join => $natural_join,
125 join_pk_only => $join_pk_only,
126 skip_fields => $skip_fields,
128 ) or die SQL::Translator->error;
130 for my $file (@files) {
131 my $output = $translator->translate( $file ) or die
132 "Error: " . $translator->error;
134 print "Image written to '$out_file'. Done.\n";
141 # -------------------------------------------------------------------
147 Ken Y. Clark E<lt>kclark@cpan.orgE<gt>.