Author: amita
Date: Wed Nov 21 04:18:12 2007
New Revision: 597050
URL: http://svn.apache.org/viewvc?rev=597050&view=rev
Log:
TUSCANY-1895 UpdateGenerator logic fix
Added:
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/ProductData.java
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/ProductProdSpecData.java
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/ProductSpecData.java
incubator/tuscany/java/das/rdb/src/test/resources/OneToOneNonRestrictedConfig.xml
Modified:
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
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DatabaseSetup.java
incubator/tuscany/java/das/rdb/src/test/resources/OneToOneRestrictedConfig.xml
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?rev=597050&r1=597049&r2=597050&view=diff
==============================================================================
---
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
Wed Nov 21 04:18:12 2007
@@ -25,6 +25,7 @@
import org.apache.log4j.Logger;
import org.apache.tuscany.das.rdb.config.Column;
+import org.apache.tuscany.das.rdb.config.Relationship;
import org.apache.tuscany.das.rdb.config.Table;
import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
import org.apache.tuscany.das.rdb.config.wrapper.RelationshipWrapper;
@@ -35,6 +36,7 @@
import org.apache.tuscany.das.rdb.impl.ParameterExtendedImpl;
import org.apache.tuscany.das.rdb.impl.SDODataTypeHelper;
import org.apache.tuscany.das.rdb.impl.UpdateCommandImpl;
+import org.apache.tuscany.das.rdb.util.CollectionsUtil;
import commonj.sdo.ChangeSummary;
import commonj.sdo.DataObject;
@@ -180,7 +182,10 @@
}
} else {
Property ref = setting.getProperty();
- if (!ref.isMany()) {
+
+ Relationship relationship =
config.getRelationshipByReference(ref);
+ if ((ref.getOpposite() != null && ref.getOpposite().isMany())
+ || (hasState(tw, relationship, obj))) {
RelationshipWrapper r = new
RelationshipWrapper(config.getRelationshipByReference(ref));
Iterator keys = r.getForeignKeys().iterator();
@@ -188,19 +193,31 @@
String key = (String) keys.next();
String keyProperty =
config.getColumnPropertyName(tw.getTableName(), key);
Property keyProp =
obj.getType().getProperty(keyProperty);
- if ( keyProp == null )
+ if ( keyProp == null ) {
throw new RuntimeException("Invalid foreign key
column: " + key);
+ }
if (changes.add(keyProp) == false) {
throw new RuntimeException("Foreign key properties
should not be set when the corresponding relationship has changed");
}
}
}
-
}
}
return changes;
}
+ private boolean hasState(TableWrapper tw, Relationship rel, DataObject
changedObject) {
+ if (!rel.isMany()) {
+ RelationshipWrapper rw = new RelationshipWrapper(rel);
+ if ((rel.getForeignKeyTable().equals(tw.getTableName()))
+ && (CollectionsUtil.disjoint(tw.getPrimaryKeyProperties(),
rw.getForeignKeys()))) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
private ParameterExtendedImpl fillExtendedParameter(ParameterExtendedImpl
param, TableWrapper table, Property property, int idx) {
param.setName(property.getName());
param.setType(property.getType());
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=597050&r1=597049&r2=597050&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 Nov 21 04:18:12 2007
@@ -24,6 +24,7 @@
*/
import java.sql.SQLException;
+import java.util.List;
import org.apache.tuscany.das.rdb.Command;
import org.apache.tuscany.das.rdb.ConfigHelper;
@@ -32,12 +33,16 @@
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.CompanyDeptData;
import org.apache.tuscany.das.rdb.test.data.CompanyEmpData;
import org.apache.tuscany.das.rdb.test.data.CustomerData;
import org.apache.tuscany.das.rdb.test.data.DepEmpData;
import org.apache.tuscany.das.rdb.test.data.DepartmentData;
import org.apache.tuscany.das.rdb.test.data.EmployeeData;
import org.apache.tuscany.das.rdb.test.data.OrderData;
+import org.apache.tuscany.das.rdb.test.data.ProductData;
+import org.apache.tuscany.das.rdb.test.data.ProductProdSpecData;
+import org.apache.tuscany.das.rdb.test.data.ProductSpecData;
import org.apache.tuscany.das.rdb.test.framework.DasTest;
import commonj.sdo.DataObject;
@@ -47,7 +52,6 @@
protected void setUp() throws Exception {
super.setUp();
-
new CustomerData(getAutoConnection()).refresh();
new OrderData(getAutoConnection()).refresh();
@@ -56,6 +60,10 @@
new DepartmentData(getAutoConnection()).refresh();
new CompanyEmpData(getAutoConnection()).refresh();
new DepEmpData(getAutoConnection()).refresh();
+ new CompanyDeptData(getAutoConnection()).refresh();
+ new ProductData(getAutoConnection()).refresh();
+ new ProductSpecData(getAutoConnection()).refresh();
+ new ProductProdSpecData(getAutoConnection()).refresh();
}
protected void tearDown() throws Exception {
@@ -286,5 +294,437 @@
root = cmd.executeQuery();
firstCustomer = root.getDataObject("CUSTOMER[ID=1]");
- }
-}
+ }
+
+ //Below is set of test cases with 1-1 key restricted, 1-1 no key
restricted, 1-n
+ //with parent/child having autogen keys and parent/child not having
autogen keys
+ //These will help in testing all corner cases of 1-1 relationship
+ public void testOneToOneKeyRestrictedAutogenKeys() throws Exception {
+ DAS das =
DAS.FACTORY.createDAS(getConfig("OneToOneRestrictedConfig.xml"),
getConnection());
+
+ Command read = das.getCommand("get named employee with company");
+ read.setParameter(1, "John Smith");
+ DataObject root = read.executeQuery();
+ DataObject john = root.getDataObject("EMPLOYEE[1]");
+
+ //1-Update parent , Insert
child/////////////////////////////////////////////
+ john.setString("NAME", "johnNew");
+ int origEOTMID = john.getInt("ID");
+
+ DataObject comp = root.createDataObject("COMPANY");
+ comp.setString("NAME", "comp100");
+ john.setDataObject("company", comp);
+
+ try {
+ das.applyChanges(root);
+ } catch (RuntimeException ex) {
+ fail("Did not expect exception!");
+ }
+
+ read.setParameter(1, "johnNew");
+ root = read.executeQuery();
+ john = root.getDataObject("EMPLOYEE[1]");
+ assertNotNull(john);
+ comp = john.getDataObject("company");
+ assertEquals(origEOTMID, comp.getInt("EOTMID"));
+ assertEquals("comp100", comp.getString("NAME"));
+
+ //2-Insert Parent, Update
child///////////////////////////////////////////
+ DataObject emp = root.createDataObject("EMPLOYEE");
+ emp.setString("NAME", "NewEmp");
+ emp.setDataObject("company", comp);//as key restricted, this will fail
+ try {
+ das.applyChanges(root);
+ fail("Expected exception, as key restricted does not allow chages
in relationship");
+ } catch (RuntimeException ex) {
+ }
+
+ //3-Update Parent, Update Child
+ read.setParameter(1, "johnNew");
+ root = read.executeQuery();
+ john = root.getDataObject("EMPLOYEE[1]");
+ comp = john.getDataObject("company");
+
+ john.setString("NAME", "johnOld");
+ comp.setString("NAME", "comp101");
+ try {
+ das.applyChanges(root);
+ } catch (RuntimeException ex) {
+ fail("Did not expect exception!");
+ }
+
+ read.setParameter(1, "johnOld");
+ root = read.executeQuery();
+ john = root.getDataObject("EMPLOYEE[1]");
+ assertNotNull(john);
+ comp = john.getDataObject("company");
+ assertEquals(origEOTMID, comp.getInt("EOTMID"));
+ assertEquals("comp101", comp.getString("NAME"));
+ }
+
+ public void testOneToOneNoKeyRestrictedAutogenKeys() throws Exception {
+ DAS das =
DAS.FACTORY.createDAS(getConfig("OneToOneNonRestrictedConfig.xml"),
getConnection());
+
+ Command read = das.getCommand("get named employee with company");
+ read.setParameter(1, "John Smith");
+ DataObject root = read.executeQuery();
+ DataObject john = root.getDataObject("EMPLOYEE[1]");
+ int origEOTMID = john.getInt("ID");
+
+ //1-Update parent , Insert
child/////////////////////////////////////////////
+ john.setString("NAME", "johnNew");
+
+ DataObject comp = root.createDataObject("COMPANY");
+ comp.setString("NAME", "comp100");
+ john.setDataObject("company", comp);
+
+ try {
+ das.applyChanges(root);
+ } catch (RuntimeException ex) {
+ fail("Did not expect exception!");
+ }
+
+ read.setParameter(1, "johnNew");
+ root = read.executeQuery();
+ john = root.getDataObject("EMPLOYEE[1]");
+ assertNotNull(john);
+ comp = john.getDataObject("company");
+ assertEquals(origEOTMID, comp.getInt("EOTMID"));
+ assertEquals("comp100", comp.getString("NAME"));
+
+ //2-Insert Parent, Update
child///////////////////////////////////////////
+ DataObject emp = root.createDataObject("EMPLOYEE");
+ emp.setString("NAME", "NewEmp");
+ emp.setDataObject("company", comp);//as no key restricted, this will
not fail
+ try {
+ das.applyChanges(root);
+ } catch (RuntimeException ex) {
+ fail("Did not expect exception!");
+ }
+ read.setParameter(1, "NewEmp");
+ root = read.executeQuery();
+ DataObject newEmp = root.getDataObject("EMPLOYEE[1]");
+ assertNotNull(newEmp);
+ int eotmid = newEmp.getInt("ID");
+ comp = newEmp.getDataObject("company");
+ assertEquals(eotmid, comp.getInt("EOTMID"));
+ assertEquals("comp100", comp.getString("NAME"));
+
+ //3-Update Parent, Update Child
+ newEmp.setString("NAME", "johnOld");
+ comp.setString("NAME", "comp101");
+ try {
+ das.applyChanges(root);
+ } catch (RuntimeException ex) {
+ fail("Did not expect exception!");
+ }
+
+ read.setParameter(1, "johnOld");
+ root = read.executeQuery();
+ newEmp = root.getDataObject("EMPLOYEE[1]");
+ assertNotNull(newEmp);
+ comp = newEmp.getDataObject("company");
+ assertEquals(eotmid, comp.getInt("EOTMID"));
+ assertEquals("comp101", comp.getString("NAME"));
+ }
+
+ public void testOneToOneKeyRestrictedNoAutogenKeys() throws Exception {
+ DAS das =
DAS.FACTORY.createDAS(getConfig("OneToOneRestrictedConfig.xml"),
getConnection());
+
+ Command read = das.getCommand("get spec with product");
+ read.setParameter(1, "PQRPen");
+ DataObject root = read.executeQuery();
+ DataObject prod1 = root.getDataObject("PRODUCT[1]");
+ int origProdId = prod1.getInt("ID");
+
+ //1-Update parent , Insert
child/////////////////////////////////////////////
+ prod1.setString("NAME", "PQRNewPen");
+
+ DataObject spec1 = root.createDataObject("PRODUCTSPEC");
+ spec1.setInt("ID", 100);
+ spec1.setString("NAME", "PQRNewPenSpec");
+ prod1.setDataObject("prodspec", spec1);
+
+ try {
+ das.applyChanges(root);
+ } catch (RuntimeException ex) {
+ fail("Did not expect exception!");
+ }
+
+ read.setParameter(1, "PQRNewPen");
+ root = read.executeQuery();
+ prod1 = root.getDataObject("PRODUCT[1]");
+ assertNotNull(prod1);
+ spec1 = prod1.getDataObject("prodspec");
+ assertEquals(origProdId, spec1.getInt("PRODUCT_ID"));
+ assertEquals("PQRNewPenSpec", spec1.getString("NAME"));
+
+ //2-Insert Parent, Update
child///////////////////////////////////////////
+ DataObject prod3 = root.createDataObject("PRODUCT");
+ prod3.setString("NAME", "NewProd");
+ prod3.setDataObject("prodspec", spec1);//as key restricted, this will
fail
+ try {
+ das.applyChanges(root);
+ fail("Expected exception, as key restricted does not allow changes
in relationship");
+ } catch (RuntimeException ex) {
+ }
+
+ //3-Update Parent, Update Child
+ read.setParameter(1, "PQRNewPen");
+ root = read.executeQuery();
+ prod1 = root.getDataObject("PRODUCT[1]");
+ spec1 = prod1.getDataObject("prodspec");
+
+ prod1.setString("NAME", "PQRProd");
+ spec1.setString("NAME", "PQRProdSpec");
+ try {
+ das.applyChanges(root);
+ } catch (RuntimeException ex) {
+ fail("Did not expect exception!");
+ }
+
+ read.setParameter(1, "PQRProd");
+ root = read.executeQuery();
+ prod1 = root.getDataObject("PRODUCT[1]");
+ assertNotNull(prod1);
+ spec1 = prod1.getDataObject("prodspec");
+ assertEquals(origProdId, spec1.getInt("PRODUCT_ID"));
+ assertEquals("PQRProdSpec", spec1.getString("NAME"));
+ }
+
+ public void testOneToOneNoKeyRestrictedNoAutogenKeys() throws Exception {
+ DAS das =
DAS.FACTORY.createDAS(getConfig("OneToOneNonRestrictedConfig.xml"),
getConnection());
+
+ Command read = das.getCommand("get spec with product");
+ read.setParameter(1, "PQRPen");
+ DataObject root = read.executeQuery();
+ DataObject prod1 = root.getDataObject("PRODUCT[1]");
+ int origProdId = prod1.getInt("ID");
+
+ //1-Update parent , Insert
child/////////////////////////////////////////////
+ prod1.setString("NAME", "PQRNewPen");
+
+ DataObject spec1 = root.createDataObject("PRODUCTSPEC");
+ spec1.setInt("ID", 100);
+ spec1.setString("NAME", "PQRNewPenSpec");
+ prod1.setDataObject("prodspec", spec1);
+
+ try {
+ das.applyChanges(root);
+ } catch (RuntimeException ex) {
+ fail("Did not expect exception!");
+ }
+
+ read.setParameter(1, "PQRNewPen");
+ root = read.executeQuery();
+ prod1 = root.getDataObject("PRODUCT[1]");
+ assertNotNull(prod1);
+ spec1 = prod1.getDataObject("prodspec");
+ assertEquals(origProdId, spec1.getInt("PRODUCT_ID"));
+ assertEquals("PQRNewPenSpec", spec1.getString("NAME"));
+
+ //2-Insert Parent, Update
child///////////////////////////////////////////
+ DataObject prod3 = root.createDataObject("PRODUCT");
+ prod3.setInt("ID", 200);
+ prod3.setString("NAME", "NewProd");
+ prod3.setDataObject("prodspec", spec1);//as no key restricted, this
will not fail
+ try {
+ das.applyChanges(root);
+ } catch (RuntimeException ex) {
+ fail("Did not expect exception!");
+ }
+ read.setParameter(1, "NewProd");
+ root = read.executeQuery();
+ DataObject newProd = root.getDataObject("PRODUCT[1]");
+ assertNotNull(newProd);
+ int product_id = newProd.getInt("ID");
+ DataObject newSpec = newProd.getDataObject("prodspec");
+ assertEquals(product_id, newSpec.getInt("PRODUCT_ID"));
+ assertEquals("PQRNewPenSpec", newSpec.getString("NAME"));
+
+ //3-Update Parent, Update Child
+ newProd.setString("NAME", "MyProd");
+ newSpec.setString("NAME", "XYZNewPenSpec");
+ try {
+ das.applyChanges(root);
+ } catch (RuntimeException ex) {
+ fail("Did not expect exception!");
+ }
+
+ read.setParameter(1, "MyProd");
+ root = read.executeQuery();
+ newProd = root.getDataObject("PRODUCT[1]");
+ assertNotNull(newProd);
+ newSpec = newProd.getDataObject("prodspec");
+ assertEquals(product_id, newSpec.getInt("PRODUCT_ID"));
+ assertEquals("XYZNewPenSpec", newSpec.getString("NAME"));
+ }
+
+ public void testOneToManyAutogenKeys() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml"),
getConnection());
+
+ Command read = das.getCommand("all companies and departments");
+ DataObject root = read.executeQuery();
+ DataObject comp1 = (DataObject)root.getList("COMPANY").get(0);
+ int compId = comp1.getInt("ID");
+
+ //1-Update parent , Insert
child/////////////////////////////////////////////
+ comp1.setString("NAME", "MyCompany");
+
+ DataObject dept1 = root.createDataObject("DEPARTMENT");
+ dept1.setString("NAME", "MyCompanyDepartment");
+ comp1.getList("departments").add(dept1);
+
+ try {
+ das.applyChanges(root);
+ } catch (RuntimeException ex) {
+ fail("Did not expect exception!");
+ }
+
+ //read.setParameter(1, new Integer(1));
+ root = read.executeQuery();
+ comp1 = root.getDataObject("COMPANY[ID="+compId+"]");
+ assertNotNull(comp1);
+ assertEquals("MyCompany", comp1.getString("NAME"));
+ List comp1Depts = comp1.getList("departments");
+ boolean foundNewDept = false;
+ DataObject curDept = null;
+
+ for(int i=0; i<comp1Depts.size(); i++) {
+ curDept = (DataObject)comp1Depts.get(i);
+ if(curDept.getString("NAME").equals("MyCompanyDepartment")) {
+ foundNewDept = true;
+ break;
+ }
+ }
+
+ if(!foundNewDept) {
+ fail("Expected new department to be available!");
+ }
+
+ assertEquals(comp1.getInt("ID"), curDept.getInt("COMPANYID"));
+
+ //2-Insert Parent, Update
child///////////////////////////////////////////
+ DataObject compNew = root.createDataObject("COMPANY");
+ compNew.setString("NAME", "CompanyNew");
+ compNew.getList("departments").add(curDept);
+ try {
+ das.applyChanges(root);
+ } catch (RuntimeException ex) {
+ fail("Did not expect exception!");
+ }
+ compNew = root.getDataObject("COMPANY[NAME='CompanyNew']");
+
+ root = read.executeQuery();
+ compNew = root.getDataObject("COMPANY[ID="+compNew.getInt("ID")+"]");
+ assertNotNull(compNew);
+ int newCompany_id = compNew.getInt("ID");
+ List newCompDepts = compNew.getList("departments");
+
+ DataObject deptNew = (DataObject)newCompDepts.get(0);
+ assertEquals(newCompany_id, deptNew.getInt("COMPANYID"));
+ assertEquals("MyCompanyDepartment", deptNew.getString("NAME"));
+
+ //3-Update Parent, Update Child
+ compNew.setString("NAME", "MyNewCompanyName");
+ deptNew.setString("NAME", "XYZNewSoap123Dept");
+ try {
+ das.applyChanges(root);
+ } catch (RuntimeException ex) {
+ fail("Did not expect exception!");
+ }
+
+ //read.setParameter(1, new Integer(newCompany_id));
+ root = read.executeQuery();
+ compNew = root.getDataObject("COMPANY[ID="+newCompany_id+"]");
+ assertNotNull(compNew);
+ deptNew = (DataObject)compNew.getList("departments").get(0);
+ assertEquals(newCompany_id, deptNew.getInt("COMPANYID"));
+ assertEquals("XYZNewSoap123Dept", deptNew.getString("NAME"));
+ }
+
+ public void testOneToManyNoAutogenKeys() throws Exception {
+ DAS das =
DAS.FACTORY.createDAS(getConfig("CustomersOrdersConfig.xml"), getConnection());
+
+ Command read = das.getCommand("customer and orders");
+ read.setParameter(1, new Integer(1));
+ DataObject root = read.executeQuery();
+ DataObject cust1 = root.getDataObject("CUSTOMER[1]");
+
+ //1-Update parent , Insert
child/////////////////////////////////////////////
+ cust1.setString("LASTNAME", "MyCustomer");
+
+ DataObject ord1 = root.createDataObject("ANORDER");
+ ord1.setInt("ID", 100);
+ ord1.setString("PRODUCT", "XYZNewProduct");
+ cust1.getList("orders").add(ord1);
+
+ try {
+ das.applyChanges(root);
+ } catch (RuntimeException ex) {
+ fail("Did not expect exception!");
+ }
+
+ read.setParameter(1, new Integer(1));
+ root = read.executeQuery();
+ cust1 = root.getDataObject("CUSTOMER[1]");
+ assertNotNull(cust1);
+ assertEquals("MyCustomer", cust1.getString("LASTNAME"));
+ List cust1Ords = cust1.getList("orders");
+ boolean foundNewOrder = false;
+ DataObject curOrd = null;
+
+ for(int i=0; i<cust1Ords.size(); i++) {
+ curOrd = (DataObject)cust1Ords.get(i);
+ if(curOrd.getString("PRODUCT").equals("XYZNewProduct")) {
+ foundNewOrder = true;
+ break;
+ }
+ }
+
+ if(!foundNewOrder) {
+ fail("Expected new order to be available!");
+ }
+
+ assertEquals(cust1.getInt("ID"), curOrd.getInt("CUSTOMER_ID"));
+
+ //2-Insert Parent, Update
child///////////////////////////////////////////
+ DataObject custNew = root.createDataObject("CUSTOMER");
+ custNew.setInt("ID", 100);
+ custNew.setString("LASTNAME", "CustNew");
+ custNew.getList("orders").add(curOrd);
+ try {
+ das.applyChanges(root);
+ } catch (RuntimeException ex) {
+ fail("Did not expect exception!");
+ }
+
+ read.setParameter(1, new Integer(100));
+ root = read.executeQuery();
+ custNew = root.getDataObject("CUSTOMER[1]");
+ assertNotNull(custNew);
+ int newCustomer_id = custNew.getInt("ID");
+ List newCustOrds = custNew.getList("orders");
+
+ DataObject ordNew = (DataObject)newCustOrds.get(0);
+ assertEquals(newCustomer_id, ordNew.getInt("CUSTOMER_ID"));
+ assertEquals("XYZNewProduct", ordNew.getString("PRODUCT"));
+
+ //3-Update Parent, Update Child
+ custNew.setString("LASTNAME", "MyNewLastName");
+ ordNew.setString("PRODUCT", "XYZNewSoap123Product");
+ try {
+ das.applyChanges(root);
+ } catch (RuntimeException ex) {
+ fail("Did not expect exception!");
+ }
+
+ read.setParameter(1, new Integer(100));
+ root = read.executeQuery();
+ custNew = root.getDataObject("CUSTOMER[1]");
+ assertNotNull(custNew);
+ ordNew = (DataObject)custNew.getList("orders").get(0);
+ assertEquals(100, ordNew.getInt("CUSTOMER_ID"));
+ assertEquals("XYZNewSoap123Product", ordNew.getString("PRODUCT"));
+ }
+}
\ No newline at end of file
Added:
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/ProductData.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/ProductData.java?rev=597050&view=auto
==============================================================================
---
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/ProductData.java
(added)
+++
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/ProductData.java
Wed Nov 21 04:18:12 2007
@@ -0,0 +1,41 @@
+/*
+ * 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.
+ */
+package org.apache.tuscany.das.rdb.test.data;
+
+import java.sql.Connection;
+import java.sql.Types;
+
+import org.apache.tuscany.das.rdb.test.framework.TestDataWithExplicitColumns;
+
+public class ProductData extends TestDataWithExplicitColumns {
+ private static int[] columnTypes = {Types.INTEGER, Types.VARCHAR};
+
+ private static Object[][] productData = {{new Integer(1), "XYZSoap"}, {new
Integer(2), "ABCOil"}, {new Integer(3), "PQRPen"}};
+
+ private static String[] productColumns = {"ID", "NAME"};
+
+ public ProductData(Connection connection) {
+ super(connection, productData, productColumns, columnTypes);
+ }
+
+ public String getTableName() {
+ return "PRODUCT";
+ }
+
+}
\ No newline at end of file
Added:
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/ProductProdSpecData.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/ProductProdSpecData.java?rev=597050&view=auto
==============================================================================
---
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/ProductProdSpecData.java
(added)
+++
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/ProductProdSpecData.java
Wed Nov 21 04:18:12 2007
@@ -0,0 +1,44 @@
+/*
+ * 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.
+ */
+package org.apache.tuscany.das.rdb.test.data;
+
+import java.sql.Connection;
+
+import org.apache.tuscany.das.rdb.test.framework.RelationshipData;
+
+
+public class ProductProdSpecData extends RelationshipData {
+
+ protected static Object[][] data = {
+ {"XYZSoap", "XYZSoapSpec"},
+ {"ABCOil", "ABCOilSpec"}};
+
+ public ProductProdSpecData(Connection c) {
+ super(c, data);
+ }
+
+ protected String getParentRetrievalStatement() {
+ return "select product.id from product where product.name = ?";
+ }
+
+ protected String getChildUpdateStatement() {
+ return "update productspec set productspec.product_id = ? where
productspec.name = ?";
+ }
+
+}
Added:
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/ProductSpecData.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/ProductSpecData.java?rev=597050&view=auto
==============================================================================
---
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/ProductSpecData.java
(added)
+++
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/ProductSpecData.java
Wed Nov 21 04:18:12 2007
@@ -0,0 +1,41 @@
+/*
+ * 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.
+ */
+package org.apache.tuscany.das.rdb.test.data;
+
+import java.sql.Connection;
+import java.sql.Types;
+
+import org.apache.tuscany.das.rdb.test.framework.TestDataWithExplicitColumns;
+
+public class ProductSpecData extends TestDataWithExplicitColumns {
+ private static int[] columnTypes = {Types.INTEGER, Types.VARCHAR};
+
+ private static Object[][] productSpecData = {{new Integer(1),
"XYZSoapSpec"}, {new Integer(2), "ABCOilSpec"}};
+
+ private static String[] productSpecColumns = {"ID", "NAME"};
+
+ public ProductSpecData(Connection connection) {
+ super(connection, productSpecData, productSpecColumns, columnTypes);
+ }
+
+ public String getTableName() {
+ return "PRODUCTSPEC";
+ }
+
+}
\ No newline at end of file
Modified:
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DatabaseSetup.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DatabaseSetup.java?rev=597050&r1=597049&r2=597050&view=diff
==============================================================================
---
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DatabaseSetup.java
(original)
+++
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DatabaseSetup.java
Wed Nov 21 04:18:12 2007
@@ -166,8 +166,8 @@
"DROP TABLE SINGER",
"DROP TABLE SONG",
"DROP TABLE DASTEST1.EMPLOYEE",
- "DROP TABLE DOCUMENTS_IMAGES"
-
+ "DROP TABLE DOCUMENTS_IMAGES",
+ "DROP TABLE PRODUCT", "DROP TABLE PRODUCTSPEC",
};
for (int i = 0; i < statements.length; i++) {
@@ -260,6 +260,8 @@
s.execute(getCreateKennel());
s.execute(getCreateVisit());
s.execute(getCreateOrderDetailsDesc());//JIRA-841
+ s.execute(getCreateProduct());//no autogen ids
+ s.execute(getCreateProductSpec());//no autogen ids
//JIRA-952 start
s.execute(getCreateDASTEST1Customer());
@@ -397,6 +399,18 @@
return "CREATE TABLE CONMGT.SERVERSTATUS (STATUSID INTEGER PRIMARY KEY
NOT NULL " + getGeneratedKeyClause()
+ " (START WITH 1 ,INCREMENT BY 1), MANAGEDSERVERID INTEGER
NOT NULL, TIMESTAMP TIMESTAMP NOT NULL)";
+ }
+
+ protected String getCreateProduct() {
+
+ return "CREATE TABLE PRODUCT (ID INTEGER PRIMARY KEY NOT NULL "
+ + " , "+getStringColumn("NAME", 50) + ")";
+ }
+
+ protected String getCreateProductSpec() {
+
+ return "CREATE TABLE PRODUCTSPEC (ID INTEGER PRIMARY KEY NOT NULL "
+ +", "+ getIntegerColumn("PRODUCT_ID") +",
"+getStringColumn("NAME", 50) + ")";
}
// Dog Kennel Schema
Added:
incubator/tuscany/java/das/rdb/src/test/resources/OneToOneNonRestrictedConfig.xml
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/test/resources/OneToOneNonRestrictedConfig.xml?rev=597050&view=auto
==============================================================================
---
incubator/tuscany/java/das/rdb/src/test/resources/OneToOneNonRestrictedConfig.xml
(added)
+++
incubator/tuscany/java/das/rdb/src/test/resources/OneToOneNonRestrictedConfig.xml
Wed Nov 21 04:18:12 2007
@@ -0,0 +1,51 @@
+<?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="get named employee with company"
+ SQL="select * from EMPLOYEE left outer join COMPANY on
EMPLOYEE.ID = COMPANY.EOTMID where EMPLOYEE.NAME= ?" kind = "Select"/>
+
+ <Table tableName="COMPANY">
+ <Column columnName="ID" primaryKey="true" generated="true"/>
+ </Table>
+
+ <Table tableName="EMPLOYEE">
+ <Column columnName="ID" primaryKey="true" generated="true"/>
+ </Table>
+
+ <Relationship name="company" primaryKeyTable="EMPLOYEE"
foreignKeyTable="COMPANY" many="false" keyRestricted="false">
+ <KeyPair primaryKeyColumn="ID" foreignKeyColumn="EOTMID" />
+ </Relationship>
+
+ <Command name="get spec with product"
+ SQL="select * from PRODUCT left outer join PRODUCTSPEC on
PRODUCT.ID = PRODUCTSPEC.PRODUCT_ID where PRODUCT.NAME= ?" kind = "Select"/>
+
+ <Table tableName="PRODUCT">
+ <Column columnName="ID" primaryKey="true" generated="false"/>
+ </Table>
+
+ <Table tableName="PRODUCTSPEC">
+ <Column columnName="ID" primaryKey="true" generated="false"/>
+ </Table>
+
+ <Relationship name="prodspec" primaryKeyTable="PRODUCT"
foreignKeyTable="PRODUCTSPEC" many="false" keyRestricted="false">
+ <KeyPair primaryKeyColumn="ID" foreignKeyColumn="PRODUCT_ID" />
+ </Relationship>
+
+</Config>
\ No newline at end of file
Modified:
incubator/tuscany/java/das/rdb/src/test/resources/OneToOneRestrictedConfig.xml
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/test/resources/OneToOneRestrictedConfig.xml?rev=597050&r1=597049&r2=597050&view=diff
==============================================================================
---
incubator/tuscany/java/das/rdb/src/test/resources/OneToOneRestrictedConfig.xml
(original)
+++
incubator/tuscany/java/das/rdb/src/test/resources/OneToOneRestrictedConfig.xml
Wed Nov 21 04:18:12 2007
@@ -50,5 +50,20 @@
<KeyPair primaryKeyColumn="ID" foreignKeyColumn="EOTMID" />
</Relationship>
+ <Command name="get spec with product"
+ SQL="select * from PRODUCT left outer join PRODUCTSPEC on
PRODUCT.ID = PRODUCTSPEC.PRODUCT_ID where PRODUCT.NAME= ?" kind = "Select"/>
+
+ <Table tableName="PRODUCT">
+ <Column columnName="ID" primaryKey="true" generated="false"/>
+ </Table>
+
+ <Table tableName="PRODUCTSPEC">
+ <Column columnName="ID" primaryKey="true" generated="false"/>
+ </Table>
+
+ <Relationship name="prodspec" primaryKeyTable="PRODUCT"
foreignKeyTable="PRODUCTSPEC" many="false" keyRestricted="true">
+ <KeyPair primaryKeyColumn="ID" foreignKeyColumn="PRODUCT_ID" />
+ </Relationship>
+
</Config>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]