#!/usr/bin/perl
# -------------------------------------------------------------------
-# $Id: sqlt-graph,v 1.2 2004-02-06 17:45:53 kycl4rk Exp $
+# $Id$
# -------------------------------------------------------------------
-# Copyright (C) 2002-4 SQLFairy Authors
+# Copyright (C) 2002-2009 SQLFairy Authors
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
set to "0" to undefine)
--width Image width (in inches, default "8.5",
set to "0" to undefine)
+ --fontsize custom font size for node and edge labels
+ --fontname name of custom font (or full path to font file) for
+ node, edge, and graph labels
+ --nodeattr attribute name and value (in key=val syntax) for
+ nodes; this option may be repeated to specify
+ multiple node attributes
+ --edgeattr same as --nodeattr, but for edge attributes
+ --graphattr same as --nodeattr, but for graph attributes
--natural-join Perform natural joins
--natural-join-pk Perform natural joins from primary keys only
+ --show-datatypes Show datatype of each field
+ --show-sizes Show column sizes for VARCHAR and CHAR fields
+ --show-constraints Show list of constraints for each field
-s|--skip Fields to skip in natural joins
--debug Print debugging information
use SQL::Translator;
use vars '$VERSION';
-$VERSION = sprintf "%d.%02d", q$Revision: 1.2 $ =~ /(\d+)\.(\d+)/;
+$VERSION = '1.99';
#
# Get arguments.
#
my (
$layout, $node_shape, $out_file, $output_type, $db_driver, $add_color,
- $natural_join, $join_pk_only, $skip_fields, $debug, $help, $height,
- $width, $no_fields
+ $natural_join, $join_pk_only, $skip_fields, $show_datatypes,
+ $show_sizes, $show_constraints, $debug, $help, $height, $width,
+ $no_fields, $fontsize, $fontname
);
+# multi-valued options:
+my %edgeattrs = ();
+my %nodeattrs = ();
+my %graphattrs = ();
+
GetOptions(
'd|db|f|from=s' => \$db_driver,
'o|output:s' => \$out_file,
'l|layout:s' => \$layout,
'n|node-shape:s' => \$node_shape,
't|output-type:s' => \$output_type,
- 'height:i' => \$height,
- 'width:i' => \$width,
+ 'height:f' => \$height,
+ 'width:f' => \$width,
+ 'fontsize=i' => \$fontsize,
+ 'fontname=s' => \$fontname,
+ 'nodeattr=s' => \%nodeattrs,
+ 'edgeattr=s' => \%edgeattrs,
+ 'graphattr=s' => \%graphattrs,
'c|color' => \$add_color,
'no-fields' => \$no_fields,
'natural-join' => \$natural_join,
'natural-join-pk' => \$join_pk_only,
's|skip:s' => \$skip_fields,
+ 'show-datatypes' => \$show_datatypes,
+ 'show-sizes' => \$show_sizes,
+ 'show-constraints' => \$show_constraints,
'debug' => \$debug,
'h|help' => \$help,
) or die pod2usage;
pod2usage( -message => "No db driver specified" ) unless $db_driver;
pod2usage( -message => 'No input file' ) unless @files;
-my $translator = SQL::Translator->new(
- from => $db_driver,
- to => 'GraphViz',
- debug => $debug || 0,
- producer_args => {
- out_file => $out_file,
- layout => $layout,
- node_shape => $node_shape,
- output_type => $output_type,
- add_color => $add_color,
- natural_join => $natural_join,
- natural_join_pk => $join_pk_only,
- skip_fields => $skip_fields,
- height => $height || 0,
- width => $width || 0,
- show_fields => $no_fields ? 0 : 1,
+my $translator = SQL::Translator->new(
+ from => $db_driver,
+ to => 'GraphViz',
+ debug => $debug || 0,
+ producer_args => {
+ out_file => $out_file,
+ layout => $layout,
+ node_shape => $node_shape,
+ output_type => $output_type,
+ add_color => $add_color,
+ natural_join => $natural_join,
+ natural_join_pk => $join_pk_only,
+ skip_fields => $skip_fields,
+ show_datatypes => $show_datatypes,
+ show_sizes => $show_sizes,
+ show_constraints => $show_constraints,
+ height => $height || 0,
+ width => $width || 0,
+ fontsize => $fontsize,
+ fontname => $fontname,
+ nodeattrs => \%nodeattrs,
+ edgeattrs => \%edgeattrs,
+ graphattrs => \%graphattrs,
+ show_fields => $no_fields ? 0 : 1,
},
) or die SQL::Translator->error;