BioPerl
view release on metacpan or search on metacpan
Bio/DB/GFF/Adaptor/dbi/pg.pm view on Meta::CPAN
}
sub min_bin {
my $self = shift;
return $self->meta('min_bin') || MIN_BIN;
}
sub max_bin {
my $self = shift;
return $self->meta('max_bin') || MAX_BIN;
}
sub straight_join_limit {
my $self = shift;
return $self->meta('straight_join_limit') || STRAIGHT_JOIN_LIMIT;
}
sub _feature_by_name {
my $self = shift;
my ($class,$name,$location,$callback) = @_;
$callback || $self->throw('must provide a callback argument');
my @bin_parts = split /\s*OR/, $self->bin_query($location->[1],$location->[2]) if $location;
my $select = $self->make_features_select_part;
my $from = $self->make_features_from_part(undef,{sparse_groups=>1});
my ($where,@args) = $self->make_features_by_name_where_part($class,$name);
my $join = $self->make_features_join_part;
my $range = $self->pg_make_features_by_range_where_part('overlaps',
{refseq=>$location->[0],
class =>'',
start=>$location->[1],
stop =>$location->[2]}) if $location;
my @temp_args;
my @query_pieces;
my $query;
if (@bin_parts) {
foreach my $bin (@bin_parts) {
my $temp_query = "SELECT $select FROM $from WHERE $join AND $where AND $range AND $bin\n";
push @temp_args, @args;
push @query_pieces, $temp_query;
}
@args = @temp_args;
$query = join("UNION\n", @query_pieces);
} else {
$query = "SELECT $select FROM $from WHERE $where AND $join";
}
my $sth = $self->dbh->do_query($query,@args);
my $count = 0;
while (my @row = $sth->fetchrow_array) {
$callback->(@row);
$count++;
}
$sth->finish;
return $count;
}
sub update_sequences {
my $self = shift;
my $dbh = $self->features_db;
$dbh->do("SELECT setval('public.fdata_fid_seq', max(fid)+1) FROM fdata");
$dbh->do("SELECT setval('public.fattribute_fattribute_id_seq', max(fattribute_id)+1) FROM fattribute");
$dbh->do("SELECT setval('public.fgroup_gid_seq', max(gid)+1) FROM fgroup");
$dbh->do("SELECT setval('public.ftype_ftypeid_seq', max(ftypeid)+1) FROM ftype");
1;
}
=head2 make_features_by_name_where_part
Title : make_features_by_name_where_part
Usage : $db->make_features_by_name_where_part
Function: Overrides a function in Bio::DB::GFF::Adaptor::dbi to insure
that searches will be case insensitive. It creates the SQL
fragment needed to select a feature by its group name & class
Returns : a SQL fragment and bind arguments
Args : see below
Status : Protected
=cut
sub make_features_by_name_where_part {
my $self = shift;
my ($class,$name) = @_;
if ($name !~ /\*/) {
#allows utilization of an index on lower(gname)
return ("fgroup.gclass=? AND lower(fgroup.gname) = lower(?)",$class,$name);
}
else {
$name =~ tr/*/%/;
return ("fgroup.gclass=? AND lower(fgroup.gname) LIKE lower(?)",$class,$name);
}
}
#
# Methods from dbi.pm that need to be overridden to make
# searching for fref case insensitive
#
#
sub get_dna {
my $self = shift;
my ($ref,$start,$stop,$class) = @_;
my ($offset_start,$offset_stop);
my $has_start = defined $start;
my $has_stop = defined $stop;
my $reversed;
if ($has_start && $has_stop && $start > $stop) {
$reversed++;
($start,$stop) = ($stop,$start);
}
# turn start and stop into 0-based offsets
my $cs = $self->dna_chunk_size;
( run in 0.565 second using v1.01-cache-2.11-cpan-39bf76dae61 )