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

Tim Henderson tjh@alodar.com
Sat, 19 Oct 2002 23:20:53 -0700


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/BioSQL/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/BioSQL/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/BioSQL/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/BioSQL/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 
"MSTESMIRDVELAEEALPKKTGGPQGSRRCLFLSLFSFLIVAGATTLFCLLHFGVIGPQREEFPRDLSLISPLAQAVRSSSRTPSDKPVAHVVANPQAEGQLQWLNRRANALLANGVELRDNQLVVPSEGLYLIYSQVLFKGQGCPSTHVLLTHTISRIAVSYQTKVNLLSAIKSPCQRETPEGAEAKPWYEPIYLGGVFQLEKGDRLSAEINRPDYLDFAESGQVYFGIIAL" 
(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/BioSQL/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/BioSQL/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/RootI.pm:182
STACK Bio::DB::BioSQL::BasePersistenceAdaptor::store 
/usr/people/sealsa/bioperl-dev/lib/perl5/site_perl/Bio/DB/BioSQL/BasePersistenceAdaptor.pm:237
STACK Bio::DB::Persistent::PersistentObject::store 
/usr/people/sealsa/bioperl-dev/lib/perl5/site_perl/Bio/DB/Persistent/PersistentObject.pm:266
STACK (eval) ./add_feat_qual.pl:101
STACK toplevel ./add_feat_qual.pl:100

--------------------------------------