X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FTranslator%2FParser%2FxSV.pm;h=d270d6273fd9a3645d877d521e1ad99eb87fef70;hb=8571d1980c9ac71cf8f530cbaba1280c2d90b296;hp=fad98a9eda140b369abc490878f1fb7716da5d18;hpb=f62bd16c3c7e37047c4d55258fee6cb6728013c2;p=dbsrgits%2FSQL-Translator.git diff --git a/lib/SQL/Translator/Parser/xSV.pm b/lib/SQL/Translator/Parser/xSV.pm index fad98a9..d270d62 100644 --- a/lib/SQL/Translator/Parser/xSV.pm +++ b/lib/SQL/Translator/Parser/xSV.pm @@ -1,10 +1,9 @@ package SQL::Translator::Parser::xSV; # ------------------------------------------------------------------- -# $Id: xSV.pm,v 1.10 2003-06-11 03:59:49 kycl4rk Exp $ +# $Id: xSV.pm,v 1.16 2004-02-09 22:23:40 kycl4rk Exp $ # ------------------------------------------------------------------- -# Copyright (C) 2003 Ken Y. Clark , -# darren chamberlain +# 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 @@ -42,6 +41,8 @@ Text::RecordParser manpage for arguments on how to parse the file (e.g., C, C). Other arguments include: +=head1 OPTIONS + =over =item * scan_fields @@ -58,7 +59,7 @@ True by default. =back Field names will automatically be normalized by -C. +C. =cut @@ -66,7 +67,7 @@ C. use strict; use vars qw($VERSION @EXPORT); -$VERSION = sprintf "%d.%02d", q$Revision: 1.10 $ =~ /(\d+)\.(\d+)/; +$VERSION = sprintf "%d.%02d", q$Revision: 1.16 $ =~ /(\d+)\.(\d+)/; use Exporter; use Text::ParseWords qw(quotewords); @@ -89,7 +90,7 @@ sub parse { header_filter => \&normalize_name, ); - $parser->field_filter( sub { $_ = shift; s/^\s+|\s+$//g; $_ } ) + $parser->field_filter( sub { $_ = shift || ''; s/^\s+|\s+$//g; $_ } ) unless defined $args->{'trim_fields'} && $args->{'trim_fields'} == 0; my $schema = $tr->schema; @@ -142,8 +143,9 @@ sub parse { $data =~ /^-?\.\d+$/ ) { $type = 'float'; - my ( $w, $d ) = map { s/,//g; $_ } split( /\./, $data ); - $size = [ length $w, length $d ]; + my ( $w, $d ) = + map { s/,//g; length $_ || 1 } split( /\./, $data ); + $size = [ $w + $d, $d ]; } else { $type = 'char'; @@ -162,10 +164,15 @@ sub parse { } for my $field ( keys %field_info ) { - my $size = $field_info{ $field }{'size'}; + my $size = $field_info{ $field }{'size'} || [ 1 ]; my $data_type = - $field_info{ $field }{'char'} ? 'char' : - $field_info{ $field }{'float'} ? 'float' : 'integer'; + $field_info{ $field }{'char'} ? 'char' : + $field_info{ $field }{'float'} ? 'float' : + $field_info{ $field }{'integer'} ? 'integer' : 'char'; + + if ( $data_type eq 'char' && scalar @$size == 2 ) { + $size = [ $size->[0] + $size->[1] ]; + } my $field = $table->get_field( $field ); $field->size( $size ); @@ -181,13 +188,13 @@ sub parse { # ------------------------------------------------------------------- =pod -=head1 AUTHOR +=head1 AUTHORS Darren Chamberlain Edarren@cpan.orgE, Ken Y. Clark Ekclark@cpan.orgE. =head1 SEE ALSO -Text::RecordParser. +Text::RecordParser, SQL::Translator. =cut