You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by bd...@apache.org on 2006/11/29 08:29:40 UTC
svn commit: r480444 - in /incubator/tuscany/java/das/rdb/src:
main/java/org/apache/tuscany/das/rdb/generator/impl/
test/java/org/apache/tuscany/das/rdb/test/
Author: bdaniel
Date: Tue Nov 28 23:29:38 2006
New Revision: 480444
URL: http://svn.apache.org/viewvc?view=rev&rev=480444
Log:
TUSCANY-954 Throw an exception when a user attempts to set both a relationship and a
foreign key property in that relationship
Modified:
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RelationshipTests.java
Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java?view=diff&rev=480444&r1=480443&r2=480444
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java Tue Nov 28 23:29:38 2006
@@ -20,6 +20,7 @@
import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
@@ -112,14 +113,16 @@
}
- private List getAttributeProperties(DataObject obj, MappingWrapper config, TableWrapper tw) {
- List fields = new ArrayList();
+ private HashSet getAttributeProperties(DataObject obj, MappingWrapper config, TableWrapper tw) {
+ HashSet fields = new HashSet();
Iterator i = obj.getType().getProperties().iterator();
while (i.hasNext()) {
Property p = (Property) i.next();
if (p.getType().isDataType()) {
if (obj.isSet(p)) {
- fields.add(p);
+ if (fields.add(p) == false) {
+ throw new RuntimeException("Foreign key properties should not be set when the corrsponding relationship has changed");
+ }
}
} else {
if (obj.isSet(p)) {
@@ -132,7 +135,9 @@
String key = (String) keys.next();
String keyProperty = config.getColumnPropertyName(tw.getTableName(), key);
Property keyProp = obj.getType().getProperty(keyProperty);
- fields.add(keyProp);
+ if (fields.add(keyProp) == false) {
+ throw new RuntimeException("Foreign key properties should not be set when the corresponding relationship has changed");
+ }
}
}
Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java?view=diff&rev=480444&r1=480443&r2=480444
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java Tue Nov 28 23:29:38 2006
@@ -19,6 +19,7 @@
package org.apache.tuscany.das.rdb.generator.impl;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
@@ -60,7 +61,7 @@
statement.append(" set ");
ChangeSummary summary = changedObject.getDataGraph().getChangeSummary();
- List changedFields = getChangedFields(mapping, summary, changedObject, tableWrapper);
+ HashSet changedFields = getChangedFields(mapping, summary, changedObject, tableWrapper);
Iterator i = changedFields.iterator();
int idx = 1;
@@ -161,14 +162,17 @@
- private List getChangedFields(MappingWrapper config, ChangeSummary summary, DataObject obj, TableWrapper tw) {
- List changes = new ArrayList();
+ private HashSet getChangedFields(MappingWrapper config, ChangeSummary summary, DataObject obj, TableWrapper tw) {
+ HashSet changes = new HashSet();
+
Iterator i = summary.getOldValues(obj).iterator();
while (i.hasNext()) {
ChangeSummary.Setting setting = (ChangeSummary.Setting) i.next();
if (setting.getProperty().getType().isDataType()) {
- changes.add(setting.getProperty());
+ if ( changes.add(setting.getProperty()) == false ) {
+ throw new RuntimeException("Foreign key properties should not be set when the corresponding relationship has changed");
+ }
} else {
Property ref = setting.getProperty();
if (!ref.isMany()) {
@@ -179,7 +183,9 @@
String key = (String) keys.next();
String keyProperty = config.getColumnPropertyName(tw.getTableName(), key);
Property keyProp = obj.getType().getProperty(keyProperty);
- changes.add(keyProp);
+ if (changes.add(keyProp) == false) {
+ throw new RuntimeException("Foreign key properties should not be set when the corresponding relationship has changed");
+ }
}
}
Modified: incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RelationshipTests.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RelationshipTests.java?view=diff&rev=480444&r1=480443&r2=480444
==============================================================================
--- incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RelationshipTests.java (original)
+++ incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RelationshipTests.java Tue Nov 28 23:29:38 2006
@@ -23,6 +23,8 @@
*
*/
+import java.sql.SQLException;
+
import org.apache.tuscany.das.rdb.Command;
import org.apache.tuscany.das.rdb.DAS;
import org.apache.tuscany.das.rdb.test.data.CustomerData;
@@ -110,4 +112,60 @@
}
+
+ public void testFKBehavior() throws SQLException {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("basicCustomerOrderMapping.xml"), getConnection());
+ // Read some customers and related orders
+ Command select = das
+ .createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON CUSTOMER.ID = ANORDER.CUSTOMER_ID");
+
+ DataObject root = select.executeQuery();
+
+ DataObject cust1 = root.getDataObject("CUSTOMER[1]");
+ DataObject cust2 = root.getDataObject("CUSTOMER[2]");
+
+ // Save IDs
+ Integer cust1ID = (Integer) cust1.get("ID");
+
+ // Move an order to cust1 from cust2
+ DataObject order = (DataObject) cust2.getList("orders").get(0);
+ cust1.getList("orders").add(order);
+ order.setInt("CUSTOMER_ID", cust1ID);
+
+ try {
+ das.applyChanges(root);
+ fail("An exception should be thrown");
+ } catch (RuntimeException ex) {
+ assertEquals("Foreign key properties should not be set when the corresponding relationship has changed", ex.getMessage());
+ }
+
+ }
+
+ public void testFKBehavior2() throws SQLException {
+ DAS das = DAS.FACTORY.createDAS(getConfig("basicCustomerOrderMapping.xml"), getConnection());
+ // Read some customers and related orders
+ Command select = das
+ .createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON CUSTOMER.ID = ANORDER.CUSTOMER_ID");
+
+ DataObject root = select.executeQuery();
+
+ DataObject cust1 = root.getDataObject("CUSTOMER[1]");
+
+ // Save IDs
+ Integer cust1ID = (Integer) cust1.get("ID");
+
+ // Move an order to cust1 from cust2
+ DataObject order = root.createDataObject("ANORDER");
+ order.setInt("ID", 500);
+ order.setInt("CUSTOMER_ID", cust1ID);
+ cust1.getList("orders").add(order);
+
+ try {
+ das.applyChanges(root);
+ fail("An exception should be thrown");
+ } catch (RuntimeException ex) {
+ assertEquals("Foreign key properties should not be set when the corresponding relationship has changed", ex.getMessage());
+ }
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org