Issue Details (XML | Word | Printable)

Key: JDO-411
Type: Bug Bug
Status: Resolved Resolved
Resolution: Fixed
Priority: Major Major
Assignee: Michael Bouschen
Reporter: Marc Prud'hommeaux
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
JDO

Attempt to bulk-delete Employee records without nulling foreign key references from InsurancePlan

Created: 30/Aug/06 01:16 AM   Updated: 03/Oct/06 09:55 PM
Return to search
Component/s: tck2
Affects Version/s: JDO 2 final
Fix Version/s: JDO 2 maintenance release 1, JDO 2 TCK challenge fixes

Time Tracking:
Not Specified

File Attachments:
  Size
Text File Licensed for inclusion in ASF works DeletePersistentAll.patch 2006-08-30 01:17 AM Marc Prud'hommeaux 2 kB
Text File Licensed for inclusion in ASF works JDO-411.patch 2006-09-10 07:41 PM Michael Bouschen 8 kB

Resolution Date: 14/Sep/06 09:34 PM


 Description  « Hide
Multiple test cases attempt to bulk delete instances of Person. However, the Employee subclass of Person might wind up having a non-nullable foreign key reference to Insurance or another Employee (via the "mentor" field). While the defaut Derby TCK schema does not have this constraint, in order to be flexible for other databases that will enforce the foreign key by default, some effort should be made to ensure that there are no relation constraints before the bulk deletes are attempted. This can be done by adding a nullForeignKeyReferences() method that will manually make sure that the relations are nulled. See the attached patch.

This affects the following tests:

 org.apache.jdo.tck.query.delete.DeletePersistentAll.testNoParametersAPI
 org.apache.jdo.tck.query.delete.DeletePersistentAll.testNoParametersSingleString
 org.apache.jdo.tck.query.delete.DeletePersistentAll.testObjectArrayParametersAPI
 org.apache.jdo.tck.query.delete.DeletePersistentAll.testObjectArrayParametersSingleString
 org.apache.jdo.tck.query.delete.DeletePersistentAll.testMapParametersAPI
 org.apache.jdo.tck.query.delete.DeletePersistentAll.testMapParametersSingleString
 org.apache.jdo.tck.query.delete.DeleteQueryElements.testAPI
 org.apache.jdo.tck.query.delete.DeleteQueryElements.testSingleString



 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Michael Bouschen added a comment - 10/Sep/06 07:41 PM
I agree these tests need to be changed, because they do not take existing references to the instances to be deleted into account.

The whole point in adding the delete API to the Query interface is to support instance removal without the need to load these instances before the removal. I think using class Person to test the delete API is not a good idea. As Marc pointed out, it requires nulling relationship fields prior to the removal and this means loading instances into memory. So it might happen that the instances to be deleted are loaded prior to removal which is not the intent of the test case.

I propose to change the test case and use a class where the database schema does not include any foreign keys referencing the table for the class. In the company model class Insurance is an example for such a class. The attached patch for review implements this proposal.

Craig Russell added a comment - 11/Sep/06 04:09 AM
Looks good.

I think your analysis is correct, and using Insurance as the candidate class solves the relationship management issues.

Michael Bouschen added a comment - 14/Sep/06 09:34 PM
Checked in the patch (see revision 443483).

Michael Bouschen added a comment - 03/Oct/06 09:55 PM
Merged changes from trunk into brach 2.0.1 (see revision 452644).