X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FTranslator.pm;h=af23b624b929a9970e13b1f5f13223a4c42f8d0f;hb=0e7580187aea709181804514465931b90f0145cd;hp=89e7e29d0d2db9ec5c07b39cbdea7e5a4b01730d;hpb=da5a1bae10b18456fedc2707f0361274e6c68a17;p=dbsrgits%2FSQL-Translator.git diff --git a/lib/SQL/Translator.pm b/lib/SQL/Translator.pm index 89e7e29..af23b62 100644 --- a/lib/SQL/Translator.pm +++ b/lib/SQL/Translator.pm @@ -1,9 +1,7 @@ package SQL::Translator; # ---------------------------------------------------------------------- -# $Id: Translator.pm,v 1.73 2007-10-24 10:55:45 schiffbruechige Exp $ -# ---------------------------------------------------------------------- -# Copyright (C) 2002-4 The SQLFairy Authors +# Copyright (C) 2002-2009 The 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 @@ -21,24 +19,23 @@ package SQL::Translator; # ------------------------------------------------------------------- use strict; -use vars qw( $VERSION $REVISION $DEFAULT_SUB $DEBUG $ERROR ); +use vars qw( $VERSION $DEFAULT_SUB $DEBUG $ERROR ); use base 'Class::Base'; -require 5.004; +require 5.005; -$VERSION = '0.0899_01'; -$REVISION = sprintf "%d.%02d", q$Revision: 1.73 $ =~ /(\d+)\.(\d+)/; +$VERSION = '0.11009'; $DEBUG = 0 unless defined $DEBUG; $ERROR = ""; use Carp qw(carp); use Data::Dumper; -use Class::Base; use File::Find; use File::Spec::Functions qw(catfile); use File::Basename qw(dirname); use IO::Dir; +use SQL::Translator::Producer; use SQL::Translator::Schema; # ---------------------------------------------------------------------- @@ -125,10 +122,10 @@ sub init { $self->trace( $config->{'trace'} ); $self->validate( $config->{'validate'} ); - - $self->quote_table_names( (defined $config->{'quote_table_names'} + + $self->quote_table_names( (defined $config->{'quote_table_names'} ? $config->{'quote_table_names'} : 1) ); - $self->quote_field_names( (defined $config->{'quote_field_names'} + $self->quote_field_names( (defined $config->{'quote_field_names'} ? $config->{'quote_field_names'} : 1) ); return $self; @@ -321,6 +318,7 @@ sub data { $data = join '', @$data; } elsif (isa($data, 'GLOB')) { + seek ($data, 0, 0) if eof ($data); local $/; $data = <$data>; } @@ -536,8 +534,13 @@ sub translate { # Run producer # Calling wantarray in the eval no work, wrong scope. my $wantarray = wantarray ? 1 : 0; - eval { $wantarray ? @producer_output = $producer->($self) : - $producer_output = $producer->($self) }; + eval { + if ($wantarray) { + @producer_output = $producer->($self); + } else { + $producer_output = $producer->($self); + } + }; if ($@ || !( $producer_output || @producer_output)) { my $err = $@ || $self->error || "no results"; my $msg = "translate: Error with producer '$producer_type': $err"; @@ -618,8 +621,8 @@ sub _args { # ---------------------------------------------------------------------- # Does the get/set work for parser and producer. e.g. -# return $self->_tool({ -# name => 'producer', +# return $self->_tool({ +# name => 'producer', # path => "SQL::Translator::Producer", # default_sub => "produce", # }, @_); @@ -632,7 +635,7 @@ sub _tool { my $path = $args->{path}; my $default_sub = $args->{default_sub}; my $tool = shift; - + # passed an anonymous subroutine reference if (isa($tool, 'CODE')) { $self->{$name} = $tool; @@ -686,7 +689,7 @@ sub _list { my $uctype = ucfirst lc $type; # - # First find all the directories where SQL::Translator + # First find all the directories where SQL::Translator # parsers or producers (the "type") appear to live. # load("SQL::Translator::$uctype") or return (); @@ -700,13 +703,13 @@ sub _list { } # - # Now use File::File::find to look recursively in those + # Now use File::File::find to look recursively in those # directories for all the *.pm files, then present them # with the slashes turned into dashes. # my %found; - find( - sub { + find( + sub { if ( -f && m/\.pm$/ ) { my $mod = $_; $mod =~ s/\.pm$//; @@ -763,7 +766,7 @@ sub load { return $module if $INC{$file}; # Already loaded eval { require $file }; - next if $@ =~ /Can't locate $file in \@INC/; + next if $@ =~ /Can't locate $file in \@INC/; eval { $module->import() } unless $@; return __PACKAGE__->error("Error loading $name as $module : $@") if $@ && $@ !~ /"SQL::Translator::Producer" is not exported/; @@ -1006,7 +1009,7 @@ advantage is gained by passing options to the constructor. =head2 add_drop_table -Toggles whether or not to add "DROP TABLE" statements just before the +Toggles whether or not to add "DROP TABLE" statements just before the create definitions. =head2 quote_table_names @@ -1030,9 +1033,9 @@ The C method is an accessor/mutator, used to retrieve or define what subroutine is called to produce the output. A subroutine defined as a producer will be invoked as a function (I) and passed its container C instance, which it should -call the C method on, to get the C +call the C method on, to get the C generated by the parser. It is expected that the function transform the -schema structure to a string. The C instance is also useful +schema structure to a string. The C instance is also useful for informational purposes; for example, the type of the parser can be retrieved using the C method, and the C and C methods can be called when needed. @@ -1265,39 +1268,8 @@ Returns the version of the SQL::Translator release. =head1 AUTHORS -The following people have contributed to the SQLFairy project: - -=over 4 - -=item * Mark Addison - -=item * Sam Angiuoli - -=item * Dave Cash - -=item * Darren Chamberlain - -=item * Ken Y. Clark - -=item * Allen Day - -=item * Paul Harrington - -=item * Mikey Melillo - -=item * Chris Mungall - -=item * Ross Smith II - -=item * Gudmundur A. Thorisson - -=item * Chris To - -=item * Jason Williams - -=item * Ying Zhang - -=back +See the included AUTHORS file: +L If you would like to contribute to the project, you can send patches to the developers mailing list: @@ -1330,7 +1302,7 @@ Please use L for reporting bugs. =head1 PRAISE -If you find this module useful, please use +If you find this module useful, please use L to rate it. =head1 SEE ALSO