[Bioperl-l] how to use BioQuery

Hilmar Lapp hlapp at gnf.org
Sun Jun 8 02:44:39 EDT 2003


On Saturday, June 7, 2003, at 07:54  AM, Michael Thon wrote:

> I've set up a bioperldb database and loaded a few sequences with
> annotations.  Now I'm trying to figure out how to perform some basic
> queries using Bio::DB::Query::BioQuery.
>

First off, congratulations. You're moving forward pretty aggressively  
:-)

> I'm trying to write a simple script to return all sequences that have a
> Bio::Annotation::SimpleValue with a tagname of 'interpro'.  I've been
> looking at code in t/query.t included with bioperl-db and at
> documentation in various bioperl modules but I still haven't figured  
> out
> how to use BioQuery objects.

How to use BioQuery is the most undocumented piece of the story.  
t/query.t is probably the single most useful place to get a grasp of  
what the ideas are. It may also be useful to check in the Bio/DB/BioSQL  
directory for adaptors that implement (i.e., override)  
attach_children() and attach_foreign_key_objects() to how to find  
objects by foreign key or by association.

Also, the mapping and translation code in BioQuery.pm is not very  
robust. I had to write it in a crunch and have since never found the  
time to rewrite it such that it becomes at least remotely  
comprehensible. There may be lots of bugs lurking, as it is not really  
tested beyond what t/query.t and the adaptors test.

So far for the disclaimers ... I'd be glad if you take this for a test  
drive, but the road may be bumpy...

>
> The following lines:
>
> my $seqadaptor = $db->get_object_adaptor('Bio::SeqI');
> my $query = Bio::DB::Query::BioQuery->new(
>   '-where' => ["Bio::Annotation::SimpleValue::tagname = interpro"],

You need to quote all values in single quotes. The mapper will not  
quote any values for you. I.e., you need to have

	'-where' => ["Bio::Annotation::SimpleValue::tagname = 'interpro'"],

Note that you can also parameterize it:

	'-where' => ["Bio::Annotation::SimpleValue::tagname = ?"],

and then you would add -values => ["interpro"] to the args you pass to  
find_by_query().

Hope this helps,

	-hilmar

>   '-datacollections'
>           => ["Bio::PrimarySeqI<=>Bio::Annotation::SimpleValue"]);
>
> my $result = $seqadaptor->find_by_query($query);
>
> returns this error:
>
> ------------- EXCEPTION  -------------
> MSG: error while executing query in
> Bio::DB::BioSQL::SeqAdaptor::find_by_query: Unknown column 'interpro'  
> in
> 'where clause'
> STACK Bio::DB::BioSQL::BasePersistenceAdaptor::find_by_query
> /usr/lib/perl5/site_perl/5.8.0/Bio/DB/BioSQL/ 
> BasePersistenceAdaptor.pm:1200
> STACK toplevel bioquery2.pl:26
>
> --------------------------------------
>
> Can anyone provide some pointers about how to perform this type of
> query?
> Thanks
> Mike
>
>
> _______________________________________________
> Bioperl-l mailing list
> Bioperl-l at portal.open-bio.org
> http://portal.open-bio.org/mailman/listinfo/bioperl-l
>
-- 
-------------------------------------------------------------
Hilmar Lapp                            email: lapp at gnf.org
GNF, San Diego, Ca. 92121              phone: +1-858-812-1757
-------------------------------------------------------------



More information about the Bioperl-l mailing list