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