From: <mjd...@us...> - 2009-11-04 00:20:55
|
Revision: 236 http://treebase.svn.sourceforge.net/treebase/?rev=236&view=rev Author: mjdominus Date: 2009-11-04 00:19:56 +0000 (Wed, 04 Nov 2009) Log Message: ----------- Added special case handling for STUDY_NEXUSFILE lob fields Modified Paths: -------------- trunk/treebase-core/src/main/perl/lib/CIPRES/TreeBase/RecDumper.pm Modified: trunk/treebase-core/src/main/perl/lib/CIPRES/TreeBase/RecDumper.pm =================================================================== --- trunk/treebase-core/src/main/perl/lib/CIPRES/TreeBase/RecDumper.pm 2009-11-02 23:05:22 UTC (rev 235) +++ trunk/treebase-core/src/main/perl/lib/CIPRES/TreeBase/RecDumper.pm 2009-11-04 00:19:56 UTC (rev 236) @@ -1,5 +1,7 @@ package CIPRES::TreeBase::RecDumper; use Carp 'croak'; +use File::Temp qw(tempfile); +use strict; # XXX LOB fields should be removed from fieldlist and handled separately sub new { @@ -49,29 +51,26 @@ and croak("rec: too many items (expected $self->{X})"); @_ < @{$self->{F}} and croak("rec: too few items (expected $self->{X})"); - - @_ = $self->quote_data(@_); my @values; if ( $self->{'N'} ne 'STUDY_NEXUSFILE' ) { - @values = @_; + @values = $self->quote_data(@_); } else { + my ( %record, $dir, $path ); + eval { my @fields = @{$self->{F}}; - my ( $dir, $path ) = ( $self->{'D'} ); - for my $i ( 0 .. $#fields ) { - if ( uc $fields[$i] eq 'ID' ) { - $path = "$dir/".$_[$i]; - } - if ( uc $fields[$i] ne 'NEXUS' ) { - push @values, $_[$i]; - } - else { - open my $nexfh, '>', $path or croak $!; - print $nexfh $_[$i]; - close $nexfh; - push @values, "lo_import('$path')"; - } - } + %record = map { $fields[$_] => $_[$_] } ( 0 .. $#fields ); +# $dir = $self->{'D'} . '/' . $record{STUDY_ID}; +# mkdir $dir if not -d $dir; +# $path = $dir . '/' . $record{FILENAME}; + my ( $fh, $filename ) = tempfile( DIR => $self->{'D'} ); + @values = ( $self->quote_data($record{STUDY_ID}), "lo_import('$filename')", $self->quote_data($record{FILENAME}) ); +# open my $nexfh, '>', $path or croak $!; + print $fh substr( $record{NEXUS}, 1, length($record{NEXUS}) - 2 ); + close $fh; + system('gzip','-9',$filename); + }; + warn 'dir: ', $dir, ' path: ', $path, ' file: ', $record{FILENAME}, ' id: ', $record{STUDY_ID}, ' msg: ', $@ if $@; } my $values = join ", ", @values; my $insert = $self->{'PREFIX'} . $values . $self->{'SUFFIX'}; @@ -81,6 +80,7 @@ # Format metadata into a create statement and return (or write) the result sub dump_create { + my $self = shift; my $create = qq{CREATE TABLE "$self->{'N'}";\n}; return print {$self->{'OUT'}} $create if $self->{'OUT'}; return $create; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |