Hi Hilmar,
I wasn't aware of 2 different types of features.
I'm making features as described in
http://www.biojava.org/docs/bj_in_anger/feature.htm, and as far as I
can tell from the results, its the first type you describe.
The second type of feature is confusing me: as I understood the
feature relationships, the graph is a tree, with only one parent for a
given feature, and if that feature is deleted, all its children should
get deleted too?
Martina
Hilmar Lapp wrote:
There's one thing that I'm unsure about in Martina's original email,
namely whether she was referring to features related to a sequence
(bioentry), or to features hierarchically related to each other through
the seqfeature_relationship table.
If the former, then the cascading delete should have taken care of
removing the features when you remove the sequence (bioentry) to which
they point through their foreign key (and recursively the locations etc).
However, if the question was about hierarchical features, then deleting
one feature in the hierarchy will never (and shouldn't ever) delete any
other feature in the hierarchy (except if all of them reference the same
bioentry and you deleted the bioentry). If you delete a seqfeature in a
hierarchy of seqfeatures then by cascading delete this will also delete
all rows in seqfeature_relationship that reference that seqfeature as
either a subject or an object in a nesting relationship between
features. I.e., looking at the hierarchy as a graph, removing a node
will cascade to deleting all incoming and outgoing arcs for that node,
but not other nodes.
If your application wants to take down all nodes in the hierarchy when
one node is deleted, you need to write code to do this. (Except if, as
mentioned before, all features reference the same bioentry, in which
case deleting the bioentry will delete the entire feature hierarchy.)
-hilmar
On Jun 20, 2005, at 3:33 AM, Richard HOLLAND wrote:
Well, technically that should work because BioJava simply issues a
delete against the seqfeature table, and therefore all features related
through foreign keys should automatically delete themselves as a result
without any further intervention by BioJava... beats me why it doesn't!
Unfortunately I don't currently use the MySQL implementation myself so I
can't help much. I hope someone on BioSQL-L knows a little more?
Richard Holland
Bioinformatics Specialist
GIS extension 8199
---------------------------------------------
This email is confidential and may be privileged. If you are not the
intended recipient, please delete it and notify us immediately. Please
do not copy or use it for any purpose, or disclose its content to any
other person. Thank you.
---------------------------------------------
-----Original Message-----
From: Martina [mailto:[EMAIL PROTECTED]
Sent: Monday, June 20, 2005 6:21 PM
To: Richard HOLLAND
Cc: [EMAIL PROTECTED]; BioJava;
[EMAIL PROTECTED]
Subject: Re: [BioSQL-l] _removeSequence
My tables are all InnoDB tables and in the biosqldb-mysql.sql (v 1.40
2004/11/04 01:49:41) which created them, it says ON DELETE CASCADE.
Do I need to do anything else?
Thanks,
Martina
Richard HOLLAND wrote:
To do cascading deletes in MySQL requires the tables to
have been set up
using the InnoDB table style (as opposed to the default
MyISAM tables).
In InnoDB, foreign keys are actually enforced and deletes
will cascade,
whereas in MyISAM it has no concept of foreign keys and so
is unable to
enforce data integrity. The people on the BioSQL-L mailing
list will be
able to help you there.
The next version of BioJava's database interfaces after the
1.4 release
will assume that the underlying database does have cascading deletes
turned on. The existing version half-attempts to make up
for the lack of
cascading deletes in databases that don't support it, but
it doesn't do
it well at all, hence the problems you are seeing. After
consulting with
Hilmar last week we decided it was a fair assumption to
make that all
BioSQL instances are installed with cascading deletes enabled.
BioPerl-db already makes this assumption.
cheers,
Richard
Richard Holland
Bioinformatics Specialist
GIS extension 8199
---------------------------------------------
This email is confidential and may be privileged. If you are not the
intended recipient, please delete it and notify us
immediately. Please
do not copy or use it for any purpose, or disclose its
content to any
other person. Thank you.
---------------------------------------------
-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of
[EMAIL PROTECTED]
Sent: Monday, June 20, 2005 5:57 PM
To: Martina
Cc: [EMAIL PROTECTED]; BioJava;
[EMAIL PROTECTED]
Subject: Re: [BioSQL-l] _removeSequence
Biojava doesn't attempt to recusivley remove features by
itself. It relies
on cascading deletes in the database. I know Oracle can be
set to do this
(and it works very well). If MySQL has equivalent
functionality you may
need to turn it on. I'm pretty sure it does but you need to
set it up.
- Mark
Martina <[EMAIL PROTECTED]>
Sent by: [EMAIL PROTECTED]
06/20/2005 05:43 PM
To: [EMAIL PROTECTED], BioJava
<biojava-l@biojava.org>
cc: (bcc: Mark Schreiber/GP/Novartis)
Subject: [BioSQL-l] _removeSequence
Hi,
Im trying to delete a sequence and recursivly all its features.
So:
for (SequenceIterator si = db.sequenceIterator(); si.hasNext();) {
Sequence s = si.nextSequence();
String name = s.getName();
s = null;
db.removeSequence(name);
}
But if I look in the database (MySQL 4.1.12) I can still
see plenty
of entries and I have problems entering the same features again,
because of dublicate key error. I would like to know if
_removeSequence(String) in BioSQLSequenceDB is supposed to remove
features recursivly or just the features of the removed sequence?
If so - what is the best way do delete the features of the features
(and so on)? And how to empty the db completly?
Martina
_______________________________________________
BioSQL-l mailing list
[EMAIL PROTECTED]
http://open-bio.org/mailman/listinfo/biosql-l
_______________________________________________
BioSQL-l mailing list
[EMAIL PROTECTED]
http://open-bio.org/mailman/listinfo/biosql-l
_______________________________________________
BioSQL-l mailing list
[EMAIL PROTECTED]
http://open-bio.org/mailman/listinfo/biosql-l
_______________________________________________
Biojava-l mailing list - Biojava-l@biojava.org
http://biojava.org/mailman/listinfo/biojava-l