X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FTranslator%2FParser%2FxSV.pm;h=838f22c3da752599e68598ca11cc2df9017c1af9;hb=782b5a43519d2713171767f74a544fe9892542ea;hp=0bb80d7071ff7d8ec6a3e0d95e4e9a13dc35c214;hpb=2008ecf3023884f4c9c3d1c41497d669b23da611;p=dbsrgits%2FSQL-Translator.git diff --git a/lib/SQL/Translator/Parser/xSV.pm b/lib/SQL/Translator/Parser/xSV.pm index 0bb80d7..838f22c 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.9 2003-06-06 00:05:44 kycl4rk Exp $ +# $Id$ # ------------------------------------------------------------------- -# Copyright (C) 2003 Ken Y. Clark , -# darren chamberlain +# Copyright (C) 2002-2009 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.9 $ =~ /(\d+)\.(\d+)/; +$VERSION = '1.99'; use Exporter; use Text::ParseWords qw(quotewords); @@ -89,20 +90,9 @@ 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; - # - # Create skeleton structure, mostly empty. - # - my $parsed = { - table1 => { - type => undef, - indices => [ { } ], - fields => { }, - }, - }; - my $schema = $tr->schema; my $table = $schema->add_table( name => 'table1' ); @@ -113,24 +103,6 @@ sub parse { my @field_names = $parser->field_list; for ( my $i = 0; $i < @field_names; $i++ ) { - $parsed->{'table1'}{'fields'}{ $field_names[$i] } = { - type => 'field', - order => $i, - name => $field_names[$i], - - # Default datatype is "char" - data_type => 'char', - - # default size is 8bits; something more reasonable? - size => [ 255 ], - null => 1, - default => '', - is_auto_inc => undef, - - # field field is the primary key - is_primary_key => ($i == 0) ? 1 : undef, - }; - my $field = $table->add_field( name => $field_names[$i], data_type => 'char', @@ -171,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'; @@ -191,15 +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'; - - $parsed->{'table1'}{'fields'}{ $field }{'size'} = - $field_info{ $field }{'size'}; + $field_info{ $field }{'char'} ? 'char' : + $field_info{ $field }{'float'} ? 'float' : + $field_info{ $field }{'integer'} ? 'integer' : 'char'; - $parsed->{'table1'}{'fields'}{ $field }{'data_type'} = $data_type; + if ( $data_type eq 'char' && scalar @$size == 2 ) { + $size = [ $size->[0] + $size->[1] ]; + } my $field = $table->get_field( $field ); $field->size( $size ); @@ -207,16 +180,7 @@ sub parse { } } - # - # Field 0 is primary key, by default, so add an index - # - for ( $parsed->{'table1'}->{'indices'}->[0] ) { - $_->{'type'} = 'primary_key'; - $_->{'name'} = undef; - $_->{'fields'} = [ $field_names[0] ]; - } - - return $parsed; + return 1; } 1; @@ -224,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