[BioSQL-l] Adding qualifers to features on a stored sequence

Hilmar Lapp hlapp@gnf.org
Mon, 21 Oct 2002 12:07:29 -0700


I think I have an idea what may be going on. The insert statements being generated is fine, and them failing is fine too. The problem seems to be that the ontology terms for feature source and key aren't being looked up upon update. This is a bug. I'll look into it and add a test for it. Thanks for reporting. (The temporary work-around that I sent earlier should still get around the problem.)

	-hilmar

> -----Original Message-----
> From: Tim Henderson [mailto:tjh@alodar.com]
> Sent: Saturday, October 19, 2002 11:21 PM
> To: biosql-l@open-bio.org
> Subject: [BioSQL-l] Adding qualifers to features on a stored sequence
> 
> 
> I've got a sequence stored in a mysql based BioSQL database, 
> and I want 
> to add a qualifier to one of the features on it.
> 
> By looking at the code in bioperl-db/t/seqfeature.t I was 
> able to figure 
> out how to add a new feature to an existing sequence; however, when I 
> tried to do a similar thing to add a new qualifier to an existing 
> feature, I got an error. What I tried was this:
> 
> # Assume these exist
> my $pseq;       # Sequence of interest, fetched from the database.
> my $cds;        # CDS feature on $pseq, got by searching
>                  # $pseq->top_SeqFeatures().
> 
> $cds->add_tag_value('foo', 'This is an added qualifier');
> $cds->store;
> 
> 
> I've included the debug output from my script below. The 
> problem seems 
> to be that insert statements are being generated for feature 
> qualifiers 
> that are already in the database. The new qualifier does make it into 
> the database, but the errors leave the feature in an 
> inconsistent state. 
> When I look in the database, its row in the seqfeature table has its 
> ontology_term_id field set to NULL.
> 
> I'm using the main trunk of bioperl-db. If this is one of 
> those things 
> that is broken for the time being, I'll jury rig something to 
> do what I 
> want by talking directly to the underlying tables. I just 
> wanted to use 
> the BioPerl API if I could.
> 
> 
> -- Tim
> 
> 
> attempting to load adaptor class for Bio::Location::Split
>          attempting to load module Bio::DB::BioSQL::SplitAdaptor
> attempting to load adaptor class for Bio::Location::Atomic
>          attempting to load module Bio::DB::BioSQL::AtomicAdaptor
> attempting to load adaptor class for Bio::Root::Root
>          attempting to load module Bio::DB::BioSQL::RootAdaptor
> attempting to load adaptor class for Bio::Root::RootI
>          attempting to load module Bio::DB::BioSQL::RootIAdaptor
>          attempting to load module Bio::DB::BioSQL::RootAdaptor
> attempting to load adaptor class for Bio::Ontology::Term
>          attempting to load module Bio::DB::BioSQL::TermAdaptor
> attempting to load adaptor class for Bio::Ontology::Term
>          attempting to load module Bio::DB::BioSQL::TermAdaptor
> attempting to load adaptor class for Bio::Ontology::Term
>          attempting to load module Bio::DB::BioSQL::TermAdaptor
> attempting to load adaptor class for Bio::Ontology::Term
>          attempting to load module Bio::DB::BioSQL::TermAdaptor
> preparing UPDATE statement: UPDATE seqfeature SET  
> seqfeature_rank = ?, 
>   bioentry_id = ?,  ontology_term_id = ?,  seqfeature_source_id = ? 
> WHERE seqfeature_id = ?
> binding column 1 to "6" (rank)
> binding column 2 to "1" (FK to bioentry)
> binding column 3 to "" (FK to ontology_term)
> binding column 4 to "" (FK to ontology_term)
> preparing UPDATE statement: UPDATE seqfeature_location SET  
> seq_start = 
> ?,  seq_end = ?,  seq_strand = ?,  location_rank = ?,  
> seqfeature_id = ? 
> WHERE seqfeature_location_id = ?
> binding column 1 to "796" (start)
> binding column 2 to "981" (end)
> binding column 3 to "1" (strand)
> binding column 4 to "1" (rank)
> binding column 5 to "6" (FK to seqfeature)
> binding column 1 to "1589" (start)
> binding column 2 to "1634" (end)
> binding column 3 to "1" (strand)
> binding column 4 to "2" (rank)
> binding column 5 to "6" (FK to seqfeature)
> binding column 1 to "1822" (start)
> binding column 2 to "1869" (end)
> binding column 3 to "1" (strand)
> binding column 4 to "3" (rank)
> binding column 5 to "6" (FK to seqfeature)
> binding column 1 to "2171" (start)
> binding column 2 to "2592" (end)
> binding column 3 to "1" (strand)
> binding column 4 to "4" (rank)
> binding column 5 to "6" (FK to seqfeature)
> attempting to load adaptor class for Bio::Annotation::Collection
>          attempting to load module Bio::DB::BioSQL::CollectionAdaptor
> attempting to load adaptor class for Bio::Annotation::TypeManager
>          attempting to load module Bio::DB::BioSQL::TypeManagerAdaptor
> no adaptor found for class Bio::Annotation::TypeManager
> attempting to load adaptor class for 
> Bio::DB::Persistent::PersistentObjectFactory
>          attempting to load module 
> Bio::DB::BioSQL::PersistentObjectFactoryAdaptor
> attempting to load adaptor class for Bio::Factory::ObjectFactoryI
>          attempting to load module 
> Bio::DB::BioSQL::ObjectFactoryIAdaptor
>          attempting to load module 
> Bio::DB::BioSQL::ObjectFactoryAdaptor
> no adaptor found for class 
> Bio::DB::Persistent::PersistentObjectFactory
> attempting to load driver for adaptor class 
> Bio::DB::BioSQL::AnnotationCollectionAdaptor
> Using Bio::DB::BioSQL::mysql::AnnotationCollectionAdaptorDriver as 
> driver peer for Bio::DB::BioSQL::AnnotationCollectionAdaptor
> attempting to load adaptor class for Bio::Ontology::Term
>          attempting to load module Bio::DB::BioSQL::TermAdaptor
> preparing UK select statement: SELECT ontology_term.ontology_term_id, 
> ontology_term.term_identifier, ontology_term.term_name, 
> ontology_term.term_definition, ontology_term.category_id FROM 
> ontology_term WHERE term_name = ?
> binding UK column 1 to "Annotation Tags" (name)
> preparing UK select statement: SELECT ontology_term.ontology_term_id, 
> ontology_term.term_name, NULL, ontology_term.category_id FROM 
> ontology_term WHERE category_id = ? AND term_name = ?
> binding UK column 1 to "5" (category)
> binding UK column 2 to "db_xref" (tagname)
> binding UK column 1 to "5" (category)
> binding UK column 2 to "codon_start" (tagname)
> binding UK column 1 to "5" (category)
> binding UK column 2 to "protein_id" (tagname)
> binding UK column 1 to "5" (category)
> binding UK column 2 to "foo" (tagname)
> preparing INSERT statement: INSERT INTO ontology_term (term_name, 
> category_id) VALUES (?, ?)
> binding column 1 to "foo" (tagname)
> binding column 2 to "5" (FK to Bio::Ontology::Term)
> binding UK column 1 to "5" (category)
> binding UK column 2 to "translation" (tagname)
> binding UK column 1 to "5" (category)
> binding UK column 2 to "product" (tagname)
> preparing INSERT statement: INSERT INTO seqfeature_qualifier_value 
> (seqfeature_id, ontology_term_id, qualifier_value, qualifier_rank) 
> VALUES (?, ?, ?, ?)
> binding column 1 to "6" (FK to Bio::SeqFeature::Generic)
> binding column 2 to "6" (FK to Bio::Annotation::SimpleValue)
> binding column 3 to "GI:37210" (value)
> binding column 4 to "1" (rank)
> DBD::mysql::st execute failed: Duplicate entry '6-6-1' for key 1 at 
> /usr/people/sealsa/bioperl-dev/lib/perl5/site_perl/Bio/DB/BioS
> QL/BasePersistenceAdaptor.pm 
> line 366.
> binding column 1 to "6" (FK to Bio::SeqFeature::Generic)
> binding column 2 to "6" (FK to Bio::Annotation::SimpleValue)
> binding column 3 to "SWISS-PROT:P01375" (value)
> binding column 4 to "2" (rank)
> DBD::mysql::st execute failed: Duplicate entry '6-6-2' for key 1 at 
> /usr/people/sealsa/bioperl-dev/lib/perl5/site_perl/Bio/DB/BioS
> QL/BasePersistenceAdaptor.pm 
> line 366.
> binding column 1 to "6" (FK to Bio::SeqFeature::Generic)
> binding column 2 to "17" (FK to Bio::Annotation::SimpleValue)
> binding column 3 to "1" (value)
> binding column 4 to "1" (rank)
> DBD::mysql::st execute failed: Duplicate entry '6-17-1' for key 1 at 
> /usr/people/sealsa/bioperl-dev/lib/perl5/site_perl/Bio/DB/BioS
> QL/BasePersistenceAdaptor.pm 
> line 366.
> binding column 1 to "6" (FK to Bio::SeqFeature::Generic)
> binding column 2 to "18" (FK to Bio::Annotation::SimpleValue)
> binding column 3 to "CAA26669.1" (value)
> binding column 4 to "1" (rank)
> DBD::mysql::st execute failed: Duplicate entry '6-18-1' for key 1 at 
> /usr/people/sealsa/bioperl-dev/lib/perl5/site_perl/Bio/DB/BioS
> QL/BasePersistenceAdaptor.pm 
> line 366.
> binding UK column 1 to "5" (category)
> binding UK column 2 to "foo" (tagname)
> binding column 1 to "6" (FK to Bio::SeqFeature::Generic)
> binding column 2 to "27" (FK to Bio::Annotation::SimpleValue)
> binding column 3 to "This is an added qualifier" (value)
> binding column 4 to "1" (rank)
> binding column 1 to "6" (FK to Bio::SeqFeature::Generic)
> binding column 2 to "20" (FK to Bio::Annotation::SimpleValue)
> binding column 3 to 
> "MSTESMIRDVELAEEALPKKTGGPQGSRRCLFLSLFSFLIVAGATTLFCLLHFGVIGPQRE
> EFPRDLSLISPLAQAVRSSSRTPSDKPVAHVVANPQAEGQLQWLNRRANALLANGVELRDNQ
> LVVPSEGLYLIYSQVLFKGQGCPSTHVLLTHTISRIAVSYQTKVNLLSAIKSPCQRETPEGA
> EAKPWYEPIYLGGVFQLEKGDRLSAEINRPDYLDFAESGQVYFGIIAL" 
> (value)
> binding column 4 to "1" (rank)
> DBD::mysql::st execute failed: Duplicate entry '6-20-1' for key 1 at 
> /usr/people/sealsa/bioperl-dev/lib/perl5/site_perl/Bio/DB/BioS
> QL/BasePersistenceAdaptor.pm 
> line 366.
> binding column 1 to "6" (FK to Bio::SeqFeature::Generic)
> binding column 2 to "19" (FK to Bio::Annotation::SimpleValue)
> binding column 3 to "TNF-alpha" (value)
> binding column 4 to "1" (rank)
> DBD::mysql::st execute failed: Duplicate entry '6-19-1' for key 1 at 
> /usr/people/sealsa/bioperl-dev/lib/perl5/site_perl/Bio/DB/BioS
> QL/BasePersistenceAdaptor.pm 
> line 366.
> 
> ------------- EXCEPTION  -------------
> MSG: failed to store one or more child objects for an 
> instance of class 
> Bio::SeqFeature::Generic (PK=6)
> STACK Bio::Root::RootI::warn 
> /usr/people/sealsa/bioperl-dev/lib/perl5/site_perl/Bio/Root/Ro
> otI.pm:182
> STACK Bio::DB::BioSQL::BasePersistenceAdaptor::store 
> /usr/people/sealsa/bioperl-dev/lib/perl5/site_perl/Bio/DB/BioS
> QL/BasePersistenceAdaptor.pm:237
> STACK Bio::DB::Persistent::PersistentObject::store 
> /usr/people/sealsa/bioperl-dev/lib/perl5/site_perl/Bio/DB/Pers
> istent/PersistentObject.pm:266
> STACK (eval) ./add_feat_qual.pl:101
> STACK toplevel ./add_feat_qual.pl:100
> 
> --------------------------------------
> 
> 
> _______________________________________________
> BioSQL-l mailing list
> BioSQL-l@open-bio.org
> http://open-bio.org/mailman/listinfo/biosql-l
>