Bio-EnsEMBL
view release on metacpan or search on metacpan
lib/Bio/EnsEMBL/DBSQL/DataFileAdaptor.pm view on Meta::CPAN
$params = [];
}
unshift(@{$params}, $self->db()->species_id());
my $csa = $self->db()->get_CoordSystemAdaptor();
my $aa = $self->db()->get_AnalysisAdaptor();
return $self->dbc()->sql_helper()->execute(-SQL => $sql, -PARAMS => $params, -CALLBACK => sub {
my ($row) = @_;
my ($data_file_id, $coord_system_id, $analysis_id, $name, $version_lock, $absolute, $url, $file_type) = @{$row};
my $hash = {
dbID => $data_file_id,
adaptor => $self,
coord_system => $csa->fetch_by_dbID($coord_system_id),
analysis => $aa->fetch_by_dbID($analysis_id),
name => $name,
version_lock => $version_lock,
absolute => $absolute,
file_type => $file_type,
};
$hash->{url} = $url if $url;
return Bio::EnsEMBL::DataFile->new_fast($hash);
});
}
sub store {
my ($self, $df) = @_;
assert_ref($df, 'Bio::EnsEMBL::DataFile', 'datafile');
if ($df->is_stored($self->db())) {
return $df->dbID();
}
throw 'Analysis is not defined for this data file' if ! defined $df->analysis();
throw 'Coord system is not defined for this data file' if ! defined $df->coord_system();
my $sql = <<'SQL';
INSERT INTO data_file (coord_system_id, analysis_id, name, version_lock, absolute, url, file_type)
VALUES (?,?,?,?,?,?,?)
SQL
my $params = [
[$df->coord_system()->dbID(), SQL_INTEGER],
[$df->analysis()->dbID(), SQL_INTEGER],
[$df->name(), SQL_VARCHAR],
[$df->version_lock(), SQL_INTEGER],
[$df->absolute(), SQL_INTEGER],
[$df->url(), SQL_VARCHAR],
[$df->file_type(), SQL_VARCHAR],
];
$self->dbc()->sql_helper()->execute_update(-SQL => $sql, -PARAMS => $params, -CALLBACK => sub {
my ( $sth, $dbh ) = @_;
$df->dbID($self->last_insert_id());
return;
});
$df->adaptor($self);
return $df->dbID();
}
sub update {
my ($self, $df) = @_;
assert_ref($df, 'Bio::EnsEMBL::DataFile', 'datafile');
if (! $df->is_stored($self->db())) {
$self->store($df);
return;
}
my $sql = <<'SQL';
UPDATE data_file SET coord_system_id =?, analysis_id=?, name=?, version_lock=?, absolute=?, url=?, file_type=?
WHERE data_file_id =?
SQL
my $params = [
[$df->coord_system()->dbID(), SQL_INTEGER],
[$df->analysis()->dbID(), SQL_INTEGER],
[$df->name(), SQL_VARCHAR],
[$df->version_lock(), SQL_INTEGER],
[$df->absolute(), SQL_INTEGER],
[$df->url(), SQL_VARCHAR],
[$df->file_type(), SQL_VARCHAR],
[$df->dbID(), SQL_INTEGER],
];
$self->dbc()->sql_helper()->execute_update(-SQL => $sql, -PARAMS => $params);
return;
}
sub delete {
my ($self, $df) = @_;
assert_ref($df, 'Bio::EnsEMBL::DataFile', 'datafile');
if (! $df->is_stored($self->db())) {
throw "Cannot delete the data file if it has not already been stored in this database";
}
$self->dbc()->sql_helper()->execute_update(
-SQL => 'DELETE from data_file where data_file_id =?',
-PARAMS => [[$df->dbID(), SQL_INTEGER]],
);
return;
}
sub _tables {
my ($self) = @_;
return (
[qw/data_file df/]
);
}
1;
( run in 1.303 second using v1.01-cache-2.11-cpan-f56aa216473 )