Database-Abstraction
view release on metacpan or search on metacpan
lib/Database/Abstraction.pm view on Meta::CPAN
close($fin);
$fin = File::Temp->new(SUFFIX => '.csv', UNLINK => 0);
print $fin gunzip_file($slurp_file);
$slurp_file = $fin->filename();
$self->{'temp'} = $slurp_file;
} else {
($fin, $slurp_file) = File::pfopen::pfopen($dir, $dbname, 'psv', '<');
if(defined($fin)) {
# Pipe separated file
$params->{'sep_char'} = '|';
} else {
# CSV file
($fin, $slurp_file) = File::pfopen::pfopen($dir, $dbname, 'csv:db', '<');
}
}
if(my $filename = $self->{'filename'} || $defaults{'filename'}) {
$self->_debug("Looking for $filename in $dir");
$slurp_file = File::Spec->catfile($dir, $filename);
}
if(defined($slurp_file) && (-r $slurp_file)) {
close($fin) if(defined($fin));
my $sep_char = $params->{'sep_char'};
$self->_debug(__LINE__, ' of ', __PACKAGE__, ": slurp_file = $slurp_file, sep_char = $sep_char");
if($params->{'column_names'}) {
$dbh = DBI->connect("dbi:CSV:db_name=$slurp_file", undef, undef,
{
csv_sep_char => $sep_char,
csv_tables => {
$table => {
col_names => $params->{'column_names'},
},
},
f_dir => $dir,
RaiseError => 1,
PrintError => 0
}
);
} else {
$dbh = DBI->connect("dbi:CSV:db_name=$slurp_file", undef, undef, { csv_sep_char => $sep_char, f_dir => $dir, RaiseError => 1 });
}
$dbh->{'RaiseError'} = 1;
$self->_debug("read in $table from CSV $slurp_file");
$dbh->{csv_tables}->{$table} = {
allow_loose_quotes => 1,
blank_is_undef => 1,
empty_is_undef => 1,
binary => 1,
f_file => $slurp_file,
escape_char => '\\',
sep_char => $sep_char,
# Don't do this, causes "Bizarre copy of HASH
# in scalar assignment in error_diag
# RT121127
# auto_diag => 1,
auto_diag => 0,
# Don't do this, it causes "Attempt to free unreferenced scalar"
# callbacks => {
# after_parse => sub {
# my ($csv, @rows) = @_;
# my @rc;
# foreach my $row(@rows) {
# if($row->[0] !~ /^#/) {
# push @rc, $row;
# }
# }
# return @rc;
# }
# }
};
# my %options = (
# allow_loose_quotes => 1,
# blank_is_undef => 1,
# empty_is_undef => 1,
# binary => 1,
# f_file => $slurp_file,
# escape_char => '\\',
# sep_char => $sep_char,
# );
# $dbh->{csv_tables}->{$table} = \%options;
# delete $options{f_file};
# require Text::CSV::Slurp;
# Text::CSV::Slurp->import();
# $self->{'data'} = Text::CSV::Slurp->load(file => $slurp_file, %options);
# Can't slurp when we want to use our own column names as Text::xSV::Slurp has no way to override the names
# FIXME: Text::xSV::Slurp can't cope well with quotes in field contents
if(((-s $slurp_file) <= $max_slurp_size) && !$params->{'column_names'}) {
if((-s $slurp_file) == 0) {
# Empty file
$self->{'data'} = ();
} else {
require Text::xSV::Slurp;
Text::xSV::Slurp->import();
$self->_debug('slurp in');
my $dataref = xsv_slurp(
shape => 'aoh',
text_csv => {
sep_char => $sep_char,
allow_loose_quotes => 1,
blank_is_undef => 1,
empty_is_undef => 1,
binary => 1,
escape_char => '\\',
},
# string => \join('', grep(!/^\s*(#|$)/, <DATA>))
file => $slurp_file
);
# Ignore blank lines or lines starting with # in the CSV file
my @data = grep { $_->{$self->{'id'}} !~ /^\s*#/ } grep { defined($_->{$self->{'id'}}) } @{$dataref};
if($self->{'no_entry'}) {
( run in 2.325 seconds using v1.01-cache-2.11-cpan-483215c6ad5 )