From: Ken Youens-Clark Date: Tue, 26 Aug 2003 16:25:34 +0000 (+0000) Subject: Used to be "sql_translator.cgi." X-Git-Tag: v0.04~217 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=45df156a291c6855aab8a50547d3829c3777bbaa;p=dbsrgits%2FSQL-Translator.git Used to be "sql_translator.cgi." --- diff --git a/bin/sqlt.cgi b/bin/sqlt.cgi new file mode 100755 index 0000000..54ebc78 --- /dev/null +++ b/bin/sqlt.cgi @@ -0,0 +1,322 @@ +#!/usr/bin/perl + +# ------------------------------------------------------------------- +# $Id: sqlt.cgi,v 1.1 2003-08-26 16:25:34 kycl4rk Exp $ +# ------------------------------------------------------------------- +# Copyright (C) 2003 Ken Y. Clark +# +# 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.cgi + +=head1 DESCRIPTION + +A CGI front-end for SQL::Translator. + +=cut + +use strict; +use CGI; +use SQL::Translator; + +use vars '$VERSION'; +$VERSION = sprintf "%d.%02d", q$Revision: 1.1 $ =~ /(\d+)\.(\d+)/; + +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[$title] ), + $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[ + + * -- Applies to diagram only
+ ** -- Applies to graph only
+
+ ], + ), + ), + ), + $q->end_form, + $q->end_html; +} + +# ------------------------------------------------------------------- + +=pod + +=head1 AUTHOR + +Ken Y. Clark Ekclark@cpan.orgE + +=head1 SEE ALSO + +perl, SQL::Translator. + +=cut