package SQL::Translator::Producer::HTML;
-# -------------------------------------------------------------------
-# $Id: HTML.pm,v 1.11 2004-02-09 23:02:15 kycl4rk Exp $
-# -------------------------------------------------------------------
-# Copyright (C) 2002-4 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
-# 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
-# -------------------------------------------------------------------
-
use strict;
+use warnings;
use Data::Dumper;
-use vars qw($VERSION $NOWRAP $NOLINKTABLE $NAME);
-$VERSION = sprintf "%d.%02d", q$Revision: 1.11 $ =~ /(\d+)\.(\d+)/;
-$NAME = join ', ', __PACKAGE__, $VERSION;
-$NOWRAP = 0 unless defined $NOWRAP;
-$NOLINKTABLE = 0 unless defined $NOLINKTABLE;
+our $VERSION = '1.59';
+our $NAME = __PACKAGE__;
+our $NOWRAP = 0 unless defined $NOWRAP;
+our $NOLINKTABLE = 0 unless defined $NOLINKTABLE;
# Emit XHTML by default
$CGI::XHTML = $CGI::XHTML = 42;
import CGI::Pretty;
CGI::Pretty->new }
: do { require CGI;
- import CGI;
+ import CGI;
CGI->new };
my ($table, @table_names);
-title => $title,
%stylesheet,
-meta => { generator => $NAME },
- });
+ }),
$q->h1({ -class => 'SchemaDescription' }, $title),
- $q->a({ -name => 'top' }),
$q->hr;
}
- @table_names = grep { length $_->name } $schema->get_tables;
+ @table_names = grep { length $_->name } $schema->get_tables;
if ($linktable) {
# Generate top menu, with links to full table information
$count = sprintf "%d table%s", $count, $count == 1 ? '' : 's';
# Leading table of links
- push @html,
+ push @html,
$q->comment("Table listing ($count)"),
- $q->start_table({ -width => '100%', -class => 'LinkTable' }),
+ $q->a({ -name => 'top' }),
+ $q->start_table({ -width => '100%', -class => 'LinkTable'}),
# XXX This needs to be colspan="$#{$table->fields}" class="LinkTableHeader"
$q->Tr(
),
);
- for my $table (sort @table_names) {
+ for my $table (@table_names) {
my $table_name = $table->name;
- push @html,
+ push @html,
$q->comment("Start link to table '$table_name'"),
$q->Tr({ -class => 'LinkTableRow' },
$q->td({ -class => 'LinkTableCell' },
my $table_name = $table->name or next;
my @fields = $table->get_fields or next;
push @html,
- $q->comment("Starting table '$table_name'");
+ $q->comment("Starting table '$table_name'"),
+ $q->a({ -name => $table_name }),
$q->table({ -class => 'TableHeader', -width => '100%' },
$q->Tr({ -class => 'TableHeaderRow' },
$q->td({ -class => 'TableHeaderCell' }, $q->h3($table_name)),
# Fields
#
push @html,
- $q->start_table,
+ $q->start_table({ -border => 1 }),
$q->Tr(
$q->th({ -class => 'FieldHeader' },
- [
- 'Field Name',
- 'Data Type',
- 'Size',
- 'Default Value',
- 'Other',
- 'Foreign Key'
+ [
+ 'Field Name',
+ 'Data Type',
+ 'Size',
+ 'Default Value',
+ 'Other',
+ 'Foreign Key'
]
- )
+ )
);
+ my $i = 0;
for my $field ( @fields ) {
my $name = $field->name || '';
$name = qq[<a name="$table_name-$name">$name</a>];
my $data_type = $field->data_type || '';
my $size = defined $field->size ? $field->size : '';
- my $default = defined $field->default_value
+ my $default = defined $field->default_value
? $field->default_value : '';
my $comment = $field->comments || '';
my $fk = '';
my $c = $field->foreign_key_reference;
my $ref_table = $c->reference_table || '';
my $ref_field = ($c->reference_fields)[0] || '';
- $fk =
+ $fk =
qq[<a href="#$ref_table-$ref_field">$ref_table.$ref_field</a>];
}
push @other, 'UNIQUE' if $field->is_unique;
push @other, 'NOT NULL' unless $field->is_nullable;
push @other, $comment if $comment;
+ my $class = $i++ % 2 ? 'even' : 'odd';
push @html,
$q->Tr(
+ { -class => "tr-$class" },
$q->td({ -class => "FieldCellName" }, $name),
$q->td({ -class => "FieldCellType" }, $data_type),
$q->td({ -class => "FieldCellSize" }, $size),
# Indices
#
if ( my @indices = $table->get_indices ) {
- push @html,
+ push @html,
$q->h3('Indices'),
$q->start_table({ -border => 1 }),
$q->Tr({ -class => 'IndexRow' },
- $q->th([ 'Name', 'Fields' ])
+ $q->th([ 'Name', 'Fields' ])
);
for my $index ( @indices ) {
push @html, $q->end_table;
}
+ #
+ # Constraints
+ #
+ my @constraints =
+ grep { $_->type ne PRIMARY_KEY } $table->get_constraints;
+ if ( @constraints ) {
+ push @html,
+ $q->h3('Constraints'),
+ $q->start_table({ -border => 1 }),
+ $q->Tr({ -class => 'IndexRow' },
+ $q->th([ 'Type', 'Fields' ])
+ );
+
+ for my $c ( @constraints ) {
+ my $type = $c->type || '';
+ my $fields = join( ', ', $c->fields ) || '';
+
+ push @html,
+ $q->Tr({ -class => 'IndexCell' },
+ $q->td( [ $type, $fields ] )
+ );
+ }
+
+ push @html, $q->end_table;
+ }
+
push @html, $q->hr;
}
+ my $sqlt_version = $t->version;
if ($wrap) {
push @html,
qq[Created by <a href="http://sqlfairy.sourceforge.net">],
- qq[SQL::Translator</a>],
+ qq[SQL::Translator $sqlt_version</a>],
$q->end_html;
}
=head1 AUTHORS
-Ken Y. Clark E<lt>kclark@cpan.orgE<gt>,
+Ken Youens-Clark E<lt>kclark@cpan.orgE<gt>,
Darren Chamberlain E<lt>darren@cpan.orgE<gt>.
=cut