X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=bin%2Fsqlt.cgi;h=53495cf9ee487e66215cb9c1c1d9a6a333892411;hb=d09e570014d94afbbc67543b0f7392b4bf02048a;hp=54ebc7802eb274c6503182bbf25544db561c9f67;hpb=45df156a291c6855aab8a50547d3829c3777bbaa;p=dbsrgits%2FSQL-Translator.git diff --git a/bin/sqlt.cgi b/bin/sqlt.cgi index 54ebc78..53495cf 100755 --- a/bin/sqlt.cgi +++ b/bin/sqlt.cgi @@ -1,7 +1,7 @@ #!/usr/bin/perl # ------------------------------------------------------------------- -# $Id: sqlt.cgi,v 1.1 2003-08-26 16:25:34 kycl4rk Exp $ +# $Id: sqlt.cgi,v 1.3 2003-09-18 19:11:45 kycl4rk Exp $ # ------------------------------------------------------------------- # Copyright (C) 2003 Ken Y. Clark # @@ -22,45 +22,29 @@ =head1 NAME -sqlt.cgi +sqlt.cgi - CGI front-end for SQL::Translator =head1 DESCRIPTION -A CGI front-end for SQL::Translator. +Place this script in your "cgi-bin" directory and point your browser +to it. This script is meant to be a simple graphical interface to +all the parsers and producers of SQL::Translator. =cut +# ------------------------------------------------------------------- + use strict; use CGI; use SQL::Translator; use vars '$VERSION'; -$VERSION = sprintf "%d.%02d", q$Revision: 1.1 $ =~ /(\d+)\.(\d+)/; +$VERSION = sprintf "%d.%02d", q$Revision: 1.3 $ =~ /(\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'); @@ -72,11 +56,65 @@ eval { 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'; + my $output_type = $producer eq 'Diagram' + ? $q->param('diagram_output_type') + : $producer eq 'GraphViz' + ? $q->param('graphviz_output_type') + : '' + ; + + my $t = SQL::Translator->new( + from => $q->param('parser'), + producer_args => { + add_drop_table => $q->param('add_drop_table'), + output_type => $output_type, + 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, + ttfile => $q->upload('template'), + validate => $q->param('validate'), + emit_empty_tags => $q->param('emit_empty_tags'), + attrib_values => $q->param('attrib_values'), + no_comments => !$q->param('comments'), + }, + parser_args => { + trim_fields => $q->param('trim_fields'), + scan_fields => $q->param('scan_fields'), + field_separator => $q->param('fs'), + record_separator => $q->param('rs'), + }, + ) or die SQL::Translator->error; + + my $image_type = ''; + my $text_type = 'plain'; + if ( $output_type =~ /(gif|png|jpeg)/ ) { + $image_type = $output_type; + } + elsif ( $output_type eq 'svg' ) { + $image_type = 'svg+xml'; + } + elsif ( $output_type =~ /gd/ ) { + $image_type = 'png'; + } + elsif ( $output_type eq 'ps' ) { + $text_type = 'postscript'; + } + elsif ( $producer eq 'HTML' ) { + $text_type = 'html'; + } + + my $header_type = $image_type ? "image/$image_type" : "text/$text_type"; $t->data( $data ); $t->producer( $producer ); @@ -106,18 +144,18 @@ sub show_form { $q->table( { -border => 1 }, $q->Tr( $q->td( [ - 'Paste your schema here:', - $q->textarea( - -name => 'schema', - -rows => 10, - -columns => 60, - ), + 'Upload your schema file:', + $q->filefield( -name => 'schema_file'), ] ), ), $q->Tr( $q->td( [ - 'Or upload your schema file:', - $q->filefield( -name => 'schema_file'), + 'Or paste your schema here:', + $q->textarea( + -name => 'schema', + -rows => 5, + -columns => 60, + ), ] ), ), $q->Tr( @@ -125,7 +163,9 @@ sub show_form { 'Parser:', $q->radio_group( -name => 'parser', - -values => [ 'MySQL', 'PostgreSQL', 'Oracle' ], + -values => [ qw( MySQL PostgreSQL Oracle + Sybase Excel XML-SQLFairy xSV + ) ], -default => 'MySQL', -rows => 3, ), @@ -137,7 +177,8 @@ sub show_form { $q->radio_group( -name => 'producer', -values => [ qw[ ClassDBI Diagram GraphViz HTML - MySQL Oracle POD PostgreSQL SQLite Sybase XML + MySQL Oracle POD PostgreSQL SQLite Sybase + TTSchema XML-SQLFairy ] ], -default => 'GraphViz', -rows => 3, @@ -145,23 +186,102 @@ sub show_form { ] ), ), $q->Tr( + $q->td( + { -colspan => 2, -align => 'center' }, + $q->submit( + -name => 'submit', + -value => 'Submit', + ) + ), + ), + $q->Tr( + $q->th( + { align => 'left', bgcolor => 'lightgrey', colspan => 2 }, + 'General Options:' + ), + ), + $q->Tr( $q->td( [ - 'Title:', - $q->textfield('title'), + 'Validate Schema:', + $q->radio_group( + -name => 'validate', + -values => [ 1, 0 ], + -labels => { + 1 => 'Yes', + 0 => 'No' + }, + -default => 0, + -rows => 2, + ), + ] ), + ), + $q->Tr( + $q->th( + { align => 'left', bgcolor => 'lightgrey', colspan => 2 }, + 'DB Producer Options:' + ), + ), + $q->Tr( + $q->td( [ + 'Add "DROP TABLE" statements:', + $q->radio_group( + -name => 'add_drop_table', + -values => [ 1, 0 ], + -labels => { + 1 => 'Yes', + 0 => 'No' + }, + -default => 0, + -rows => 2, + ), ] ), ), $q->Tr( $q->td( [ - 'Output Type:', + 'Include comments:', $q->radio_group( - -name => 'output_type', - -values => [ 'png', 'jpeg' ], - -default => 'png', + -name => 'comments', + -values => [ 1, 0 ], + -labels => { + 1 => 'Yes', + 0 => 'No' + }, + -default => 1, -rows => 2, ), ] ), ), $q->Tr( + $q->th( + { align => 'left', bgcolor => 'lightgrey', colspan => 2 }, + 'HTML/POD/Diagram Producer Options:' + ), + ), + $q->Tr( + $q->td( [ + 'Title:', + $q->textfield('title'), + ] ), + ), + $q->Tr( + $q->th( + { align => 'left', bgcolor => 'lightgrey', colspan => 2 }, + 'TTSchema Producer Options:' + ), + ), + $q->Tr( + $q->td( [ + 'Template:', + $q->filefield( -name => 'template'), + ] ), + ), + $q->Tr( + $q->th( + { align => 'left', bgcolor => 'lightgrey', colspan => 2 }, + 'Graphical Producer Options' + ), + ), + $q->Tr( $q->td( [ 'Perform Natural Joins:', $q->radio_group( @@ -189,7 +309,22 @@ sub show_form { ), $q->Tr( $q->td( [ - 'Color:', + '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( [ + 'Add Color:', $q->radio_group( -name => 'add_color', -values => [ 1, 0 ], @@ -204,11 +339,11 @@ sub show_form { ), $q->Tr( $q->td( [ - 'Show Only Foreign Keys *:', + 'Show Field Names:', $q->radio_group( - -name => 'show_fk_only', + -name => 'show_fields', -values => [ 1, 0 ], - -default => 0, + -default => 1, -labels => { 1 => 'Yes', 0 => 'No', @@ -218,8 +353,25 @@ sub show_form { ] ), ), $q->Tr( + $q->th( + { align => 'left', bgcolor => 'lightgrey', colspan => 2 }, + 'Diagram Producer Options' + ), + ), + $q->Tr( + $q->td( [ + 'Output Type:', + $q->radio_group( + -name => 'diagram_output_type', + -values => [ 'png', 'jpeg' ], + -default => 'png', + -rows => 2, + ), + ] ), + ), + $q->Tr( $q->td( [ - 'Font Size *:', + 'Font Size:', $q->radio_group( -name => 'font_size', -values => [ qw( small medium large ) ], @@ -230,13 +382,33 @@ sub show_form { ), $q->Tr( $q->td( [ - 'Number of Columns *:', + 'Number of Columns:', $q->textfield('no_columns'), ] ), ), $q->Tr( + $q->th( + { align => 'left', bgcolor => 'lightgrey', colspan => 2 }, + 'GraphViz Producer Options' + ), + ), + $q->Tr( + $q->td( [ + 'Output Type:', + $q->radio_group( + -name => 'graphviz_output_type', + -values => [ qw( canon text ps hpgl pcl mif pic + gd gd2 gif jpeg png wbmp cmap ismap imap + vrml vtx mp fig svg plain + ) ], + -default => 'png', + -rows => 4, + ), + ] ), + ), + $q->Tr( $q->td( [ - 'Layout **:', + 'Layout:', $q->radio_group( -name => 'layout', -values => [ qw( dot neato twopi ) ], @@ -247,7 +419,7 @@ sub show_form { ), $q->Tr( $q->td( [ - 'Node Shape **:', + 'Node Shape:', $q->radio_group( -name => 'node_shape', -values => [ qw( record plaintext ellipse @@ -255,35 +427,104 @@ sub show_form { parallelogram house hexagon octagon ) ], -default => 'record', - -rows => 13, + -rows => 4, ), ] ), ), $q->Tr( $q->td( [ - 'Show Field Names **:', + 'Height:', + $q->textfield( -name => 'height' ), + ] ), + ), + $q->Tr( + $q->td( [ + 'Width:', + $q->textfield( -name => 'width' ), + ] ), + ), + $q->Tr( + $q->th( + { align => 'left', bgcolor => 'lightgrey', colspan => 2 }, + 'XML Producer Options:' + ), + ), + $q->Tr( + $q->td( [ + 'Use attributes for values:', $q->radio_group( - -name => 'show_fields', + -name => 'attrib-values', -values => [ 1, 0 ], - -default => 1, - -labels => { - 1 => 'Yes', - 0 => 'No', + -labels => { + 1 => 'Yes', + 0 => 'No' }, + -default => 0, -rows => 2, ), ] ), ), $q->Tr( $q->td( [ - 'Height **:', - $q->textfield( -name => 'height', -default => 11 ), + 'Emit Empty Tags:', + $q->radio_group( + -name => 'emit-empty-tags', + -values => [ 1, 0 ], + -labels => { + 1 => 'Yes', + 0 => 'No' + }, + -default => 0, + -rows => 2, + ), + ] ), + ), + $q->Tr( + $q->th( + { align => 'left', bgcolor => 'lightgrey', colspan => 2 }, + 'xSV Parser Options' + ), + ), + $q->Tr( + $q->td( [ + 'Field Separator:', + $q->textfield( -name => 'fs' ), ] ), ), $q->Tr( $q->td( [ - 'Width **:', - $q->textfield( -name => 'width', -default => 8.5 ), + 'Record Separator:', + $q->textfield( -name => 'rs' ), + ] ), + ), + $q->Tr( + $q->td( [ + 'Trim Whitespace Around Fields:', + $q->radio_group( + -name => 'trim_fields', + -values => [ 1, 0 ], + -default => 1, + -labels => { + 1 => 'Yes', + 0 => 'No', + }, + -rows => 2, + ), + ] ), + ), + $q->Tr( + $q->td( [ + 'Scan Fields for Data Type:', + $q->radio_group( + -name => 'scan_fields', + -values => [ 1, 0 ], + -default => 1, + -labels => { + 1 => 'Yes', + 0 => 'No', + }, + -rows => 2, + ), ] ), ), $q->Tr( @@ -292,14 +533,7 @@ sub show_form { $q->submit( -name => 'submit', -value => 'Submit', - ), - $q->br, - q[ - - * -- Applies to diagram only
- ** -- Applies to graph only
-
- ], + ) ), ), ),