Raw content of BioMart::Configuration::MartDBLocation
# $Id:
#
# BioMart module for BioMart::Configuration::MartDBLocation
#
# You may distribute this module under the same terms as perl itself
# POD documentation - main docs before the code
=head1 NAME
BioMart::Configuration::MartDBLocation
=head1 SYNOPSIS
A Location that represents the configuration for a mart database accessed
directly from the DB server
=head1 DESCRIPTION
=head1 AUTHOR - Damian Smedley
=head1 CONTACT
This module is part of the BioMart project http://www.biomart.org
Questions can be posted to the mart-dev mailing list:
mart-dev@ebi.ac.uk
=head1 METHODS
=cut
package BioMart::Configuration::MartDBLocation;
use base qw(BioMart::Configuration::DBLocation);
use strict;
use warnings;
use Digest::MD5;
=head2 _new
Usage : see Usage for BioMart::Configuration::Location.
Description: creates a new MartDBLocation object which ...
Returntype : BioMart::Configuration::MartDBLocation
Exceptions : none
Caller : general
=cut
sub _new {
my ($self, @param) = @_;
$self->SUPER::_new(@param);
}
#------------------------------------------------------------------------
=head2 getDatasetConfigXML
Usage : my $xml = $configurator->getXML($dataset);
Description: Gets XML directly from the db server
Return type: xml hash
Exceptions :
Caller :
=cut
sub getDatasetConfigXML{
my ($self,$virtualSchema,$dataSetName,$interfaceType,$dsCounter,$noMessage)=@_;
if(!$noMessage)
{
$self->configureMessage($virtualSchema,$dataSetName,"RDBMS",$dsCounter);
}
my $dbh=$self->dbh();
if (!$dbh)
{ $self->openConnection();
$dbh=$self->dbh();
}
# stops AE XML too long bug
$dbh->{'LongTruncOk'} = 1;
$dbh->{'LongReadLen'} = 20000;
my $upperName = uc($dataSetName);
my $interface_count_sql="SELECT count(*) FROM ".
$self->schema.".meta_conf__interface__dm";
my $sth1= $dbh->prepare($interface_count_sql);
my $executed1 = $sth1->execute;
my $interface_count = 0;
if( $executed1 ){
while ( my $tt=$sth1->fetchrow_arrayref){
$interface_count=$tt->[0];
}
}
my $user=$self->martUser;
if ($user eq ""){
$user="default";
}
my $sql;
if ($interface_count > 0){
$sql = "SELECT compressed_xml FROM ".$self->schema."."."meta_conf__xml__dm mc, ".$self->schema."."."meta_conf__user__dm mu, ".$self->schema.".meta_conf__interface__dm mi, ".$self->schema.".meta_conf__dataset__main main WHERE (dataset = \'".$dataSetName."\' OR dataset = \'$upperName\') AND mu.mart_user=\'".$user."\' AND mu.dataset_id_key=main.dataset_id_key AND interface = \'".$interfaceType."\' AND main.dataset_id_key=mc.dataset_id_key AND mc.dataset_id_key=mi.dataset_id_key";
}
else{
$sql = "SELECT compressed_xml FROM ".$self->schema."."."meta_conf__xml__dm mc, ".$self->schema."."."meta_conf__user__dm mu, ".$self->schema.".meta_conf__dataset__main main WHERE (dataset = \'".$dataSetName."\' OR dataset = \'$upperName\') AND mu.mart_user=\'".$user."\' AND mu.dataset_id_key=main.dataset_id_key AND main.dataset_id_key=mc.dataset_id_key";
}
my $sth = $dbh->prepare($sql) || die $dbh->errstr;
eval{
$sth->execute;
};
if($@ || !$sth) {
BioMart::Exception::Configuration->throw("Could not retrieve valid data from Meta Tables. SCHEMA ".$self->schema." DATASET ".$dataSetName.": ".$@);
}
my $row = $sth->fetchrow_arrayref;
my $xml = Compress::Zlib::memGunzip($$row[0]) ;
if (!$xml)
{ BioMart::Exception::Configuration->throw("Could not retrieve valid XML for SCHEMA: ".$self->schema."\tDATASET: $dataSetName");
}
$sth->finish();
$sth1->finish();
$self->dbhDC();
return $xml;
}
sub versionCheck() {
my ($self,$version)=@_;
#my $dbh=$self->dbh();
#unless (defined $dbh) {$self->openConnection(); $dbh=$self->dbh();}
$self->openConnection();
my $dbh=$self->dbh();
my $schema = $self->schema;
my $sql="SELECT count(*) FROM ".$schema.".meta_version__version__main WHERE version = \'$version\'";
my $sth= $dbh->prepare($sql);
my $executed = $sth->execute;
my $tt=$sth->fetchrow_arrayref;
my $count=$tt->[0];
$sth->finish;
$self->dbhDC();
return $count;
}
sub version() {
my $self = shift;
$self->openConnection();
my $dbh=$self->dbh();
my $schema = $self->schema;
my $sql="SELECT version FROM ".$schema.".meta_version__version__main";
my $sth= $dbh->prepare($sql);
my $executed = $sth->execute;
my $tt=$sth->fetchrow_arrayref;
my $version=$tt->[0];
$sth->finish;
$self->dbhDC();
return $version;
}
sub _retrieveDatasetInfo() {
my ($self,$vSchemaName, $virtualSchemaDefault)=@_;
my $dbh=$self->dbh();
if (!$dbh)
{ $self->openConnection();
$dbh=$self->dbh();
}
my $schema = $self->schema;
my $user_count_sql="SELECT count(*) FROM ".$schema.".meta_conf__user__dm";
my $sth1= $dbh->prepare($user_count_sql);
my $executed1 = $sth1->execute;
my $users = 0;
if( $executed1 ){
while ( my $tt=$sth1->fetchrow_arrayref){
$users=$tt->[0];
}
}
my $sql;
my $user=$self->martUser;
if ($user eq ""){
$user="default";
}
# inlcude datasets
my $include_string;
my @include_datasets=split(/\,/,$self->includeDatasets);
if (scalar (@include_datasets)>0){
my $quoted = join ("\','",@include_datasets);
$quoted ="'".$quoted."'";
$include_string = " AND dataset IN (".$quoted.")";
} else {
$include_string="";
}
if ($users >0){
$sql = "SELECT type, dataset, display_name, visible, version, interface, modified
FROM ".$schema.".meta_conf__dataset__main conf,"
.$schema."."."meta_conf__user__dm muser,"
.$schema."."."meta_conf__interface__dm minterface
WHERE type IS NOT NULL
AND conf.dataset_id_key=muser.dataset_id_key
AND conf.dataset_id_key=minterface.dataset_id_key
AND muser.mart_user= \'$user\'";
}
else{
$sql = "SELECT type, dataset, display_name, visible, version, interface, modified
FROM ".$schema.".meta_conf__dataset__main conf,"
.$schema."."."meta_conf__interface__dm minterface
WHERE type IS NOT NULL
AND conf.dataset_id_key=minterface.dataset_id_key";
}
$sql=$sql.$include_string;
$sql .= " ORDER BY conf.dataset_id_key";
my $sth = $dbh->prepare($sql);
unless($sth) {
my $err = $dbh->errstr;
$dbh->disconnect;
warn("\n\nWARNING: Could not fetch Configuration XML for ".
$self->displayName.": $err\nSKIPPING\n\n");
BioMart::Exception::Database->throw("Could not fetch Configuration XML for : ".$self->displayName." $err");
#return;
}
my $executed = $sth->execute;
unless ($executed) {
my $err = $dbh->errstr;
$sth->finish;
$dbh->disconnect;
warn("\n\nWARNING: Could not fetch Configuration XML for :".
$self->displayName." $err\nSKIPPING\n\n");
BioMart::Exception::Database->throw("Could not fetch Configuration XML for : ".$self->displayName." $err");
#return;
}
my @datasets;
my $counter;
my ($type,$dataset,$displayName,$visible,$version,
$interfaces,$comma,$modified);
while (my $tt=$sth->fetchrow_arrayref) {
if (!$dataset || $tt->[1] ne $dataset){
if ($dataset){
my %data = ('type' => $type,
'dataset' => $dataset,
'displayName' => $displayName,
'visible' => $visible,
'version' => $version,
'interfaces' => $interfaces,
'modified' => $modified);
push (@datasets, \%data);
}
$type = $tt->[0];
$dataset = $tt->[1];
$displayName = $tt->[2],
$visible = $tt->[3],
$version = $tt->[4],
$interfaces = $tt->[5];
$modified = $tt->[6];
$comma = ',';
}
else{
$interfaces = $interfaces.$comma.$tt->[5];
}
}
my %data = ('type' => $type,
'dataset' => $dataset,
'displayName' => $displayName,
'visible' => $visible,
'version' => $version,
'interfaces' => $interfaces,
'modified' => $modified);
push (@datasets, \%data);
$self->datasetNumber(scalar @datasets);
$sth->finish;
$sth1->finish;
$self->dbhDC();
return @datasets;
}
1;