Bio-EnsEMBL
view release on metacpan or search on metacpan
lib/Bio/EnsEMBL/IdMapping/Cache.pm view on Meta::CPAN
}
}
sub check_db_connection {
my $self = shift;
my $dbtype = shift;
my $err = 0;
eval {
my $dba = $self->get_DBAdaptor($dbtype);
$dba->dbc->connect;
};
if ($@) {
$self->logger->warning("Can't connect to $dbtype db: $@\n");
$err++;
} else {
$self->logger->debug("Connection to $dbtype db ok.\n");
$self->{'_db_conn_ok'}->{$dbtype} = 1;
}
return $err;
}
sub check_db_read_permissions {
my $self = shift;
my $dbtype = shift;
# skip this check if db connection failed (this prevents re-throwing
# exceptions).
return 1 unless ($self->{'_db_conn_ok'}->{$dbtype});
my $err = 0;
my %privs = %{ $self->get_db_privs($dbtype) };
unless ($privs{'SELECT'} or $privs{'ALL PRIVILEGES'}) {
$self->logger->warning("User doesn't have read permission on $dbtype db.\n");
$err++;
} else {
$self->logger->debug("Read permission on $dbtype db ok.\n");
}
return $err;
}
sub check_db_write_permissions {
my $self = shift;
my $dbtype = shift;
# skip this check if db connection failed (this prevents re-throwing
# exceptions).
return 1 unless ($self->{'_db_conn_ok'}->{$dbtype});
my $err = 0;
unless ($self->do_upload) {
$self->logger->debug("No uploads, so write permission on $dbtype db not required.\n");
return $err;
}
my %privs = %{ $self->get_db_privs($dbtype) };
unless ($privs{'INSERT'} or $privs{'ALL PRIVILEGES'}) {
$self->logger->warning("User doesn't have write permission on $dbtype db.\n");
$err++;
} else {
$self->logger->debug("Write permission on $dbtype db ok.\n");
}
return $err;
}
sub do_upload {
my $self = shift;
if ($self->conf->param('dry_run') or
! ($self->conf->param('upload_events') or
$self->conf->param('upload_stable_ids') or
$self->conf->param('upload_archive'))) {
return 0;
} else {
return 1;
}
}
sub get_db_privs {
my ( $self, $dbtype ) = @_;
my %privs = ();
my $rs;
# get privileges from mysql db
eval {
my $dbc = $self->get_DBAdaptor($dbtype)->dbc();
my $sql = qq(SHOW GRANTS FOR ) . $dbc->username();
my $sth = $dbc->prepare($sql);
$sth->execute();
$rs = $sth->fetchall_arrayref();
#$sth->finish();
};
if ($@) {
$self->logger->warning(
"Error obtaining privileges from $dbtype db: $@\n");
return {};
}
# parse the output
foreach my $r ( map { $_->[0] } @{$rs} ) {
$r =~ s/GRANT (.*) ON .*/$1/i;
foreach my $p ( split( ',', $r ) ) {
# trim leading and trailing whitespace
$p =~ s/^\s+//;
$p =~ s/\s+$//;
$privs{ uc($p) } = 1;
}
}
return \%privs;
} ## end sub get_db_privs
sub check_empty_tables {
my $self = shift;
my $dbtype = shift;
# skip this check if db connection failed (this prevents re-throwing
# exceptions).
return 1 unless ($self->{'_db_conn_ok'}->{$dbtype});
my $err = 0;
my $c = 0;
if ($self->conf->param('no_check_empty_tables') or !$self->do_upload) {
$self->logger->debug("Won't check for empty stable ID and archive tables in $dbtype db.\n");
return $err;
}
eval {
my @tables =
qw(
gene_stable_id
transcript_stable_id
translation_stable_id
exon_stable_id
stable_id_event
mapping_session
gene_archive
peptide_archive
);
my $dba = $self->get_DBAdaptor($dbtype);
foreach my $table (@tables) {
if ( $table =~ /^([^_]+)_stable_id/ ) {
$table = $1;
if ( $c =
$self->fetch_value_from_db(
$dba,
"SELECT COUNT(*) FROM $table WHERE stable_id IS NOT NULL"
) )
{
$self->logger->warning(
"$table table in $dbtype db has $c stable IDs.\n");
$err++;
}
}
else {
if ( $c =
$self->fetch_value_from_db(
$dba, "SELECT COUNT(*) FROM $table"
) )
{
$self->logger->warning(
"$table table in $dbtype db has $c entries.\n");
$err++;
}
}
} ## end foreach my $table (@tables)
};
if ($@) {
$self->logger->warning(
"Error retrieving stable ID and archive table row counts from $dbtype db: $@\n"
);
$err++;
}
elsif ( !$err ) {
$self->logger->debug(
"All stable ID and archive tables in $dbtype db are empty.\n");
}
return $err;
}
( run in 0.703 second using v1.01-cache-2.11-cpan-b16cb0d3907 )