The DAS is not correctly handling the case where a new object is inserted that has a 1-1 relationship to another object. The attached patch addresses this issue.
 
Brent
 
Index: 
src/test/java/org/apache/tuscany/das/rdb/test/OneToOneRelationshipTests.java
===================================================================
--- 
src/test/java/org/apache/tuscany/das/rdb/test/OneToOneRelationshipTests.java    
    (revision 392391)
+++ 
src/test/java/org/apache/tuscany/das/rdb/test/OneToOneRelationshipTests.java    
    (working copy)
@@ -135,7 +135,7 @@
         DataObject employee = root.createDataObject("EMPLOYEE");
         employee.setString ("NAME", "Joe Hotshot");
         
- /*       //Assigne a EOTM
+      //Assigne a EOTM
         //Strangely this statement results in "Could not find relationships" 
error
         //although "company.setDataObject("company->employee_opposite", 
null);" dos not   
         company.setDataObject("company->employee_opposite", employee);     
@@ -150,6 +150,6 @@
         employee = root.getDataObject("COMPANY[1]/company->employee_opposite");
 
         assertEquals("Joe Hotshot", employee.getString("NAME"));
-        */
+        
     }
 }
Index: 
src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java
===================================================================
--- 
src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java    
    (revision 392391)
+++ 
src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java    
    (working copy)
@@ -18,6 +18,7 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 
@@ -123,17 +124,17 @@
                                if (obj.isSet(p))
                                        fields.add(p);
                        } else {
-                               if (!p.isMany() && obj.isSet(p)) {
-                                       Relationship relationship = 
config.getRelationshipByName(p
-                                                       
.getOpposite().getName());
-
-                                       RelationshipWrapper r = new 
RelationshipWrapper(
+                               if ( obj.isSet(p) ) {
+                                       Relationship relationship = 
config.getRelationshipByReference(p);
+                                       if ( p.getOpposite().isMany() || 
(hasState(config, relationship, obj))) {                                        
               
+                                               RelationshipWrapper r = new 
RelationshipWrapper(
                                                        relationship);
-                                       Iterator keys = 
r.getForeignKeys().iterator();
-                                       while (keys.hasNext()) {
-                                               String key = (String) 
keys.next();
-                                               Property keyProp = 
obj.getType().getProperty(key);
-                                               fields.add(keyProp);
+                                               Iterator keys = 
r.getForeignKeys().iterator();
+                                               while (keys.hasNext()) {
+                                                       String key = (String) 
keys.next();
+                                                       Property keyProp = 
obj.getType().getProperty(key);
+                                                       fields.add(keyProp);
+                                               }
                                        }
 
                                }
@@ -161,4 +162,18 @@
                return parameters;
        }
 
+       private boolean hasState(MappingWrapper config, Relationship rel, 
DataObject changedObject) {                                                   
+                       
+                       if ( !rel.isMany()) {
+                               Table t = 
config.getTableByPropertyName(changedObject.getType().getName());
+                               TableWrapper tw = new TableWrapper(t);
+                               RelationshipWrapper rw = new 
RelationshipWrapper(rel);
+                               if (( 
rel.getForeignKeyTable().equals(t.getName())) &&
+                                               ( 
Collections.disjoint(tw.getPrimaryKeyProperties(),rw.getForeignKeys()) ))
+                                       return true;                    
+                       }
+                               
+               return false;
+       }
+
 }

Reply via email to