Description
The following (incorrect) client code should cause an exception to be thrown. Instead of an exception, all rows in table T1 are deleted.
T1Peer.doDelete(new Criteria().add(T2Peer.COL, 2));
This code appeared in a project I am working on. The intent was to delete rows from table T2.
Before the fix for TORQUE-93, this code had the intended effect becaue T1Peer.doDelete(criteria) just passed the criteria object to BasePeer.doDelete(criteria). Since the only reference BasePeer had to a table was table T2 in the criteria, only rows in table T2 were deleted.
Now that T1Peer.doDelete(criteria) calls BasePeer.doDelete(criteria, TABLE_NAME) instead, the test if (crit.containsKey(key)) in BasePeer.processTables() always fails. This leads to an empty where clause, causing all rows in table T1 to be deleted.
Expect: All Criterion objects in a Criteria should be used in the final where clause. If not, an exception should be thrown.