You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by am...@apache.org on 2007/10/25 07:26:22 UTC

svn commit: r588146 - in /incubator/tuscany/java/das/rdb/src: main/java/org/apache/tuscany/das/rdb/config/wrapper/ main/java/org/apache/tuscany/das/rdb/impl/ test/java/org/apache/tuscany/das/rdb/test/ test/resources/

Author: amita
Date: Wed Oct 24 22:26:20 2007
New Revision: 588146

URL: http://svn.apache.org/viewvc?rev=588146&view=rev
Log:
TUSCANY-1865 Consider Table/column mapping with Type/property mapping in relationships.

Added:
    incubator/tuscany/java/das/rdb/src/test/resources/CustomersOrdersRelationship.xml
Modified:
    incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java
    incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DatabaseObject.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/config/wrapper/MappingWrapper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java?rev=588146&r1=588145&r2=588146&view=diff
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java Wed Oct 24 22:26:20 2007
@@ -574,7 +574,19 @@
         return false;
     }
 
+    /*Parameter name is SDO Type name and so requires mapping in table<->type, if one is available in Config*/
     public Collection getRelationshipsByChildTable(String name) {
+    	Table table = getTableByTypeName(name);
+    	
+    	if(table != null) {
+	    	if(config.isDatabaseSchemaNameSupported()) {
+	    		name = table.getSchemaName()+"."+table.getTableName();	
+	    	} else {
+	    		name = table.getTableName();
+	    	}
+    	}
+    	//table can be null, when no <Table> in Config and Query based Dynamic Types are used during query
+    	
         List results = new ArrayList();
         if (config != null) {
             Iterator i = getConfig().getRelationship().iterator();

Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DatabaseObject.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DatabaseObject.java?rev=588146&r1=588145&r2=588146&view=diff
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DatabaseObject.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DatabaseObject.java Wed Oct 24 22:26:20 2007
@@ -71,7 +71,19 @@
                     this.logger.debug("getTypeName():"+getTypeName());
                 }
                 
-                if (r.getForeignKeyTable().equals(getTypeName())) {
+                Table fkTable = mappingWrapper.getTableByTypeName(getTypeName());
+                String fkTableName = null;
+                if(fkTable != null) {                    
+                    if(mappingWrapper.getConfig().isDatabaseSchemaNameSupported()) {
+                    	fkTableName = fkTable.getSchemaName()+"."+fkTable.getTableName();
+                    } else {
+                    	fkTableName = fkTable.getTableName();
+                    }                	
+                } else {//this can happen when no <Table> in Config and Query based Dynamic Types are used during query
+                	fkTableName = getTypeName(); 
+                }
+                
+                if (r.getForeignKeyTable().equals(fkTableName)) {
                     List pairs = r.getKeyPair();
                     Iterator iter = pairs.iterator();
                     while (iter.hasNext()) {
@@ -116,11 +128,26 @@
         if (parent == null) {
             return null;
         }
-        String parentKey = getParentKey(r, parameter);
-        return parent.get(parentKey);
-
+        String parentKey = getParentKey(r, parameter);//parentKey is db column name
+        
+        String parentTableName = null;
+        //as parentKey is qualified column name and not SDO property name, do conversion, when possible, thru <Config><Table>
+        tbl = mappingWrapper.getTableByTypeName(parent.getType().getName());        
+        if(tbl != null) {
+	        if(mappingWrapper.getConfig().isDatabaseSchemaNameSupported()) {
+	        	parentTableName = tbl.getSchemaName()+"."+tbl.getTableName();
+	        } else {
+	        	parentTableName = tbl.getTableName();
+	        }
+	        String parentKeyProp = mappingWrapper.getColumnPropertyName(parentTableName, parentKey);
+	        
+	        return parent.get(parentKeyProp);	        
+        } else {
+        	return parent.get(parentKey);
+        }        
     }
 
+    /*This returns table column name*/
     private String getParentKey(Relationship r, String parameter) {
         List keyPairs = r.getKeyPair();
         Iterator i = keyPairs.iterator();

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?rev=588146&r1=588145&r2=588146&view=diff
==============================================================================
--- 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 Wed Oct 24 22:26:20 2007
@@ -28,7 +28,9 @@
 import org.apache.tuscany.das.rdb.Command;
 import org.apache.tuscany.das.rdb.ConfigHelper;
 import org.apache.tuscany.das.rdb.DAS;
+import org.apache.tuscany.das.rdb.config.Config;
 import org.apache.tuscany.das.rdb.config.Relationship;
+import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
 import org.apache.tuscany.das.rdb.test.data.CompanyData;
 import org.apache.tuscany.das.rdb.test.data.CompanyEmpData;
 import org.apache.tuscany.das.rdb.test.data.CustomerData;
@@ -238,4 +240,51 @@
         }
     }
     
+    /*If <Table> is present in DAS Config with type and property mappings, with tableName/typeName and columnName/propertyName differing
+     * consider relationship with proper mapping*/
+    public void testRelationshipTypesAndProperties() throws Exception {
+    	//existing records
+        DAS das = DAS.FACTORY.createDAS(getConfig("CustomersOrdersRelationship.xml"), getConnection());
+        Command cmd = das.getCommand("customer and orders");
+        cmd.setParameter("ID", new Integer(1));
+        DataObject root = cmd.executeQuery();
+        DataObject firstCustomer = root.getDataObject("Customer[id=1]");
+        
+        DataObject newOrder = root.createDataObject("AnOrder");
+        newOrder.setInt("OrderId", 100);
+        newOrder.setString("PRODUCT", "MyProd");
+        
+        firstCustomer.getList("orders").add(newOrder);
+        
+        das.applyChanges(root);
+        
+        root = cmd.executeQuery();
+        firstCustomer = root.getDataObject("Customer[id=1]");
+        assertEquals(3, firstCustomer.getList("orders").size());
+    }
+    
+    /*same as testRelationshipTypesAndProperties(), except no DAS Config, and so table/type and column/property name match by default*/
+    public void testRelationshipWithProgrammaticConfig() throws Exception {
+    	//existing records
+    	ConfigHelper configHelper = new ConfigHelper();
+    	Config config = configHelper.getConfig();
+    	MappingWrapper wrapper = new MappingWrapper(config);
+    	wrapper.addRelationship("CUSTOMER.ID", "ANORDER.CUSTOMER_ID", "orders");
+    	
+        DAS das = DAS.FACTORY.createDAS(config, getConnection());
+        Command cmd = das.createCommand("select * from CUSTOMER left join ANORDER on CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = 1");
+        DataObject root = cmd.executeQuery();
+        DataObject firstCustomer = root.getDataObject("CUSTOMER[ID=1]");
+        
+        DataObject newOrder = root.createDataObject("ANORDER");
+        newOrder.setInt("ID", 100);
+        newOrder.setString("PRODUCT", "MyProd");
+        
+        firstCustomer.getList("orders").add(newOrder);
+        
+        das.applyChanges(root);
+        
+        root = cmd.executeQuery();
+        firstCustomer = root.getDataObject("CUSTOMER[ID=1]");
+    }    
 }

Added: incubator/tuscany/java/das/rdb/src/test/resources/CustomersOrdersRelationship.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/test/resources/CustomersOrdersRelationship.xml?rev=588146&view=auto
==============================================================================
--- incubator/tuscany/java/das/rdb/src/test/resources/CustomersOrdersRelationship.xml (added)
+++ incubator/tuscany/java/das/rdb/src/test/resources/CustomersOrdersRelationship.xml Wed Oct 24 22:26:20 2007
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+ -->
+<Config xmlns="http:///org.apache.tuscany.das.rdb/config.xsd"> 
+    
+    <Command name="all customers" SQL="select * from CUSTOMER" kind="Select"/>
+    
+    <Command name="customer and orders"
+        SQL="select * from CUSTOMER left join ANORDER on CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = ?"
+        kind="Select">    
+    </Command>
+    
+    <Command name="order by id" SQL="select * from ANORDER where ANORDER.ID = ?"
+        kind="Select">       
+    </Command>
+    
+    <Command name="update customer"
+        SQL="update CUSTOMER set LASTNAME = 'Pavick' where ID = ?"
+        kind="Update">
+    </Command>  
+     
+    <Table tableName="CUSTOMER" typeName="Customer">
+        <Column columnName="ID" propertyName="id" primaryKey="true"/>
+        <Column columnName="LASTNAME" propertyName="lastName"/>
+        <Column columnName="ADDRESS" propertyName="address"/>
+    </Table>
+    
+    <Table tableName="ANORDER" typeName="AnOrder">
+        <Column columnName="ID" propertyName="OrderId" primaryKey="true"/>
+    </Table>
+    
+    <Relationship name="orders" primaryKeyTable="CUSTOMER"
+        foreignKeyTable="ANORDER" many="true">
+        <KeyPair primaryKeyColumn="ID" foreignKeyColumn="CUSTOMER_ID"/>
+    </Relationship>
+    
+</Config>



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org