Moving files around, removing ".pl" suffixes, now all start with "sqlt."
Ken Youens-Clark [Tue, 26 Aug 2003 02:29:12 +0000 (02:29 +0000)]
bin/sql_translator.cgi [deleted file]
bin/sqlt [moved from bin/sql_translator.pl with 97% similarity]
bin/sqlt-diagram [moved from bin/sqlt-diagram.pl with 97% similarity]
bin/sqlt-dumper.pl [deleted file]
bin/sqlt-graph.pl [deleted file]

diff --git a/bin/sql_translator.cgi b/bin/sql_translator.cgi
deleted file mode 100755 (executable)
index 072e4ef..0000000
+++ /dev/null
@@ -1,315 +0,0 @@
-#!/usr/bin/perl
-
-# -------------------------------------------------------------------
-# $Id: sql_translator.cgi,v 1.4 2003-08-21 02:47:22 kycl4rk Exp $
-# -------------------------------------------------------------------
-# Copyright (C) 2003 Ken Y. Clark <kclark@cpan.org>
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; version 2.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-# 02111-1307  USA
-# -------------------------------------------------------------------
-
-=head1 NAME
-
-auto-viv.cgi
-
-=head1 DESCRIPTION
-
-A CGI script for transforming SQL schemas into pictures, either GraphViz
-graphs or ER diagrams.  Basically, a simple web-form front-end for the
-myriad options available to "auto-dia.pl" and "auto-graph.pl."
-
-=cut
-
-use strict;
-use CGI;
-use SQL::Translator;
-
-my $q = CGI->new;
-
-eval {
-    if ( $q->param ) {
-        my $t                =  SQL::Translator->new( 
-            from             => $q->param('parser'),
-            producer_args    => {
-                image_type   => $q->param('output_type') || 'png',
-                title        => $q->param('title')       || 'Schema',
-                natural_join => $q->param('natural_join') eq 'no' ? 0 : 1, 
-                join_pk_only => $q->param('natural_join') eq 'pk_only' ? 1 : 0,
-                add_color    => $q->param('add_color'),
-                skip_fields  => $q->param('skip_fields'),
-                show_fk_only => $q->param('show_fk_only'),
-                font_size    => $q->param('font_size'),
-                no_columns   => $q->param('no_columns'),
-                node_shape   => $q->param('node_shape'),
-                layout       => $q->param('layout')      || '',
-                height       => $q->param('height')      || 0,
-                width        => $q->param('width')       || 0,
-                show_fields  => $q->param('show_fields') || 0,
-            },
-        ) or die SQL::Translator->error;
-
-        my $data;
-        if ( $q->param('schema') ) {
-            $data = $q->param('schema');
-        }
-        elsif ( my $fh = $q->upload('schema_file') ) {
-            local $/;
-            $data = <$fh>;
-        }
-        die "No schema provided!\n" unless $data;
-
-        my $producer    = $q->param('producer');
-        my $image_type  = $q->param('output_type') || 'png';
-        my $header_type = 
-            $producer =~ m/(GraphViz|Diagram)/ 
-            ? "image/$image_type"
-            : 'text/plain';
-
-        $t->data( $data );
-        $t->producer( $producer );
-        my $output = $t->translate or die $t->error;
-
-        print $q->header( -type => $header_type ), $output;
-    }
-    else {
-        show_form( $q );
-    }
-};
-
-if ( my $error = $@ ) {
-    print $q->header, $q->start_html('Error'),
-        $q->h1('Error'), $error, $q->end_html;
-}
-
-# -------------------------------------------------------------------
-sub show_form {
-    my $q     = shift;
-    my $title = 'SQL::Translator';
-
-    print $q->header, 
-        $q->start_html( -title => $title ),
-        $q->h1( qq[<a href="http://sqlfairy.sourceforge.net">$title</a>] ),
-        $q->start_form(-enctype => 'multipart/form-data'),
-        $q->table( { -border => 1 },
-            $q->Tr( 
-                $q->td( [
-                    'Paste your schema here:',
-                    $q->textarea( 
-                        -name    => 'schema', 
-                        -rows    => 10, 
-                        -columns => 60,
-                    ),
-                ] ),
-            ),
-            $q->Tr( 
-                $q->td( [
-                    'Or upload your schema file:',
-                    $q->filefield( -name => 'schema_file'),
-                ] ),
-            ),
-            $q->Tr( 
-                $q->td( [
-                    'Parser:',
-                    $q->radio_group(
-                        -name    => 'parser',
-                        -values  => [ 'MySQL', 'PostgreSQL', 'Oracle' ],
-                        -default => 'MySQL',
-                        -rows    => 3,
-                    ),
-                ] ),
-            ),
-            $q->Tr( 
-                $q->td( [
-                    'Producer:',
-                    $q->radio_group(
-                        -name    => 'producer',
-                        -values  => [ qw[ ClassDBI Diagram GraphViz HTML
-                            MySQL Oracle POD PostgreSQL SQLite Sybase XML
-                        ] ],
-                        -default => 'GraphViz',
-                        -rows    => 3,
-                    ),
-                ] ),
-            ),
-            $q->Tr( 
-                $q->td( [
-                    'Title:',
-                    $q->textfield('title'),
-                ] ),
-            ),
-            $q->Tr( 
-                $q->td( [
-                    'Output Type:',
-                    $q->radio_group(
-                        -name    => 'output_type',
-                        -values  => [ 'png', 'jpeg' ],
-                        -default => 'png',
-                        -rows    => 2,
-                    ),
-                ] ),
-            ),
-            $q->Tr( 
-                $q->td( [
-                    'Perform Natural Joins:',
-                    $q->radio_group(
-                        -name       => 'natural_join',
-                        -values     => [ 'no', 'yes', 'pk_only' ],
-                        -labels     => {
-                            no      => 'No',
-                            yes     => 'Yes, on all like-named fields',
-                            pk_only => 'Yes, but only from primary keys'
-                        },
-                        -default    => 'no',
-                        -rows       => 3,
-                    ),
-                ] ),
-            ),
-            $q->Tr( 
-                $q->td( [
-                    'Skip These Fields in Natural Joins:',
-                    $q->textarea(
-                        -name    => 'skip_fields',
-                        -rows    => 3,
-                        -columns => 60,
-                    ),
-                ] ),
-            ),
-            $q->Tr( 
-                $q->td( [
-                    'Color:',
-                    $q->radio_group(
-                        -name    => 'add_color',
-                        -values  => [ 1, 0 ],
-                        -labels  => { 
-                            1    => 'Yes', 
-                            0    => 'No' 
-                        },
-                        -default => 1,
-                        -rows    => 2,
-                    ),
-                ] ),
-            ),
-            $q->Tr( 
-                $q->td( [
-                    'Show Only Foreign Keys *:',
-                    $q->radio_group(
-                        -name    => 'show_fk_only',
-                        -values  => [ 1, 0 ],
-                        -default => 0,
-                        -labels  => {
-                            1    => 'Yes',
-                            0    => 'No',
-                        },
-                        -rows    => 2,
-                    ),
-                ] ),
-            ),
-            $q->Tr( 
-                $q->td( [
-                    'Font Size *:',
-                    $q->radio_group(
-                        -name    => 'font_size',
-                        -values  => [ qw( small medium large ) ],
-                        -default => 'medium',
-                        -rows    => 3,
-                    ),
-                ] ),
-            ),
-            $q->Tr( 
-                $q->td( [
-                    'Number of Columns *:',
-                    $q->textfield('no_columns'),
-                ] ),
-            ),
-            $q->Tr( 
-                $q->td( [
-                    'Layout **:',
-                    $q->radio_group(
-                        -name    => 'layout',
-                        -values  => [ qw( dot neato twopi ) ],
-                        -default => 'dot',
-                        -rows    => 3,
-                    ),
-                ] ),
-            ),
-            $q->Tr( 
-                $q->td( [
-                    'Node Shape **:',
-                    $q->radio_group(
-                        -name    => 'node_shape',
-                        -values  => [ qw( record plaintext ellipse 
-                            circle egg triangle box diamond trapezium 
-                            parallelogram house hexagon octagon 
-                        ) ],
-                        -default => 'record',
-                        -rows    => 13,
-                    ),
-                ] ),
-            ),
-            $q->Tr( 
-                $q->td( [
-                    'Show Field Names **:',
-                    $q->radio_group(
-                        -name    => 'show_fields',
-                        -values  => [ 1, 0 ],
-                        -default => 1,
-                        -labels  => {
-                            1    => 'Yes',
-                            0    => 'No',
-                        },
-                        -rows    => 2,
-                    ),
-                ] ),
-            ),
-            $q->Tr( 
-                $q->td( [
-                    'Height **:',
-                    $q->textfield( -name => 'height', -default => 11 ),
-                ] ),
-            ),
-            $q->Tr( 
-                $q->td( [
-                    'Width **:',
-                    $q->textfield( -name => 'width', -default => 8.5 ),
-                ] ),
-            ),
-            $q->Tr( 
-                $q->td(
-                    { -colspan => 2, -align => 'center' },
-                    $q->submit( 
-                        -name  => 'submit', 
-                        -value => 'Submit',
-                    ),
-                    $q->br,
-                    q[
-                        <small>
-                        * -- Applies to diagram only<br>
-                        ** -- Applies to graph only<br>
-                        </small>
-                    ],
-                ),
-            ),
-        ),
-        $q->end_form,
-        $q->end_html;
-}
-
-=pod
-
-=head1 AUTHOR
-
-Ken Y. Clark E<lt>kclark@cpan.orgE<gt>
-
-=cut
similarity index 97%
rename from bin/sql_translator.pl
rename to bin/sqlt
index 61a761b..8038ac0 100755 (executable)
+++ b/bin/sqlt
@@ -1,7 +1,7 @@
 #!/usr/bin/perl -w
 
 # -------------------------------------------------------------------
-# $Id: sql_translator.pl,v 1.14 2003-08-21 02:47:43 kycl4rk Exp $
+# $Id: sqlt,v 1.1 2003-08-26 02:29:12 kycl4rk Exp $
 # -------------------------------------------------------------------
 # Copyright (C) 2002 Ken Y. Clark <kycl4rk@users.sourceforge.net>,
 #                    darren chamberlain <darren@cpan.org>
@@ -29,7 +29,7 @@ use SQL::Translator;
 use Data::Dumper;
 
 use vars qw( $VERSION );
-$VERSION = sprintf "%d.%02d", q$Revision: 1.14 $ =~ /(\d+)\.(\d+)/;
+$VERSION = sprintf "%d.%02d", q$Revision: 1.1 $ =~ /(\d+)\.(\d+)/;
 
 my $from;             # the original database
 my $to;               # the destination database 
similarity index 97%
rename from bin/sqlt-diagram.pl
rename to bin/sqlt-diagram
index c84d7ee..cfe5f91 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/perl
 
-# $Id: sqlt-diagram.pl,v 1.2 2003-06-16 18:25:36 kycl4rk Exp $
+# $Id: sqlt-diagram,v 1.1 2003-08-26 02:29:12 kycl4rk Exp $
 
 =head1 NAME 
 
@@ -56,7 +56,7 @@ use Getopt::Long;
 use Pod::Usage;
 use SQL::Translator;
 
-my $VERSION = (qw$Revision: 1.2 $)[-1];
+my $VERSION = (qw$Revision: 1.1 $)[-1];
 
 #
 # Get arguments.
diff --git a/bin/sqlt-dumper.pl b/bin/sqlt-dumper.pl
deleted file mode 100755 (executable)
index 14b3555..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-#!/usr/bin/perl
-
-# -------------------------------------------------------------------
-# $Id: sqlt-dumper.pl,v 1.3 2003-08-21 00:29:57 kycl4rk Exp $
-# -------------------------------------------------------------------
-# Copyright (C) 2003 Ken Y. Clark <kclark@cpan.org>
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; version 2.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-# 02111-1307  USA
-# -------------------------------------------------------------------
-
-=head1 NAME
-
-sqlt-dumper.pl - create a dumper script from a schema
-
-=head1 SYNOPSIS
-
-  ./sqlt-dumper.pl -d Oracle [options] schema.sql > dumper.pl
-  ./dumper.pl > data.sql
-
-  Options:
-
-    -h|--help       Show help and exit
-    --add-truncate  Add "TRUNCATE TABLE" statements for each table
-    --skip=t1[,t2]  Skip tables in comma-separated list
-    -u|--user       Database username
-    -p|--password   Database password
-    --dsn           DSN for DBI
-
-=head1 DESCRIPTION
-
-This script uses SQL::Translator to parse the SQL schema and create a
-Perl script that can connect to the database and dump the data as
-INSERT statements a la mysqldump.  If you enable "add-truncate" or
-specify tables to "skip," then the generated dumper script will have
-those hardcoded.  However, these will also be options in the generated
-dumper, so you can wait to specify these options when you dump your
-database.  The database username, password, and DSN can be hardcoded
-into the generated script, or part of the DSN can be intuited from the
-"database" argument.
-
-=cut
-
-use strict;
-use Pod::Usage;
-use Getopt::Long;
-use SQL::Translator;
-
-my ( $help, $db, $add_truncate, $skip, $db_user, $db_pass, $dsn );
-GetOptions(
-    'h|help'        => \$help,
-    'd|f|from|db=s' => \$db,
-    'add-truncate'  => \$add_truncate,
-    'skip:s'        => \$skip,
-    'u|user:s'      => \$db_user,
-    'p|password:s'  => \$db_pass,
-    'dsn:s'         => \$dsn,
-) or pod2usage;
-
-pod2usage(0) if $help;
-pod2usage( 'No database driver specified' ) unless $db;
-$db_user ||= 'username';
-$db_pass ||= 'password';
-$dsn     ||= "dbi:$db:_";
-
-my $file = shift @ARGV or pod2usage( -msg => 'No input file' );
-
-my $t = SQL::Translator->new;
-$t->parser( $db ) or die $t->error, "\n";
-$t->filename( $file ) or die $t->error, "\n";
-
-my %skip = map { $_, 1 } map { s/^\s+|\s+$//; $_ } split (/,/, $skip);
-my $parser = $t->parser or die $t->error;
-$parser->($t, $t->data);
-my $schema = $t->schema;
-my $now    = localtime;
-
-my $out = <<"EOF";
-#!/usr/bin/perl
-
-#
-# Generated $now
-# By sqlt-dumper.pl, part of the SQLFairy project
-# For more info, see http://sqlfairy.sourceforge.net/
-#
-
-use strict;
-use DBI;
-use Getopt::Long;
-
-my ( \$help, \$add_truncate, \$skip );
-GetOptions(
-    'h|help'        => \\\$help,
-    'add-truncate'  => \\\$add_truncate,
-    'skip:s'        => \\\$skip,
-);
-
-if ( \$help ) {
-    print <<"USAGE";
-Usage:
-  \$0 [options]
-
-  Options:
-    -h|--help       Show help and exit
-    --add-truncate  Add "TRUNCATE TABLE" statements
-    --skip=t1[,t2]  Comma-separated list of tables to skip
-
-USAGE
-    exit(0);
-}
-
-my \%skip = map { \$_, 1 } map { s/^\\s+|\\s+\$//; \$_ } split (/,/, \$skip);
-my \$db = DBI->connect('$dsn', '$db_user', '$db_pass');
-
-EOF
-
-for my $table ( $schema->get_tables ) {
-    my $table_name  = $table->name;
-    next if $skip{ $table_name };
-    my ( @field_names, %types );
-    for my $field ( $table->get_fields ) {
-        $types{ $field->name } = $field->data_type =~ m/(char|str|long|text)/
-            ? 'string' : 'number';
-        push @field_names, $field->name;
-    }
-
-    $out .= join('',
-        "#\n# Table: $table_name\n#\n{\n",
-        "    next if \$skip{'$table_name'};\n",
-        "    print \"--\\n-- Data for table '$table_name'\\n--\\n\";\n\n",
-        "    if ( \$add_truncate ) {\n",
-        "        print \"TRUNCATE TABLE $table_name;\\n\";\n",
-        "    }\n\n",
-    );
-
-    my $insert = "INSERT INTO $table_name (". join(', ', @field_names).
-            ') VALUES (';
-
-    if ( $add_truncate ) {
-        $out .= "    print \"TRUNCATE TABLE $table_name;\\n\";\n";
-    }
-
-    $out .= join('',
-        "    my \%types = (\n",
-        join("\n", map { "        $_ => '$types{ $_ }'," } @field_names), 
-        "\n    );\n\n",
-        "    my \$data  = \$db->selectall_arrayref(\n",
-        "        'select ", join(', ', @field_names), " from $table_name',\n",
-        "        { Columns => {} },\n",
-        "    );\n\n",
-        "    for my \$rec ( \@{ \$data } ) {\n",
-        "        my \@vals;\n",
-        "        for my \$fld ( qw[", join(' ', @field_names), "] ) {\n",
-        "            my \$val = \$rec->{ \$fld };\n",
-        "            if ( \$types{ \$fld } eq 'string' ) {\n",
-        "                \$val =~ s/'/\\'/g;\n",
-        "                \$val = defined \$val ? qq['\$val'] : qq[''];\n",
-        "            }\n",
-        "            else {\n",
-        "                \$val = defined \$val ? \$val : 'NULL';\n",
-        "            }\n",
-        "            push \@vals, \$val;\n",
-        "        }\n",
-        "        print \"$insert\", join(', ', \@vals), \");\\n\";\n",
-        "    }\n",
-        "    print \"\\n\";\n",
-        "}\n\n",
-    );
-}
-
-print $out;
diff --git a/bin/sqlt-graph.pl b/bin/sqlt-graph.pl
deleted file mode 100755 (executable)
index 10c94bc..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-#!/usr/bin/perl
-
-# $Id: sqlt-graph.pl,v 1.3 2003-08-21 02:48:04 kycl4rk Exp $
-
-=head1 NAME 
-
-sqlt-graph.pl - Automatically create a graph from a database schema
-
-=head1 SYNOPSIS
-
-  ./sqlt-graph.pl -d|--db=db_parser [options] schema.sql
-
-  Options:
-
-    -l|--layout        Layout schema for GraphViz
-                       ("dot," "neato," "twopi"; default "dot")
-    -n|--node-shape    Shape of the nodes ("record," "plaintext," 
-                       "ellipse," "circle," "egg," "triangle," "box," 
-                       "diamond," "trapezium," "parallelogram," "house," 
-                       "hexagon," "octagon," default "record")
-    -o|--output        Output file name (default STDOUT)
-    -t|--output-type   Output file type ("canon", "text," "ps," "hpgl,"
-                       "pcl," "mif," "pic," "gd," "gd2," "gif," "jpeg,"
-                       "png," "wbmp," "cmap," "ismap," "imap," "vrml,"
-                       "vtx," "mp," "fig," "svg," "plain," default "png")
-    -c|--color         Add colors
-    --no-fields        Don't show field names
-    --height           Image height (in inches, default "11",
-                       set to "0" to undefine)
-    --width            Image width (in inches, default "8.5", 
-                       set to "0" to undefine)
-    --natural-join     Perform natural joins
-    --natural-join-pk  Perform natural joins from primary keys only
-    -s|--skip          Fields to skip in natural joins
-    --debug            Print debugging information
-
-=head1 DESCRIPTION
-
-This script will create a graph of your schema.  Only the database
-driver argument (for SQL::Translator) is required.  If no output file
-name is given, then image will be printed to STDOUT, so you should
-redirect the output into a file.
-
-The default action is to assume the presence of foreign key
-relationships defined via "REFERNCES" or "FOREIGN KEY" constraints on
-the tables.  If you are parsing the schema of a file that does not
-have these, you will find the natural join options helpful.  With
-natural joins, like-named fields will be considered foreign keys.
-This can prove too permissive, however, as you probably don't want a
-field called "name" to be considered a foreign key, so you could
-include it in the "skip" option, and all fields called "name" will be
-excluded from natural joins.  A more efficient method, however, might
-be to simply deduce the foriegn keys from primary keys to other fields
-named the same in other tables.  Use the "natural-join-pk" option
-to acheive this.
-
-If the schema defines foreign keys, then the graph produced will be
-directed showing the direction of the relationship.  If the foreign
-keys are intuited via natural joins, the graph will be undirected.
-
-=cut
-
-use strict;
-use Data::Dumper;
-use Getopt::Long;
-use GraphViz;
-use Pod::Usage;
-use SQL::Translator;
-
-my $VERSION = (qw$Revision: 1.3 $)[-1];
-
-#
-# 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
-);
-
-GetOptions(
-    'd|db=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,
-    'c|color'          => \$add_color,
-    'no-fields'        => \$no_fields,
-    'natural-join'     => \$natural_join,
-    'natural-join-pk'  => \$join_pk_only,
-    's|skip:s'         => \$skip_fields,
-    'debug'            => \$debug,
-    'h|help'           => \$help,
-) or die pod2usage;
-my @files = @ARGV; # the create script(s) for the original db
-
-pod2usage(1) if $help;
-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,
-    },
-) or die SQL::Translator->error;
-
-for my $file (@files) {
-    my $output = $translator->translate( $file ) or die
-                 "Error: " . $translator->error;
-    if ( $out_file ) {
-        print "Image written to '$out_file'.  Done.\n";
-    }
-    else {
-        print $output;
-    }
-}
-
-=pod
-
-=head1 AUTHOR
-
-Ken Y. Clark E<lt>kclark@cpan.orgE<gt>
-
-=cut