summaryrefslogtreecommitdiffstats
path: root/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb
diff options
context:
space:
mode:
Diffstat (limited to 'das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb')
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/AliasTests.java162
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/BestPracticeTests.java153
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CUDGeneration.java111
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CommandGroupTests.java161
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompanyTests.java101
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompoundKeyRelationshipTests.java265
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompoundKeyTests.java109
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ConverterTests.java219
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CorrectedDefectTests.java304
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CrudWithChangeHistory.java405
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/DefectTests.java112
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ExceptionTests.java149
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedCommandTests.java94
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedId.java313
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GraphMergeTests.java188
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ImpliedRelationshipTests.java112
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/KennelTests.java123
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/MultiSchemaTests.java715
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OCCTests.java163
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OneToOneRelationshipTests.java174
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java116
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/Paging.java134
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PartialUpdateTests.java267
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PassiveConnectionTests.java94
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ProgrammaticConfigTests.java386
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ReadDBSchemaTests.java55
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RecursiveTests.java71
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RelationshipTests.java241
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ResultSetShapeTests.java91
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SerializationTests.java76
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SimplestCrud.java228
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/StoredProcs.java142
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TopDown.java73
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TransactionTests.java87
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TypeTests.java90
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersByLastnameCommand.java56
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersCommand.java57
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersStaticTypesCommand.java60
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersWithShapeCommand.java63
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/SimpleReadCustomersWithShapeCommand.java83
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/BookData.java46
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CityData.java54
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyData.java44
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyDeptData.java41
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyEmpData.java45
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CustomerData.java39
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepEmpData.java43
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepartmentData.java44
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DogData.java54
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/EmployeeData.java46
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/KennelData.java53
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/MultiSchemaData.java99
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderData.java41
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderDetailsData.java43
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderDetailsDescriptionData.java47
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OwnerData.java53
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OwnerDogData.java41
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/PartData.java48
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/StateData.java48
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/TypesData.java38
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/VisitData.java52
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DB2Setup.java37
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DasTest.java147
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DatabaseSetup.java525
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DerbySetup.java44
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/JavaStoredProcs.java97
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/MySQLSetup.java105
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/RelationshipData.java80
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestData.java126
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestDataWithExplicitColumns.java87
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/IntegerToBooleanConverter.java43
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/SillyDateStringConverter.java77
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringObfuscationConverter.java65
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToIntegerConverter.java39
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToLongConverter.java37
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllCommonTests.java116
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDB2.java44
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDerby.java35
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsMySQL.java39
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/typed/SimplestStaticCrud.java56
-rw-r--r--das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/util/PrintPropertiesOfDataObject.java134
81 files changed, 9555 insertions, 0 deletions
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/AliasTests.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/AliasTests.java
new file mode 100644
index 0000000000..b9226e3e01
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/AliasTests.java
@@ -0,0 +1,162 @@
+/*
+ * 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;
+
+import java.util.Iterator;
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.DAS;
+import org.apache.tuscany.das.rdb.test.data.BookData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class AliasTests extends DasTest {
+
+ protected void setUp() throws Exception {
+
+ super.setUp();
+ new BookData(getAutoConnection()).refresh();
+ }
+
+ /**
+ * Tests the use of column aliasing. The property name change is found in the
+ * BooksConfig.xml file Otherwise similar to testTableAlias
+ *
+ * @throws Exception
+ */
+ public void testColumnAlias() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("BooksConfigWithAlias.xml"), getConnection());
+
+ Command select = das.getCommand("get all books");
+ // select.setConnection( getConnection() );
+
+ DataObject root = select.executeQuery();
+
+ DataObject book = root.getDataObject("Book[2]");
+ book.set("Writer", "Dr. Seuss");
+
+ das.applyChanges(root);
+
+ select = das.getCommand("get Cat in the Hat");
+
+ root = select.executeQuery();
+ // Ensure the change actually updated
+ assertEquals("Dr. Seuss", root.getString("Book[1]/Writer"));
+ }
+
+ /**
+ * Tests to ensure that columns are being properly read when using an Alias,
+ * just a bunch of simple creating, renaming, and deleting of entries
+ * while using an alias.
+ */
+ public void testColumnData() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("BooksConfigWithAlias.xml"), getConnection());
+
+ Command select = das.getCommand("get book by ID");
+ select.setParameter(1, Integer.valueOf(1));
+
+ // *******Verifys a column entry is readable
+ DataObject root = select.executeQuery();
+ assertEquals("Fyodor Dostoevsky", root.getString("Book[1]/Writer"));
+
+ DataObject bookToChange = root.getDataObject("Book[1]");
+ bookToChange.set("Writer", "Fyodor Dostoevskii"); // His last name COULD be spelt like that too!
+
+ das.applyChanges(root);
+
+ // *******Verifys correct information in entry after a column data is changed
+ select = das.getCommand("get all books");
+ // select.setConnection(getConnection());
+
+ root = select.executeQuery();
+ bookToChange = null;
+ Iterator i = root.getList("Book").iterator();
+ while (i.hasNext()) {
+ DataObject d = (DataObject) i.next();
+ if ("Fyodor Dostoevskii".equals(d.getString("Writer"))) {
+ bookToChange = d;
+ }
+ }
+ assertFalse(bookToChange == null);
+
+ bookToChange.delete();
+
+ das.applyChanges(root);
+
+ // *******Verifys correct in table, after entry is deleted
+ select = das.getCommand("get all books");
+ // select.setConnection(getConnection());
+
+ root = select.executeQuery();
+ assertEquals(1, root.getList("Book").size());
+ assertEquals("Doctor Seuss", root.getString("Book[1]/Writer"));
+ }
+
+ /**
+ * Test to check if updating a table works when using Aliasing Previously this was test_4 in ExceptionTests.
+ */
+ public void testTableAlias() throws Exception {
+
+ // Create Table config programmatically
+ // ConfigHelper helper = new ConfigHelper();
+ // helper.addTable("BOOK", "Book");
+ // helper.addPrimaryKey("BOOK.BOOK_ID");
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("BooksConfigWithAlias.xml"), getConnection());
+ Command select = das.getCommand("get book by ID");
+ select.setParameter(1, Integer.valueOf(1));
+
+ DataObject root = select.executeQuery();
+
+ DataObject newBook = root.createDataObject("Book");
+ newBook.setString("NAME", "Ant Colonies of the Old World");
+ newBook.setInt("BOOK_ID", 1001);
+ root.getList("Book").add(newBook);
+
+ das.applyChanges(root);
+
+ root = select.executeQuery();
+
+ // Verify
+ select.setParameter(1, Integer.valueOf(1001));
+ root = select.executeQuery();
+
+ assertEquals("Ant Colonies of the Old World", root.getString("Book[1]/NAME"));
+ }
+
+ /**
+ * Test ability to assign DataObject type and propertyaliases with xml file
+ */
+ public void testRead() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("customerMapping.xml"), getConnection());
+ // Read a customer
+ Command select = das.createCommand("SELECT * FROM CUSTOMER WHERE CUSTOMER.ID = 1");
+
+ DataObject root = select.executeQuery();
+ DataObject customer = root.getDataObject("Customer[1]");
+ assertEquals(1, customer.getInt("id"));
+ assertEquals("1212 foobar lane", customer.getString("address"));
+ assertEquals("Williams", customer.getString("lastname"));
+
+ }
+} \ No newline at end of file
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/BestPracticeTests.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/BestPracticeTests.java
new file mode 100644
index 0000000000..bb53cb65e5
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/BestPracticeTests.java
@@ -0,0 +1,153 @@
+/*
+ * 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;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.DAS;
+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.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.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class BestPracticeTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ new CompanyData(getAutoConnection()).refresh();
+ new DepartmentData(getAutoConnection()).refresh();
+ new EmployeeData(getAutoConnection()).refresh();
+ new CompanyDeptData(getAutoConnection()).refresh();
+ new DepEmpData(getAutoConnection()).refresh();
+
+ }
+
+ //Read list of companies
+ public void testReadCompanies() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml"), getConnection());
+ Command read = das.getCommand("all companies");
+ DataObject root = read.executeQuery();
+ assertEquals(3, root.getList("COMPANY").size());
+
+ }
+
+ //Read list of companies
+ public void testReadCompaniesWithDepartments() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml"), getConnection());
+ Command read = das.getCommand("all companies and departments");
+ DataObject root = read.executeQuery();
+
+ Iterator i = root.getList("COMPANY").iterator();
+ while (i.hasNext()) {
+ DataObject d = (DataObject) i.next();
+ List departments = d.getList("departments");
+ if (d.getString("NAME").equals("Do-rite plumbing") || d.getString("NAME").equals("ACME Publishing")) {
+ assertEquals(0, departments.size());
+ } else {
+ assertEquals(1, departments.size());
+ }
+ }
+
+ }
+
+ public void testddDepartmentToFirstCompany() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml"), getConnection());
+ Command read = das.getCommand("all companies and departments");
+ DataObject root = read.executeQuery();
+ DataObject firstCustomer = root.getDataObject("COMPANY[1]");
+ int deptCount = firstCustomer.getList("departments").size();
+
+ DataObject newDepartment = root.createDataObject("DEPARTMENT");
+ firstCustomer.getList("departments").add(newDepartment);
+
+ das.applyChanges(root);
+
+ //verify
+ root = read.executeQuery();
+ firstCustomer = root.getDataObject("COMPANY[1]");
+ assertEquals(deptCount + 1, firstCustomer.getList("departments").size());
+ }
+
+ /**
+ * Test ability to correctly flush heirarchy of objects that have generated
+ * keys
+ */
+ public void testFlushCreateHeirarchy() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml"), getConnection());
+ Command select = das.getCommand("all companies and departments");
+ DataObject root = select.executeQuery();
+
+ // Create a new Company
+ DataObject company = root.createDataObject("COMPANY");
+ company.setString("NAME", "Do-rite Pest Control");
+
+ // Create a new Department
+ //Do not set ID or CompanyID since these are generated
+ DataObject department = root.createDataObject("DEPARTMENT");
+ department.setString("NAME", "Do-rite Pest Control");
+ department.setString("LOCATION", "The boonies");
+ department.setString("DEPNUMBER", "101");
+
+ // Associate the new department with the new company
+ company.getList("departments").add(department);
+
+ // Get apply command
+ das.applyChanges(root);
+
+ // Save the id
+ Integer id = (Integer) company.get("ID");
+
+ // Verify the change
+
+ select = das.getCommand("company by id with departments");
+ select.setParameter(1, id);
+ root = select.executeQuery();
+ assertEquals("Do-rite Pest Control", root.getDataObject("COMPANY[1]").getString("NAME"));
+
+ }
+
+ /**
+ * Test ability to get an empty graph with the Types/Properties intact
+ */
+ public void testGetEmptyGraph() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml"), getConnection());
+
+ Command select = das.getCommand("company by id with departments");
+ Integer idOfNoExistingCompany = Integer.valueOf(-1);
+ select.setParameter(1, idOfNoExistingCompany);
+ DataObject root = select.executeQuery();
+
+ //Will fail if there is no property named "COMPANY"
+ assertEquals(0, root.getList("COMPANY").size());
+
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CUDGeneration.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CUDGeneration.java
new file mode 100644
index 0000000000..ee42438cb1
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CUDGeneration.java
@@ -0,0 +1,111 @@
+/*
+ * 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;
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.DAS;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.data.OrderData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class CUDGeneration extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ new CustomerData(getAutoConnection()).refresh();
+ new OrderData(getAutoConnection()).refresh();
+ }
+
+ /**
+ * This tests provides invalid SQL and should fail on Apply.execute. If not
+ * then the engine is generating CUD and overlooking the provided
+ * statements.
+ */
+ public void testCUDGeneration1() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConfig("basicCustomerMappingWithInvalidCUD.xml"), getConnection());
+
+ // Read customer with particular ID
+ Command select = das.createCommand("Select * from CUSTOMER where ID = 1");
+ DataObject root = select.executeQuery();
+
+ DataObject customer = (DataObject) root.get("CUSTOMER[1]");
+
+ // Modify customer
+ customer.set("LASTNAME", "Pavick");
+
+ // Flush changes
+ try {
+ das.applyChanges(root);
+ fail("Should fail with invalid SQL. Provided CUD not used!!");
+ } catch (RuntimeException e) {
+ // Everything OK
+ }
+
+ }
+
+ public void testInsertCUDGeneration() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+
+ Command select = das.createCommand("Select * from CUSTOMER where ID = 1");
+ DataObject root = select.executeQuery();
+
+ DataObject customer = root.createDataObject("CUSTOMER");
+ customer.setInt("ID", 720);
+ customer.set("LASTNAME", "foobar");
+ customer.set("ADDRESS", "asdfasdf");
+
+ das.applyChanges(root);
+
+ select = das.createCommand("select * from CUSTOMER where ID = 720");
+ root = select.executeQuery();
+
+ assertEquals(1, root.getList("CUSTOMER").size());
+ }
+
+ public void testReadModifyApply() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("1xM_mapping_no_cud.xml"), getConnection());
+
+ // Build the select command to read a specific customer and related
+ // orders
+ Command select = das.createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON "
+ + "CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = ?");
+
+ // Parameterize the command
+ select.setParameter(1, Integer.valueOf(1));
+
+ // Get the graph
+ DataObject root = select.executeQuery();
+
+ // Modify a customer
+ DataObject customer = (DataObject) root.get("Customer[1]");
+ customer.set("LASTNAME", "Pavick");
+
+ // Modify an order
+ DataObject order = (DataObject) customer.get("orders[1]");
+ order.setString("PRODUCT", "Kitchen Sink 001");
+
+ das.applyChanges(root);
+
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CommandGroupTests.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CommandGroupTests.java
new file mode 100644
index 0000000000..076f8d9db7
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CommandGroupTests.java
@@ -0,0 +1,161 @@
+/*
+ * 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;
+
+/*
+ * This test
+ *
+ */
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.DAS;
+import org.apache.tuscany.das.rdb.config.Config;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.data.OrderData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+import org.apache.tuscany.das.rdb.util.ConfigUtil;
+
+import commonj.sdo.DataObject;
+
+/**
+ *
+ * This tests use of the XML Config file. Tests will utilize the
+ * customer-orders-orderdetails tables. The plan is for the config file to have a
+ * section that applies to all commands and another that applies to specific commands.
+ *
+ * The config file will be used to initialize a command factory that will then return named commands.
+ *
+ * There will be two read commands:
+ *
+ * 1) Return all customers 2) Return a specific customer (by ID) and related orders and order details
+ *
+ * A test will demonstrate the creation of the factory and then reuse of commands created from the same config data file
+ *
+ */
+public class CommandGroupTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ new CustomerData(getAutoConnection()).refresh();
+ new OrderData(getAutoConnection()).refresh();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ /**
+ * Read
+ */
+ public void testRead() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("CustomersOrdersConfig.xml"), getConnection());
+
+ Command read = das.getCommand("all customers");
+ DataObject root = read.executeQuery();
+
+ assertEquals(5, root.getList("CUSTOMER").size());
+
+ }
+
+ /**
+ * Read
+ */
+ public void testReadUsingConfigInput() throws Exception {
+ Config config = ConfigUtil.loadConfig(getConfig("CustomersOrdersConfig.xml"));
+ DAS das = DAS.FACTORY.createDAS(config, getConnection());
+
+ Command read = das.getCommand("all customers");
+ DataObject root = read.executeQuery();
+
+ assertEquals(5, root.getList("CUSTOMER").size());
+
+ }
+
+ /**
+ * Read an order using parm marker
+ */
+ public void testReadWithParmmarker() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("CustomersOrdersConfig.xml"), getConnection());
+
+ Command read = das.getCommand("order by id");
+ read.setParameter(1, Integer.valueOf(1));
+ DataObject root = read.executeQuery();
+
+ assertEquals("recombobulator", root.getString("ANORDER[1]/PRODUCT"));
+
+ }
+
+ /**
+ * Specify connection properties in config. Add explicit update command
+ */
+ public void testUpdate() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("CustomersOrdersConfig.xml"), getConnection());
+
+ Command read = das.getCommand("all customers");
+ DataObject root = read.executeQuery();
+ // Verify precondition
+ assertFalse(root.get("CUSTOMER[1]/LASTNAME").equals("Pavick"));
+ int id = root.getInt("CUSTOMER[1]/ID");
+
+ Command update = das.getCommand("update customer");
+ update.setParameter(1, Integer.valueOf(id));
+ update.execute();
+
+ // Verify update - reuse select command
+ root = read.executeQuery();
+ assertEquals("Pavick", root.get("CUSTOMER[1]/LASTNAME"));
+
+ }
+
+ /**
+ * Read all customers, select a specific customer. Then read that
+ * customer and related orders. Modify an order and flush changes back
+ */
+ public void testRead2() throws Exception {
+
+ // Create the group and set common connection
+ DAS das = DAS.FACTORY.createDAS(getConfig("CustomersOrdersConfig.xml"), getConnection());
+
+ // Read all customers and remember the first one
+ Command read = das.getCommand("all customers");
+ DataObject root = read.executeQuery();
+ Integer id = (Integer) root.get("CUSTOMER[1]/ID");
+
+ // Read the specific Customer from above and its related orders
+ Command custOrders = das.getCommand("customer and orders");
+ custOrders.setParameter(1, id);
+ root = custOrders.executeQuery();
+
+ // Modify the first order and flush this change back to the database
+ root.setString("CUSTOMER[1]/orders[1]/PRODUCT", "Defibrillator");
+ Integer orderId = (Integer) root.get("CUSTOMER[1]/orders[1]/ID");
+ das.applyChanges(root);
+
+ // Verify
+ Command orderByID = das.getCommand("order by id");
+ orderByID.setParameter(1, orderId);
+ assertEquals("Defibrillator", root.getString("ANORDER[1]/PRODUCT"));
+
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompanyTests.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompanyTests.java
new file mode 100644
index 0000000000..677b0d9d85
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompanyTests.java
@@ -0,0 +1,101 @@
+/*
+ * 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;
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.DAS;
+import org.apache.tuscany.das.rdb.test.company.CompanyFactory;
+import org.apache.tuscany.das.rdb.test.company.CompanyType;
+import org.apache.tuscany.das.rdb.test.company.DepartmentType;
+import org.apache.tuscany.das.rdb.test.company.EmployeeType;
+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.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.framework.DasTest;
+import org.apache.tuscany.sdo.util.SDOUtil;
+
+import commonj.sdo.DataObject;
+
+public class CompanyTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ new CompanyData(getAutoConnection()).refresh();
+ new DepartmentData(getAutoConnection()).refresh();
+ new EmployeeData(getAutoConnection()).refresh();
+ new CompanyDeptData(getAutoConnection()).refresh();
+ new DepEmpData(getAutoConnection()).refresh();
+
+ }
+
+ public void testSimple() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("companyMapping.xml"), getConnection());
+
+ // Build the select command
+ Command selectCommand = das.createCommand("select COMPANY.NAME, "
+ + "EMPLOYEE.NAME, EMPLOYEE.SN, EMPLOYEE.MANAGER, "
+ + "DEPARTMENT.NAME, DEPARTMENT.LOCATION, DEPARTMENT.DEPNUMBER from COMPANY, DEPARTMENT, EMPLOYEE "
+ + "where COMPANY.ID=DEPARTMENT.COMPANYID and DEPARTMENT.ID=EMPLOYEE.DEPARTMENTID");
+
+ // Get the graph
+ DataObject root = selectCommand.executeQuery();
+
+ // Get a company
+ DataObject company = (DataObject) root.getList("CompanyType").get(0);
+ assertEquals("MegaCorp", company.get("NAME"));
+
+ // Get a department
+ DataObject department = (DataObject) company.getList("departments").get(0);
+ assertEquals("Advanced Technologies", department.get("NAME"));
+
+ DataObject employee = (DataObject) department.getList("employees").get(0);
+ assertEquals("John Jones", employee.get("NAME"));
+ }
+
+ public void testSimpleStatic() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("companyMappingWithConverters.xml"), getConnection());
+ SDOUtil.registerStaticTypes(CompanyFactory.class);
+ // Build the select command
+ Command selectCommand = das.createCommand("select COMPANY.NAME, "
+ + "EMPLOYEE.NAME, EMPLOYEE.SN, EMPLOYEE.MANAGER, "
+ + "DEPARTMENT.NAME, DEPARTMENT.LOCATION, DEPARTMENT.DEPNUMBER from COMPANY, DEPARTMENT, EMPLOYEE "
+ + "where COMPANY.ID=DEPARTMENT.COMPANYID and DEPARTMENT.ID=EMPLOYEE.DEPARTMENTID");
+
+ // Get the graph
+ DataObject root = selectCommand.executeQuery();
+
+ CompanyType company = (CompanyType) root.getList("CompanyType").get(0);
+
+ assertEquals("MegaCorp", company.getName());
+
+ // Get a department
+ DepartmentType department = (DepartmentType) company.getDepartments().get(0);
+ assertEquals("Advanced Technologies", department.getName());
+
+ EmployeeType employee = (EmployeeType) department.getEmployees().get(0);
+
+ assertEquals("John Jones", employee.getName());
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompoundKeyRelationshipTests.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompoundKeyRelationshipTests.java
new file mode 100644
index 0000000000..5dbe3b697b
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompoundKeyRelationshipTests.java
@@ -0,0 +1,265 @@
+/*
+ * 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;
+
+/*
+ *
+ *
+ */
+
+import java.sql.SQLException;
+import java.util.Vector;
+
+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.Relationship;
+import org.apache.tuscany.das.rdb.test.data.OrderDetailsData;
+import org.apache.tuscany.das.rdb.test.data.OrderDetailsDescriptionData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class CompoundKeyRelationshipTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ //new OrderData(getAutoConnection()).refresh();
+ //new ProductData(getAutoConnection()).refresh();
+ new OrderDetailsData(getAutoConnection()).refresh();
+ new OrderDetailsDescriptionData(getAutoConnection()).refresh();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ /**
+ * Test ability to read a compound graph
+ */
+ public void testRead() throws Exception {
+
+ String statement = "SELECT * FROM ORDERDETAILS LEFT JOIN ORDERDETAILSDESC "
+ + "ON ORDERDETAILS.ORDERID = ORDERDETAILSDESC.ORDERID AND " +
+ " ORDERDETAILS.PRODUCTID = ORDERDETAILSDESC.PRODUCTID " +
+ " WHERE ORDERDETAILS.ORDERID = 1 AND ORDERDETAILS.PRODUCTID = 1";
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("OrderDetailsAndDescription.xml"), getConnection());
+ // Read some order details and related order details description
+ Command select = das.createCommand(statement);
+
+ DataObject root = select.executeQuery();
+ DataObject orderdetails = root.getDataObject("ORDERDETAILS[1]");
+
+ assertEquals(2, orderdetails.getList("orderDetailsDesc").size());
+ }
+
+ /**
+ * Same as above except uses xml file for relationhip and key information.
+ * Employs CUD generation.
+ */
+ public void testRelationshipModification2() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConfig("OrderDetailsAndDescription.xml"), getConnection());
+ // Read some order details and related order details descs
+ Command select = das
+ .createCommand("SELECT * FROM ORDERDETAILS LEFT JOIN ORDERDETAILSDESC ON ORDERDETAILS.ORDERID = ORDERDETAILSDESC.ORDERID " +
+ " AND ORDERDETAILS.PRODUCTID = ORDERDETAILSDESC.PRODUCTID");
+
+ DataObject root = select.executeQuery();
+
+ DataObject ordDet1 = root.getDataObject("ORDERDETAILS[1]");
+ DataObject ordDet2 = root.getDataObject("ORDERDETAILS[2]");
+
+ // Save IDs
+ Integer ord1ID = (Integer) ordDet1.get("ORDERID");
+ Integer prod1ID = (Integer) ordDet1.get("PRODUCTID");
+
+ Integer ord2ID = (Integer) ordDet2.get("ORDERID");
+ Integer prod2ID = (Integer) ordDet2.get("PRODUCTID");
+
+ // save order count
+ Integer order1DetDescCount = Integer.valueOf(ordDet1.getList("orderDetailsDesc").size());
+ Integer order2DetDescCount = Integer.valueOf(ordDet2.getList("orderDetailsDesc").size());
+
+ // Move an order detail desc to ord det1 from ord det2
+ DataObject orderDetailsDesc = (DataObject) ordDet2.getList("orderDetailsDesc").get(0);
+ ordDet1.getList("orderDetailsDesc").add(orderDetailsDesc);
+
+ // Flush changes
+ das.applyChanges(root);
+
+ // verify ord det1 relationship updates
+ select = das
+ .createCommand("SELECT * FROM ORDERDETAILS LEFT JOIN ORDERDETAILSDESC ON ORDERDETAILS.ORDERID = ORDERDETAILSDESC.ORDERID " +
+ " AND ORDERDETAILS.PRODUCTID = ORDERDETAILSDESC.PRODUCTID where ORDERDETAILS.ORDERID = ? AND ORDERDETAILS.PRODUCTID = ?");
+ select.setParameter(1, ord1ID);
+ select.setParameter(2, prod1ID);
+
+ root = select.executeQuery();
+ assertEquals(order1DetDescCount.intValue() + 1, root.getList("ORDERDETAILS[1]/orderDetailsDesc").size());
+
+ // verify ord det2 relationship updates
+ select.setParameter(1, ord2ID);
+ select.setParameter(2, prod2ID);
+
+ root = select.executeQuery();
+ assertEquals(order2DetDescCount.intValue() - 1, root.getList("ORDERDETAILS[1]/orderDetailsDesc").size());
+ }
+
+ public void testFKBehavior() throws SQLException {
+ DAS das = DAS.FACTORY.createDAS(getConfig("OrderDetailsAndDescription.xml"), getConnection());
+ // Read some order details and related order details descs
+ Command select = das
+ .createCommand("SELECT * FROM ORDERDETAILS LEFT JOIN ORDERDETAILSDESC ON ORDERDETAILS.ORDERID = ORDERDETAILSDESC.ORDERID " +
+ " AND ORDERDETAILS.PRODUCTID = ORDERDETAILSDESC.PRODUCTID");
+
+ DataObject root = select.executeQuery();
+
+ DataObject ordDet1 = root.getDataObject("ORDERDETAILS[1]");
+ DataObject ordDet2 = root.getDataObject("ORDERDETAILS[2]");
+
+ // Save IDs
+ Integer ord1ID = (Integer) ordDet1.get("ORDERID");
+ Integer prod1ID = (Integer) ordDet1.get("PRODUCTID");
+
+ // Move an order det desc to ord det1 from ord det2
+ DataObject orderDetDesc = (DataObject) ordDet2.getList("orderDetailsDesc").get(0);
+ ordDet1.getList("orderDetailsDesc").add(orderDetDesc);
+ orderDetDesc.setInt("ORDERID", ord1ID);
+
+ 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("OrderDetailsAndDescription.xml"), getConnection());
+ // Read some order details and related order details descs
+ Command select = das
+ .createCommand("SELECT * FROM ORDERDETAILS LEFT JOIN ORDERDETAILSDESC ON ORDERDETAILS.ORDERID = ORDERDETAILSDESC.ORDERID " +
+ " AND ORDERDETAILS.PRODUCTID = ORDERDETAILSDESC.PRODUCTID");
+
+ DataObject root = select.executeQuery();
+
+ DataObject ordDet1 = root.getDataObject("ORDERDETAILS[1]");
+ DataObject ordDet2 = root.getDataObject("ORDERDETAILS[2]");
+
+ // Save IDs
+ Integer ord1ID = (Integer) ordDet1.get("ORDERID");
+ Integer prod1ID = (Integer) ordDet1.get("PRODUCTID");
+
+ // Create an order det desc for ord det1
+ DataObject orderDetDesc = root.createDataObject("ORDERDETAILSDESC");
+ orderDetDesc.setInt("ID", 500);
+ orderDetDesc.setInt("ORDERID", ord1ID);
+ ordDet1.getList("orderDetailsDesc").add(orderDetDesc);
+
+ 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());
+ }
+ }
+
+ //add relationship through config helper
+ public void testValidFKColumn() throws SQLException {
+ ConfigHelper helper = new ConfigHelper();
+ Vector parentColumnNames = new Vector();
+ Vector childColumnNames = new Vector();
+
+ parentColumnNames.add(0, "ORDERDETAILS.ORDERID");
+ parentColumnNames.add(1, "ORDERDETAILS.PRODUCTID");
+
+ childColumnNames.add(0, "ORDERDETAILSDESC.ORDERID");
+ childColumnNames.add(1, "ORDERDETAILSDESC.PRODUCTID");
+
+ Relationship r = helper.addRelationship(parentColumnNames, childColumnNames);
+
+ DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection());
+ Command select = das.createCommand("SELECT * FROM ORDERDETAILS LEFT JOIN ORDERDETAILSDESC ON ORDERDETAILS.ORDERID = ORDERDETAILSDESC.ORDERID " +
+ " AND ORDERDETAILS.PRODUCTID = ORDERDETAILSDESC.PRODUCTID");
+
+ DataObject root = select.executeQuery();
+ DataObject ordDet1 = root.getDataObject("ORDERDETAILS[1]");
+ int order1DetDescCount = ordDet1.getList("ORDERDETAILSDESC").size();
+
+ DataObject orderDetDesc = root.createDataObject("ORDERDETAILSDESC");
+ orderDetDesc.setInt("ID", 500);
+
+ if(ordDet1 == null) System.out.println("order det1 is null");
+ if(ordDet1.getList("ORDERDETAILSDESC") == null)System.out.println("list is null");
+
+ ordDet1.getList("ORDERDETAILSDESC").add(orderDetDesc);
+ try {
+ das.applyChanges(root);
+
+ select = das.createCommand("SELECT * FROM ORDERDETAILS LEFT JOIN ORDERDETAILSDESC ON ORDERDETAILS.ORDERID = ORDERDETAILSDESC.ORDERID " +
+ " AND ORDERDETAILS.PRODUCTID = ORDERDETAILSDESC.PRODUCTID");
+
+ int modOrder1DetDescCount = select.executeQuery().
+ getDataObject("ORDERDETAILS[1]").getList("ORDERDETAILSDESC").size();
+ this.assertEquals(modOrder1DetDescCount, order1DetDescCount+1);
+ } catch (RuntimeException ex) {
+ fail("Exception was not expected:DETAILS:"+ ex.getMessage());
+ }
+ }
+
+ //add invalid relationship through config helper using invalid FK column name
+ public void testInvalidFKColumn() throws SQLException {
+ ConfigHelper helper = new ConfigHelper();
+ Vector parentColumnNames = new Vector();
+ Vector childColumnNames = new Vector();
+
+ parentColumnNames.add(0, "ORDERDETAILS.ORDERID");
+ parentColumnNames.add(1, "ORDERDETAILS.PRODUCTID");
+
+ childColumnNames.add(0, "ORDERDETAILSDESC.ORDERID_INVALID");
+ childColumnNames.add(1, "ORDERDETAILSDESC.PRODUCTID");
+
+ Relationship r = helper.addRelationship(parentColumnNames, childColumnNames);
+
+ DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection());
+ Command select = das.createCommand("SELECT * FROM ORDERDETAILS LEFT JOIN ORDERDETAILSDESC ON ORDERDETAILS.ORDERID = ORDERDETAILSDESC.ORDERID " +
+ " AND ORDERDETAILS.PRODUCTID = ORDERDETAILSDESC.PRODUCTID");
+
+ DataObject root = select.executeQuery();
+ DataObject ordDet1 = root.getDataObject("ORDERDETAILS[1]");
+ int order1DetDescCount = ordDet1.getList("ORDERDETAILSDESC").size();
+
+ DataObject orderDetDesc = root.createDataObject("ORDERDETAILSDESC");
+ orderDetDesc.setInt("ID", 500);
+
+ if(ordDet1 == null) System.out.println("order det1 is null");
+ if(ordDet1.getList("ORDERDETAILSDESC") == null)System.out.println("list is null");
+
+ ordDet1.getList("ORDERDETAILSDESC").add(orderDetDesc);
+ try {
+ das.applyChanges(root);
+ fail("Exception was expected");
+ } catch (RuntimeException ex) {
+ assertEquals("Invalid foreign key column: ORDERID_INVALID", ex.getMessage());
+ }
+ }
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompoundKeyTests.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompoundKeyTests.java
new file mode 100644
index 0000000000..a24ad6319e
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CompoundKeyTests.java
@@ -0,0 +1,109 @@
+/*
+ * 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;
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.DAS;
+import org.apache.tuscany.das.rdb.test.data.OrderData;
+import org.apache.tuscany.das.rdb.test.data.OrderDetailsData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+/**
+ * Tests for Compound Keys
+ */
+public class CompoundKeyTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ new OrderDetailsData(getAutoConnection()).refresh();
+ new OrderData(getAutoConnection()).refresh();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ public void testRead() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ Command getOrderDetails = das.createCommand("Select * from ORDERDETAILS where ORDERID = ? AND PRODUCTID = ?");
+
+ getOrderDetails.setParameter(1, Integer.valueOf(1));
+ getOrderDetails.setParameter(2, Integer.valueOf(1));
+
+ DataObject root = getOrderDetails.executeQuery();
+
+ DataObject orderDetail = (DataObject) root.get("ORDERDETAILS[1]");
+ assertEquals(1.1f, orderDetail.getFloat("PRICE"), 0.01);
+
+ }
+
+ public void testReadModifyWrite2() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConfig("OrdersOrderDetailsConfig.xml"), getConnection());
+ Command getOrderDetails = das.createCommand("Select * from ORDERDETAILS where ORDERID = 1 AND PRODUCTID = 1");
+
+ DataObject root = getOrderDetails.executeQuery();
+
+ DataObject orderDetails = (DataObject) root.get("ORDERDETAILS[1]");
+ assertEquals(1.1f, orderDetails.getFloat("PRICE"), 0.01);
+
+ // Modify
+ orderDetails.setFloat("PRICE", 0f);
+
+ // Build apply changes command
+
+ das.applyChanges(root);
+
+ // Verify
+ root = getOrderDetails.executeQuery();
+ orderDetails = root.getDataObject("ORDERDETAILS[1]");
+ assertEquals(0f, orderDetails.getFloat("PRICE"), 0.01);
+
+ }
+
+ public void testReadOrdersAndDetails2() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConfig("OrdersOrderDetailsConfig.xml"), getConnection());
+ Command read = das.createCommand("SELECT * FROM ANORDER LEFT JOIN ORDERDETAILS "
+ + "ON ANORDER.ID = ORDERDETAILS.ORDERID ORDER BY ANORDER.ID");
+
+ DataObject root = read.executeQuery();
+
+ DataObject firstOrder = root.getDataObject("ANORDER[1]");
+ assertEquals(1, firstOrder.getInt("ID"));
+ assertEquals(2, firstOrder.getList("ORDERDETAILS").size());
+
+ }
+
+ public void testReadAndDelete() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConfig("OrdersOrderDetailsConfig.xml"), getConnection());
+ Command getOrderDetails = das.createCommand("Select * from ORDERDETAILS where ORDERID = ? AND PRODUCTID = ?");
+
+ getOrderDetails.setParameter(1, Integer.valueOf(1));
+ getOrderDetails.setParameter(2, Integer.valueOf(1));
+
+ DataObject root = getOrderDetails.executeQuery();
+
+ DataObject orderDetail = (DataObject) root.get("ORDERDETAILS[1]");
+ orderDetail.delete();
+ das.applyChanges(root);
+
+ }
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ConverterTests.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ConverterTests.java
new file mode 100644
index 0000000000..2429daa13a
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ConverterTests.java
@@ -0,0 +1,219 @@
+/*
+ * 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;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.DAS;
+import org.apache.tuscany.das.rdb.test.customer.Customer;
+import org.apache.tuscany.das.rdb.test.customer.CustomerFactory;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+import org.apache.tuscany.sdo.util.SDOUtil;
+
+import commonj.sdo.DataObject;
+
+/**
+ * Tests the Converter framwork
+ */
+public class ConverterTests extends DasTest {
+
+ private static DateFormat myformat = new SimpleDateFormat("yyyy.MM.dd");
+
+ private static Date kbday;
+
+ private static Date tbday;
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ new CustomerData(getAutoConnection()).refresh();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ static {
+ try {
+ kbday = myformat.parse("1957.09.27");
+ tbday = myformat.parse("1966.12.20");
+ } catch (ParseException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * This tests the use of an arbitrary converter. The column converted is a VARCAHAR. ResultSetShape is used to specify that the property will be a
+ * SDODataTypes.DATE.
+ *
+ * So this example uses a converter that transforms a string column into a date property and conversely, a date property back to a string for the
+ * underlying column.
+ *
+ * The converter returns 1957.09.27 if the column value is "Williams" and 1966.12.20 if the value is "Pavick"
+ *
+ * On write, the converter returns "Pavick" if the property value is 1966.12.20 and "Williams" if the property value is 1957.09.27
+ *
+ */
+ public void testArbitraryConverter() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConfig("CustomerConfigWithConverter.xml"), getConnection());
+
+ // Create and initialize command to read customers
+ Command read = das.getCommand("testArbitraryConverter");
+
+ // Read
+ DataObject root = read.executeQuery();
+
+ // Verify
+ assertEquals(kbday, root.getDate("CUSTOMER[1]/LASTNAME"));
+
+ // Modify
+ root.setDate("CUSTOMER[1]/LASTNAME", tbday);
+
+ das.applyChanges(root);
+
+ // Read
+ root = read.executeQuery();
+
+ // Verify
+ assertEquals(tbday, root.getDate("CUSTOMER[1]/LASTNAME"));
+
+ }
+
+ public void testInvalidConverter1() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("InvalidConverter.xml"), getConnection());
+
+ // Build the select command to read a specific customer and related
+ // orders
+ Command select = das
+ .createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER " + "ON CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = ?");
+
+ // Parameterize the command
+ select.setParameter(1, Integer.valueOf(1));
+
+ // Get the graph
+ try {
+ select.executeQuery();
+ } catch (Exception ex) {
+ assertEquals("java.lang.ClassNotFoundException: not.a.valid.class", ex.getMessage());
+ }
+
+ }
+
+ public void testInvalidConverter2() throws Exception {
+
+ SDOUtil.registerStaticTypes(CustomerFactory.class);
+ DAS das = DAS.FACTORY.createDAS(getConfig("InvalidConverter.xml"), getConnection());
+
+ // Build the select command to read a specific customer and related
+ // orders
+ Command select = das.createCommand("SELECT * FROM ANORDER");
+
+ // Get the graph
+
+ DataObject root = select.executeQuery();
+ DataObject order = root.getDataObject("AnOrder[1]");
+
+ Customer customer = (Customer) root.createDataObject("Customer");
+ customer.setID(700);
+ customer.setLastName("Daniel");
+ customer.setAddress("an address");
+
+ customer.getOrders().add(order);
+
+ try {
+ das.applyChanges(root);
+ } catch (Exception ex) {
+ assertEquals("java.lang.ClassNotFoundException: not.a.valid.class", ex.getMessage());
+ }
+
+ }
+
+ /**
+ * This tests the use of a converter that does not produce a new "type". Instead it
+ * modifies the original value before storing to the database. In this exampe, the
+ * converter restores the original value on read.
+ *
+ * This is illustrated by obfuscating the lastname value before it is stored to the database and
+ * deobfuscating on read.
+ *
+ */
+ public void testConverter3() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConfig("CustomerConfigWithConverter2.xml"), getConnection());
+
+ // Create and initialize command to read customers
+ Command read = das.getCommand("getFirstCustomer");
+
+ // Read
+ DataObject root = read.executeQuery();
+
+ //Modify
+ root.setString("CUSTOMER[1]/LASTNAME", "Some new name");
+
+ das.applyChanges(root);
+
+ // Read
+ root = read.executeQuery();
+
+ // Verify that I can read back the deobfuscated value
+ assertEquals("Some new name", root.getString("CUSTOMER[1]/LASTNAME"));
+
+ //Now read directly without applying the converter to ensure that the value was obfuscated
+ //in the database.
+ DAS das2 = DAS.FACTORY.createDAS(getConnection());
+ Command directRead = das2.createCommand("select * from CUSTOMER where ID = 1");
+ root = directRead.executeQuery();
+
+ assertEquals("Fbzr arj anzr", root.getString("CUSTOMER[1]/LASTNAME"));
+ assertEquals(obfuscate("Some new name"), root.getString("CUSTOMER[1]/LASTNAME"));
+
+ }
+
+ // Utilities
+
+ private String obfuscate (String original) throws Exception {
+ return toRot13(original);
+ }
+
+ private String deobfuscate (String obfuscated) throws Exception {
+ return toRot13(obfuscated);
+ }
+
+ //A simple, reversible, obfuscation algorithm using a ROT13 implementation
+ private String toRot13(String original) throws Exception {
+
+ int abyte = 0;
+ byte[] buffer = original.getBytes("ISO-8859-1");
+
+ for (int i = 0; i < buffer.length; i++) {
+ abyte = buffer[i];
+ int cap = abyte & 32;
+ abyte &= ~cap;
+ abyte = ((abyte >= 'A') && (abyte <= 'Z') ? ((abyte - 'A' + 13) % 26 + 'A') : abyte) | cap;
+ buffer[i] = (byte) abyte;
+ }
+
+ return new String(buffer, "ISO-8859-1");
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CorrectedDefectTests.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CorrectedDefectTests.java
new file mode 100644
index 0000000000..ff2af5256c
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CorrectedDefectTests.java
@@ -0,0 +1,304 @@
+/*
+ * 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;
+
+/*
+ * These tests attempt to duplicate customer reported errors and then to verify
+ * any necessary fix.
+ *
+ */
+
+import java.util.Iterator;
+import java.util.Random;
+
+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.Table;
+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.CustomerData;
+import org.apache.tuscany.das.rdb.test.data.DepartmentData;
+import org.apache.tuscany.das.rdb.test.data.OrderData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class CorrectedDefectTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ new CustomerData(getAutoConnection()).refresh();
+ new OrderData(getAutoConnection()).refresh();
+
+ new CompanyData(getAutoConnection()).refresh();
+ new DepartmentData(getAutoConnection()).refresh();
+ new CompanyDeptData(getAutoConnection()).refresh();
+
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ /**
+ * Dilton's bug for adding new child data object
+ */
+ public void testAddNewOrder() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConfig("CustomersOrdersConfig.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 cust = root.getDataObject("CUSTOMER[1]");
+
+ // Save ID and Order Count
+ int custID = cust.getInt("ID");
+ int custOrderCount = cust.getList("orders").size();
+
+ // Create a new Order and add to customer1
+ DataObject order = root.createDataObject("ANORDER");
+
+ order.set("ID", Integer.valueOf(99));
+ order.set("PRODUCT", "The 99th product");
+ order.set("QUANTITY", Integer.valueOf(99));
+ cust.getList("orders").add(order);
+
+ assertEquals(custOrderCount + 1, cust.getList("orders").size());
+
+ // Build apply changes command
+ das.applyChanges(root);
+
+ // verify cust1 relationship updates
+ select = das.createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER "
+ + "ON CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = ?");
+
+ select.setParameter(1, Integer.valueOf(custID));
+ root = select.executeQuery();
+
+ assertEquals(custOrderCount + 1, root.getList("CUSTOMER[1]/orders").size());
+
+ }
+
+ public void testDiltonsInsertWorkaround() throws Exception {
+
+ // String sql = "insert into conmgt.serverstatus (statusid,
+ // managedserverid, timestamp) values (316405209, 316405209, '2005-11-23
+ // 19:29:52.636')";
+ // String sql = "insert into conmgt.serverstatus (managedserverid,
+ // timestamp) values (316405209, '2005-11-23 19:29:52.636')";
+ String sql = "insert into conmgt.serverstatus (managedserverid, timestamp) values (?, ?)";
+
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ Command insert = das.createCommand(sql);
+ insert.setParameter(1, Integer.valueOf(316405209));
+ insert.setParameter(2, "2005-11-23 19:29:52.636");
+ insert.execute();
+
+ // Verify
+ Command select = das.createCommand("Select * from conmgt.SERVERSTATUS");
+ DataObject root = select.executeQuery();
+ assertEquals(1, root.getList("SERVERSTATUS").size());
+
+ }
+
+ public void testWASDefect330118() throws Exception {
+
+ // Create the group and set common connection
+ DAS das = DAS.FACTORY.createDAS(getConfig("CustomersOrdersConfig.xml"), getConnection());
+
+ // Read all customers and add one
+ Command read = das.getCommand("all customers");
+ DataObject root = read.executeQuery();
+ int numCustomers = root.getList("CUSTOMER").size();
+
+ DataObject newCust = root.createDataObject("CUSTOMER");
+ newCust.set("ID", Integer.valueOf(100));
+ newCust.set("ADDRESS", "5528 Wells Fargo Drive");
+ newCust.set("LASTNAME", "Gerkin");
+
+ // Now delete this new customer
+ newCust.delete();
+
+ das.applyChanges(root);
+
+ // Verify
+ root = read.executeQuery();
+ assertEquals(numCustomers, root.getList("CUSTOMER").size());
+
+ }
+
+ /**
+ * Should be able to explicitly set a parameter to null. But, should require
+ * that the parameter type is set.
+ */
+ public void testDiltonsNullParameterBug1() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ Command insert = das.createCommand("insert into CUSTOMER values (?, ?, ?)");
+ insert.setParameter(1, Integer.valueOf(10));
+ insert.setParameter(2, null);
+ insert.setParameter(3, "5528 Wells Fargo Dr");
+ insert.execute();
+
+ // Verify
+ Command select = das.createCommand("Select * from CUSTOMER where ID = 10");
+ DataObject root = select.executeQuery();
+ assertEquals(1, root.getList("CUSTOMER").size());
+ assertEquals("5528 Wells Fargo Dr", root.get("CUSTOMER[1]/ADDRESS"));
+
+ }
+
+ /**
+ * Error by not setting a parameter
+ */
+ public void testDiltonsNullParameterBug2() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ Command insert = das.createCommand("insert into CUSTOMER values (?, ?, ?)");
+ insert.setParameter(1, Integer.valueOf(10));
+ // insert.setParameterValue("LASTNAME", null);
+ insert.setParameter(3, "5528 Wells Fargo Dr");
+
+ try {
+ insert.execute();
+ fail();
+ } catch (RuntimeException e) {
+ // Expected since "LASTNAME" parameter not set
+ }
+ }
+
+ /**
+ * Set parameter to empty string
+ */
+ public void testDiltonsNullParameterBug3() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ Command insert = das.createCommand("insert into CUSTOMER values (?, ?, ?)");
+ insert.setParameter(1, Integer.valueOf(10));
+ insert.setParameter(2, "");
+ insert.setParameter(3, "5528 Wells Fargo Dr");
+ insert.execute();
+
+ // Verify
+ Command select = das.createCommand("Select * from CUSTOMER where ID = 10");
+ DataObject root = select.executeQuery();
+ assertEquals(1, root.getList("CUSTOMER").size());
+ assertEquals("5528 Wells Fargo Dr", root.get("CUSTOMER[1]/ADDRESS"));
+
+ }
+
+ public void testUpdateChildThatHasGeneratedKey() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml"), getConnection());
+
+ // Read a specific company based on the known ID
+ Command readCust = das.getCommand("all companies and departments");
+ DataObject root = readCust.executeQuery();
+ DataObject lastCustomer = root.getDataObject("COMPANY[3]");
+ Iterator i = lastCustomer.getList("departments").iterator();
+ Random generator = new Random();
+ int random = generator.nextInt(1000) + 1;
+ DataObject department;
+ while (i.hasNext()) {
+ department = (DataObject) i.next();
+ // System.out.println("Modifying department: " +
+ // department.getString("NAME"));
+ department.setString("NAME", "Dept-" + random);
+ random = random + 1;
+ }
+
+ das.applyChanges(root);
+ }
+
+ /**
+ * Yin Chen reports ... "In the class Statement, method: public int
+ * executeUpdate(Parameters parameters) - its tossing out RuntimeException
+ * when the value of the parameter is null. "
+ *
+ * His example build a update statement and sets one parameter value to be
+ * null. I will try to duplicate with an insert since that is simpler
+ *
+ */
+ public void testYingChen12162005() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ Command insert = das.createCommand("insert into CUSTOMER values (?, ?, ?)");
+ insert.setParameter(1, Integer.valueOf(10));
+ insert.setParameter(2, "Williams");
+ insert.setParameter(3, null);
+ insert.execute();
+
+ // Verify
+ Command select = das.createCommand("Select * from CUSTOMER where ID = 10");
+ DataObject root = select.executeQuery();
+ assertEquals(1, root.getList("CUSTOMER").size());
+ assertNull(root.get("CUSTOMER[1]/ADDRESS"));
+
+ }
+
+ /**
+ * Formely tests concerning Tuscany-433. The error causing these tests was cleared up when
+ * the method for handling parameters was changed.
+ */
+ public void testReadModifyApply() throws Exception {
+
+ // Provide updatecommand programmatically via config
+ ConfigHelper helper = new ConfigHelper();
+ Table customerTable = helper.addTable("CUSTOMER", "CUSTOMER");
+ helper.addUpdateStatement(customerTable, "update CUSTOMER set LASTNAME = ? where ID = ?", "LASTNAME ID");
+
+ DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection());
+
+ //Read customer 1
+ Command select = das.createCommand("Select * from CUSTOMER where ID = 1");
+ DataObject root = select.executeQuery();
+
+ DataObject customer = (DataObject) root.get("CUSTOMER[1]");
+
+ //Modify customer
+ customer.set("LASTNAME", "Pavick");
+
+ das.applyChanges(root);
+
+ //Verify changes
+ root = select.executeQuery();
+ assertEquals("Pavick", root.getString("CUSTOMER[1]/LASTNAME"));
+
+ }
+
+ public void testReadModifyApply1() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConfig("basicCustomerMappingWithCUD2.xml"), getConnection());
+ //Read customer 1
+ Command select = das.createCommand("Select * from CUSTOMER where ID = 1");
+ DataObject root = select.executeQuery();
+
+ DataObject customer = (DataObject) root.get("CUSTOMER[1]");
+
+ //Modify customer
+ customer.set("LASTNAME", "Pavick");
+
+ //Build apply changes command
+ das.applyChanges(root);
+
+ //Verify changes
+ root = select.executeQuery();
+ assertEquals("Pavick", root.getString("CUSTOMER[1]/LASTNAME"));
+
+ }
+
+} \ No newline at end of file
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CrudWithChangeHistory.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CrudWithChangeHistory.java
new file mode 100644
index 0000000000..e4e46662ee
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/CrudWithChangeHistory.java
@@ -0,0 +1,405 @@
+/*
+ * 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;
+
+/*
+ * This provdes the simplest examples that make use of the change history. The assumptions are:
+ *
+ * Single type Change history utilized Dynamic DataObjects
+ *
+ *
+ */
+
+import java.util.Iterator;
+
+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.Table;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.data.OrderDetailsData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class CrudWithChangeHistory extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ new CustomerData(getAutoConnection()).refresh();
+ new OrderDetailsData(getAutoConnection()).refresh();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ public void testDeleteAndCreate() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConfig("basicCustomerMappingWithCUD2.xml"), getConnection());
+ // Read customer 1
+ Command select = das.createCommand("Select * from CUSTOMER");
+ DataObject root = select.executeQuery();
+
+ DataObject customer = (DataObject) root.get("CUSTOMER[1]");
+
+ int customerId = customer.getInt("ID");
+ // Modify customer
+ customer.delete();
+
+ DataObject newCustomer = root.createDataObject("CUSTOMER");
+ newCustomer.setInt("ID", 9999);
+ newCustomer.setString("LASTNAME", "Jones");
+
+ // Build apply changes command
+ das.applyChanges(root);
+
+ // Verify changes
+ root = select.executeQuery();
+ boolean found = false;
+ Iterator i = root.getList("CUSTOMER").iterator();
+ while (i.hasNext()) {
+ customer = (DataObject) i.next();
+ assertFalse(customerId == customer.getInt("ID"));
+ if (customer.getInt("ID") == 9999) {
+ found = true;
+ }
+ }
+
+ assertTrue(found);
+
+ }
+
+ /**
+ * Read and modify a customer. Provide needed Create/Update/Delete statements programatically
+ */
+ public void testReadModifyApply() throws Exception {
+
+ // Provide updatecommand programmatically via config
+ ConfigHelper helper = new ConfigHelper();
+ Table customerTable = helper.addTable("CUSTOMER", "CUSTOMER");
+ helper.addUpdateStatement(customerTable, "update CUSTOMER set LASTNAME = ?, ADDRESS = ? "
+ + "where ID = ?", "LASTNAME ADDRESS ID");
+
+ DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection());
+ // Read customer 1
+ Command select = das.createCommand("Select * from CUSTOMER where ID = 1");
+ DataObject root = select.executeQuery();
+ assertFalse(root.get("CUSTOMER[1]/LASTNAME").equals("Pavick"));
+
+ DataObject customer = (DataObject) root.get("CUSTOMER[1]");
+
+ // Modify customer
+ customer.set("LASTNAME", "Pavick");
+
+ // Build apply changes command
+ das.applyChanges(root);
+
+ // Verify changes
+ root = select.executeQuery();
+ assertEquals("Pavick", root.getString("CUSTOMER[1]/LASTNAME"));
+
+ }
+
+ /**
+ * Read and modify a customer. Provide needed Create/Update/Delete statements via xml file
+ */
+ public void testReadModifyApply1() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("basicCustomerMappingWithCUD.xml"), getConnection());
+ // Read customer 1
+ Command select = das.createCommand("Select * from CUSTOMER where ID = 1");
+ DataObject root = select.executeQuery();
+ assertFalse(root.get("CUSTOMER[1]/LASTNAME").equals("Pavick"));
+
+ DataObject customer = (DataObject) root.get("CUSTOMER[1]");
+
+ // Modify customer
+ customer.set("LASTNAME", "Pavick");
+
+ // Build apply changes command
+ das.applyChanges(root);
+
+ // Verify changes
+ root = select.executeQuery();
+ assertEquals("Pavick", root.getString("CUSTOMER[1]/LASTNAME"));
+
+ }
+
+ /**
+ * Same as previous but: Utilizes generated CUD statements Key info provided programatically
+ */
+ public void testReadModifyApply2() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ // Read customer with particular ID
+ Command select = das.createCommand("Select * from CUSTOMER where ID = 1");
+ DataObject root = select.executeQuery();
+ assertFalse(root.get("CUSTOMER[1]/LASTNAME").equals("Pavick"));
+
+ DataObject customer = root.getDataObject("CUSTOMER[1]");
+
+ // Modify customer
+ customer.set("LASTNAME", "Pavick");
+
+ // Build apply changes command
+ das.applyChanges(root);
+
+ // Verify the change
+ root = select.executeQuery();
+ assertEquals("Pavick", root.getDataObject("CUSTOMER[1]").getString("LASTNAME"));
+
+ }
+
+ /**
+ * Builds on previous but: 1. Key info provided via XML file
+ */
+ public void testReadModifyApply3() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConfig("basicCustomerMapping.xml"), getConnection());
+ // Read customer with particular ID
+ Command select = das.createCommand("Select * from CUSTOMER where ID = 1");
+ DataObject root = select.executeQuery();
+ assertFalse(root.get("CUSTOMER[1]/LASTNAME").equals("Pavick"));
+
+ DataObject customer = (DataObject) root.get("CUSTOMER[1]");
+
+ // Modify customer
+ customer.set("LASTNAME", "Pavick");
+
+ // Build apply changes command
+ das.applyChanges(root);
+
+ // Verify the change
+ root = select.executeQuery();
+ assertEquals("Pavick", root.getDataObject("CUSTOMER[1]").getString("LASTNAME"));
+
+ }
+
+ /**
+ * Builds on previous but: 1. Uses a named command
+ */
+ public void testReadModifyApply4() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConfig("CustomerConfig.xml"), getConnection());
+ // Read customer with particular ID
+ Command select = das.getCommand("getCustomer");
+ select.setParameter(1, 1);
+ DataObject root = select.executeQuery();
+ assertFalse(root.get("CUSTOMER[1]/LASTNAME").equals("Pavick"));
+
+ DataObject customer = (DataObject) root.get("CUSTOMER[1]");
+
+ // Modify customer
+ customer.set("LASTNAME", "Pavick");
+
+ // Build apply changes command
+ das.applyChanges(root);
+
+ // Verify the change
+ root = select.executeQuery();
+ assertEquals("Pavick", root.getDataObject("CUSTOMER[1]").getString("LASTNAME"));
+
+ }
+
+ public void testReadModifyApplyMultipleRows() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ // Verify pre-condition
+ Command select = das.createCommand("Select * from CUSTOMER");
+ DataObject root = select.executeQuery();
+ assertFalse(root.get("CUSTOMER[1]/LASTNAME").equals("Pavick"));
+ assertFalse(root.get("CUSTOMER[2]/LASTNAME").equals("Silva"));
+
+
+ // Read and modify customer 1
+ DataObject customer1 = (DataObject) root.get("CUSTOMER[1]");
+ customer1.set("LASTNAME", "Pavick");
+
+ // Read and modify customer 2
+ DataObject customer2 = (DataObject) root.get("CUSTOMER[2]");
+ customer2.set("LASTNAME", "Silva");
+
+ // Build apply changes command
+ das.applyChanges(root);
+
+ // Verify changes
+ root = select.executeQuery();
+ assertEquals("Pavick", root.getString("CUSTOMER[1]/LASTNAME"));
+ assertEquals("Silva", root.getString("CUSTOMER[2]/LASTNAME"));
+ }
+
+ /**
+ * Test ability to handle multiple changes to the graph including Creates/Updates/Deletes Employs generated CUD
+ */
+ public void testReadModifyDeleteInsertApply() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("basicCustomerMapping.xml"), getConnection());
+ // Read some customers
+ Command select = das.createCommand("Select * from CUSTOMER where LASTNAME = 'Williams'");
+ DataObject root = select.executeQuery();
+
+ DataObject cust1 = (DataObject) root.getList("CUSTOMER").get(0);
+ DataObject cust2 = (DataObject) root.getList("CUSTOMER").get(1);
+ DataObject cust3 = (DataObject) root.getList("CUSTOMER").get(2);
+
+ // Modify a customer
+ cust1.set("LASTNAME", "Pavick");
+ int cust1ID = cust1.getInt("ID");
+
+ // Save IDs before delete
+ int cust2ID = cust2.getInt("ID");
+ int cust3ID = cust3.getInt("ID");
+ // Delete a couple
+ cust2.delete();
+ cust3.delete();
+
+ // Create a new customer
+ DataObject cust4 = root.createDataObject("CUSTOMER");
+ cust4.set("ID", Integer.valueOf(100));
+ cust4.set("ADDRESS", "5528 Wells Fargo Drive");
+ cust4.set("LASTNAME", "Gerkin");
+
+ // Build apply changes command
+ das.applyChanges(root);
+
+ // Verify deletes
+ select = das.createCommand("Select * from CUSTOMER where ID = ?");
+ select.setParameter(1, Integer.valueOf(cust2ID));
+ root = select.executeQuery();
+ assertTrue(root.getList("CUSTOMER").isEmpty());
+ // reparameterize same command
+ select.setParameter(1, Integer.valueOf(cust3ID));
+ root = select.executeQuery();
+ assertTrue(root.getList("CUSTOMER").isEmpty());
+
+ // verify insert
+ select.setParameter(1, Integer.valueOf(100));
+ root = select.executeQuery();
+ assertEquals(1, root.getList("CUSTOMER").size());
+ assertEquals("5528 Wells Fargo Drive", root.getString("CUSTOMER[1]/ADDRESS"));
+ assertEquals("Gerkin", root.getString("CUSTOMER[1]/LASTNAME"));
+
+ // verify update
+ select.setParameter(1, Integer.valueOf(cust1ID));
+ root = select.executeQuery();
+ assertEquals("Pavick", root.getString("CUSTOMER[1]/LASTNAME"));
+
+ }
+
+ public void testReadModifyApplyWithAssumedID() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ // Read customer with particular ID
+ Command select = das.createCommand("Select * from CUSTOMER");
+ DataObject root = select.executeQuery();
+
+ DataObject customer = root.getDataObject("CUSTOMER[1]");
+
+ // Modify customer
+ customer.set("LASTNAME", "Pavick");
+
+ DataObject customerForDelete = getCustomerByLastName(root, "Daniel");
+ customerForDelete.delete();
+
+ DataObject newCustomer = root.createDataObject("CUSTOMER");
+ newCustomer.set("LASTNAME", "NewCustomer");
+ newCustomer.setInt("ID", 9000);
+
+ // Build apply changes command
+ das.applyChanges(root);
+
+ // Verify the change
+ root = select.executeQuery();
+ assertEquals("Pavick", getCustomerByLastName(root, "Pavick").getString("LASTNAME"));
+ assertEquals("NewCustomer", getCustomerByLastName(root, "NewCustomer").getString("LASTNAME"));
+ assertNull(getCustomerByLastName(root, "Daniel"));
+
+ }
+
+ public void testReadModifyApplyWithAssumedIDFailure() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ Command select = das.createCommand("Select * from ORDERDETAILS");
+
+ DataObject root = select.executeQuery();
+
+ DataObject od = root.getDataObject("ORDERDETAILS[1]");
+
+ // Modify customer
+ od.setInt("PRODUCTID", 72);
+
+ // Flush changes -- This should fail because Order Details does not have
+ // a column that
+ // we can assume to be an ID
+ try {
+ das.applyChanges(root);
+ } catch (RuntimeException ex) {
+ assertTrue(ex.getMessage().contains("changed in the DataGraph but is not present in the Config"));
+ }
+
+ }
+
+ public void testReadModifyApplyWithAssumedIDFailure2() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ Command select = das.createCommand("Select * from ORDERDETAILS");
+ DataObject root = select.executeQuery();
+
+ DataObject od = root.getDataObject("ORDERDETAILS[1]");
+ od.delete();
+
+ // Flush changes -- This should fail because Order Details does not have
+ // a column that
+ // we can assume to be an ID
+ try {
+ das.applyChanges(root);
+ } catch (RuntimeException ex) {
+ assertTrue(ex.getMessage().contains("changed in the DataGraph but is not present in the Config"));
+ }
+
+ }
+
+ public void testReadModifyApplyWithAssumedIDFailure3() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ Command select = das.createCommand("Select * from ORDERDETAILS");
+ DataObject root = select.executeQuery();
+
+ DataObject od = root.createDataObject("ORDERDETAILS");
+
+ // Modify customer
+ od.setInt("PRODUCTID", 72);
+ od.setInt("ORDERID", 500);
+
+ // Flush changes -- This should fail because Order Details does not have
+ // a column that
+ // we can assume to be an ID
+ try {
+ das.applyChanges(root);
+ } catch (RuntimeException ex) {
+ assertTrue(ex.getMessage().contains("changed in the DataGraph but is not present in the Config"));
+ }
+
+ }
+
+ private DataObject getCustomerByLastName(DataObject root, String name) {
+ Iterator i = root.getList("CUSTOMER").iterator();
+ while (i.hasNext()) {
+ DataObject obj = (DataObject) i.next();
+ if (name.equals(obj.getString("LASTNAME"))) {
+ return obj;
+ }
+ }
+ return null;
+ }
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/DefectTests.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/DefectTests.java
new file mode 100644
index 0000000000..2660b7ed43
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/DefectTests.java
@@ -0,0 +1,112 @@
+/*
+ * 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;
+
+/*
+ * These tests attempt to duplicate customer reported errors and then to verify
+ * any necessary fix.
+ *
+ */
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.DAS;
+import org.apache.tuscany.das.rdb.test.data.BookData;
+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.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.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+/**
+ *
+ *
+ */
+public class DefectTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ new CustomerData(getAutoConnection()).refresh();
+ new OrderData(getAutoConnection()).refresh();
+
+ new CompanyData(getAutoConnection()).refresh();
+ new DepartmentData(getAutoConnection()).refresh();
+ new EmployeeData(getAutoConnection()).refresh();
+ new CompanyDeptData(getAutoConnection()).refresh();
+ new DepEmpData(getAutoConnection()).refresh();
+ new BookData(getAutoConnection()).refresh();
+
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ /**
+ * Read a specific customer
+ */
+ public void testDiltonsInsert() throws Exception {
+
+ // String sql = "insert into conmgt.serverstatus (statusid,
+ // managedserverid, timestamp) values (316405209, 316405209, '2005-11-23
+ // 19:29:52.636')";
+ String sql = "insert into conmgt.serverstatus (managedserverid, timestamp) "
+ + "values (316405209, '2005-11-23 19:29:52.636')";
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ Command insert = das.createCommand(sql);
+ insert.execute();
+
+ // Verify
+ Command select = das.createCommand("Select * from conmgt.serverstatus where statusid = 316405209");
+ DataObject root = select.executeQuery();
+ assertEquals(1, root.getList("conmgt.serverstatus").size());
+
+ }
+
+
+ /**
+ * Test expected failure when applyChanges processes DO with no PK columns. We
+ * should throw a better error than NPE
+ */
+
+ public void testReadUpdateWithNoPKColumns() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("BooksConfig.xml"),getConnection());
+ // Read a book instance
+ Command select = das.createCommand("SELECT NAME, AUTHOR, QUANTITY, OCC FROM BOOK WHERE BOOK_ID = 1");
+ DataObject root = select.executeQuery();
+
+ DataObject book = root.getDataObject("BOOK[1]");
+ // Change a field to mark the instance 'dirty'
+ book.setInt("QUANTITY", 2);
+
+ try {
+ das.applyChanges(root);
+ fail("An exception should be thrown since the DO has no PK defined");
+ } catch (NullPointerException ex) {
+ fail("We should do better than an NPE");
+ }
+ }
+
+
+} \ No newline at end of file
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ExceptionTests.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ExceptionTests.java
new file mode 100644
index 0000000000..e66095cdd7
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ExceptionTests.java
@@ -0,0 +1,149 @@
+/*
+ * 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;
+
+import java.sql.Connection;
+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.company.CompanyFactory;
+import org.apache.tuscany.das.rdb.test.customer.CustomerFactory;
+import org.apache.tuscany.das.rdb.test.data.BookData;
+import org.apache.tuscany.das.rdb.test.data.CompanyData;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.data.OrderData;
+import org.apache.tuscany.das.rdb.test.data.OrderDetailsData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+import org.apache.tuscany.sdo.util.SDOUtil;
+
+public class ExceptionTests extends DasTest {
+
+ public ExceptionTests() {
+ super();
+ }
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ new CustomerData(getAutoConnection()).refresh();
+ new OrderData(getAutoConnection()).refresh();
+ new BookData(getAutoConnection()).refresh();
+ new OrderDetailsData(getAutoConnection()).refresh();
+ new CompanyData(getAutoConnection()).refresh();
+
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ public void testMissingConnection() throws Exception {
+ DAS das = DAS.FACTORY.createDAS((Connection) null);
+
+ try {
+ Command readCustomers = das.createCommand("select * from CUSTOMER where ID = 1");
+ readCustomers.executeQuery();
+ fail("RuntimeException should be thrown");
+ } catch (RuntimeException ex) {
+ assertEquals("No connection has been provided and no data source has been specified", ex.getMessage());
+ }
+
+ }
+
+ public void testUnregisteredTypes() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConfig("staticInvalid.xml"), getConnection());
+ Command readCustomers = das.createCommand("select * from CUSTOMER where ID = 1");
+
+ try {
+ readCustomers.executeQuery();
+
+ fail("Exception should be thrown");
+ } catch (RuntimeException ex) {
+ assertEquals("SDO Types have not been registered for URI invalidURI", ex.getMessage());
+ }
+ }
+
+ public void testMissingMapping() throws Exception {
+ SDOUtil.registerStaticTypes(CustomerFactory.class);
+ DAS das = DAS.FACTORY.createDAS(getConfig("staticCustomer.xml"), getConnection());
+ Command readCustomers = das.createCommand("select * from CUSTOMER where ID = 1");
+
+ try {
+ readCustomers.executeQuery();
+
+ fail("Exception should be thrown");
+ } catch (RuntimeException ex) {
+ assertEquals("An SDO Type with name CUSTOMER was not found", ex.getMessage());
+ }
+
+ }
+
+ /**
+ * Test ability to describe problem when a user passes an empty stream
+ */
+ public void testEmptyStream() throws Exception {
+ try {
+ DAS.FACTORY.createDAS(getConfig("NonExistingFile.xml"));
+ fail("Error should be thrown");
+ } catch (RuntimeException e) {
+ assertEquals("Cannot load configuration from a null InputStream. Possibly caused "
+ + "by an incorrect config xml file name", e.getMessage());
+ }
+ }
+
+ /**
+ * Test ability to describe problem when a user passes an empty stream
+ */
+ public void testEmptyStream2() throws Exception {
+ try {
+ DAS.FACTORY.createDAS(getConfig("NonExistingFile.xml"));
+ fail("Error should be thrown");
+ } catch (RuntimeException e) {
+ assertEquals("Cannot load configuration from a null InputStream. Possibly caused "
+ + "by an incorrect config xml file name", e.getMessage());
+ }
+ }
+
+ public void testReadOrdersAndDetails2() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("InvalidConfig1.xml"), getConnection());
+ Command read = das.createCommand("SELECT * FROM ANORDER LEFT JOIN ORDERDETAILS "
+ + "ON ANORDER.ID = ORDERDETAILS.ORDERID ORDER BY ANORDER.ID");
+
+ try {
+ read.executeQuery();
+ } catch (Exception ex) {
+ assertEquals("The parent table (xxx) in relationship ORDERDETAILS was not found.", ex.getMessage());
+ }
+
+ }
+
+ public void testMismatchedDataObjectModel() throws SQLException {
+ SDOUtil.registerStaticTypes(CompanyFactory.class);
+ DAS das = DAS.FACTORY.createDAS(getConfig("companyMappingWithConverters.xml"), getConnection());
+ Command read = das.createCommand("select * from company");
+ try {
+ read.executeQuery();
+ } catch (RuntimeException ex) {
+ assertEquals("Type CompanyType does not contain a property named ID", ex.getMessage());
+ }
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedCommandTests.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedCommandTests.java
new file mode 100644
index 0000000000..45c83e6167
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedCommandTests.java
@@ -0,0 +1,94 @@
+/*
+ * 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;
+
+import java.util.List;
+
+import org.apache.tuscany.das.rdb.test.commands.ReadCustomersByLastnameCommand;
+import org.apache.tuscany.das.rdb.test.commands.ReadCustomersCommand;
+import org.apache.tuscany.das.rdb.test.commands.ReadCustomersStaticTypesCommand;
+import org.apache.tuscany.das.rdb.test.commands.ReadCustomersWithShapeCommand;
+import org.apache.tuscany.das.rdb.test.commands.SimpleReadCustomersWithShapeCommand;
+import org.apache.tuscany.das.rdb.test.customer.Customer;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class GeneratedCommandTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ new CustomerData(getAutoConnection()).refresh();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ public void testReadCustomers() throws Exception {
+ ReadCustomersCommand cmd = new ReadCustomersCommand();
+ cmd.setConnection(getConnection());
+
+ DataObject root = cmd.executeQuery();
+ assertEquals(5, root.getList("CUSTOMER").size());
+ }
+
+ public void testReadSomeCustomers() throws Exception {
+ ReadCustomersByLastnameCommand cmd = new ReadCustomersByLastnameCommand();
+ cmd.setConnection(getConnection());
+ cmd.setParameter(1, "Williams");
+
+ DataObject root = cmd.executeQuery();
+ assertEquals(4, root.getList("CUSTOMER").size());
+
+ }
+
+ public void testReadCustomersStaticTypes() throws Exception {
+ ReadCustomersStaticTypesCommand cmd = new ReadCustomersStaticTypesCommand();
+ cmd.setConnection(getConnection());
+ cmd.setParameter(1, "Williams");
+
+ DataObject root = cmd.executeQuery();
+
+ List customers = root.getList("Customer");
+ assertEquals(4, customers.size());
+
+ Customer cust1 = (Customer) customers.get(0);
+ assertEquals("Williams", cust1.getLastName());
+
+ }
+
+ public void testSimpleReadCustomersWithShape() throws Exception {
+ SimpleReadCustomersWithShapeCommand cmd = new SimpleReadCustomersWithShapeCommand();
+ cmd.setConnection(getConnection());
+ DataObject root = cmd.executeQuery();
+ assertEquals(5, root.getList("CUSTOMER").size());
+ }
+
+ public void testReadCustomersOrdersWithShape() throws Exception {
+ ReadCustomersWithShapeCommand cmd = new ReadCustomersWithShapeCommand();
+ cmd.setConnection(getConnection());
+
+ DataObject root = cmd.executeQuery();
+ assertEquals(5, root.getList("CUSTOMER").size());
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedId.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedId.java
new file mode 100644
index 0000000000..a7d483da38
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GeneratedId.java
@@ -0,0 +1,313 @@
+/*
+ * 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;
+
+/*
+ * Generated IDs
+ *
+ *
+ */
+
+import java.util.Iterator;
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.DAS;
+import org.apache.tuscany.das.rdb.test.data.CompanyData;
+import org.apache.tuscany.das.rdb.test.data.DepartmentData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class GeneratedId extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ new CompanyData(getAutoConnection()).refresh();
+ new DepartmentData(getAutoConnection()).refresh();
+
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ // Test insert into row with generated ID
+ public void testInsert() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ Command insert = das.createCommand("insert into COMPANY (NAME) values (?)");
+ insert.setParameter(1, "AAA Rental");
+ insert.execute();
+
+ // Verify insert
+ // Verify
+ Command select = das.createCommand("Select ID, NAME from COMPANY");
+ DataObject root = select.executeQuery();
+
+ assertEquals(4, root.getList("COMPANY").size());
+ assertTrue(root.getInt("COMPANY[1]/ID") > 0);
+
+ }
+
+ // Test back to back insertions with the same command
+ public void testInsert2() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ Command insert = das.createCommand("insert into COMPANY (NAME) values (?)");
+ insert.setParameter(1, "AAA Rental");
+ insert.execute();
+
+ // insert another using same command
+ insert.setParameter(1, "BBB Rental");
+ insert.execute();
+
+ // Verify insert
+ // Verify
+ Command select = das.createCommand("Select ID, NAME from COMPANY");
+ DataObject root = select.executeQuery();
+
+ assertEquals(5, root.getList("COMPANY").size());
+
+ }
+
+ // Test ability to retrieve and utilize the generated key
+ public void testInsert3() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ Command insert = das.createCommand("insert into COMPANY (NAME) values (?)");
+ insert.setParameter(1, "AAA Rental");
+ insert.execute();
+ // Integer key = (Integer) insert.getParameterValue("generated_key");
+ Integer key = (Integer) insert.getGeneratedKey();
+
+ // Verify insert
+ Command select = das.createCommand("Select ID, NAME from COMPANY where ID = ?");
+ select.setParameter(1, key);
+ DataObject root = select.executeQuery();
+ assertEquals(key, root.get("COMPANY[1]/ID"));
+
+ }
+
+ // Test insert into row with generated ID and generated insert
+ public void testInsert4() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml"), getConnection());
+ Command select = das.getCommand("all companies");
+ DataObject root = select.executeQuery();
+
+ DataObject company = root.createDataObject("COMPANY");
+ company.setString("NAME", "Phil's Tires");
+ // This shouldn't do anything
+ company.setInt("ID", 999);
+
+ das.applyChanges(root);
+
+ // Verify insert
+ root = select.executeQuery();
+
+ assertEquals(4, root.getList("COMPANY").size());
+ Iterator i = root.getList("COMPANY").iterator();
+ while (i.hasNext()) {
+ DataObject comp = (DataObject) i.next();
+ assertFalse(comp.getInt("ID") == 999);
+ }
+
+ }
+
+ /**
+ * Test insert into row with generated ID and no attributes set
+ */
+ public void testInsert5() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml"), getConnection());
+ Command select = das.getCommand("all companies");
+ DataObject root = select.executeQuery();
+
+ root.createDataObject("COMPANY");
+
+ das.applyChanges(root);
+
+ // Verify insert
+ root = select.executeQuery();
+ assertEquals(4, root.getList("COMPANY").size());
+
+ }
+
+
+ // Test ability to propogate generated values back to owning data objects
+ public void testPropagateIds() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml"), getConnection());
+ Command select = das.getCommand("all companies");
+ DataObject root = select.executeQuery();
+
+ // Create a new Company
+ DataObject company = root.createDataObject("COMPANY");
+ company.setString("NAME", "Do-rite Pest Control");
+
+ // verify pre-condition (id is not there until after flush)
+ assertNull(company.get("ID"));
+
+ // Flush changes
+ das.applyChanges(root);
+
+ // Save the id
+ Integer id = (Integer) company.get("ID");
+
+ // Verify the change
+ select = das.createCommand("Select * from COMPANY where ID = ?");
+ select.setParameter(1, id);
+ root = select.executeQuery();
+ assertEquals("Do-rite Pest Control", root.getDataObject("COMPANY[1]").getString("NAME"));
+
+ }
+
+ /**
+ * Same as above but metadata provided by XML config file
+ */
+ public void testPropagateIdsXML() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConfig("basicCompanyMapping.xml"), getConnection());
+ Command select = das.createCommand("Select * from COMPANY");
+ DataObject root = select.executeQuery();
+
+ // Create a new Company
+ DataObject company = root.createDataObject("COMPANY");
+ company.setString("NAME", "Do-rite Pest Control");
+
+ // verify pre-condition (id is not there until after flush)
+ assertNull(company.get("ID"));
+
+ // Flush changes
+ das.applyChanges(root);
+
+ // Save the id
+ Integer id = (Integer) company.get("ID");
+
+ // Verify the change
+ select = das.createCommand("Select * from COMPANY where ID = ?");
+ select.setParameter(1, id);
+ root = select.executeQuery();
+ assertEquals("Do-rite Pest Control", root.getDataObject("COMPANY[1]").getString("NAME"));
+
+ }
+
+ /**
+ * Test ability to correctly flush heirarchy of objects that have generated
+ * keys
+ */
+ public void testFlushCreateHeirarchy() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("basicCompanyDepartmentMapping.xml"), getConnection());
+ String selectCompanys = "SELECT * FROM COMPANY LEFT JOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.COMPANYID";
+
+ Command select = das.createCommand(selectCompanys);
+ DataObject root = select.executeQuery();
+
+ // Create a new Company
+ DataObject company = root.createDataObject("COMPANY");
+ company.setString("NAME", "Do-rite Pest Control");
+
+ // Create a new Department
+ // Do not set ID or CompanyID since these are generated
+ // ID INT, NAME VARCHAR(30), LOCATION VARCHAR(30), NUMBER VARCHAR(10),
+ // COMPANYID INT, EOTM INT
+ DataObject department = root.createDataObject("DEPARTMENT");
+ department.setString("NAME", "Do-rite Pest Control");
+ department.setString("LOCATION", "The boonies");
+ department.setString("DEPNUMBER", "101");
+
+ // Associate the new department with the new company
+ company.getList("departments").add(department);
+
+ das.applyChanges(root);
+
+ // Save the id
+ Integer id = (Integer) company.get("ID");
+
+ // Verify the change
+ String selectString = "SELECT * FROM COMPANY LEFT JOIN DEPARTMENT "
+ + "ON COMPANY.ID = DEPARTMENT.COMPANYID WHERE COMPANY.ID = ?";
+
+ select = das.createCommand(selectString);
+ select.setParameter(1, id);
+ root = select.executeQuery();
+ assertEquals("Do-rite Pest Control", root.getDataObject("COMPANY[1]").getString("NAME"));
+
+ }
+
+ /**
+ * Test ability to correctly flush heirarchy of objects that have generated
+ * keys even when a created object has legal but NULL property values
+ */
+ public void testFlushCreateHeirarchy2() throws Exception {
+
+ String selectCompanys = "SELECT * FROM COMPANY LEFT JOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.COMPANYID";
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("basicCompanyDepartmentMapping.xml"), getConnection());
+ Command select = das.createCommand(selectCompanys);
+ DataObject root = select.executeQuery();
+
+ // Create a new Company
+ DataObject company = root.createDataObject("COMPANY");
+ company.setString("NAME", "Do-rite Pest Control");
+
+ // Create a new Department
+ // Do not set ID or CompanyID since these are generated
+ // ID INT, NAME VARCHAR(30), LOCATION VARCHAR(30), NUMBER VARCHAR(10),
+ // COMPANYID INT, EOTM INT
+ DataObject department = root.createDataObject("DEPARTMENT");
+ department.setString("NAME", "Do-rite Pest Control");
+ // Do not set this property to force storing NULL to DB
+ // department.setString("LOCATION", "The boonies");
+ department.setString("DEPNUMBER", "101");
+
+ // Associate the new department with the new company
+ company.getList("departments").add(department);
+
+ das.applyChanges(root);
+
+ // Save the id
+ Integer id = (Integer) company.get("ID");
+
+ // Verify the change
+ String selectString = "SELECT * FROM COMPANY LEFT JOIN DEPARTMENT "
+ + "ON COMPANY.ID = DEPARTMENT.COMPANYID WHERE COMPANY.ID = ?";
+
+ select = das.createCommand(selectString);
+ select.setParameter(1, id);
+ root = select.executeQuery();
+ assertEquals("Do-rite Pest Control", root.getDataObject("COMPANY[1]").getString("NAME"));
+
+ }
+
+ // Test that error is thrown when no key has been generated (as in a select)
+ public void testRead() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ Command select = das.createCommand("Select * from COMPANY");
+ select.executeQuery();
+
+ try {
+ select.getGeneratedKey();
+ fail("Should throw exception");
+ } catch (RuntimeException e) {
+ assertEquals("This method is only valid for insert commands", e.getMessage());
+ }
+ }
+
+} \ No newline at end of file
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GraphMergeTests.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GraphMergeTests.java
new file mode 100644
index 0000000000..23b530dc34
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/GraphMergeTests.java
@@ -0,0 +1,188 @@
+/*
+ * 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;
+
+import java.util.ArrayList;
+import java.util.List;
+
+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.merge.impl.GraphMerger;
+import org.apache.tuscany.das.rdb.test.customer.Customer;
+import org.apache.tuscany.das.rdb.test.customer.CustomerFactory;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.data.OrderData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+import org.apache.tuscany.sdo.util.SDOUtil;
+
+import commonj.sdo.DataObject;
+
+public class GraphMergeTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ new CustomerData(getAutoConnection()).refresh();
+ new OrderData(getAutoConnection()).refresh();
+
+ }
+
+ public void testCreateEmptyGraph() throws Exception {
+ String typeUri = "http:///org.apache.tuscany.das.rdb.test/customer.xsd";
+ SDOUtil.registerStaticTypes(CustomerFactory.class);
+ ConfigHelper helper = new ConfigHelper();
+ helper.setDataObjectModel(typeUri);
+ DataObject graph = new GraphMerger().emptyGraph(helper.getConfig());
+ assertEquals(0, graph.getList("Customer").size());
+ assertEquals(0, graph.getList("AnOrder").size());
+
+ }
+
+ public void testCreateEmptyGraphAndAddCustomer() throws Exception {
+ String typeUri = "http:///org.apache.tuscany.das.rdb.test/customer.xsd";
+ SDOUtil.registerStaticTypes(CustomerFactory.class);
+ ConfigHelper helper = new ConfigHelper();
+ helper.setDataObjectModel(typeUri);
+ helper.addTable("CUSTOMER", "Customer");
+ helper.addPrimaryKey("CUSTOMER.ID");
+
+ DataObject graph = new GraphMerger().emptyGraph(helper.getConfig());
+ Customer c = (Customer) graph.createDataObject("Customer");
+ c.setID(4000);
+ c.setLastName("Smith");
+ c.setAddress("400 Fourth Street");
+
+ DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection());
+ das.applyChanges(graph);
+
+ Command cmd = das.createCommand("select * from CUSTOMER order by ID desc");
+ graph = cmd.executeQuery();
+ assertEquals(6, graph.getList("Customer").size());
+ assertEquals("Smith", graph.getDataObject("Customer[1]").getString("lastName"));
+ assertEquals("400 Fourth Street", graph.getDataObject("Customer[1]").getString("address"));
+
+ }
+
+ public void testSingleTableMerge() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ Command select = das.createCommand("Select ID, LASTNAME, ADDRESS from CUSTOMER where ID <= ?");
+ select.setParameter(1, "3");
+ DataObject graph1 = select.executeQuery();
+ assertEquals(3, graph1.getList("CUSTOMER").size());
+
+ select.setParameter(1, "5");
+ DataObject graph2 = select.executeQuery();
+ assertEquals(5, graph2.getList("CUSTOMER").size());
+
+ GraphMerger merger = new GraphMerger();
+ merger.addPrimaryKey("CUSTOMER.ID");
+ DataObject mergedGraph = merger.merge(graph1, graph2);
+
+ assertEquals(5, mergedGraph.getList("CUSTOMER").size());
+ }
+
+ public void testSingleTableMergeThreeGraphs() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ Command select = das.createCommand("Select ID, LASTNAME, ADDRESS from CUSTOMER where ID <= ?");
+ select.setParameter(1, "3");
+ DataObject graph1 = select.executeQuery();
+ assertEquals(3, graph1.getList("CUSTOMER").size());
+
+ select.setParameter(1, "4");
+ DataObject graph2 = select.executeQuery();
+ assertEquals(4, graph2.getList("CUSTOMER").size());
+
+ select.setParameter(1, "5");
+ DataObject graph3 = select.executeQuery();
+ assertEquals(5, graph3.getList("CUSTOMER").size());
+
+ GraphMerger merger = new GraphMerger();
+ merger.addPrimaryKey("CUSTOMER.ID");
+ List graphs = new ArrayList();
+ graphs.add(graph1);
+ graphs.add(graph2);
+ graphs.add(graph3);
+ DataObject mergedGraph = merger.merge(graphs);
+
+ assertEquals(5, mergedGraph.getList("CUSTOMER").size());
+
+ }
+
+ public void testMultiTableMerge2() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConfig("CustomersOrdersConfig.xml"), getConnection());
+ // Read some customers and related orders
+ Command select = das.createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON "
+ + "CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = ?");
+
+ select.setParameter(1, Integer.valueOf(1));
+ DataObject graph1 = select.executeQuery();
+
+ DataObject customer = (DataObject) graph1.getList("CUSTOMER").get(0);
+ assertEquals(2, customer.getList("orders").size());
+
+ select.setParameter(1, Integer.valueOf(2));
+ DataObject graph2 = select.executeQuery();
+ DataObject customer2 = (DataObject) graph2.getList("CUSTOMER").get(0);
+ assertEquals(1, graph2.getList("CUSTOMER").size());
+ assertEquals(1, customer2.getList("orders").size());
+ assertEquals(2, customer2.getInt("ID"));
+
+ GraphMerger merger = new GraphMerger();
+ merger.addPrimaryKey("CUSTOMER.ID");
+ merger.addPrimaryKey("ANORDER.ID");
+ DataObject mergedGraph = merger.merge(graph1, graph2);
+
+ assertEquals(3, mergedGraph.getList("ANORDER").size());
+ assertEquals(2, mergedGraph.getList("CUSTOMER").size());
+
+ DataObject mergedCustomer = (DataObject) mergedGraph.getList("CUSTOMER").get(1);
+ assertEquals(2, mergedCustomer.getInt("ID"));
+ assertEquals(1, mergedCustomer.getList("orders").size());
+ DataObject mergedOrder = (DataObject) mergedCustomer.getList("orders").get(0);
+ assertEquals(4, mergedOrder.getInt("ID"));
+
+ }
+
+ public void testMultiTableAppendSingleTable2() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConfig("CustomersOrdersConfig.xml"), getConnection());
+ // Read some customers and related orders
+ Command select = das.createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON "
+ + "CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = ?");
+
+ select.setParameter(1, Integer.valueOf(1));
+ DataObject graph1 = select.executeQuery();
+
+ DataObject customer = (DataObject) graph1.getList("CUSTOMER").get(0);
+ assertEquals(2, customer.getList("orders").size());
+
+ DAS das2 = DAS.FACTORY.createDAS(getConnection());
+ Command select2 = das2.createCommand("select * from ANORDER");
+ DataObject graph2 = select2.executeQuery();
+ assertEquals(4, graph2.getList("ANORDER").size());
+
+ GraphMerger merger = new GraphMerger();
+ merger.addPrimaryKey("CUSTOMER.ID");
+ merger.addPrimaryKey("ANORDER.ID");
+ DataObject mergedGraph = merger.merge(graph1, graph2);
+ assertEquals(4, mergedGraph.getList("ANORDER").size());
+ assertEquals(1, mergedGraph.getList("CUSTOMER").size());
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ImpliedRelationshipTests.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ImpliedRelationshipTests.java
new file mode 100644
index 0000000000..96a01455f5
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ImpliedRelationshipTests.java
@@ -0,0 +1,112 @@
+/*
+ * 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;
+
+import java.util.Iterator;
+
+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.Relationship;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.data.OrderData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+import commonj.sdo.Property;
+
+public class ImpliedRelationshipTests extends DasTest {
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ new CustomerData(getAutoConnection()).refresh();
+ new OrderData(getAutoConnection()).refresh();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ /**
+ * Ensure that an implied relationship is not created when a defined one already exists
+ *
+ * @throws Exception
+ */
+ public void testRelationshipAlreadyDefined() throws Exception {
+ ConfigHelper helper = new ConfigHelper();
+ Relationship r = helper.addRelationship("CUSTOMER.ID", "ANORDER.CUSTOMER_ID");
+ r.setName("definedRelationship");
+
+ DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection());
+ Command select = das.createCommand("select * from CUSTOMER left join ANORDER "
+ + "ON CUSTOMER.ID = ANORDER.CUSTOMER_ID");
+
+ DataObject root = select.executeQuery();
+ DataObject cust = root.getDataObject("CUSTOMER[1]");
+ Iterator i = cust.getType().getProperties().iterator();
+ while (i.hasNext()) {
+ Property p = (Property) i.next();
+ if (!p.getType().isDataType()) {
+ assertEquals(p.getName(), "definedRelationship");
+ }
+ }
+ }
+
+ /**
+ * Add a new Order to a list of Customers without defining any config information
+ *
+ * @throws Exception
+ */
+ public void testAddNewOrder() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+
+ Command select = das.createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER "
+ + "ON CUSTOMER.ID = ANORDER.CUSTOMER_ID");
+
+ DataObject root = select.executeQuery();
+
+ DataObject cust = root.getDataObject("CUSTOMER[1]");
+
+ // Save ID and Order Count
+ int custID = cust.getInt("ID");
+ int custOrderCount = cust.getList("ANORDER").size();
+
+ // Create a new Order and add to customer1
+ DataObject order = root.createDataObject("ANORDER");
+
+ order.set("ID", Integer.valueOf(99));
+ order.set("PRODUCT", "The 99th product");
+ order.set("QUANTITY", Integer.valueOf(99));
+ cust.getList("ANORDER").add(order);
+
+ assertEquals(custOrderCount + 1, cust.getList("ANORDER").size());
+
+ // Build apply changes command
+ das.applyChanges(root);
+
+ // verify cust1 relationship updates
+ select = das.createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON CUSTOMER.ID = ANORDER.CUSTOMER_ID "
+ + "where CUSTOMER.ID = ?");
+
+ select.setParameter(1, Integer.valueOf(custID));
+ root = select.executeQuery();
+
+ assertEquals(custOrderCount + 1, root.getList("CUSTOMER[1]/ANORDER").size());
+ }
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/KennelTests.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/KennelTests.java
new file mode 100644
index 0000000000..b2aa8a8691
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/KennelTests.java
@@ -0,0 +1,123 @@
+/*
+ * 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;
+
+import java.sql.Timestamp;
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.DAS;
+import org.apache.tuscany.das.rdb.test.data.DogData;
+import org.apache.tuscany.das.rdb.test.data.KennelData;
+import org.apache.tuscany.das.rdb.test.data.OwnerData;
+import org.apache.tuscany.das.rdb.test.data.OwnerDogData;
+import org.apache.tuscany.das.rdb.test.data.VisitData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+import org.apache.tuscany.das.rdb.test.framework.TestData;
+
+import commonj.sdo.DataObject;
+
+public class KennelTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ new DogData(getAutoConnection()).refresh();
+ new OwnerData(getAutoConnection()).refresh();
+ new OwnerDogData(getAutoConnection()).refresh();
+ new KennelData(getAutoConnection()).refresh();
+ new VisitData(getAutoConnection()).refresh();
+
+
+ }
+
+ public void testSimple() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+
+ // Build the select command
+ Command selectCommand = das.createCommand("select * from DOG");
+
+ // Get the graph
+ DataObject root = selectCommand.executeQuery();
+
+ assertEquals(3, root.getList("DOG").size());
+
+ }
+
+ public void testSimple2() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+
+ // Build the select command
+ Command selectCommand = das.createCommand("select * from OWNER");
+
+ // Get the graph
+ DataObject root = selectCommand.executeQuery();
+
+ assertEquals(3, root.getList("OWNER").size());
+
+ }
+
+ public void testSimple3() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+
+ // Build the select command
+ Command selectCommand = das.createCommand("select * from OWNER, DOG "
+ + "where DOG.OWNER_ID = OWNER.ID and OWNER.NAME = 'Fanny'");
+
+ // Get the graph
+ DataObject root = selectCommand.executeQuery();
+
+ //Get Fanny
+ DataObject fanny = root.getDataObject("OWNER[1]");
+ assertEquals("Fido", fanny.getString("DOG[1]/NAME"));
+
+ }
+
+ public void testSimple4() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+
+ // Build the select command
+ Command selectCommand = das.createCommand("select * from KENNEL");
+
+ // Get the graph
+ DataObject root = selectCommand.executeQuery();
+
+ assertEquals(3, root.getList("KENNEL").size());
+
+ }
+
+ public void testSimple5() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+
+ // Build the select command
+ Command selectCommand = das.createCommand("select * from VISIT");
+
+ // Get the graph
+ DataObject root = selectCommand.executeQuery();
+
+ assertEquals(3, root.getList("VISIT").size());
+ assertEquals(TestData.getTimestamp("2006-10-20 00:00:00.0"), (Timestamp)root.get("VISIT[1]/CHECK_IN"));
+
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/MultiSchemaTests.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/MultiSchemaTests.java
new file mode 100644
index 0000000000..73543d2bdc
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/MultiSchemaTests.java
@@ -0,0 +1,715 @@
+/*
+ * 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;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.DAS;
+import org.apache.tuscany.das.rdb.test.data.MultiSchemaData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class MultiSchemaTests extends DasTest{
+ protected void setUp() throws Exception {
+ super.setUp();
+ new MultiSchemaData(getAutoConnection()).refresh();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ /**If database is present connect to it and create necessary tables, procedures, data etc.
+ *
+ * Below is test database schema required.
+ * Schema Layout -
+ * Database: DASTEST
+ * Schema: DASTEST1
+ * Tables: CUSTOMER, EMPLOYEE, CITY, ORDERDETAILS
+ * Schema: DASTEST2
+ * Tables: CUSTOMER, ACCOUNT, CITY
+ * Schema: DASTEST3
+ * Tables: CUSTOMER, CUSTORDER, ORDERDETAILSDESC
+ */
+
+ public void testMulitiSchemaCase1() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConfig("MultiSchemaDasConfig1.xml"), getConnection());
+ //test case 1 - CRUD when schemaName, tableName, typeName present - DASTEST1.CUSTOMER
+ //System.out.println("Result:test case 1 - CRUD when schemaName, tableName, typeName present:DASTEST1.CUSTOMER");
+ //test select
+ //System.out.println("Result:test case 1 - SELECT");
+ assertEquals(getCustomers(das).size(), 3);
+
+ //test insert - basic
+ //System.out.println("Result:test case 1 - INSERT(execute())");
+ addCustomer(das);
+ assertEquals(getCustomers(das).size(), 4);
+
+ //test insert - use SDO
+ //System.out.println("Result:test case 1 - INSERT(applyChanges())");
+ addSDOCustomer(das);
+ assertEquals(getCustomers(das).size(), 5);
+
+ //test delete - basic
+ //System.out.println("Result:test case 1 - DELETE(execute())");
+ deleteCustomer(das);
+ assertEquals(getCustomers(das).size(), 4);
+
+ //test delete - SDO
+ //System.out.println("Result:test case 1 - DELETE(applyChanges())");
+ deleteSDOCustomer(das);
+ assertEquals(getCustomers(das).size(), 3);
+
+ //test update
+ //System.out.println("Result:test case 1 - UPDATE");
+ changeFirstCustomerName(das);
+ assertEquals( ((DataObject)getCustomers(das).get(0)).get("LASTNAME"), "Williams");
+ //System.out.println("******************************************");
+ }
+
+ public void testMultiSchemaCase2()throws Exception{
+ DAS das = DAS.FACTORY.createDAS(getConfig("MultiSchemaDasConfig2.xml"), getConnection());
+ //test case 1 - CRUD when schemaName, tableName present, typeName not present - DASTEST2.ACCOUNT
+ //System.out.println("Result:test case 2 - CRUD when schemaName, tableName present, typeName not present:DASTEST2.ACCOUNT");
+ //test select
+ //System.out.println("Result:test case 2 - SELECT");
+ assertEquals(getAccounts(das).size(), 4);
+
+ //test insert - basic
+ //System.out.println("Result:test case 2 - INSERT(execute())");
+ addAccount(das);
+ assertEquals(getAccounts(das).size(), 5);
+
+ //test insert - SDO
+ //System.out.println("Result:test case 2 - INSERT(applyChanges())");
+ addSDOAccount(das);
+ assertEquals(getAccounts(das).size(), 6);
+
+ //test delete - basic
+ //System.out.println("Result:test case 2 - DELETE(execute())");
+ deleteAccount(das);
+ assertEquals(getAccounts(das).size(), 5);
+
+ //test delete - SDO
+ //System.out.println("Result:test case 2 - DELETE(applyChanges())");
+ deleteSDOAccount(das);
+ assertEquals(getAccounts(das).size(), 4);
+
+ //test update
+ //System.out.println("Result:test case 2 - UPDATE");
+ changeFirstAccountBalance(das);
+ assertEquals( ((DataObject)getAccounts(das).get(0)).get("BALANCE"), 45000);
+ //System.out.println("******************************************");
+ }
+
+ public void testMultiSchemaCase3() throws Exception{
+ DAS das = DAS.FACTORY.createDAS(getConfig("MultiSchemaDasConfig3.xml"), getConnection());
+ //test case 3 - CRUD when <Table> is not there in config - DASTEST1.CITY
+ //System.out.println("Result:test case 3 - CRUD when <Table> is not there in config:DASTEST1.CITY");
+ //test select
+ //System.out.println("Result:test case 3 - SELECT");
+ assertEquals(getCities(das).size(), 2);
+
+ //test insert - basic
+ //System.out.println("Result:test case 3 - INSERT(execute())");
+ addCity(das);
+ assertEquals(getCities(das).size(), 3);
+
+ //test insert - SDO
+ //System.out.println("Result:test case 3 - INSERT(applyChanges())");
+ assertEquals(addSDOCity(das),"Expected failure to insert");
+ assertEquals(getCities(das).size(), 3);
+
+ //test delete - basic
+ //System.out.println("Result:test case 3 - DELETE(execute())");
+ deleteCity(das);
+ assertEquals(getCities(das).size(), 2);
+
+ //test delete - SDO
+ //System.out.println("Result:test case 3 - DELETE(applyChanges())");
+ assertEquals(deleteSDOCity(das), "Expected failure to delete");
+ assertEquals(getCities(das).size(), 2);
+
+ //test update
+ //System.out.println("Result:test case 3 - UPDATE");
+ assertEquals(changeFirstCityName(das), "Expected failure to update");
+ //System.out.println("******************************************");
+ }
+
+ public void testMultiSchemaCase4() throws Exception{
+ //System.out.println("Result:test case 4 - with multi schema support ON, have table with no schemaName");
+ try{
+ //get das handle for invalid config
+ DAS das = DAS.FACTORY.createDAS(getConfig("MultiSchemaInvalidDasConfig.xml"), getConnection());
+ }catch(Exception e){
+ //No schemaName provided for tableName CUSTORDER when schemaNameSupport is ON
+ assertEquals("No schemaName provided for tableName CUSTORDER when schemaNameSupport is ON",
+ e.getMessage());
+ }
+
+ //System.out.println("******************************************");
+ }
+
+ public void testMultiSchemaCase5() throws Exception{
+ DAS das = DAS.FACTORY.createDAS(getConfig("MultiSchemaDasConfig5.xml"), getConnection());
+
+ //test case 5 - SELECT when CUSTOMER.ID is present in DASTEST1 and DASTEST2
+ //and DASTEST2.CUSTOMER <Table> not in config
+ //System.out.println("Result:test case 5 - SELECT when CUSTOMER.ID is present in DASTEST1 and DASTEST2 and"+
+ // " DASTEST2.CUSTOMER <Table> not in config");
+ DataObject root = getCustomersFrom2SchemasWithOneSchemaNotInConfig(das);
+ assertEquals(root.getList("DASTEST1_CUSTOMER").size(), 3);
+ assertEquals(root.getList("DASTEST2.CUSTOMER").size(), 3);
+ //System.out.println("******************************************");
+ }
+
+ public void testMultiSchemaCase6()throws Exception{
+ DAS das = DAS.FACTORY.createDAS(getConfig("MultiSchemaDasConfig6.xml"), getConnection());
+ //test case 6 - SELECT when CUSTOMER.ID is present in DASTEST1 and DB2ADMIN - and both <table> entries are in Config
+ //System.out.println("Result:test case 6 - SELECT when CUSTOMER.ID is present in DASTEST1 and DB2ADMIN, and both <table> in config");
+ //test select
+ //System.out.println("Result:test case 6 - SELECT");
+ DataObject root = getCustomersFrom2SchemasBothSchemaInConfig(das);
+ assertEquals(root.getList("DASTEST1_CUSTOMER").size(),3);
+ assertEquals(root.getList("DASTEST3_CUSTOMER").size(),3);
+ //System.out.println("******************************************");
+ }
+
+ public void testMultiSchemaCase7()throws Exception{
+ DAS das = DAS.FACTORY.createDAS(getConfig("MultiSchemaDasConfig7.xml"), getConnection());
+ //test case 7 - SELECT when CITY.INDX is present in DASTEST1 and DASTEST2 and no enrty for
+ //any <Table> in config
+ //System.out.println("Result:test case 7 - SELECT when CITY.INDX is present in DASTEST1 and DASTEST2, and no <table> in config");
+ //test select
+ //System.out.println("Result:test case 7 - SELECT");
+ DataObject root = getCitiesFrom2SchemasNoneInConfig(das);
+ assertEquals(root.getList("DASTEST1.CITY").size(), 2);
+ assertEquals(root.getList("DASTEST2.CITY").size(), 2);
+ //System.out.println("******************************************");
+ }
+
+ public void testMultiSchemaCase8()throws Exception{
+ DAS das = DAS.FACTORY.createDAS(getConfig("MultiSchemaDasConfig8.xml"), getConnection());
+
+ //test case 8 - SELECT using ResultDescriptor - DASTEST2.ACCOUNT
+ //System.out.println("Result:test case 8 - SELECT using ResultDescriptor:DASTEST2.ACCOUNT");
+ assertEquals(getAccountRSDesc(das).size(), 4);
+ //System.out.println("******************************************");
+ }
+
+ public void testMultiSchemaCase9()throws Exception{
+ DAS das = DAS.FACTORY.createDAS(getConfig("MultiSchemaDasConfig9.xml"), getConnection());
+ //test case 9, 11 - Implied relationship , PK when both tables in same schema DASTEST2.CUSTOMER, DASTEST2.ACCOUNT
+ //System.out.println("Result:test case 9, 11 - Implied relationship when both tables in same schema DASTEST2.CUSTOMER, DASTEST2.ACCOUNT");
+ DataObject root = getSingleSchemaCustomersAccounts(das);
+ assertEquals(root.getList("DASTEST2.CUSTOMER").size(), 2);
+ assertEquals(root.getList("DASTEST2.ACCOUNT").size(), 4);
+ //System.out.println("******************************************");
+ }
+
+ private static Date kbday;
+ private static Date tbday;
+ private static DateFormat myformat = new SimpleDateFormat("yyyy.MM.dd");
+ static {
+ try {
+ kbday = myformat.parse("1957.09.27");
+ tbday = myformat.parse("1966.12.20");
+ } catch (ParseException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public void testMultiSchemaCase12()throws Exception{
+ DAS das = DAS.FACTORY.createDAS(getConfig("MultiSchemaDasConfig12.xml"), getConnection());
+ //test case 12 - use converter with multi-schema ON:DASTEST1.EMPLOYEE
+ //System.out.println("Result:test case 12 - converter on DASTEST1.EMPLOYEE.LASTNAME");
+ Command read = das.getCommand("testArbitraryConverter");
+ // Read
+ DataObject root = read.executeQuery();
+
+ // Verify
+ assertEquals(kbday,root.getDate("DASTEST1.EMPLOYEE[1]/LASTNAME"));
+
+ // Modify
+ root.setDate("DASTEST1.EMPLOYEE[1]/LASTNAME", tbday);
+ das.applyChanges(root);
+
+ // Read
+ root = read.executeQuery();
+
+ // Verify
+ assertEquals(tbday, root.getDate("DASTEST1.EMPLOYEE[1]/LASTNAME"));
+
+ //System.out.println("******************************************");
+ }
+
+ public void testMultiSchemaCase13()throws Exception{
+ DAS das = DAS.FACTORY.createDAS(getConfig("MultiSchemaDasConfig13.xml"), getConnection());
+
+ //Explicit relationship between DASTEST1.CUSTOMER and DASTEST2.ACCOUNT
+ //System.out.println("Result:test case13 - Explicit relationship when both tables in different schema DASTEST1.CUSTOMER, DASTEST2.ACCOUNT");
+ // Read some customers and related accounts
+ Command select = das
+ .createCommand("SELECT * FROM DASTEST1.CUSTOMER LEFT JOIN DASTEST2.ACCOUNT "+
+ " ON DASTEST1.CUSTOMER.ID = DASTEST2.ACCOUNT.CUSTOMER_ID");
+
+ DataObject root = select.executeQuery();
+
+ DataObject cust1 = root.getDataObject("DASTEST1_CUSTOMER[1]");
+ DataObject cust2 = root.getDataObject("DASTEST1_CUSTOMER[2]");
+
+ // Save IDs
+ Integer cust1ID = (Integer) cust1.get("ID");
+ Integer cust2ID = (Integer) cust2.get("ID");
+
+ //System.out.println("cust 1 ID :"+cust1ID);
+ //System.out.println("cust 2 ID :"+cust2ID);
+ // save account count
+ Integer cust1AccountCount = Integer.valueOf(cust1.getList("accounts").size());
+ Integer cust2AccountCount = Integer.valueOf(cust2.getList("accounts").size());
+
+ // Move an account to cust1 from cust2
+ DataObject account = (DataObject) cust2.getList("accounts").get(0);
+ cust1.getList("accounts").add(account);
+
+ // Flush changes
+ das.applyChanges(root);
+
+ // verify cust1 relationship updates
+ select = das
+ .createCommand("SELECT * FROM DASTEST1.CUSTOMER LEFT JOIN DASTEST2.ACCOUNT ON "
+ + "DASTEST1.CUSTOMER.ID = DASTEST2.ACCOUNT.CUSTOMER_ID where DASTEST1.CUSTOMER.ID = ?");
+ select.setParameter(1, cust1ID);
+
+ root = select.executeQuery();
+ assertEquals((cust1AccountCount.intValue() + 1), root.getList("DASTEST1_CUSTOMER[1]/accounts").size());
+
+ // verify cust2 relationship updates
+ select.setParameter(1, cust2ID);
+ root = select.executeQuery();
+ assertEquals((cust2AccountCount.intValue() - 1),root.getList("DASTEST1_CUSTOMER[1]/accounts").size());
+ //System.out.println("******************************************");
+ }
+
+ //steer away from implied relationships - we dont support multi schema there!!!
+ public void testMultiSchemaCase14()throws Exception{
+ DAS das = DAS.FACTORY.createDAS(getConfig("MultiSchemaDasConfig14.xml"), getConnection());
+
+ //Explicit compound key relationship between DASTEST1.ORDERDETAILS and DASTEST3.ORDERDETAILSDESC
+ //ORDERID <-> ORDERID, PRODUCTID<->PRODUCTID
+ //System.out.println("Result:test case14 - Explicit compound key relationship when both " +
+ // "tables in different schema DASTEST1.ORDERDETAILS, DASTEST3.ORDERDETAILSDESC");
+
+ // Read some order details and related order details descs
+ Command select = das
+ .createCommand("SELECT * FROM DASTEST1.ORDERDETAILS LEFT JOIN DASTEST3.ORDERDETAILSDESC " +
+ " ON DASTEST1.ORDERDETAILS.ORDERID = DASTEST3.ORDERDETAILSDESC.ORDERID " +
+ " AND DASTEST1.ORDERDETAILS.PRODUCTID = DASTEST3.ORDERDETAILSDESC.PRODUCTID");
+
+ DataObject root = select.executeQuery();
+
+ DataObject ordDet1 = root.getDataObject("DASTEST1.ORDERDETAILS[1]");
+ DataObject ordDet2 = root.getDataObject("DASTEST1.ORDERDETAILS[2]");
+
+ // Save IDs
+ Integer ord1ID = (Integer) ordDet1.get("ORDERID");
+ Integer prod1ID = (Integer) ordDet1.get("PRODUCTID");
+
+ Integer ord2ID = (Integer) ordDet2.get("ORDERID");
+ Integer prod2ID = (Integer) ordDet2.get("PRODUCTID");
+
+ // save order count
+ Integer order1DetDescCount = Integer.valueOf(ordDet1.getList("orderDetailsDesc").size());
+ Integer order2DetDescCount = Integer.valueOf(ordDet2.getList("orderDetailsDesc").size());
+
+ // Move an order detail desc to ord det1 from ord det2
+ DataObject orderDetailsDesc = (DataObject) ordDet2.getList("orderDetailsDesc").get(0);
+ ordDet1.getList("orderDetailsDesc").add(orderDetailsDesc);
+
+ // Flush changes
+ das.applyChanges(root);
+
+ // verify ord det1 relationship updates
+ select = das
+ .createCommand("SELECT * FROM DASTEST1.ORDERDETAILS LEFT JOIN DASTEST3.ORDERDETAILSDESC " +
+ " ON DASTEST1.ORDERDETAILS.ORDERID = DASTEST3.ORDERDETAILSDESC.ORDERID " +
+ " AND DASTEST1.ORDERDETAILS.PRODUCTID = DASTEST3.ORDERDETAILSDESC.PRODUCTID " +
+ " where DASTEST1.ORDERDETAILS.ORDERID = ? AND DASTEST1.ORDERDETAILS.PRODUCTID = ?");
+ select.setParameter(1, ord1ID);
+ select.setParameter(2, prod1ID);
+
+ root = select.executeQuery();
+ assertEquals((order1DetDescCount.intValue() + 1),
+ root.getList("DASTEST1.ORDERDETAILS[1]/orderDetailsDesc").size());
+
+ // verify ord det2 relationship updates
+ select.setParameter(1, ord2ID);
+ select.setParameter(2, prod2ID);
+
+ root = select.executeQuery();
+ assertEquals((order2DetDescCount.intValue() - 1),
+ root.getList("DASTEST1.ORDERDETAILS[1]/orderDetailsDesc").size());
+ }
+
+ /**
+ * Display result
+ * @param list
+ * @param numCols - number of columns in each row
+ */
+ public static void printList(List list, int numCols){
+ if(list != null)
+ System.out.println("list size:"+list.size());
+
+ for(int i=0; i<list.size(); i++){
+ for(int j=0; j<numCols; j++){
+ System.out.print(" col"+(j+1)+":"+(((DataObject)list.get(i)).getString(j)) );
+ }
+ System.out.println();
+ }
+ }
+
+ public static void printMultiSchemaList(DataObject root, String[] lists, String[] cols){
+ if(lists != null && cols != null){
+ if(lists.length != cols.length) return;
+
+ for(int ii=0; ii<lists.length; ii++){
+ List list = root.getList(lists[ii]);
+ printList(list, Integer.parseInt(cols[ii]));
+ }
+ }
+ }
+
+ /**********START TEST CASE 1***********************************************/
+ /**
+ * select
+ * @return
+ */
+ public final List getCustomers(DAS das) {
+
+ Command read = das.getCommand("SelectDASTEST1CUSTOMER");
+ DataObject root = read.executeQuery();
+ return root.getList("DASTEST1_CUSTOMER");
+ }
+ /**
+ * insert
+ *
+ */
+ public final void addCustomer(DAS das){
+ Command insert = das.getCommand("InsertDASTEST1CUSTOMER");
+ insert.execute();
+ }
+
+ public final void addSDOCustomer(DAS das){
+ Command read = das.getCommand("SelectDASTEST1CUSTOMER");
+ DataObject root = read.executeQuery();
+
+ DataObject newCustomer = root.createDataObject("DASTEST1_CUSTOMER");
+
+ newCustomer.setInt("ID", 5);
+ newCustomer.setString("LASTNAME", "PennyDAS");
+ newCustomer.setString("ADDRESS", "HSRDAS");
+
+ das.applyChanges(root);
+ root = read.executeQuery();
+ }
+
+ /**
+ * delete
+ *
+ */
+ public final void deleteCustomer(DAS das){
+ Command delete = das.getCommand("DeleteDASTEST1CUSTOMER");
+ delete.execute();
+ }
+
+ public final void deleteSDOCustomer(DAS das) {
+ Command readAll = das.getCommand("SelectDASTEST1CUSTOMER");
+ DataObject root = readAll.executeQuery();
+
+ List allCustomers = root.getList("DASTEST1_CUSTOMER");
+
+ DataObject lastCustomer = (DataObject)allCustomers.get(allCustomers.size()-1);
+ if(lastCustomer != null){
+ //System.out.println("Deleting customer named: " + lastCustomer.getString("LASTNAME"));
+ lastCustomer.delete();
+ }
+
+ das.applyChanges(root);
+ }
+
+ /**
+ * update
+ *
+ */
+ public final void changeFirstCustomerName(DAS das) {
+ Command readAll = das.getCommand("SelectDASTEST1CUSTOMER");
+ DataObject root = readAll.executeQuery();
+
+ DataObject firstCustomer = root.getDataObject("DASTEST1_CUSTOMER[1]");
+ firstCustomer.set("LASTNAME", "Williams");
+
+ das.applyChanges(root);
+ }
+ /**********END TEST CASE 1***********************************************/
+
+ /**********START TEST CASE 2***********************************************/
+ /**
+ * select
+ * @return
+ */
+ public final List getAccounts(DAS das){
+ Command read = das.getCommand("SelectDASTEST2ACCOUNT");
+ DataObject root = read.executeQuery();
+ return root.getList("DASTEST2.ACCOUNT");
+ }
+ /**
+ * insert
+ *
+ */
+ public final void addAccount(DAS das){
+ Command insert = das.getCommand("InsertDASTEST2ACCOUNT");
+ insert.execute();
+ }
+
+ public final void addSDOAccount(DAS das){
+ Command read = das.getCommand("SelectDASTEST2ACCOUNT");
+ DataObject root = read.executeQuery();
+
+ List custList = root.getList("DASTEST1_CUSTOMER");
+ DataObject curCust = null;
+ for(int i=0; i<custList.size(); i++){
+ curCust = (DataObject)custList.get(i);
+ if(curCust.getInt("ID") == 2) {
+ break;
+ }
+ }
+
+ List acctList = null;
+ if(curCust != null){
+ acctList = curCust.getList("accounts");
+
+ DataObject newAccount = root.createDataObject("DASTEST2.ACCOUNT");
+ newAccount.setInt("ACCOUNT_ID", 60);
+ //newAccount.setInt("CUSTOMER_ID", 2); - taken from parent, so dont set here,else will throw exception
+ newAccount.setInt("BALANCE",104);
+
+ acctList.add(newAccount);
+ das.applyChanges(root);
+ }
+ }
+
+ /**
+ * delete
+ *
+ */
+ public final void deleteAccount(DAS das){
+ Command delete = das.getCommand("DeleteDASTEST2ACCOUNT");
+ delete.execute();
+ }
+
+ public final void deleteSDOAccount(DAS das) {
+ Command readAll = das.getCommand("SelectDASTEST2ACCOUNT");
+ DataObject root = readAll.executeQuery();
+
+ List custList = root.getList("DASTEST1_CUSTOMER");
+
+ DataObject curCust = null;
+ for(int i=0; i<custList.size(); i++){
+ curCust = (DataObject)custList.get(i);
+ if(curCust.getInt("ID") == 2) {
+ break;
+ }
+ }
+
+ List acctList = null;
+ if(curCust != null){
+ acctList = curCust.getList("accounts");
+ if(acctList != null){
+ ((DataObject)acctList.get(acctList.size()-1)).delete();
+ }
+ }
+
+ das.applyChanges(root);
+ }
+
+ /**
+ * update
+ *
+ */
+ public final void changeFirstAccountBalance(DAS das) {
+ Command readAll = das.getCommand("SelectDASTEST2ACCOUNT");
+ DataObject root = readAll.executeQuery();
+
+ DataObject firstAccount = root.getDataObject("DASTEST2.ACCOUNT[1]");
+ firstAccount.set("BALANCE", 45000);
+
+ das.applyChanges(root);
+ }
+ /**********END TEST CASE 2***********************************************/
+
+ /**********START TEST CASE 3***********************************************/
+ /**
+ * select
+ * @return
+ */
+ public final List getCities(DAS das){
+ Command read = das.getCommand("SelectDASTEST1CITY");
+ DataObject root = read.executeQuery();
+ return root.getList("DASTEST1.CITY");
+ }
+ /**
+ * insert
+ *
+ */
+ public final void addCity(DAS das){
+ Command insert = das.getCommand("InsertDASTEST1CITY");
+ insert.execute();
+ }
+
+ public final String addSDOCity(DAS das){
+ Command read = das.getCommand("SelectDASTEST1CITY");
+ DataObject root = read.executeQuery();
+
+ DataObject newCity = root.createDataObject("DASTEST1.CITY");
+ newCity.setInt("INDX", 3);
+ newCity.setString("NAME", "San Jose");
+
+ try{
+ das.applyChanges(root);
+ }catch(Exception e){
+ if(e.getMessage().equals("Table DASTEST1.CITY was changed in the DataGraph but is not present in the Config")){
+ //ignore
+ return "Expected failure to insert";
+ }
+ else{
+ throw new RuntimeException(e);
+ }
+ }
+ return null;
+ }
+
+ /**
+ * delete
+ *
+ */
+ public final void deleteCity(DAS das){
+ Command delete = das.getCommand("DeleteDASTEST1CITY");
+ delete.execute();
+ }
+
+ public final String deleteSDOCity(DAS das) {
+ Command readAll = das.getCommand("SelectDASTEST1CITY");
+ DataObject root = readAll.executeQuery();
+
+ List allCities = root.getList("DASTEST1.CITY");
+
+ DataObject lastCity = (DataObject)allCities.get(allCities.size()-1);
+ if(lastCity != null){
+ //System.out.println("Deleting city: " + lastCity.getString("NAME"));
+ lastCity.delete();
+ }
+
+ try{
+ das.applyChanges(root);
+ }catch(Exception e){
+ if(e.getMessage().equals("Table DASTEST1.CITY was changed in the DataGraph but is not present in the Config")){
+ //ignore
+ return "Expected failure to delete";
+ }
+ else{
+ throw new RuntimeException(e);
+ }
+ }
+ return null;
+ }
+
+ /**
+ * update
+ *
+ */
+ public final String changeFirstCityName(DAS das) {
+ Command readAll = das.getCommand("SelectDASTEST1CITY");
+ DataObject root = readAll.executeQuery();
+
+ DataObject firstCity = root.getDataObject("DASTEST1.CITY[1]");
+ firstCity.set("NAME", "New York");
+
+ try{
+ das.applyChanges(root);
+ }catch(Exception e){
+ if(e.getMessage().equals("Table DASTEST1.CITY was changed in the DataGraph but is not present in the Config")){
+ //ignore
+ return "Expected failure to update";
+ }
+ else{
+ throw new RuntimeException(e);
+ }
+ }
+ return null;
+ }
+ /**********END TEST CASE 3***********************************************/
+ /**********START TEST CASE 5***********************************************/
+ public final DataObject getCustomersFrom2SchemasWithOneSchemaNotInConfig(DAS das) {
+ Command read = das.getCommand("Select2SchemasWithOneSchemaNotInConfig");
+ DataObject root = read.executeQuery();
+ return root;
+ }
+ /**********END TEST CASE 5***********************************************/
+
+ /**********START TEST CASE 6***********************************************/
+
+ public final DataObject getCustomersFrom2SchemasBothSchemaInConfig(DAS das) {
+
+ Command read = das.getCommand("Select2IDsBothInConfig");
+ DataObject root = read.executeQuery();
+ return root;
+ }
+
+ /**********END TEST CASE 6***********************************************/
+ /**********START TEST CASE 7***********************************************/
+ public final DataObject getCitiesFrom2SchemasNoneInConfig(DAS das){
+ Command read = das.getCommand("Select2CitiesNoneInConfig");
+ DataObject root = read.executeQuery();
+ return root;
+ }
+ /**********END TEST CASE 7***********************************************/
+ /**********START TEST CASE 8***********************************************/
+
+ public final List getAccountRSDesc(DAS das){
+ Command read = das.getCommand("ResultDescriptorAccountSelect");
+ DataObject root = read.executeQuery();
+ return root.getList("DASTEST2.ACCOUNT");
+ }
+ /**********END TEST CASE 8***********************************************/
+
+ /**********START TEST CASE 9***********************************************/
+
+ public final DataObject getSingleSchemaCustomersAccounts(DAS das){
+ Command read = das.getCommand("ImpliedRelationshipSelect");
+ DataObject root = read.executeQuery();
+ return root;
+ }
+ /**********END TEST CASE 9***********************************************/
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OCCTests.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OCCTests.java
new file mode 100644
index 0000000000..00a417da8d
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OCCTests.java
@@ -0,0 +1,163 @@
+/*
+ * 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;
+
+import java.sql.SQLException;
+
+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.ConfigFactory;
+import org.apache.tuscany.das.rdb.exception.OptimisticConcurrencyException;
+import org.apache.tuscany.das.rdb.test.data.BookData;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class OCCTests extends DasTest {
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ new BookData(getAutoConnection()).refresh();
+ new CustomerData(getAutoConnection()).refresh();
+ }
+
+ public void testAutomaticOCC() throws SQLException {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ // Read customer with particular ID
+ Command select = das.createCommand("Select * from CUSTOMER where ID = 1");
+ DataObject root = select.executeQuery();
+
+ // Explicitly update the DB to force a collision
+ Command update = das.createCommand("update CUSTOMER set LASTNAME = 'Smith' where ID = 1");
+ update.execute();
+
+ DataObject customer = root.getDataObject("CUSTOMER[1]");
+
+ // Modify customer
+ customer.set("LASTNAME", "Pavick");
+
+ // Build apply changes command
+ try {
+ das.applyChanges(root);
+ fail("An OCCException should be thrown");
+ } catch (OptimisticConcurrencyException ex) {
+ if (!ex.getMessage().equals("An update collision occurred")) {
+ throw ex;
+ }
+ }
+
+ }
+
+ public void testSimpleOCC() throws SQLException {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("BooksConfig.xml"), getConnection());
+ // Read a book instance
+ Command select = das.getCommand("select book 1");
+ DataObject root = select.executeQuery();
+ DataObject book = root.getDataObject("BOOK[1]");
+ // Change a field to mark the instance 'dirty'
+ book.setInt("QUANTITY", 2);
+
+ // Explicitly change OCC column in database to force collision
+ Command update = das.getCommand("update book 1");
+ update.setParameter(1, new Integer(100));
+ update.execute();
+
+ // Try to apply changes and catch the expected An update collision occurred
+ try {
+ das.applyChanges(root);
+ fail("An OCCException should be thrown");
+ } catch (OptimisticConcurrencyException ex) {
+ if (!ex.getMessage().equals("An update collision occurred")) {
+ throw ex;
+ }
+ }
+ }
+
+ public void testManagedOCC() throws SQLException {
+ DAS das = DAS.FACTORY.createDAS(getConfig("ManagedBooksConfig.xml"), getConnection());
+ Command select = das.getCommand("select book 1");
+ DataObject root = select.executeQuery();
+ DataObject book = root.getDataObject("BOOK[1]");
+ // Change a field to mark the instance 'dirty'
+ book.setInt("QUANTITY", 2);
+ int occValue = book.getInt("OCC");
+ das.applyChanges(root);
+
+ root = select.executeQuery();
+ book = root.getDataObject("BOOK[1]");
+ assertEquals(occValue + 1, book.getInt("OCC"));
+ }
+
+ public void testManagedOCCFailure() throws SQLException {
+ DAS das = DAS.FACTORY.createDAS(getConfig("ManagedBooksConfig.xml"), getConnection());
+ // Read a book instance
+ Command select = das.getCommand("select book 1");
+ DataObject root = select.executeQuery();
+ DataObject book = root.getDataObject("BOOK[1]");
+ // Change a field to mark the instance 'dirty'
+ book.setInt("QUANTITY", 2);
+
+ DAS das2 = DAS.FACTORY.createDAS(getConfig("ManagedBooksConfig.xml"), getConnection());
+ // Read a book instance
+ Command select2 = das2.getCommand("select book 1");
+ DataObject root2 = select2.executeQuery();
+ DataObject book2 = root2.getDataObject("BOOK[1]");
+ // Change a field to mark the instance 'dirty'
+ book2.setInt("QUANTITY", 5);
+ das2.applyChanges(root2);
+
+ // Try to apply changes and catch the expecetd An update collision occurred
+ try {
+ das.applyChanges(root);
+ fail("An OCCException should be thrown");
+ } catch (OptimisticConcurrencyException ex) {
+ if (!ex.getMessage().equals("An update collision occurred")) {
+ throw ex;
+ }
+ }
+ }
+
+ public void testProvidedConfig() throws SQLException {
+ // Create config programmatically
+ Config config = ConfigFactory.INSTANCE.createConfig();
+ ConfigHelper helper = new ConfigHelper(config);
+ helper.addPrimaryKey("BOOK.BOOK_ID");
+ DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection());
+
+ // Read a book instance
+ Command select = das.createCommand("SELECT * FROM BOOK WHERE BOOK_ID = 1");
+ DataObject root = select.executeQuery();
+ DataObject book = root.getDataObject("BOOK[1]");
+ // Change a field to mark the instance 'dirty'
+ book.setInt("QUANTITY", 2);
+
+ // Flush the change
+
+ das.applyChanges(root);
+
+ // Verify
+ root = select.executeQuery();
+ book = root.getDataObject("BOOK[1]");
+ assertEquals(2, book.getInt("QUANTITY"));
+ }
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OneToOneRelationshipTests.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OneToOneRelationshipTests.java
new file mode 100644
index 0000000000..2a58ca0fba
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OneToOneRelationshipTests.java
@@ -0,0 +1,174 @@
+/*
+ * 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;
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.DAS;
+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.EmployeeData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class OneToOneRelationshipTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ new CompanyData(getAutoConnection()).refresh();
+ new EmployeeData(getAutoConnection()).refresh();
+ new CompanyEmpData(getAutoConnection()).refresh();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ /**
+ * Read Company and traverse to EOTM
+ */
+ public void test1() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("CompanyEmployeeConfig.xml"), getConnection());
+
+ Command read = das.getCommand("get companies with employee of the month");
+ DataObject root = read.executeQuery();
+ DataObject employee = root.getDataObject("COMPANY[1]/company->employee_opposite");
+
+ assertEquals("Mary Smith", employee.getString("NAME"));
+ }
+
+ /**
+ * Read Employee and traverse to Company
+ */
+ public void test2() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("CompanyEmployeeConfig.xml"), getConnection());
+
+ Command read = das.getCommand("get named employee with company");
+ read.setParameter(1, "Mary Smith");
+ DataObject root = read.executeQuery();
+ DataObject company = root.getDataObject("EMPLOYEE[1]/company->employee");
+
+ assertEquals("ACME Publishing", company.getString("NAME"));
+ }
+
+ /**
+ * Un-assign employee O' month
+ */
+ public void test3() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("CompanyEmployeeConfig.xml"), getConnection());
+
+ Command read = das.getCommand("get companies with employee of the month");
+ DataObject root = read.executeQuery();
+ DataObject company = root.getDataObject("COMPANY[1]");
+ company.setDataObject("company->employee_opposite", null);
+ assertNull(company.getDataObject("company->employee_opposite"));
+
+ //Flush changes
+ das.applyChanges(root);
+
+ //Verify
+ root = read.executeQuery();
+ company = root.getDataObject("COMPANY[1]");
+ assertNull(company.getDataObject("company->employee_opposite"));
+ }
+
+ /**
+ * Delete employee O' month
+ */
+ public void test4() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("CompanyEmployeeConfig.xml"), getConnection());
+
+ Command read = das.getCommand("get companies with employee of the month");
+ DataObject root = read.executeQuery();
+ DataObject company = root.getDataObject("COMPANY[1]");
+ DataObject employee = company.getDataObject("company->employee_opposite");
+ employee.delete();
+ assertNull(company.getDataObject("company->employee_opposite"));
+
+ //Flush changes
+ das.applyChanges(root);
+
+ //Verify
+ root = read.executeQuery();
+ company = root.getDataObject("COMPANY[1]");
+ assertNull(company.getDataObject("company->employee_opposite"));
+ }
+
+ /**
+ * Add new employee O' month
+ */
+ public void test5() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("CompanyEmployeeConfig.xml"), getConnection());
+
+ Command read = das.getCommand("get companies with employee of the month");
+ DataObject root = read.executeQuery();
+ DataObject company = root.getDataObject("COMPANY[1]");
+
+ //Create a new employee
+ DataObject employee = root.createDataObject("EMPLOYEE");
+ employee.setString("NAME", "Joe Hotshot");
+
+ //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);
+
+ //Flush changes
+ das.applyChanges(root);
+
+ //Verify
+ root = read.executeQuery();
+
+ employee = root.getDataObject("COMPANY[1]/company->employee_opposite");
+
+ assertEquals("Joe Hotshot", employee.getString("NAME"));
+
+ }
+
+ public void testRestrictedOneToOneRelationship() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConfig("OneToOneRestrictedConfig.xml"), getConnection());
+
+ Command read = das.getCommand("get named employee with company");
+ read.setParameter(1, "Mary Smith");
+ DataObject root = read.executeQuery();
+ DataObject mary = root.getDataObject("EMPLOYEE[1]");
+ DataObject company = mary.getDataObject("company");
+
+ DataObject bob = root.createDataObject("EMPLOYEE");
+ bob.setString("NAME", "bob");
+ bob.setString("SN", "E0005");
+ bob.setInt("MANAGER", 0);
+
+ bob.setDataObject("company", company);
+
+ try {
+ das.applyChanges(root);
+ fail("Relationship modification should not be allowed.");
+ } catch (RuntimeException ex) {
+ assertEquals("Can not modify a one to one relationship that is key restricted", ex.getMessage());
+ }
+ assertEquals("ACME Publishing", company.getString("NAME"));
+
+ }
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java
new file mode 100644
index 0000000000..ccfae70bd5
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/OperationOrderingTests.java
@@ -0,0 +1,116 @@
+/*
+ * 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;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.DAS;
+import org.apache.tuscany.das.rdb.test.data.CityData;
+import org.apache.tuscany.das.rdb.test.data.StateData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class OperationOrderingTests extends DasTest {
+
+ public OperationOrderingTests() {
+ super();
+ }
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ CityData city = new CityData(getAutoConnection());
+ StateData state = new StateData(getAutoConnection());
+
+ city.doDeletes();
+ state.doDeletes();
+ state.doInserts();
+ city.doInserts();
+
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ public void testInsert() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConfig("cityStates.xml"), getConnection());
+ Command select = das.createCommand("Select * from STATES inner join CITIES on STATES.ID = CITIES.STATE_ID");
+ DataObject root = select.executeQuery();
+
+ int numberOfStates = root.getList("STATES").size();
+ int numberOfCities = root.getList("CITIES").size();
+
+ DataObject atlanta = root.createDataObject("CITIES");
+ atlanta.setString("NAME", "Atlanta");
+ atlanta.setInt("ID", 6);
+
+ // Create a new Company
+ DataObject georgia = root.createDataObject("STATES");
+ georgia.setInt("ID", 4);
+ georgia.setString("NAME", "GA");
+
+ georgia.getList("cities").add(atlanta);
+
+ das.applyChanges(root);
+
+ root = select.executeQuery();
+ assertEquals(numberOfCities + 1, root.getList("CITIES").size());
+ assertEquals(numberOfStates + 1, root.getList("STATES").size());
+ }
+
+ public void testDeletes() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConfig("cityStates.xml"), getConnection());
+ Command select = das.createCommand("Select * from STATES inner join CITIES on STATES.ID = CITIES.STATE_ID");
+ DataObject root = select.executeQuery();
+
+ DataObject firstState = root.getDataObject("STATES[1]");
+ String stateName = firstState.getString("NAME");
+
+ List cityNames = new ArrayList();
+ Iterator i = firstState.getList("cities").iterator();
+ while (i.hasNext()) {
+ DataObject firstCity = (DataObject) i.next();
+ cityNames.add(firstCity.getString("NAME"));
+ firstCity.delete();
+ }
+ firstState.delete();
+
+ das.applyChanges(root);
+
+ root = select.executeQuery();
+
+ Iterator iter = root.getList("STATES").iterator();
+ while (iter.hasNext()) {
+ DataObject state = (DataObject) iter.next();
+ assertFalse(state.getString("NAME").equals(stateName));
+ }
+
+ iter = root.getList("CITIES").iterator();
+ while (iter.hasNext()) {
+ DataObject city = (DataObject) iter.next();
+ assertFalse(cityNames.contains(city.getString("NAME")));
+ }
+
+ }
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/Paging.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/Paging.java
new file mode 100644
index 0000000000..859cc085f6
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/Paging.java
@@ -0,0 +1,134 @@
+/*
+ * 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;
+
+import java.sql.SQLException;
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.DAS;
+import org.apache.tuscany.das.rdb.Pager;
+import org.apache.tuscany.das.rdb.impl.PagerImpl;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class Paging extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ new CustomerData(getAutoConnection()).refresh();
+ }
+
+ public void testPaging() throws SQLException {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ // Build command to read all customers
+ Command custCommand = das.createCommand("select * from CUSTOMER order by ID");
+
+ // Create a pager with the command
+ Pager pager = new PagerImpl(custCommand, 2);
+
+ // Get and work with first page
+ DataObject root = pager.next();
+ DataObject customer1 = root.getDataObject("CUSTOMER[1]");
+ DataObject customer2 = root.getDataObject("CUSTOMER[2]");
+ assertEquals(1, customer1.getInt("ID"));
+ assertEquals(2, customer2.getInt("ID"));
+
+ // Get and work with the second page
+ root = pager.next();
+ customer1 = root.getDataObject("CUSTOMER[1]");
+ customer2 = root.getDataObject("CUSTOMER[2]");
+ assertEquals(3, customer1.getInt("ID"));
+ assertEquals(4, customer2.getInt("ID"));
+
+ // First page again
+ root = pager.previous();
+ customer1 = root.getDataObject("CUSTOMER[1]");
+ customer2 = root.getDataObject("CUSTOMER[2]");
+ assertEquals(1, customer1.getInt("ID"));
+ assertEquals(2, customer2.getInt("ID"));
+
+ }
+
+ public void testRandomPage() throws SQLException {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ // Build the select command
+ Command select = das.createCommand("select * from CUSTOMER order by ID");
+
+ // Create a pager
+ Pager pager = new PagerImpl(select, 2);
+
+ // Get the first page
+ DataObject root = pager.getPage(1);
+ DataObject customer1 = root.getDataObject("CUSTOMER[1]");
+ DataObject customer2 = root.getDataObject("CUSTOMER[2]");
+ assertEquals(1, customer1.getInt("ID"));
+ assertEquals(2, customer2.getInt("ID"));
+
+ // Get the second page
+ root = pager.getPage(2);
+ customer1 = root.getDataObject("CUSTOMER[1]");
+ customer2 = root.getDataObject("CUSTOMER[2]");
+ assertEquals(3, customer1.getInt("ID"));
+ assertEquals(4, customer2.getInt("ID"));
+
+ // Get the first page again
+ root = pager.getPage(1);
+ customer1 = root.getDataObject("CUSTOMER[1]");
+ customer2 = root.getDataObject("CUSTOMER[2]");
+ assertEquals(1, customer1.getInt("ID"));
+ assertEquals(2, customer2.getInt("ID"));
+ }
+
+
+/* public void testLightPager() throws SQLException {
+
+
+ // Build the command to page with
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ Command select = das.createCommand("select * from CUSTOMER order by ID");
+
+ //Create the light Pager instance
+ Pager lp = Pager.FACTORY.createLightPager(2);
+
+ // Get the first page
+ DataObject root = pager.getPage(1);
+ DataObject customer1 = root.getDataObject("CUSTOMER[1]");
+ DataObject customer2 = root.getDataObject("CUSTOMER[2]");
+ assertEquals(1, customer1.getInt("ID"));
+ assertEquals(2, customer2.getInt("ID"));
+
+ // Get the second page
+ root = pager.getPage(2);
+ customer1 = root.getDataObject("CUSTOMER[1]");
+ customer2 = root.getDataObject("CUSTOMER[2]");
+ assertEquals(3, customer1.getInt("ID"));
+ assertEquals(4, customer2.getInt("ID"));
+
+ // Get the first page again
+ root = pager.getPage(1);
+ customer1 = root.getDataObject("CUSTOMER[1]");
+ customer2 = root.getDataObject("CUSTOMER[2]");
+ assertEquals(1, customer1.getInt("ID"));
+ assertEquals(2, customer2.getInt("ID"));
+ }*/
+
+
+} \ No newline at end of file
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PartialUpdateTests.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PartialUpdateTests.java
new file mode 100644
index 0000000000..9f7657ca51
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PartialUpdateTests.java
@@ -0,0 +1,267 @@
+/*
+ * 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;
+
+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;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class PartialUpdateTests extends DasTest {
+
+ public PartialUpdateTests() {
+ super();
+ }
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ new CustomerData(getAutoConnection()).refresh();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ /**
+ * Update with one changed property
+ */
+ public void testPartialUpdateSingleProperty() throws SQLException {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ Command readCustomers = das.createCommand("select * from CUSTOMER where ID = 1");
+
+ // Read
+ DataObject root = readCustomers.executeQuery();
+
+ DataObject customer = root.getDataObject("CUSTOMER[1]");
+ // Verify
+ assertEquals(1, customer.getInt("ID"));
+
+ Command update = das.createCommand("update CUSTOMER set LASTNAME = 'modified' where ID = 1");
+ update.execute();
+
+ customer.setString("ADDRESS", "main street");
+
+ das.applyChanges(root);
+
+ root = readCustomers.executeQuery();
+
+ // If partial update was not used, LASTNAME would not be 'modified'
+ customer = root.getDataObject("CUSTOMER[1]");
+ assertEquals(1, customer.getInt("ID"));
+ assertEquals("modified", customer.getString("LASTNAME"));
+ assertEquals("main street", customer.getString("ADDRESS"));
+ }
+
+ /**
+ * Update with all changed properties
+ */
+ public void testPartialUpdateAllProperties() throws SQLException {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ Command readCustomers = das.createCommand("select * from CUSTOMER where ID = 1");
+
+ // Read
+ DataObject root = readCustomers.executeQuery();
+
+ DataObject customer = root.getDataObject("CUSTOMER[1]");
+ // Verify
+ assertEquals(1, customer.getInt("ID"));
+
+ customer.setString("LASTNAME", "lastname modified");
+ customer.setString("ADDRESS", "address modified");
+
+ das.applyChanges(root);
+
+ root = readCustomers.executeQuery();
+
+ // If partial update was not used, LASTNAME would not be 'modified'
+ customer = root.getDataObject("CUSTOMER[1]");
+ assertEquals(1, customer.getInt("ID"));
+ assertEquals("lastname modified", customer.getString("LASTNAME"));
+ assertEquals("address modified", customer.getString("ADDRESS"));
+ }
+
+ /**
+ * Insert with no changed properties and no generated ID
+ * Read graph. Add new DO and apply without seting any attributes.
+ *
+ */
+// public void testPartialReadInsertApply() throws Exception {
+//
+// DAS das = DAS.FACTORY.createDAS(getConnection());
+// // Read some customers
+// Command select = das.createCommand("Select * from CUSTOMER");
+// DataObject root = select.executeQuery();
+//
+// //Remember count
+// int count = root.getList("CUSTOMER").size();
+//
+// // Create a new customer
+// root.createDataObject("CUSTOMER");
+//
+// // Build apply changes command
+// das.applyChanges(root);
+//
+// // verify insert
+// root = select.executeQuery();
+// assertEquals(count + 1, root.getList("CUSTOMER").size());
+//
+// }
+
+ /**
+ * Insert with no changed properties to row with generated ID
+ * Read graph. Add new DO and apply without seting any attributes.
+ */
+ public void testPartialInsertWithGeneratedID() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml"),getConnection());
+ // Read some companies
+ Command select = das.createCommand("Select * from COMPANY");
+ DataObject root = select.executeQuery();
+
+ //Remember count
+ int count = root.getList("COMPANY").size();
+
+ // Create a new company
+ root.createDataObject("COMPANY");
+
+ // Build apply changes command
+ das.applyChanges(root);
+
+ // verify insert
+ root = select.executeQuery();
+ assertEquals(count + 1, root.getList("COMPANY").size());
+
+ }
+
+ /**
+ * Insert with 1 changed property that is not the ID
+ * @throws SQLException
+ */
+ public void testPartialInsertWithSinglePropertyChange() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml"),getConnection());
+ // Read some company
+ Command select = das.createCommand("Select * from COMPANY");
+ DataObject root = select.executeQuery();
+
+ //Remember count
+ int count = root.getList("COMPANY").size();
+
+ // Create a new company
+ DataObject company = root.createDataObject("COMPANY");
+ company.setString("NAME", "New company name");
+
+ // Build apply changes command
+ das.applyChanges(root);
+
+ // verify insert
+ root = select.executeQuery();
+ assertEquals(count + 1, root.getList("COMPANY").size());
+ }
+
+ /**
+ * Insert with 1 changed property that is the ID
+ * @throws SQLException
+ */
+ public void testPartialInsertWithIdChange() throws SQLException {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ Command readCustomers = das.createCommand("select * from CUSTOMER");
+
+ // Read
+ DataObject root = readCustomers.executeQuery();
+
+ // Create a new customer
+ DataObject newCust = root.createDataObject("CUSTOMER");
+ newCust.set("ID", Integer.valueOf(200));
+ // Purposely do not set lastname to let it default to 'Garfugengheist'
+ // newCust.set("LASTNAME", "Gerkin" );
+
+ das.applyChanges(root);
+
+ Command readNewCust = das.createCommand("select * from CUSTOMER where ID = 200");
+ root = readNewCust.executeQuery();
+
+ // If partial insert was not used, LASTNAME would not be
+ // 'Garfugengheist'
+ newCust = root.getDataObject("CUSTOMER[1]");
+ assertEquals(200, newCust.getInt("ID"));
+ assertEquals("Garfugengheist", newCust.getString("LASTNAME"));
+ assertNull(newCust.getString("ADDRESS"));
+
+ }
+
+ public void testPartialInsertWithAllPropertyChange() throws SQLException {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ Command readCustomers = das.createCommand("select * from CUSTOMER");
+
+ // Read
+ DataObject root = readCustomers.executeQuery();
+
+ // Create a new customer
+ DataObject newCust = root.createDataObject("CUSTOMER");
+ newCust.set("ID", Integer.valueOf(300));
+ newCust.set("ADDRESS", "5528 Wells Fargo Drive");
+ newCust.set("LASTNAME", "Gerkin" );
+
+ das.applyChanges(root);
+
+ Command readNewCust = das.createCommand("select * from CUSTOMER where ID = 300");
+ root = readNewCust.executeQuery();
+
+ newCust = root.getDataObject("CUSTOMER[1]");
+ assertEquals(300, newCust.getInt("ID"));
+ assertEquals("Gerkin", newCust.getString("LASTNAME"));
+ assertEquals("5528 Wells Fargo Drive", newCust.getString("ADDRESS"));
+
+ }
+
+ public void testPartialInsert() throws SQLException {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ Command readCustomers = das.createCommand("select * from CUSTOMER");
+
+ // Read
+ DataObject root = readCustomers.executeQuery();
+
+ // Create a new customer
+ DataObject newCust = root.createDataObject("CUSTOMER");
+ newCust.set("ID", Integer.valueOf(100));
+ newCust.set("ADDRESS", "5528 Wells Fargo Drive");
+ // Purposely do not set lastname to let it default to 'Garfugengheist'
+ // newCust.set("LASTNAME", "Gerkin" );
+
+ das.applyChanges(root);
+
+ Command readNewCust = das.createCommand("select * from CUSTOMER where ID = 100");
+ root = readNewCust.executeQuery();
+
+ // If partial insert was not used, LASTNAME would not be
+ // 'Garfugengheist'
+ newCust = root.getDataObject("CUSTOMER[1]");
+ assertEquals(100, newCust.getInt("ID"));
+ assertEquals("Garfugengheist", newCust.getString("LASTNAME"));
+ assertEquals("5528 Wells Fargo Drive", newCust.getString("ADDRESS"));
+
+ }
+
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PassiveConnectionTests.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PassiveConnectionTests.java
new file mode 100644
index 0000000000..270f46ddd8
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/PassiveConnectionTests.java
@@ -0,0 +1,94 @@
+/*
+ * 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;
+
+/*
+ * Test capability to participate in an extenrlly managed transaction.
+ * The client is managing the transaction boundary so the DAS will not issue
+ * commit/rollback
+ *
+ */
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.DAS;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class PassiveConnectionTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ new CustomerData(getAutoConnection()).refresh();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ /**
+ * Read and modify a customer. Uses a "passive" connection
+ */
+ public void testReadModifyApply() throws Exception {
+
+ // Create and initialize a DAS connection and initialize for externally
+ // managed transaction boundaries
+ java.sql.Connection c = getConnection();
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("passiveConnection.xml"), c);
+ // Read customer 1
+ Command select = das.getCommand("get a customer");
+ DataObject root = select.executeQuery();
+
+ DataObject customer = (DataObject) root.get("CUSTOMER[1]");
+
+ String lastName = customer.getString("LASTNAME");
+
+ // Modify customer
+ customer.set("LASTNAME", "Pavick");
+
+ try {
+ das.applyChanges(root);
+
+ throw new Exception("Test Exception");
+
+ // Since the DAS is not managing tx boundaries, I must
+ } catch (Exception e) {
+ // assert here to make sure we didn't run into some hidden error
+ assertEquals("Test Exception", e.getMessage());
+ // Roll back the transaction
+ c.rollback();
+ }
+
+ // Verify that the changes did not go through
+ root = select.executeQuery();
+ assertEquals(lastName, root.getString("CUSTOMER[1]/LASTNAME"));
+
+ // Try again
+ customer = (DataObject) root.get("CUSTOMER[1]");
+ customer.set("LASTNAME", "Pavick");
+ das.applyChanges(root);
+ c.commit();
+
+ root = select.executeQuery();
+ assertEquals("Pavick", root.getString("CUSTOMER[1]/LASTNAME"));
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ProgrammaticConfigTests.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ProgrammaticConfigTests.java
new file mode 100644
index 0000000000..25eff4a578
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ProgrammaticConfigTests.java
@@ -0,0 +1,386 @@
+/*
+ * 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;
+
+import java.sql.SQLException;
+import java.util.List;
+
+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.ConnectionInfo;
+import org.apache.tuscany.das.rdb.config.Table;
+import org.apache.tuscany.das.rdb.test.data.BookData;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.data.OrderData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+/**
+ * Tests the Converter framwork
+ */
+public class ProgrammaticConfigTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ new BookData(getAutoConnection()).refresh();
+ new CustomerData(getAutoConnection()).refresh();
+ new OrderData(getAutoConnection()).refresh();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ /**
+ * Simple read with command created programaticaly using the ConfigHelper.
+ */
+ public void test0() throws Exception {
+ String commandName = "select book by id";
+ String commandSQL = "SELECT * FROM BOOK WHERE BOOK_ID =?";
+ // Create config programmatically
+ ConfigHelper helper = new ConfigHelper();
+ helper.addSelectCommand( commandName, commandSQL );
+ helper.addPrimaryKey("BOOK.BOOK_ID");
+ DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection());
+
+ // Read a book instance
+ Command select = das.getCommand("select book by id");
+ select.setParameter(1, Integer.valueOf(1));
+ DataObject root = select.executeQuery();
+ DataObject book = root.getDataObject("BOOK[1]");
+ // Change a field to mark the instance 'dirty'
+ book.setInt("QUANTITY", 2);
+
+ // Flush the change
+
+ das.applyChanges(root);
+
+ // Verify
+ root = select.executeQuery();
+ book = root.getDataObject("BOOK[1]");
+ assertEquals(2, book.getInt("QUANTITY"));
+ }
+
+ /**
+ * Simple read followed by a write. This should fail since there is no
+ * config associaed with the applychanges command
+ */
+ public void test1() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ // Read a book instance
+ Command select = das.createCommand("SELECT * FROM BOOK WHERE BOOK_ID = 1");
+ DataObject root = select.executeQuery();
+
+ DataObject book = root.getDataObject("BOOK[1]");
+ // Change a field to mark the instance 'dirty'
+ book.setInt("QUANTITY", 2);
+
+ try {
+ das.applyChanges(root);
+ fail("An exception should be thrown since here is no config to identify the primary key");
+ } catch (RuntimeException ex) {
+ // Expected
+ }
+ }
+
+ /**
+ * Simple read followed by a write. Config instance is generated
+ * programmatically using the ConfigHelper.
+ */
+ public void test2() throws Exception {
+ // Create config programmatically
+ ConfigHelper helper = new ConfigHelper();
+ helper.addPrimaryKey("BOOK.BOOK_ID");
+ DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection());
+
+ // Read a book instance
+ Command select = das.createCommand("SELECT * FROM BOOK WHERE BOOK_ID = 1");
+ DataObject root = select.executeQuery();
+ DataObject book = root.getDataObject("BOOK[1]");
+ // Change a field to mark the instance 'dirty'
+ book.setInt("QUANTITY", 2);
+
+ // Flush the change
+
+ das.applyChanges(root);
+
+ // Verify
+ root = select.executeQuery();
+ book = root.getDataObject("BOOK[1]");
+ assertEquals(2, book.getInt("QUANTITY"));
+ }
+
+ /**
+ * Test ability to read a compound graph (Read with Relationship)
+ */
+ public void test3() throws Exception {
+
+ String statement = "SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON CUSTOMER.ID = ANORDER.CUSTOMER_ID WHERE CUSTOMER.ID = 1";
+
+ // Read some customers and related orders
+ // Create relationship config programmatically
+ ConfigHelper helper = new ConfigHelper();
+ helper.addRelationship("CUSTOMER.ID", "ANORDER.CUSTOMER_ID");
+ DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection());
+ Command select = das.createCommand(statement);
+
+ DataObject root = select.executeQuery();
+ DataObject customer = root.getDataObject("CUSTOMER[1]");
+
+ assertEquals(2, customer.getList("ANORDER").size());
+
+ }
+
+ /**
+ * Programatically create table config with "property" name
+ */
+ public void test4() throws Exception {
+
+ String statement = "SELECT * FROM BOOK WHERE BOOK.BOOK_ID = ?";
+
+ // Create Table config programmatically
+ ConfigHelper helper = new ConfigHelper();
+ helper.addTable("BOOK", "Book");
+ helper.addPrimaryKey("Book.BOOK_ID");
+
+ DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection());
+ Command select = das.createCommand(statement);
+ select.setParameter(1, Integer.valueOf(1));
+
+ DataObject root = select.executeQuery();
+
+ DataObject newBook = root.createDataObject("Book");
+ newBook.setString("NAME", "Ant Colonies of the Old World");
+ newBook.setInt("BOOK_ID", 1001);
+ root.getList("Book").add(newBook);
+
+ das.applyChanges(root);
+
+ //Verify
+ select.setParameter(1, Integer.valueOf(1001));
+ root = select.executeQuery();
+ assertEquals("Ant Colonies of the Old World", root.getString("Book[1]/NAME"));
+
+ }
+
+ /**
+ *
+ */
+ public void testAddColumnWithPropertyName() throws SQLException {
+ String statement = "SELECT * FROM BOOK WHERE BOOK.BOOK_ID = ?";
+
+ // Create Table config programmatically
+ ConfigHelper helper = new ConfigHelper();
+ Table table = helper.addTable("BOOK", "Book");
+ helper.addPrimaryKey("Book.BOOK_ID");
+ helper.addColumn(table, "NAME", "bookName");
+ DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection());
+ Command select = das.createCommand(statement);
+ select.setParameter(1, Integer.valueOf(1));
+
+ DataObject root = select.executeQuery();
+
+ DataObject newBook = root.createDataObject("Book");
+ newBook.setString("bookName", "Ant Colonies of the Old World");
+ newBook.setInt("BOOK_ID", 1001);
+ root.getList("Book").add(newBook);
+
+ das.applyChanges(root);
+
+ //Verify
+ select.setParameter(1, Integer.valueOf(1001));
+ root = select.executeQuery();
+ assertEquals("Ant Colonies of the Old World", root.getString("Book[1]/bookName"));
+ }
+ /**
+ * Simple unit test for ConnectionInfo
+ * @throws Exception
+ */
+ public void testConnectionInfo() throws Exception {
+ ConfigHelper helper = new ConfigHelper();
+ helper.addConnectionInfo("jdbc/adatasource");
+
+ Config config = helper.getConfig();
+ ConnectionInfo info = config.getConnectionInfo();
+ assertEquals(info.getDataSource(), "jdbc/adatasource");
+ assertEquals(info.isManagedtx(), true);
+ }
+
+ /**
+ * Simple unit test for ConnectionInfo
+ * @throws Exception
+ */
+ public void testConnectionInfo2() throws Exception {
+ ConfigHelper helper = new ConfigHelper();
+ helper.addConnectionInfo("jdbc/adatasource", false);
+
+ Config config = helper.getConfig();
+ ConnectionInfo info = config.getConnectionInfo();
+ assertEquals(info.getDataSource(), "jdbc/adatasource");
+ assertEquals(info.isManagedtx(), false);
+ }
+
+ /**
+ * Simple unit test for ConnectionInfo using DriverManager
+ * @throws Exception
+ */
+ public void testConnectionInfoDriverManager() throws Exception {
+ ConfigHelper helper = new ConfigHelper();
+ helper.addConnectionInfo("org.apache.derby.jdbc.EmbeddedDriver","jdbc:derby:target/dastest", "user", "password", 600);
+
+ Config config = helper.getConfig();
+ ConnectionInfo info = config.getConnectionInfo();
+ assertNull(info.getDataSource());
+ assertEquals(info.getConnectionProperties().getDriverClass(), "org.apache.derby.jdbc.EmbeddedDriver");
+ assertEquals(info.getConnectionProperties().getDatabaseURL(), "jdbc:derby:target/dastest");
+ assertEquals(info.getConnectionProperties().getUserName(), "user");
+ assertEquals(info.getConnectionProperties().getPassword(), "password");
+ assertEquals(info.getConnectionProperties().getLoginTimeout(), 600);
+ }
+
+ /**
+ * Simple unit test for adding a select command
+ * @throws Exception
+ */
+ public void testAddSelectCommand() throws Exception {
+ ConfigHelper helper = new ConfigHelper();
+ helper.addSelectCommand("get all customers", "select * from customers");
+
+ Config config = helper.getConfig();
+ List commands = config.getCommand();
+ assertEquals(1, commands.size());
+ org.apache.tuscany.das.rdb.config.Command cmd = (org.apache.tuscany.das.rdb.config.Command) commands.get(0);
+ assertEquals("select", cmd.getKind());
+ assertEquals("get all customers", cmd.getName());
+ assertEquals("select * from customers", cmd.getSQL());
+ }
+
+
+ /**
+ * Simple unit test for adding an update command
+ * @throws Exception
+ */
+ public void testAddUpdateCommand() throws Exception {
+ ConfigHelper helper = new ConfigHelper();
+ helper.addUpdateCommand("update a customer", "update customers set name = ? where id = ?");
+
+ Config config = helper.getConfig();
+ List commands = config.getCommand();
+ assertEquals(1, commands.size());
+ org.apache.tuscany.das.rdb.config.Command cmd = (org.apache.tuscany.das.rdb.config.Command) commands.get(0);
+ assertEquals("update", cmd.getKind());
+ assertEquals("update a customer", cmd.getName());
+ assertEquals("update customers set name = ? where id = ?", cmd.getSQL());
+ }
+
+ /**
+ * Simple unit test for adding an insert command
+ * @throws Exception
+ */
+ public void testAddInsertCommand() throws Exception {
+ ConfigHelper helper = new ConfigHelper();
+ helper.addInsertCommand("insert customer", "insert into customers(ID,NAME) values (?,?)");
+
+ Config config = helper.getConfig();
+ List commands = config.getCommand();
+ assertEquals(1, commands.size());
+ org.apache.tuscany.das.rdb.config.Command cmd = (org.apache.tuscany.das.rdb.config.Command) commands.get(0);
+ assertEquals("insert", cmd.getKind());
+ assertEquals("insert customer", cmd.getName());
+ assertEquals("insert into customers(ID,NAME) values (?,?)", cmd.getSQL());
+ }
+
+ /**
+ * Simple unit test for adding a delete command
+ * @throws Exception
+ */
+ public void testAddDeleteCommand() throws Exception {
+ ConfigHelper helper = new ConfigHelper();
+ helper.addDeleteCommand("delete customer", "delete from customers where id = ?");
+
+ Config config = helper.getConfig();
+ List commands = config.getCommand();
+ assertEquals(1, commands.size());
+ org.apache.tuscany.das.rdb.config.Command cmd = (org.apache.tuscany.das.rdb.config.Command) commands.get(0);
+ assertEquals("delete", cmd.getKind());
+ assertEquals("delete customer", cmd.getName());
+ assertEquals("delete from customers where id = ?", cmd.getSQL());
+ }
+
+ /**
+ * Simple unit test for DataObjectModel
+ * @throws Exception
+ */
+ public void testDataObjectModel() throws Exception {
+ ConfigHelper helper = new ConfigHelper();
+ helper.setDataObjectModel("org.apache.tuscany/mytypes");
+
+ Config config = helper.getConfig();
+ assertEquals("org.apache.tuscany/mytypes", config.getDataObjectModel());
+
+ }
+
+ /**
+ * Simple unit test for adding a Delete statement to a Table
+ * @throws Exception
+ */
+ public void testAddDeleteStatement() throws Exception {
+ ConfigHelper helper = new ConfigHelper();
+ Table table = helper.addTable("widgets", "WIDGETS");
+ helper.addDeleteStatement(table, "delete from widgets where id = ?", "ID");
+
+ Config cfg = helper.getConfig();
+ assertEquals(1, cfg.getTable().size());
+ Table widgets = (Table) cfg.getTable().get(0);
+ assertEquals("delete from widgets where id = ?", widgets.getDelete().getSql());
+ assertEquals("WIDGETS", widgets.getTypeName());
+ assertEquals("ID", widgets.getDelete().getParameters());
+
+ }
+
+ /**
+ * Simple unit test for adding a Create statement to a Table
+ * @throws Exception
+ */
+ public void testAddCreateStatement() throws Exception {
+ ConfigHelper helper = new ConfigHelper();
+ Table table = helper.addTable("widgets", "WIDGETS");
+ helper.addCreateStatement(table, "insert into widgets values (?,?)", "ID NAME");
+
+ Config cfg = helper.getConfig();
+ assertEquals(1, cfg.getTable().size());
+ Table widgets = (Table) cfg.getTable().get(0);
+ assertEquals("insert into widgets values (?,?)", widgets.getCreate().getSql());
+ assertEquals("WIDGETS", widgets.getTypeName());
+ assertEquals("ID NAME", widgets.getCreate().getParameters());
+
+ }
+
+ public void testAddInvalidPrimaryKey() throws Exception {
+ ConfigHelper helper = new ConfigHelper();
+ try {
+ helper.addPrimaryKey("PK");
+ } catch (RuntimeException ex) {
+ this.assertEquals ("Column PK must be qualified with a table name and optional schema name", ex.getMessage());
+ }
+ }
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ReadDBSchemaTests.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ReadDBSchemaTests.java
new file mode 100644
index 0000000000..6fb52ad17d
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ReadDBSchemaTests.java
@@ -0,0 +1,55 @@
+/*
+ * 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;
+
+/*
+ * Test the ability to query Database schema(metadata) information using regular DAS APIs This is speciic to DB2
+ *
+ */
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.DAS;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class ReadDBSchemaTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ public void testReadTableInfo() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ Command select = das.createCommand("SELECT * from SYSIBM.SYSTABLES WHERE TYPE = 'T'");
+ DataObject root = select.executeQuery();
+
+ DataObject table = (DataObject) root.get("SYSTABLES[1]");
+
+ assertEquals('T', table.getChar("TYPE"));
+
+ }
+
+ //Utilities
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RecursiveTests.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RecursiveTests.java
new file mode 100644
index 0000000000..4af085a6a5
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RecursiveTests.java
@@ -0,0 +1,71 @@
+/*
+ * 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;
+
+import java.util.Iterator;
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.DAS;
+import org.apache.tuscany.das.rdb.test.data.PartData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class RecursiveTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ new PartData(getAutoConnection()).refresh();
+ }
+
+ public void testReadEngineParts() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("PartsConfig.xml"), getConnection());
+ // Table definition
+ // CREATE TABLE PART (ID INT PRIMARY KEY NOT NULL, NAME VARCHAR(50), QUANTITY INT, PARENT_ID INT );
+
+ Command select = das.getCommand("readEngineParts");
+
+ // Need to set the key explicitly. The aggregate of columns not working
+ // because of null values
+ DataObject root = select.executeQuery();
+
+ assertEquals(5, root.getList("PART").size());
+ // printList(root.getList("PART"));
+ DataObject engine = root.getDataObject("PART.0");
+ assertEquals("Engine", engine.getString("NAME"));
+
+ assertEquals(3, engine.getList("subparts").size());
+
+ DataObject piston = null;
+ Iterator i = engine.getList("subparts").iterator();
+ while (i.hasNext()) {
+ DataObject obj = (DataObject) i.next();
+ if (obj.getString("NAME").equals("Piston")) {
+ piston = obj;
+ }
+ }
+
+ assertEquals("Piston", piston.getString("NAME"));
+ assertEquals(1, piston.getList("subparts").size());
+ assertEquals("Piston Ring", piston.getDataObject("subparts.0").getString("NAME"));
+
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RelationshipTests.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RelationshipTests.java
new file mode 100644
index 0000000000..2c2eb95e40
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/RelationshipTests.java
@@ -0,0 +1,241 @@
+/*
+ * 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;
+
+/*
+ *
+ *
+ */
+
+import java.sql.SQLException;
+
+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.Relationship;
+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;
+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.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class RelationshipTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ new CustomerData(getAutoConnection()).refresh();
+ new OrderData(getAutoConnection()).refresh();
+
+ new CompanyData(getAutoConnection()).refresh();
+ new EmployeeData(getAutoConnection()).refresh();
+ new DepartmentData(getAutoConnection()).refresh();
+ new CompanyEmpData(getAutoConnection()).refresh();
+ new DepEmpData(getAutoConnection()).refresh();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ /**
+ * Test ability to read a compound graph
+ */
+ public void testRead() throws Exception {
+
+ String statement = "SELECT * FROM CUSTOMER LEFT JOIN ANORDER "
+ + "ON CUSTOMER.ID = ANORDER.CUSTOMER_ID WHERE CUSTOMER.ID = 1";
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("customerOrderRelationshipMapping.xml"), getConnection());
+ // Read some customers and related orders
+ Command select = das.createCommand(statement);
+
+ DataObject root = select.executeQuery();
+ DataObject customer = root.getDataObject("CUSTOMER[1]");
+
+ assertEquals(2, customer.getList("orders").size());
+
+ }
+
+ /**
+ * Same as above except uses xml file for relationhip and key information.
+ * Employs CUD generation.
+ */
+ public void testRelationshipModification2() throws Exception {
+
+ 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");
+ Integer cust2ID = (Integer) cust2.get("ID");
+ // save order count
+ Integer cust1OrderCount = Integer.valueOf(cust1.getList("orders").size());
+ Integer cust2OrderCount = Integer.valueOf(cust2.getList("orders").size());
+
+ // Move an order to cust1 from cust2
+ DataObject order = (DataObject) cust2.getList("orders").get(0);
+ cust1.getList("orders").add(order);
+
+ // Flush changes
+ das.applyChanges(root);
+
+ // verify cust1 relationship updates
+ select = das
+ .createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON "
+ + "CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = ?");
+ select.setParameter(1, cust1ID);
+
+ root = select.executeQuery();
+ assertEquals(cust1OrderCount.intValue() + 1, root.getList("CUSTOMER[1]/orders").size());
+
+ // verify cust2 relationship updates
+ select.setParameter(1, cust2ID);
+ root = select.executeQuery();
+ assertEquals(cust2OrderCount.intValue() - 1, root.getList("CUSTOMER[1]/orders").size());
+
+ }
+
+ /**
+ * This scenario uses union to simmulate full outer join
+ * The resulted graph will have departments without employees, and employees without departments
+ * And this testcase will modify the relationship between these entities and assign the employees to the department
+ *
+ * @throws Exception
+ */
+ public void testSimulateFullOuterJoinRelationshipModification() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("companyMappingWithResultDescriptor.xml"), getConnection());
+ // Read some customers and related orders
+
+ Command select = das.getCommand("testFullOuterJoinRelationship");
+ DataObject root = select.executeQuery();
+
+ DataObject department = root.getDataObject("DEPARTMENT[NAME='New Technologies']"); //department with no employees
+
+ DataObject emp1 = root.getDataObject("EMPLOYEE[NAME='Mary Smith']"); //employee not assgned to department
+ DataObject emp2 = root.getDataObject("EMPLOYEE[NAME='John Smith']"); //employee not assgned to department
+
+ department.getList("employees").add(emp1);
+ department.getList("employees").add(emp2);
+
+ das.applyChanges(root);
+
+ //verify cust1 relationship updates
+ select = das.getCommand("testEmployeesFromDepartment");
+ select.setParameter(1, "New Technologies" );
+
+ root = select.executeQuery();
+ assertEquals(2, root.getDataObject("DEPARTMENT[NAME='New Technologies']").getList("employees").size());
+
+
+
+ }
+
+ 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());
+ }
+ }
+
+ public void testInvalidFKColumn() throws SQLException {
+ ConfigHelper helper = new ConfigHelper();
+ Relationship r = helper.addRelationship("CUSTOMER.ID", "ANORDER.CUSTOMER_ID_INVALID");
+ r.setName("orders");
+
+
+ DAS das = DAS.FACTORY.createDAS(helper.getConfig(), getConnection());
+ 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 order = root.createDataObject("ANORDER");
+ order.setInt("ID", 500);
+ cust1.getList("orders").add(order);
+ try {
+ das.applyChanges(root);
+ } catch (RuntimeException ex) {
+ assertEquals("Invalid foreign key column: CUSTOMER_ID_INVALID", ex.getMessage());
+ }
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ResultSetShapeTests.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ResultSetShapeTests.java
new file mode 100644
index 0000000000..74cc753911
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ResultSetShapeTests.java
@@ -0,0 +1,91 @@
+/*
+ * 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;
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.DAS;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+/**
+ * Test ability to specify format(shape) of the ResultSet. This is necessary
+ * when the JDBC driver in use does not provide adequate support for
+ * ResultSetMetadata. Also, we expect that specifying the result set shape will
+ * increase performance.
+ *
+ */
+public class ResultSetShapeTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ new CustomerData(getAutoConnection()).refresh();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ /**
+ * Read a specific customer
+ */
+ public void testReadSingle() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("CustomerConfigWithIDConverter.xml"), getConnection());
+ // Create and initialize command to read customers
+ Command readCustomers = das.getCommand("literal");
+
+ // Read
+ DataObject root = readCustomers.executeQuery();
+
+ // Verify
+ assertEquals(5, root.getList("CUSTOMER").size());
+ assertEquals(99, root.getInt("CUSTOMER[1]/ID"));
+ assertEquals("Roosevelt", root.getString("CUSTOMER[1]/LASTNAME"));
+ assertEquals("1600 Pennsylvania Avenue", root.getString("CUSTOMER[1]/ADDRESS"));
+
+ }
+
+ /**
+ * Read a specific customer This duplicates the previous tests but does not
+ * provide the shape info. Since the select will not return valid metadata,
+ * this test is expected to fail
+ */
+ public void testReadSingleVerifyShapeUse() throws Exception {
+
+
+ // Using literals in the select forces invalid resultset metadata
+ String sqlString = "Select 99, 'Roosevelt', '1600 Pennsylvania Avenue' from customer";
+
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ // Create and initialize command to read customers
+ Command readCustomers = das.createCommand(sqlString);
+
+ // Read
+ try {
+ readCustomers.executeQuery();
+ fail("exception not thrown");
+ } catch (RuntimeException ex) {
+ assertEquals("Unable to obtain table information from JDBC. DAS configuration must specify ResultDescriptors", ex.getMessage());
+ }
+
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SerializationTests.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SerializationTests.java
new file mode 100644
index 0000000000..ca6174956e
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SerializationTests.java
@@ -0,0 +1,76 @@
+/*
+ * 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;
+
+/*
+ * This class provides tests for all supported "types". The current plan
+ * is to use the Data type definitions provided in the SDO 2 specification. We
+ * must test the ability to use all of these types as well as different mapping
+ * from thse types to types used in the database. For example, a SDO Data
+ * Type "STRING", might be staored as a "TIMESTAMP" in DB2.
+ *
+ */
+
+import org.apache.tuscany.das.rdb.test.data.TypesData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+public class SerializationTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ new TypesData(getAutoConnection()).refresh();
+ }
+
+ /**
+ * Read various types.
+ */
+
+ public void testReadandSerialize() throws Exception {
+ /**
+ * Currently failing because of TUSCANY-22
+ * Command select = Command.FACTORY .createCommand("Select * from TYPETEST where ID = 1");
+ * select.setConnection(getConnection()); DataObject root = select.executeQuery();
+ *
+ * DataObject obj = root.getDataObject("TYPETEST[1]");
+ *
+ * assertTrue(obj.isSet("ID")); assertTrue(obj.isSet("ATIMESTAMP"));
+ * assertTrue(obj.isSet("ADECIMAL")); assertTrue(obj.isSet("AFLOAT"));
+ *
+ * //Java serilaization to file FileOutputStream fos = null; ObjectOutputStream out = null; try { fos = new
+ * FileOutputStream("serializedGraph.xml"); out = new ObjectOutputStream(fos);
+ * out.writeObject(root);
+ * out.flush();
+ * } finally {
+ * out.close();
+ * fos.close(); }
+ *
+ * //Reconstruct the graph FileInputStream fis = null; ObjectInputStream in = null;
+ * DataObject root2; try { fis = new
+ * FileInputStream("serializedGraph.xml"); in = new ObjectInputStream(fis);
+ * root2 = (DataObject) in.readObject(); } finally { in.close();
+ * fis.close(); }
+ *
+ * assertEquals(1, root.getInt("TYPETEST[1]/ID")); assertEquals(TypesData.getTimestamp(),
+ * (java.sql.Timestamp)root.get("TYPETEST[1]/ATIMESTAMP"));
+ * assertEquals(1234567.89f, root2.getFloat("TYPETEST[1]/ADECIMAL"), .001);
+ * assertEquals(1234567.89f, root2.getFloat("TYPETEST[1]/AFLOAT"), .001);
+ *
+ */
+ }
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SimplestCrud.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SimplestCrud.java
new file mode 100644
index 0000000000..32c60a2760
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/SimplestCrud.java
@@ -0,0 +1,228 @@
+/*
+ * 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;
+
+/*
+ * These are the simplest possible uses of the JDBC DAS. In this mode, the programming model is not much more than JDBC
+ *
+ * The assumptions for these tests are:
+ *
+ * Single type Client explicitly Read/Create/Update/Delete commands
+ * No O/R mapping metadata SDO change history is not used Dynamic DataObjects No
+ * specified graph model
+ *
+ *
+ */
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.DAS;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class SimplestCrud extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ new CustomerData(getAutoConnection()).refresh();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ /**
+ * Read a specific customer
+ */
+ public void testReadSingle() throws Exception {
+
+ // Create and initialize command to read customers
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ Command readCustomers = das.createCommand("select * from CUSTOMER where ID = 1");
+
+ // Read
+ DataObject root = readCustomers.executeQuery();
+
+ // Verify
+ assertEquals(1, root.getInt("CUSTOMER[1]/ID"));
+ }
+
+ /**
+ * Read a specific customer
+ */
+ public void testReadSingle2() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ // Create and initialize command to read customers
+ Command readCustomers = das.createCommand("select * from CUSTOMER where ID = 1");
+
+ // Read
+ DataObject root = readCustomers.executeQuery();
+
+ // Verify
+ assertEquals(1, root.getInt("CUSTOMER[1]/ID"));
+ }
+
+ /**
+ * Read a specific customer Same as above but tests tolerance of white space in provided SQL
+ */
+ public void testReadSingleWithWhiteSpace() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ // Create and initialize command to read customers
+ Command readCustomers = das.createCommand(" select * from CUSTOMER where ID = 1");
+
+ // Read
+ DataObject root = readCustomers.executeQuery();
+
+ // Verify
+ assertEquals(1, root.getInt("CUSTOMER[1]/ID"));
+ }
+
+ /**
+ * Read all customers with a specific last name
+ */
+ public void testReadMultiple() throws Exception {
+
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ // Create and initialize command to read customers
+ Command readCustomers = das.createCommand("select * from CUSTOMER where LASTNAME = 'Williams'");
+
+ // Read
+ DataObject root = readCustomers.executeQuery();
+
+ // Verify
+ assertEquals(4, root.getList("CUSTOMER").size());
+ }
+
+ /**
+ * Read all customers with a specific last name LASTNAME value is provided via a parameter
+ */
+ public void testReadMultipleWithParameters() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ // Create and initialize command to read customers
+ Command readCustomers = das.createCommand("select * from CUSTOMER where LASTNAME = ?");
+
+ // Parameterize the command
+ readCustomers.setParameter(1, "Williams");
+ DataObject root = readCustomers.executeQuery();
+
+ // Verify
+ assertEquals(4, root.getList("CUSTOMER").size());
+ }
+
+ public void testInsert() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ Command insert = das.createCommand("insert into CUSTOMER values (10, 'Williams', '5528 Wells Fargo Dr')");
+ insert.execute();
+
+ // Verify
+ Command select = das.createCommand("Select * from CUSTOMER where ID = 10");
+ DataObject root = select.executeQuery();
+ assertEquals(1, root.getList("CUSTOMER").size());
+ assertEquals("5528 Wells Fargo Dr", root.get("CUSTOMER[1]/ADDRESS"));
+
+ }
+
+ public void testInsertWithParameters() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ Command insert = das.createCommand("insert into CUSTOMER values (?, ?, ?)");
+ insert.setParameter(1, Integer.valueOf(10));
+ insert.setParameter(2, "Williams");
+ insert.setParameter(3, "5528 Wells Fargo Dr");
+ insert.execute();
+
+ // Verify
+ Command select = das.createCommand("Select * from CUSTOMER where ID = 10");
+ DataObject root = select.executeQuery();
+ assertEquals(1, root.getList("CUSTOMER").size());
+ assertEquals("5528 Wells Fargo Dr", root.get("CUSTOMER[1]/ADDRESS"));
+
+ }
+
+ public void testDelete() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ // Verify pre-condition
+ Command select = das.createCommand("Select * from CUSTOMER where ID = 1");
+ DataObject root = select.executeQuery();
+ assertEquals(1, root.getList("CUSTOMER").size());
+
+ // Create and execute the delete command
+ Command delete = das.createCommand("delete from CUSTOMER where ID = 1");
+ delete.execute();
+
+ // Verify delete by reusing the original select command
+ root = select.executeQuery();
+ assertEquals(0, root.getList("CUSTOMER").size());
+
+ }
+
+ public void testUpdate() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ // Verify pre-condition
+ Command select = das.createCommand("Select * from CUSTOMER where ID = 1");
+ DataObject root = select.executeQuery();
+ assertFalse(root.get("CUSTOMER[1]/LASTNAME").equals("Pavick"));
+
+ Command update = das.createCommand("update CUSTOMER set LASTNAME = 'Pavick' where ID = 1");
+ update.execute();
+
+ // Verify update - reuse select command
+ root = select.executeQuery();
+ assertEquals("Pavick", root.get("CUSTOMER[1]/LASTNAME"));
+
+ }
+
+ public void testUpdateWithParameters() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ // Verify pre-condition
+ Command select = das.createCommand("Select * from CUSTOMER where ID = 1");
+ DataObject root = select.executeQuery();
+ assertFalse(root.get("CUSTOMER[1]/LASTNAME").equals("Pavick"));
+
+ Command update = das.createCommand("update CUSTOMER set LASTNAME = ? where ID = ?");
+ update.setParameter(1, "Pavick");
+ update.setParameter(2, Integer.valueOf(1));
+ update.execute();
+
+ // Verify update - reuse select command
+ root = select.executeQuery();
+ assertEquals("Pavick", root.get("CUSTOMER[1]/LASTNAME"));
+
+ }
+
+ public void testUpdateWithParmarkers() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ // Verify pre-condition
+ Command select = das.createCommand("Select * from CUSTOMER where ID = 1");
+ DataObject root = select.executeQuery();
+ assertFalse(root.get("CUSTOMER[1]/LASTNAME").equals("Pavick"));
+
+ Command update = das.createCommand("update CUSTOMER set LASTNAME = ? where ID = ?");
+ update.setParameter(1, "Pavick");
+ update.setParameter(2, Integer.valueOf(1));
+ update.execute();
+
+ //Verify update - reuse select command
+ root = select.executeQuery();
+ assertEquals("Pavick", root.get("CUSTOMER[1]/LASTNAME"));
+
+ }
+
+} \ No newline at end of file
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/StoredProcs.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/StoredProcs.java
new file mode 100644
index 0000000000..b085906bd0
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/StoredProcs.java
@@ -0,0 +1,142 @@
+/*
+ * 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;
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.DAS;
+import org.apache.tuscany.das.rdb.test.data.CompanyData;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.data.OrderData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class StoredProcs extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ new CompanyData(getAutoConnection()).refresh();
+ new CustomerData(getAutoConnection()).refresh();
+ new OrderData(getAutoConnection()).refresh();
+
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ public void testMultipleResultSets() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ Command read = das.createCommand("{call GETALLCUSTOMERSANDORDERS()}");
+
+ DataObject root = read.executeQuery();
+
+ // Verify
+ assertEquals(5, root.getList("CUSTOMER").size());
+ assertEquals(4, root.getList("ANORDER").size());
+ }
+
+ // Call a simple stored proc to read all companies
+ public void testGetCompanies() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ Command read = das.createCommand("{call GETALLCOMPANIES()}");
+
+ DataObject root = read.executeQuery();
+
+ // Verify
+ assertEquals(3, root.getList("COMPANY").size());
+ assertTrue(root.getInt("COMPANY[1]/ID") > 0);
+
+ }
+
+ public void testGetNamedCompany() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ Command read = das.createCommand("{call GETNAMEDCOMPANY(?)}");
+
+ read.setParameter(1, "MegaCorp");
+ DataObject root = read.executeQuery();
+
+ assertEquals("MegaCorp", root.getString("COMPANY[1]/NAME"));
+
+ }
+
+ public void testGetNamedCompanyByName() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ Command read = das.createCommand("{call GETNAMEDCOMPANY(?)}");
+
+ read.setParameter(1, "MegaCorp");
+ DataObject root = read.executeQuery();
+
+ assertEquals("MegaCorp", root.getString("COMPANY[1]/NAME"));
+ }
+
+ // Retreive heirarchy using a stored proc ... new programming model
+ public void testGetCustomersAndOrder() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConfig("CustomersOrdersConfig.xml"), getConnection());
+ Command read = das.createCommand("{call getCustomerAndOrders(?)}");
+ read.setParameter(1, Integer.valueOf(1));
+
+ DataObject root = read.executeQuery();
+
+ DataObject customer = (DataObject) root.getList("CUSTOMER").get(0);
+ assertEquals(2, customer.getList("orders").size());
+
+ }
+
+ /**
+ * Call a stored proc requiring an in parameter and producing
+ * an out parameter and a resultset
+ *
+ * This stored proc takes a lastname argument and returns a
+ * graph of customers with that last name. The number of read
+ * customers is returned in
+ * the out parameter
+ */
+ public void testGetNamedCustomers() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConfig("storedProcTest.xml"), getConnection());
+ Command read = das.getCommand("getNamedCustomers");
+ read.setParameter(1, "Williams");
+ DataObject root = read.executeQuery();
+
+ Integer customersRead = (Integer) read.getParameter(2);
+
+ assertEquals(4, customersRead.intValue());
+ assertEquals(customersRead.intValue(), root.getList("CUSTOMER").size());
+
+ }
+
+ // TODO - Resolve issue with programmatic creation of GETNAMEDCUSTOMERS on DB2 and
+ // re-enable this test
+
+ // Simplest possible SP write
+ public void testDelete() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ Command delete = das.createCommand("{call DELETECUSTOMER(?)}");
+ delete.setParameter(1, Integer.valueOf(1));
+ delete.execute();
+
+ // Verify DELETE
+ Command select = das.createCommand("Select * from CUSTOMER where ID = 1");
+ DataObject root = select.executeQuery();
+ assertTrue(root.getList("CUSTOMER").isEmpty());
+
+ }
+
+} \ No newline at end of file
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TopDown.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TopDown.java
new file mode 100644
index 0000000000..d9f880e92d
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TopDown.java
@@ -0,0 +1,73 @@
+/*
+ * 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;
+
+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.customer.AnOrder;
+import org.apache.tuscany.das.rdb.test.customer.Customer;
+import org.apache.tuscany.das.rdb.test.customer.CustomerFactory;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.data.OrderData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+import org.apache.tuscany.sdo.util.SDOUtil;
+
+import commonj.sdo.DataObject;
+
+public class TopDown extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ new CustomerData(getAutoConnection()).refresh();
+ new OrderData(getAutoConnection()).refresh();
+
+ }
+
+ // Uses dynamic SDOs but user provides the model
+ public void testUserProvidedModelDynamic() throws SQLException {
+
+ DAS das = DAS.FACTORY.createDAS(getConfig("staticCustomerOrder.xml"), getConnection());
+
+ Command select = das.getCommand("Customer and Orders");
+
+ SDOUtil.registerStaticTypes(CustomerFactory.class);
+
+ // Parameterize the command
+ select.setParameter(1, Integer.valueOf(1));
+
+ // Get the graph - DataGraphRoot is from the typed package
+ DataObject root = select.executeQuery();
+
+ // Modify a customer
+ Customer customer = (Customer) root.getDataObject("Customer[1]");
+ customer.setLastName("Pavick");
+
+ // Modify an order
+ AnOrder order = (AnOrder) customer.getOrders().get(0);
+ order.setProduct("Kitchen Sink 001");
+
+ // Flush changes
+ das.applyChanges((DataObject) root);
+
+ }
+
+} \ No newline at end of file
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TransactionTests.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TransactionTests.java
new file mode 100644
index 0000000000..7ae9c9b701
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TransactionTests.java
@@ -0,0 +1,87 @@
+/*
+ * 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;
+
+/*
+ * Test capability to participate in an extenrlly managed transaction.
+ * The client is managing the transaction boundary so the DAS will not issue
+ * commit/rollback
+ *
+ */
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.DAS;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class TransactionTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ new CustomerData(getAutoConnection()).refresh();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ /**
+ * Read and modify a customer. Uses a "passive" connection
+ */
+ public void testReadModifyApply() throws Exception {
+
+ // Create and initialize a DAS connection and initialize for externally
+ // managed transaction boundaries
+ java.sql.Connection c = getConnection();
+
+ DAS das = DAS.FACTORY.createDAS(c);
+ // Read customer 1
+ Command select = das.createCommand("select * from CUSTOMER");
+ DataObject root = select.executeQuery();
+
+ int numCustomers = root.getList("CUSTOMER").size();
+
+ //Create two identical customers. Will force insert error on dup key
+
+ DataObject custA = root.createDataObject("CUSTOMER");
+ custA.set("ID", Integer.valueOf(100));
+ custA.set("ADDRESS", "5528 Wells Fargo Drive");
+ custA.set("LASTNAME", "Gerkin");
+
+ DataObject custB = root.createDataObject("CUSTOMER");
+ custB.set("ID", Integer.valueOf(100));
+ custB.set("ADDRESS", "5528 Wells Fargo Drive");
+ custB.set("LASTNAME", "Gerkin");
+ try {
+ das.applyChanges(root);
+ fail("An exception was expected");
+ } catch (Exception e) {
+ //do nothing
+ }
+
+ // Verify that the changes did not go through
+ // Roll back should discard al changes
+ root = select.executeQuery();
+ assertEquals(numCustomers, root.getList("CUSTOMER").size());
+
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TypeTests.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TypeTests.java
new file mode 100644
index 0000000000..e6972357f6
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/TypeTests.java
@@ -0,0 +1,90 @@
+/*
+ * 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;
+
+/*
+ * This class provides tests for all supported "types". The current plan is to use the Data
+ * type definitions provided in the SDO 2 specification. We must test the ability to use
+ * all of these types as well as different mapping from thse types to types used in the
+ * database. For example, a SDO Data Type "STRING", might be staored as a "TIMESTAMP" in DB2.
+ *
+ */
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.DAS;
+import org.apache.tuscany.das.rdb.test.data.TypesData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+
+import commonj.sdo.DataObject;
+
+public class TypeTests extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ new TypesData(getAutoConnection()).refresh();
+ }
+
+ /**
+ * Read various types.
+ */
+ public void testRead() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConnection());
+ // Read customer 1
+ Command select = das.createCommand("Select * from TYPETEST where ID = 1");
+ DataObject root = select.executeQuery();
+
+ DataObject types = (DataObject) root.get("TYPETEST[1]");
+
+ java.sql.Timestamp ts = (java.sql.Timestamp) types.get("ATIMESTAMP");
+ assertEquals(ts, TypesData.getTimestamp());
+
+ float decimal = types.getFloat("ADECIMAL");
+ assertEquals(1234567.89f, decimal, .0001);
+
+ }
+
+ /**
+ * Write various types.
+ * TODO - Need to rethink the Timestamp write. My current thinking id that writes of non-SDO2 defined types
+ * require a converter
+ */
+ /* public void testWrite() throws Exception {
+
+ //Read customer 1
+ Command select = Command.FACTORY.createCommand("Select * from TYPETEST where ID = 1");
+ select.setConnection(getConnection());
+ DataObject root = select.executeQuery();
+
+ DataObject types = (DataObject)root.get("TYPETEST[1]");
+ Date now = new Date();
+ types.set("ATIMESTAMP", now);
+
+ ApplyChangesCommand apply = Command.FACTORY.createApplyChangesCommand();
+ apply.setConnection(getConnection());
+ apply.addPrimaryKey("TYPETEST.ID");
+ apply.execute(root);
+
+ //Verify
+ root = select.executeQuery();
+ java.sql.Timestamp ts = (java.sql.Timestamp)types.get("ATIMESTAMP");
+ assertEquals(now, ts);
+
+ }*/
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersByLastnameCommand.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersByLastnameCommand.java
new file mode 100644
index 0000000000..f98e014ca9
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersByLastnameCommand.java
@@ -0,0 +1,56 @@
+/*
+ * 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.commands;
+
+import org.apache.tuscany.das.rdb.config.Column;
+import org.apache.tuscany.das.rdb.config.Config;
+import org.apache.tuscany.das.rdb.config.ConfigFactory;
+import org.apache.tuscany.das.rdb.config.Table;
+import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
+import org.apache.tuscany.das.rdb.impl.ReadCommandImpl;
+
+public class ReadCustomersByLastnameCommand extends ReadCommandImpl {
+
+ private static final String SQL_STRING = "select * from CUSTOMER where LASTNAME = ?";
+
+ private static final Config CONFIG;
+
+ static {
+ ConfigFactory factory = ConfigFactory.INSTANCE;
+ CONFIG = factory.createConfig();
+ Table t = factory.createTable();
+ Column id = factory.createColumn();
+ id.setColumnName("ID");
+ id.setPrimaryKey(true);
+ Column lastname = factory.createColumn();
+ lastname.setColumnName("LASTNAME");
+ Column address = factory.createColumn();
+ address.setColumnName("ADDRESS");
+
+ t.getColumn().add(id);
+ t.getColumn().add(lastname);
+ t.getColumn().add(address);
+ t.setTableName("CUSTOMER");
+ CONFIG.getTable().add(t);
+ }
+
+ public ReadCustomersByLastnameCommand() {
+ super(SQL_STRING, new MappingWrapper(CONFIG), null);
+ }
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersCommand.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersCommand.java
new file mode 100644
index 0000000000..7a4b8f49dd
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersCommand.java
@@ -0,0 +1,57 @@
+/*
+ * 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.commands;
+
+import org.apache.tuscany.das.rdb.config.Column;
+import org.apache.tuscany.das.rdb.config.Config;
+import org.apache.tuscany.das.rdb.config.ConfigFactory;
+import org.apache.tuscany.das.rdb.config.Table;
+import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
+import org.apache.tuscany.das.rdb.impl.ReadCommandImpl;
+
+public class ReadCustomersCommand extends ReadCommandImpl {
+
+ private static final String SQL_STRING = "select * from CUSTOMER";
+
+ private static final Config CONFIG;
+
+ static {
+ ConfigFactory factory = ConfigFactory.INSTANCE;
+ CONFIG = factory.createConfig();
+ Table t = factory.createTable();
+ Column id = factory.createColumn();
+ id.setColumnName("ID");
+ id.setPrimaryKey(true);
+ Column lastname = factory.createColumn();
+ lastname.setColumnName("LASTNAME");
+ Column address = factory.createColumn();
+ address.setColumnName("ADDRESS");
+
+ t.getColumn().add(id);
+ t.getColumn().add(lastname);
+ t.getColumn().add(address);
+ t.setTableName("CUSTOMER");
+ CONFIG.getTable().add(t);
+ }
+
+ public ReadCustomersCommand() {
+ super(SQL_STRING, new MappingWrapper(CONFIG), null);
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersStaticTypesCommand.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersStaticTypesCommand.java
new file mode 100644
index 0000000000..407a43c21f
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersStaticTypesCommand.java
@@ -0,0 +1,60 @@
+/*
+ * 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.commands;
+
+import org.apache.tuscany.das.rdb.config.Column;
+import org.apache.tuscany.das.rdb.config.Config;
+import org.apache.tuscany.das.rdb.config.ConfigFactory;
+import org.apache.tuscany.das.rdb.config.Table;
+import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
+import org.apache.tuscany.das.rdb.impl.ReadCommandImpl;
+
+public class ReadCustomersStaticTypesCommand extends ReadCommandImpl {
+
+ private static final String SQL_STRING = "Select ID, LASTNAME, ADDRESS from CUSTOMER where LASTNAME = ?";
+
+ private static final Config CONFIG;
+
+ static {
+ ConfigFactory factory = ConfigFactory.INSTANCE;
+ CONFIG = factory.createConfig();
+ Table t = factory.createTable();
+ Column id = factory.createColumn();
+ id.setColumnName("ID");
+ id.setPrimaryKey(true);
+ Column lastname = factory.createColumn();
+ lastname.setColumnName("LASTNAME");
+ Column address = factory.createColumn();
+ address.setColumnName("ADDRESS");
+
+ t.getColumn().add(id);
+ t.getColumn().add(lastname);
+ t.getColumn().add(address);
+ t.setTableName("CUSTOMER");
+ t.setTypeName("Customer");
+ CONFIG.getTable().add(t);
+
+ CONFIG.setDataObjectModel("http:///org.apache.tuscany.das.rdb.test/customer.xsd");
+ }
+
+ public ReadCustomersStaticTypesCommand() {
+ super(SQL_STRING, new MappingWrapper(CONFIG), null);
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersWithShapeCommand.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersWithShapeCommand.java
new file mode 100644
index 0000000000..ba771ca3e5
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/ReadCustomersWithShapeCommand.java
@@ -0,0 +1,63 @@
+/*
+ * 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.commands;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.tuscany.das.rdb.config.ConfigFactory;
+import org.apache.tuscany.das.rdb.config.ResultDescriptor;
+import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
+import org.apache.tuscany.das.rdb.impl.ReadCommandImpl;
+
+public class ReadCustomersWithShapeCommand extends ReadCommandImpl {
+ // This sql string ensures that we won't have resultset metadata
+ static String sqlString = "select * from customer union select * from customer";
+
+ static List descriptor = new ArrayList();
+
+ static {
+ ConfigFactory factory = ConfigFactory.INSTANCE;
+
+ ResultDescriptor desc1 = factory.createResultDescriptor();
+ desc1.setColumnName("ID");
+ desc1.setColumnType("commonj.sdo.Int");
+ desc1.setTableName("CUSTOMER");
+
+ ResultDescriptor desc2 = factory.createResultDescriptor();
+ desc2.setColumnName("LASTNAME");
+ desc2.setColumnType("commonj.sdo.String");
+ desc2.setTableName("CUSTOMER");
+
+ ResultDescriptor desc3 = factory.createResultDescriptor();
+ desc3.setColumnName("ADDRESS");
+ desc3.setColumnType("commonj.sdo.String");
+ desc3.setTableName("CUSTOMER");
+
+ descriptor.add(desc1);
+ descriptor.add(desc2);
+ descriptor.add(desc3);
+
+ }
+
+ public ReadCustomersWithShapeCommand() {
+ super(sqlString, new MappingWrapper(), descriptor);
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/SimpleReadCustomersWithShapeCommand.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/SimpleReadCustomersWithShapeCommand.java
new file mode 100644
index 0000000000..44eea42445
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/commands/SimpleReadCustomersWithShapeCommand.java
@@ -0,0 +1,83 @@
+/*
+ * 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.commands;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.tuscany.das.rdb.config.Column;
+import org.apache.tuscany.das.rdb.config.Config;
+import org.apache.tuscany.das.rdb.config.ConfigFactory;
+import org.apache.tuscany.das.rdb.config.ResultDescriptor;
+import org.apache.tuscany.das.rdb.config.Table;
+import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
+import org.apache.tuscany.das.rdb.impl.ReadCommandImpl;
+
+public class SimpleReadCustomersWithShapeCommand extends ReadCommandImpl {
+
+ // This sql string ensures that we won't have resultset metadata
+ private static final String SQL_STRING = "Select * from customer union select * from customer";
+
+ private static final List DESCRIPTOR = new ArrayList();
+
+ private static final Config CONFIG;
+
+ static {
+ ConfigFactory factory = ConfigFactory.INSTANCE;
+ CONFIG = factory.createConfig();
+ Table t = factory.createTable();
+ Column id = factory.createColumn();
+ id.setColumnName("ID");
+ id.setPrimaryKey(true);
+ Column lastname = factory.createColumn();
+ lastname.setColumnName("LASTNAME");
+ Column address = factory.createColumn();
+ address.setColumnName("ADDRESS");
+
+ t.getColumn().add(id);
+ t.getColumn().add(lastname);
+ t.getColumn().add(address);
+ t.setTableName("CUSTOMER");
+ CONFIG.getTable().add(t);
+
+ ResultDescriptor desc1 = factory.createResultDescriptor();
+ desc1.setColumnName("ID");
+ desc1.setColumnType("commonj.sdo.Int");
+ desc1.setTableName("CUSTOMER");
+
+ ResultDescriptor desc2 = factory.createResultDescriptor();
+ desc2.setColumnName("LASTNAME");
+ desc2.setColumnType("commonj.sdo.String");
+ desc2.setTableName("CUSTOMER");
+
+ ResultDescriptor desc3 = factory.createResultDescriptor();
+ desc3.setColumnName("ADDRESS");
+ desc3.setColumnType("commonj.sdo.String");
+ desc3.setTableName("CUSTOMER");
+
+ DESCRIPTOR.add(desc1);
+ DESCRIPTOR.add(desc2);
+ DESCRIPTOR.add(desc3);
+ }
+
+ public SimpleReadCustomersWithShapeCommand() {
+ super(SQL_STRING, new MappingWrapper(CONFIG), DESCRIPTOR);
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/BookData.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/BookData.java
new file mode 100644
index 0000000000..632a4d057d
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/BookData.java
@@ -0,0 +1,46 @@
+/*
+ * 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 BookData extends TestDataWithExplicitColumns {
+
+ // CREATE TABLE BOOK (ID INT PRIMARY KEY NOT NULL, NAME VARCHAR(50), AUTHOR VARCHAR(30), QUANTITY INT, OCC INTEGER)
+
+ private static int[] bookTypes = {Types.INTEGER, Types.VARCHAR, Types.VARCHAR, Types.INTEGER, Types.INTEGER};
+
+ private static Object[][] bookData = {{Integer.valueOf(1), "The Brothers Karamazov", "Fyodor Dostoevsky",
+ Integer.valueOf(5), Integer.valueOf(17)},
+ {Integer.valueOf(2), "Cat in the Hat", "Doctor Seuss", Integer.valueOf(10), Integer.valueOf(1)}};
+
+ private static String[] bookColumns = {"BOOK_ID", "NAME", "AUTHOR", "QUANTITY", "OCC"};
+
+ public BookData(Connection connection) {
+ super(connection, bookData, bookColumns, bookTypes);
+ }
+
+ public String getTableName() {
+ return "BOOK";
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CityData.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CityData.java
new file mode 100644
index 0000000000..7ce5cf757d
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CityData.java
@@ -0,0 +1,54 @@
+/*
+ * 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.SQLException;
+
+import org.apache.tuscany.das.rdb.test.framework.TestData;
+
+public class CityData extends TestData {
+
+ private static Object[][] cityData = {{Integer.valueOf(1), "Lizard Lick", "1"},
+ {Integer.valueOf(2), "Morrisville", "1"},
+ {Integer.valueOf(3), "Breckenridge", "2"},
+ {Integer.valueOf(4), "Barstow", "3"},
+ {Integer.valueOf(5), "Sacramento", "3"}
+
+ };
+
+ public CityData(Connection c) {
+ super(c, cityData);
+ }
+
+ public String getTableName() {
+ return "CITIES";
+ }
+
+ public void doDeletes() throws SQLException {
+ deleteRowsFromTable();
+
+ }
+
+ public void doInserts() throws SQLException {
+ insertRows();
+
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyData.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyData.java
new file mode 100644
index 0000000000..0c28ed2caa
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyData.java
@@ -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 java.sql.Types;
+
+import org.apache.tuscany.das.rdb.test.framework.TestDataWithExplicitColumns;
+
+public class CompanyData extends TestDataWithExplicitColumns {
+
+ // CREATE TABLE COMPANY (ID INT PRIMARY KEY NOT NULL GENERATED ALWAYS AS IDENTITY ,NAME VARCHAR(30))
+
+ private static int[] columnTypes = {Types.VARCHAR};
+
+ private static Object[][] companyData = {{"ACME Publishing"}, {"Do-rite plumbing"}, {"MegaCorp"}};
+
+ private static String[] companyColumns = {"NAME"};
+
+ public CompanyData(Connection connection) {
+ super(connection, companyData, companyColumns, columnTypes);
+ }
+
+ public String getTableName() {
+ return "COMPANY";
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyDeptData.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyDeptData.java
new file mode 100644
index 0000000000..686e3243cb
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyDeptData.java
@@ -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 org.apache.tuscany.das.rdb.test.framework.RelationshipData;
+
+public class CompanyDeptData extends RelationshipData {
+
+ private static Object[][] data = {{"MegaCorp", "Advanced Technologies"}};
+
+ public CompanyDeptData(Connection c) {
+ super(c, data);
+ }
+
+ protected String getParentRetrievalStatement() {
+ return "select id from company where name = ?";
+ }
+
+ protected String getChildUpdateStatement() {
+ return "update department set companyid = ? where department.name = ?";
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyEmpData.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyEmpData.java
new file mode 100644
index 0000000000..b1d3fb12b5
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CompanyEmpData.java
@@ -0,0 +1,45 @@
+/*
+ * 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 CompanyEmpData extends RelationshipData {
+
+ protected static Object[][] data = {
+ {"Mary Smith", "ACME Publishing" },
+ {"Jane Doe", "Do-rite plumbing"},
+ {"Al Smith", "MegaCorp"}};
+
+ public CompanyEmpData(Connection c) {
+ super(c, data);
+ }
+
+ protected String getParentRetrievalStatement() {
+ return "select employee.id from employee where employee.name = ?";
+ }
+
+ protected String getChildUpdateStatement() {
+ return "update company set company.eotmid = ? where company.name = ?";
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CustomerData.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CustomerData.java
new file mode 100644
index 0000000000..9ec6c8003d
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/CustomerData.java
@@ -0,0 +1,39 @@
+/*
+ * 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.TestData;
+
+public class CustomerData extends TestData {
+
+ private static Object[][] customerData = {{Integer.valueOf(1), "Williams", "1212 foobar lane"},
+ {Integer.valueOf(2), "Daniel", "156 Brentfield Loop"}, {Integer.valueOf(3), "Williams", "456 penny lane"},
+ {Integer.valueOf(4), "Williams", "5000 pineville"}, {Integer.valueOf(5), "Williams", "100000 firefly lane"}};
+
+ public CustomerData(Connection connection) {
+ super(connection, customerData);
+ }
+
+ public String getTableName() {
+ return "CUSTOMER";
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepEmpData.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepEmpData.java
new file mode 100644
index 0000000000..ad8ff14e86
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepEmpData.java
@@ -0,0 +1,43 @@
+/*
+ * 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 DepEmpData extends RelationshipData {
+
+ private static Object[][] data = {{"Advanced Technologies", "John Jones"},
+ {"Advanced Technologies", "Jane Doe"},
+ {"Advanced Technologies", "Al Smith"}};
+
+ public DepEmpData(Connection c) {
+ super(c, data);
+ }
+
+ protected String getParentRetrievalStatement() {
+ return "select department.id from department where department.name = ?";
+ }
+
+ protected String getChildUpdateStatement() {
+ return "update employee set employee.departmentid = ? where employee.name = ?";
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepartmentData.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepartmentData.java
new file mode 100644
index 0000000000..2373e9aa88
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DepartmentData.java
@@ -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 java.sql.Types;
+
+import org.apache.tuscany.das.rdb.test.framework.TestDataWithExplicitColumns;
+
+
+public class DepartmentData extends TestDataWithExplicitColumns {
+
+ private static int[] columnTypes = {Types.VARCHAR, Types.VARCHAR, Types.VARCHAR};
+
+ private static Object[][] deptData = {{"Advanced Technologies", "NY", "123" },
+ {"New Technologies", "CA", "125" }};
+
+ private static String[] deptColumns = {"NAME", "LOCATION", "DEPNUMBER"};
+
+ public DepartmentData(Connection connection) {
+ super(connection, deptData, deptColumns, columnTypes);
+ }
+
+ public String getTableName() {
+ return "DEPARTMENT";
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DogData.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DogData.java
new file mode 100644
index 0000000000..3c686e6fea
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/DogData.java
@@ -0,0 +1,54 @@
+/*
+ * 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 DogData extends TestDataWithExplicitColumns {
+
+ /* CREATE TABLE DOG (
+ ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
+ OWNER_ID INTEGER UNSIGNED NOT NULL,
+ NAME VARCHAR(20) NOT NULL,
+ BREED VARCHAR(20) NULL,
+ OCC_COUNT INTEGER UNSIGNED NULL,
+ PRIMARY KEY(ID),
+ );*/
+
+ //id and owner_id omitted. id is auto-generated. owner_id is filled in by DogOwner data
+ private static int[] columnTypes = {Types.VARCHAR, Types.VARCHAR, Types.INTEGER};
+
+ private static Object[][] data = {{"Fido", "Mutt", Integer.valueOf(1)},
+ {"Max", "German Shepherd", Integer.valueOf(1)},
+ {"Saddie", "Collie", Integer.valueOf(1)}};
+
+ private static String[] columns = {"NAME", "BREED", "OCC_COUNT"};
+
+ public DogData(Connection connection) {
+ super(connection, data, columns, columnTypes);
+ }
+
+ public String getTableName() {
+ return "DOG";
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/EmployeeData.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/EmployeeData.java
new file mode 100644
index 0000000000..402d62fb67
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/EmployeeData.java
@@ -0,0 +1,46 @@
+/*
+ * 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 EmployeeData extends TestDataWithExplicitColumns {
+
+ private static int[] columnTypes = {Types.VARCHAR, Types.VARCHAR, Types.SMALLINT};
+
+ private static Object[][] employeeData = {{"John Jones", "E0001", Boolean.valueOf(false)},
+ {"Mary Smith", "E0002", Boolean.valueOf(true)},
+ {"Jane Doe", "E0003", Boolean.valueOf(false)},
+ {"Al Smith", "E0004", Boolean.valueOf(true)},
+ {"John Smith", "E0005", Boolean.valueOf(false)}};
+
+ private static String[] employeeColumns = {"NAME", "SN", "MANAGER"};
+
+ public EmployeeData(Connection connection) {
+ super(connection, employeeData, employeeColumns, columnTypes);
+ }
+
+ public String getTableName() {
+ return "EMPLOYEE";
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/KennelData.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/KennelData.java
new file mode 100644
index 0000000000..01423ee40e
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/KennelData.java
@@ -0,0 +1,53 @@
+/*
+ * 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 KennelData extends TestDataWithExplicitColumns {
+
+ /* CREATE TABLE KENNEL (
+ ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
+ KNUMBER INTEGER UNSIGNED NULL,
+ KIND VARCHAR(20) NULL,
+ OCC_COUNT INTEGER UNSIGNED NULL,
+ PRIMARY KEY(ID)
+ );*/
+
+ //id omitted. id is auto-generated.
+ private static int[] columnTypes = {Types.INTEGER, Types.VARCHAR, Types.INTEGER};
+
+ private static Object[][] data = {{Integer.valueOf(100), "Small", Integer.valueOf(1)},
+ {Integer.valueOf(101), "Small", Integer.valueOf(1)},
+ {Integer.valueOf(102), "Large", Integer.valueOf(1)}};
+
+ private static String[] columns = {"KNUMBER", "KIND", "OCC_COUNT"};
+
+ public KennelData(Connection connection) {
+ super(connection, data, columns, columnTypes);
+ }
+
+ public String getTableName() {
+ return "KENNEL";
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/MultiSchemaData.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/MultiSchemaData.java
new file mode 100644
index 0000000000..bc59c09fb2
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/MultiSchemaData.java
@@ -0,0 +1,99 @@
+/*
+ * 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.SQLException;
+import java.sql.Statement;
+//JIRA-952
+public class MultiSchemaData {
+ Connection con;
+
+ public MultiSchemaData(Connection connection){
+ this.con = connection;
+ }
+
+ public void refresh() throws SQLException{
+ //System.out.println("Inserting data in multi schema tables");
+ Statement s = this.con.createStatement();
+
+ String[] statements = {
+ "DELETE FROM DASTEST1.CUSTOMER",
+ "DELETE FROM DASTEST1.EMPLOYEE",
+ "DELETE FROM DASTEST1.CITY",
+ "DELETE FROM DASTEST1.ORDERDETAILS",
+ "DELETE FROM DASTEST2.CUSTOMER",
+ "DELETE FROM DASTEST2.CITY",
+ "DELETE FROM DASTEST2.ACCOUNT",
+ "DELETE FROM DASTEST3.CUSTOMER",
+ "DELETE FROM DASTEST3.CUSTORDER",
+ "DELETE FROM DASTEST3.ORDERDETAILSDESC",
+
+ "INSERT INTO DASTEST1.CUSTOMER (ID, LASTNAME, ADDRESS) VALUES (1,'Williams','USA')",
+ "INSERT INTO DASTEST1.CUSTOMER (ID, LASTNAME, ADDRESS) VALUES (2,'Amita1','INDIA')",
+ "INSERT INTO DASTEST1.CUSTOMER (ID, LASTNAME, ADDRESS) VALUES (3,'Patrick1','UK')",
+
+ "INSERT INTO DASTEST1.EMPLOYEE (ID, LASTNAME, ADDRESS) VALUES (1,'Williams','USA')",
+ "INSERT INTO DASTEST1.EMPLOYEE (ID, LASTNAME, ADDRESS) VALUES (2,'Amita1','INDIA')",
+ "INSERT INTO DASTEST1.EMPLOYEE (ID, LASTNAME, ADDRESS) VALUES (3,'Patrick1','UK')",
+
+ "INSERT INTO DASTEST2.CUSTOMER (ID, LASTNAME, ADDRESS) VALUES (1,'John2','USA')",
+ "INSERT INTO DASTEST2.CUSTOMER (ID, LASTNAME, ADDRESS) VALUES (2,'Amita2','INDIA')",
+ "INSERT INTO DASTEST2.CUSTOMER (ID, LASTNAME, ADDRESS) VALUES (3,'Patrick2','UK')",
+
+ "INSERT INTO DASTEST3.CUSTOMER (ID, LASTNAME, ADDRESS) VALUES (1,'JohnAdm','USA')",
+ "INSERT INTO DASTEST3.CUSTOMER (ID, LASTNAME, ADDRESS) VALUES (2,'AmitaAdm','INDIA')",
+ "INSERT INTO DASTEST3.CUSTOMER (ID, LASTNAME, ADDRESS) VALUES (3,'PatrickAdm','UK')",
+
+ "INSERT INTO DASTEST1.CITY (INDX, NAME) VALUES (1,'Fremont')",
+ "INSERT INTO DASTEST1.CITY (INDX, NAME) VALUES (2,'Belmont')",
+
+ "INSERT INTO DASTEST2.CITY (INDX, NAME) VALUES (1,'Milipitas')",
+ "INSERT INTO DASTEST2.CITY (INDX, NAME) VALUES (2,'Newark')",
+
+ "INSERT INTO DASTEST2.ACCOUNT (ACCOUNT_ID, CUSTOMER_ID, BALANCE) VALUES (10, 1, 101)",
+ "INSERT INTO DASTEST2.ACCOUNT (ACCOUNT_ID, CUSTOMER_ID, BALANCE) VALUES (20, 1, 202)",
+ "INSERT INTO DASTEST2.ACCOUNT (ACCOUNT_ID, CUSTOMER_ID, BALANCE) VALUES (30, 2, 303)",
+ "INSERT INTO DASTEST2.ACCOUNT (ACCOUNT_ID, CUSTOMER_ID, BALANCE) VALUES (40, 2, 404)",
+
+ "INSERT INTO DASTEST3.CUSTORDER (ORDER_ID, CUSTOMER_ID, ORDER_COUNT) VALUES (100,1,150)",
+ "INSERT INTO DASTEST3.CUSTORDER (ORDER_ID, CUSTOMER_ID, ORDER_COUNT) VALUES (200,1,250)",
+ "INSERT INTO DASTEST3.CUSTORDER (ORDER_ID, CUSTOMER_ID, ORDER_COUNT) VALUES (300,2,150)",
+ "INSERT INTO DASTEST3.CUSTORDER (ORDER_ID, CUSTOMER_ID, ORDER_COUNT) VALUES (400,2,250)",
+
+ "INSERT INTO DASTEST1.ORDERDETAILS (ORDERID, PRODUCTID, PRICE) VALUES (1,1,101)",
+ "INSERT INTO DASTEST1.ORDERDETAILS (ORDERID, PRODUCTID, PRICE) VALUES (1,2,102)",
+ "INSERT INTO DASTEST1.ORDERDETAILS (ORDERID, PRODUCTID, PRICE) VALUES (2,1,201)",
+ "INSERT INTO DASTEST1.ORDERDETAILS (ORDERID, PRODUCTID, PRICE) VALUES (2,2,202)",
+ "INSERT INTO DASTEST3.ORDERDETAILSDESC (ID, ORDERID, PRODUCTID, DESCR) VALUES (10,1,1, 'DESC 10,1,1')",
+ "INSERT INTO DASTEST3.ORDERDETAILSDESC (ID, ORDERID, PRODUCTID, DESCR) VALUES (20,1,1, 'DESC 20,1,1')",
+ "INSERT INTO DASTEST3.ORDERDETAILSDESC (ID, ORDERID, PRODUCTID, DESCR) VALUES (30,1,2, 'DESC 30,1,2')",
+ "INSERT INTO DASTEST3.ORDERDETAILSDESC (ID, ORDERID, PRODUCTID, DESCR) VALUES (40,1,2, 'DESC 40,1,2')",
+ "INSERT INTO DASTEST3.ORDERDETAILSDESC (ID, ORDERID, PRODUCTID, DESCR) VALUES (50,2,1, 'DESC 50,2,1')",
+ "INSERT INTO DASTEST3.ORDERDETAILSDESC (ID, ORDERID, PRODUCTID, DESCR) VALUES (60,2,2, 'DESC 60,2,2')"
+ };
+
+ for (int i = 0; i < statements.length; i++) {
+ s.execute(statements[i]);
+ }
+ s.close();
+ //System.out.println("Multi schema database setup complete!");
+ }
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderData.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderData.java
new file mode 100644
index 0000000000..2568dd1a9f
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderData.java
@@ -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 org.apache.tuscany.das.rdb.test.framework.TestData;
+
+public class OrderData extends TestData {
+
+ protected static Object[][] orderData = {
+ {Integer.valueOf(1), "recombobulator", Integer.valueOf(47), Integer.valueOf(1)},
+ {Integer.valueOf(2), "wrench", Integer.valueOf(17), Integer.valueOf(3)},
+ {Integer.valueOf(3), "pliers", Integer.valueOf(500), Integer.valueOf(1)},
+ {Integer.valueOf(4), "Tooth Paste", Integer.valueOf(12), Integer.valueOf(2)}};
+
+ public OrderData(Connection c) {
+ super(c, orderData);
+ }
+
+ public String getTableName() {
+ return "ANORDER";
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderDetailsData.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderDetailsData.java
new file mode 100644
index 0000000000..9f5897b373
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderDetailsData.java
@@ -0,0 +1,43 @@
+/*
+ * 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.TestData;
+
+public class OrderDetailsData extends TestData {
+
+ // CREATE TABLE ORDERDETAILS (ORDERID INT NOT NULL, PRODUCTID INT NOT NULL, PRICE FLOAT,
+ // PRIMARY KEY (ORDERID, PRODUCTID))
+
+ protected static Object[][] orderDetailsData = {{Integer.valueOf(1), Integer.valueOf(1), new Float(1.1)},
+ {Integer.valueOf(1), Integer.valueOf(2), new Float(1.2)},
+ {Integer.valueOf(2), Integer.valueOf(1), new Float(2.1)},
+ {Integer.valueOf(2), Integer.valueOf(2), new Float(2.2)}};
+
+ public OrderDetailsData(Connection c) {
+ super(c, orderDetailsData);
+ }
+
+ public String getTableName() {
+ return "ORDERDETAILS";
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderDetailsDescriptionData.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderDetailsDescriptionData.java
new file mode 100644
index 0000000000..068b5a1ff4
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OrderDetailsDescriptionData.java
@@ -0,0 +1,47 @@
+ /*
+ * 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.TestData;
+//JIRA-841
+public class OrderDetailsDescriptionData extends TestData {
+
+ // CREATE TABLE ORDERDETAILSDESC (ID INT NOT NULL, ORDERID INT NOT NULL, PRODUCTID INT NOT NULL,
+ // DESCR VARCHAR,
+ // PRIMARY KEY ID, FOREIGN KEY (ORDERID, PRODUCTID))
+
+ protected static Object[][] orderDetailsDescriptionData =
+ { {Integer.valueOf(1), Integer.valueOf(1), Integer.valueOf(1), "Descr 1,1,1"},
+ {Integer.valueOf(2), Integer.valueOf(1), Integer.valueOf(1), "Descr 2,1,1"},
+ {Integer.valueOf(3), Integer.valueOf(1), Integer.valueOf(2), "Descr 3,1,2"},
+ {Integer.valueOf(4), Integer.valueOf(1), Integer.valueOf(2), "Descr 4,1,2"},
+ {Integer.valueOf(5), Integer.valueOf(2), Integer.valueOf(1), "Descr 6,2,1"},
+ {Integer.valueOf(6), Integer.valueOf(2), Integer.valueOf(2), "Descr 6,2,2"}};
+
+ public OrderDetailsDescriptionData(Connection c) {
+ super(c, orderDetailsDescriptionData);
+ }
+
+ public String getTableName() {
+ return "ORDERDETAILSDESC";
+ }
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OwnerData.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OwnerData.java
new file mode 100644
index 0000000000..b5198bce36
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OwnerData.java
@@ -0,0 +1,53 @@
+/*
+ * 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 OwnerData extends TestDataWithExplicitColumns {
+
+ /* CREATE TABLE OWNER (
+ ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
+ NAME VARCHAR(20) NULL,
+ CONTACT_PHONE VARCHAR(20) NULL,
+ OCC_COUNT INTEGER UNSIGNED NULL,
+ PRIMARY KEY(ID)
+ );*/
+
+ //id omitted. id is auto-generated.
+ private static int[] columnTypes = {Types.VARCHAR, Types.VARCHAR, Types.INTEGER};
+
+ private static Object[][] data = {{"Fanny", "222-2222", Integer.valueOf(1)},
+ {"Manny", "333-3333", Integer.valueOf(1)},
+ {"Sammy", "444-4444", Integer.valueOf(1)}};
+
+ private static String[] columns = {"NAME", "CONTACT_PHONE", "OCC_COUNT"};
+
+ public OwnerData(Connection connection) {
+ super(connection, data, columns, columnTypes);
+ }
+
+ public String getTableName() {
+ return "OWNER";
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OwnerDogData.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OwnerDogData.java
new file mode 100644
index 0000000000..a06a2124f3
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/OwnerDogData.java
@@ -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 org.apache.tuscany.das.rdb.test.framework.RelationshipData;
+
+public class OwnerDogData extends RelationshipData {
+
+ private static final Object[][] DATA = {{"Fanny", "Fido"}, {"Manny", "Max"}, {"Sammy", "Saddie"}};
+
+ public OwnerDogData(Connection c) {
+ super(c, DATA);
+ }
+
+ protected String getParentRetrievalStatement() {
+ return "select ID from OWNER where NAME = ?";
+ }
+
+ protected String getChildUpdateStatement() {
+ return "update DOG set OWNER_ID = ? where NAME = ?";
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/PartData.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/PartData.java
new file mode 100644
index 0000000000..ff59b03aef
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/PartData.java
@@ -0,0 +1,48 @@
+/*
+ * 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 PartData extends TestDataWithExplicitColumns {
+
+ // CREATE TABLE PART (ID INT PRIMARY KEY NOT NULL, NAME VARCHAR(50), QUANTITY INT, PARENT_ID INT )
+
+ private static String[] partColumns = {"ID", "NAME", "QUANTITY", "PARENT_ID"};
+
+ private static int[] columnTypes = {Types.INTEGER, Types.VARCHAR, Types.INTEGER, Types.INTEGER};
+
+ private static Object[][] partData = {{Integer.valueOf(1), "Engine", Integer.valueOf(1), null},
+ {Integer.valueOf(2), "Block", Integer.valueOf(1), Integer.valueOf(1)},
+ {Integer.valueOf(3), "Cam Shaft", Integer.valueOf(2), Integer.valueOf(1)},
+ {Integer.valueOf(4), "Piston", Integer.valueOf(8), Integer.valueOf(1)},
+ {Integer.valueOf(5), "Piston Ring", Integer.valueOf(2), Integer.valueOf(4)}};
+
+ public PartData(Connection connection) {
+ super(connection, partData, partColumns, columnTypes);
+ }
+
+ public String getTableName() {
+ return "PART";
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/StateData.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/StateData.java
new file mode 100644
index 0000000000..713aecb9a3
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/StateData.java
@@ -0,0 +1,48 @@
+/*
+ * 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.SQLException;
+
+import org.apache.tuscany.das.rdb.test.framework.TestData;
+
+public class StateData extends TestData {
+ private static Object[][] stateData = {{Integer.valueOf(1), "NC"}, {Integer.valueOf(2), "CO"},
+ {Integer.valueOf(3), "CA"}};
+
+ public StateData(Connection c) {
+ super(c, stateData);
+ }
+
+ public String getTableName() {
+ return "STATES";
+ }
+
+
+ public void doDeletes() throws SQLException {
+ deleteRowsFromTable();
+ }
+
+ public void doInserts() throws SQLException {
+ insertRows();
+
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/TypesData.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/TypesData.java
new file mode 100644
index 0000000000..0aac15fb7d
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/TypesData.java
@@ -0,0 +1,38 @@
+/*
+ * 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.TestData;
+
+public class TypesData extends TestData {
+
+ private static Object[][] customerData = {{Integer.valueOf(1), TIMESTAMP,
+ new Float(1234567.89), new Float(1234567.89)}};
+
+ public TypesData(Connection connection) {
+ super(connection, customerData);
+ }
+
+ public String getTableName() {
+ return "TYPETEST";
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/VisitData.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/VisitData.java
new file mode 100644
index 0000000000..c9cebc7688
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/VisitData.java
@@ -0,0 +1,52 @@
+/*
+ * 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 VisitData extends TestDataWithExplicitColumns {
+
+ /*
+ * CREATE TABLE VISIT ( ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
+ * CHECK_IN TIMESTAMP NULL, CHECK_OUT TIMESTAMP NULL, OCC_COUNT INTEGER UNSIGNED
+ * NULL, PRIMARY KEY(ID) );
+ */
+
+ // id omitted. id is auto-generated.
+ private static int[] columnTypes = {Types.TIMESTAMP, Types.TIMESTAMP, Types.INTEGER};
+
+ private static Object[][] data = {
+ {getTimestamp("2006-10-20 00:00:00.0"), getTimestamp("2006-10-22 00:00:00.0"), Integer.valueOf(1)},
+ {getTimestamp("2006-10-20 00:00:00.0"), getTimestamp("2006-10-22 00:00:00.0"), Integer.valueOf(1)},
+ {getTimestamp("2006-10-20 00:00:00.0"), getTimestamp("2006-10-22 00:00:00.0"), Integer.valueOf(1)}};
+
+ private static String[] columns = {"CHECK_IN", "CHECK_OUT", "OCC_COUNT"};
+
+ public VisitData(Connection connection) {
+ super(connection, data, columns, columnTypes);
+ }
+
+ public String getTableName() {
+ return "VISIT";
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DB2Setup.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DB2Setup.java
new file mode 100644
index 0000000000..370c1d42d7
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DB2Setup.java
@@ -0,0 +1,37 @@
+/*
+ * 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.framework;
+
+import junit.framework.Test;
+
+public class DB2Setup extends DatabaseSetup {
+
+ public DB2Setup(Test test) {
+ super(test);
+ }
+
+ protected void initConnectionProtocol() {
+
+ platformName = "DB2";
+ driverName = "com.ibm.db2.jcc.DB2Driver";
+ databaseURL = "jdbc:db2:DASTEST";
+
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DasTest.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DasTest.java
new file mode 100644
index 0000000000..78b1cf19e1
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DasTest.java
@@ -0,0 +1,147 @@
+/*
+ * 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.framework;
+
+import java.io.InputStream;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.util.Iterator;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import commonj.sdo.DataObject;
+import commonj.sdo.Property;
+
+/**
+ *
+ */
+public class DasTest extends TestCase {
+
+ protected static Connection connection;
+
+ /**
+ * Tears down the fixture, for example, close a network connection. This method is called after a test is executed.
+ */
+ protected void tearDown() throws Exception {
+ // if (usingDefaultSetup)
+ // connection = null;
+ }
+
+ protected Connection getAutoConnection() throws SQLException {
+
+ Connection c = primGetConnection();
+ c.setAutoCommit(true);
+ return connection;
+
+ }
+
+ protected Connection getConnection() throws SQLException {
+
+ Connection c = primGetConnection();
+ c.setAutoCommit(false);
+ return connection;
+ }
+
+ /**
+ * This provides the default connection for runing single test cases on a chosen platform.
+ */
+ private Connection primGetConnection() {
+ if (connection == null) {
+ defaultSetup();
+ }
+ return connection;
+ }
+
+ /**
+ * This is a bit of a hack since it counts on constructor initialization
+ * of the DatabaseSet up class and also calls its setUp method directly.
+ * This is a misuse of this JUnit TestSetup subclass .
+ *
+ * TODO - refactor to avoid this hackiness ... could move this logic to its
+ * own class that is then invoked by DatabaseSetUp
+ */
+ private void defaultSetup() {
+
+ // DatabaseSetup setUp = new DB2Setup(this);
+ DatabaseSetup setUp = new DerbySetup(this);
+ try {
+ setUp.setUp();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+
+ }
+
+ // Utilities
+ protected InputStream getConfig(String fileName) {
+ return Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName);
+ }
+
+ protected void write(String label, ResultSet rs) throws SQLException {
+
+ ResultSetMetaData md = rs.getMetaData();
+ int count = md.getColumnCount();
+ System.out.println("Contents of ResultSet from " + label);
+ for (int i = 1; i <= count; i++) {
+ System.out.print("\t");
+ System.out.println(md.getColumnLabel(i));
+ }
+ System.out.println("");
+ while (rs.next()) {
+ for (int i = 1; i <= count; i++) {
+ System.out.print("\t");
+ System.out.print(rs.getString(i));
+ }
+ System.out.println("\t");
+ }
+ System.out.println("done");
+ }
+
+ protected void printList(List data) {
+ Iterator i = data.iterator();
+ while (i.hasNext()) {
+ System.out.println();
+ DataObject obj = (DataObject) i.next();
+ Iterator props = obj.getType().getProperties().iterator();
+ while (props.hasNext()) {
+ Property p = (Property) props.next();
+ if (p.isMany()) {
+ System.out.print("[ " + p.getName() + " ] ");
+ Iterator children = obj.getList(p).iterator();
+ while (children.hasNext()) {
+ DataObject child = (DataObject) children.next();
+ System.out.print("[ " + child.get("ID") + " ]");
+ }
+ System.out.println();
+ } else if (!p.getType().isDataType()) {
+ DataObject child = obj.getDataObject(p);
+ if (child != null) {
+ System.out.println("[ " + p.getName() + " ] " + "[ " + child.get("ID") + " ]");
+ }
+ } else {
+ System.out.println("[ " + p.getName() + " ] " + obj.get(p));
+ }
+ }
+ }
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DatabaseSetup.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DatabaseSetup.java
new file mode 100644
index 0000000000..0045e10618
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DatabaseSetup.java
@@ -0,0 +1,525 @@
+/*
+ * 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.framework;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import junit.extensions.TestSetup;
+import junit.framework.Test;
+
+public class DatabaseSetup extends TestSetup {
+
+ protected Statement s;
+
+ protected String platformName = "Not initialized";
+
+ protected String driverName = "Not initialized";
+
+ protected String databaseURL = "Not initialized";
+
+ protected String userName;
+
+ protected String password;
+
+ // Data Types
+ protected String stringType = "VARCHAR";
+
+ protected String integerType = "INT";
+
+ protected String timestampType = "TIMESTAMP";
+
+ protected String floatType = "FLOAT";
+
+ protected String decimalType = "DECIMAL";
+
+ private Connection connection;
+
+ public DatabaseSetup(Test test) {
+ super(test);
+ initConnectionProtocol();
+ initConnection();
+ DasTest.connection = connection;
+ }
+
+ protected void initConnectionProtocol() {
+ // Subclasses provide implementation
+ }
+
+ private void initConnection() {
+
+ try {
+
+ Class.forName(driverName).newInstance();
+ if (userName != null) {
+ connection = DriverManager.getConnection(databaseURL, userName, password);
+ } else {
+ connection = DriverManager.getConnection(databaseURL);
+ }
+ connection.setAutoCommit(false);
+
+ } catch (SQLException e) {
+
+ if (e.getNextException() != null) {
+ e.getNextException().printStackTrace();
+ } else {
+ e.printStackTrace();
+ }
+
+ throw new RuntimeException(e);
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException(e);
+ } catch (InstantiationException e) {
+ throw new RuntimeException(e);
+ } catch (ClassNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+
+ }
+
+ protected void setUp() throws Exception {
+
+ System.out.println("Setting up for " + platformName + " run");
+
+ s = connection.createStatement();
+
+ try {
+ dropTriggers();
+ dropSequences();
+ dropTables();
+ dropProcedures();
+ dropSchema();//JIRA-952
+
+ createSchema();//JIRA-952
+ createSequences();
+ createTables();
+ createTriggers();
+ createProcedures();
+ connection.commit();
+ } catch (SQLException e) {
+ connection.rollback();
+ }
+
+ }
+
+ protected void tearDown() throws Exception {
+
+ System.out.println("Ending " + platformName + " run");
+ connection.close();
+
+ }
+
+ //JIRA-952
+ private void dropSchema(){
+ String[] statements = {"DROP SCHEMA DASTEST1 RESTRICT",
+ "DROP SCHEMA DASTEST2 RESTRICT",
+ "DROP SCHEMA DASTEST3 RESTRICT",
+ };
+
+ for (int i = 0; i < statements.length; i++) {
+ try {
+ s.execute(statements[i]);
+ } catch (SQLException e) {
+ // If the table does not exist then ignore the exception on drop
+ if ((!e.getMessage().contains("does not exist")) && (!e.getMessage().contains("Unknown table"))
+ && (!e.getMessage().contains("42704"))) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+ }
+
+ private void dropTables() {
+
+ String[] statements = {
+ "DROP TABLE CUSTOMER", "DROP TABLE ANORDER", "DROP TABLE ORDERDETAILS",
+ "DROP TABLE ORDERDETAILSDESC", "DROP TABLE ITEM", "DROP TABLE COMPANY",
+ "DROP TABLE EMPLOYEE", "DROP TABLE DEPARTMENT", "DROP TABLE BOOK",
+ "DROP TABLE PART", "DROP TABLE TYPETEST", "DROP TABLE CITIES",
+ "DROP TABLE STATES", "DROP TABLE conmgt.SERVERSTATUS",
+ "DROP TABLE DOG", "DROP TABLE OWNER", "DROP TABLE KENNEL",
+ "DROP TABLE VISIT",
+ "DROP TABLE DASTEST1.CUSTOMER" ,"DROP TABLE DASTEST2.CUSTOMER","DROP TABLE DASTEST3.CUSTOMER",
+ "DROP TABLE DASTEST1.CITY", "DROP TABLE DASTEST2.CITY",
+ "DROP TABLE DASTEST2.ACCOUNT",
+ "DROP TABLE DASTEST3.CUSTORDER",
+ "DROP TABLE DASTEST3.ORDERDETAILSDESC", "DROP TABLE DASTEST1.ORDERDETAILS",
+ "DROP TABLE DASTEST1.EMPLOYEE"
+ };
+
+ for (int i = 0; i < statements.length; i++) {
+ try {
+ s.execute(statements[i]);
+ } catch (SQLException e) {
+ // If the table does not exist then ignore the exception on drop
+ if ((!e.getMessage().contains("does not exist")) && (!e.getMessage().contains("Unknown table"))
+ && (!e.getMessage().contains("42704"))) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+ }
+
+ protected void dropTriggers() {
+
+ }
+
+ protected void createTriggers() {
+
+ }
+
+ protected void dropSequences() {
+
+ }
+
+ protected void createSequences() {
+
+ }
+
+ protected void dropProcedures() {
+
+ // System.out.println("Dropping procedures");
+
+ String[] statements = {
+
+ "DROP PROCEDURE GETALLCOMPANIES", "DROP PROCEDURE DELETECUSTOMER",
+ "DROP PROCEDURE GETNAMEDCOMPANY", "DROP PROCEDURE GETCUSTOMERANDORDERS",
+ "DROP PROCEDURE GETNAMEDCUSTOMERS", "DROP PROCEDURE GETALLCUSTOMERSANDORDERS"
+
+ };
+
+ for (int i = 0; i < statements.length; i++) {
+ try {
+ s.execute(statements[i]);
+ } catch (SQLException e) {
+ // If the proc does not exist then ignore the exception on drop
+ if (!e.getMessage().contains("does not exist") && !e.getMessage().contains("42704")) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+ }
+
+ //JIRA-952
+ private void createSchema() {
+ // System.out.println("Creating schema");
+ try {
+
+ s.execute("CREATE SCHEMA DASTEST1");
+ s.execute("CREATE SCHEMA DASTEST2");
+ s.execute("CREATE SCHEMA DASTEST3");
+ }catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ private void createTables() {
+
+ // System.out.println("Creating tables");
+
+ try {
+
+ s.execute(getCreateCustomer());
+ s.execute(getCreateAnOrder());
+ s.execute(getCreateOrderDetails());
+ s.execute(getCreateItem());
+ s.execute(getCreateCompany());
+ s.execute(getCreateEmployee());
+ s.execute(getCreateDepartment());
+ s.execute(getCreateBook());
+ s.execute(getCreatePart());
+ s.execute(getCreateTypeTest());
+ s.execute(getCreateStates());
+ s.execute(getCreateCities());
+ s.execute(getCreateServerStatus());
+
+ s.execute(getCreateDog());
+ s.execute(getCreateOwner());
+ s.execute(getCreateKennel());
+ s.execute(getCreateVisit());
+ s.execute(getCreateOrderDetailsDesc());//JIRA-841
+
+ //JIRA-952 start
+ s.execute(getCreateDASTEST1Customer());
+ s.execute(getCreateDASTEST1Employee());
+ s.execute(getCreateDASTEST2Customer());
+ s.execute(getCreateDASTEST3Customer());
+ s.execute(getCreateDASTEST1City());
+ s.execute(getCreateDASTEST2City());
+ s.execute(getCreateDASTEST2Account());
+ s.execute(getCreateDASTEST3CustOrder());
+ s.execute(getCreateDASTEST1OrderDetails());
+ s.execute(getCreateDASTEST3OrderDetailsDesc());
+ //JIRA-952 end
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ protected void createProcedures() {
+
+ // System.out.println("Creating procedures");
+ try {
+
+ s.execute("CREATE PROCEDURE GETALLCOMPANIES() PARAMETER STYLE JAVA LANGUAGE JAVA "
+ + "READS SQL DATA DYNAMIC RESULT SETS 1 "
+ + "EXTERNAL NAME "
+ + "'org.apache.tuscany.das.rdb.test.framework.JavaStoredProcs.getAllCompanies'");
+ s.execute("CREATE PROCEDURE DELETECUSTOMER(theId int) PARAMETER STYLE JAVA LANGUAGE JAVA "
+ + "MODIFIES SQL DATA EXTERNAL NAME "
+ + "'org.apache.tuscany.das.rdb.test.framework.JavaStoredProcs.deleteCustomer'");
+ s.execute("CREATE PROCEDURE GETNAMEDCOMPANY(theName VARCHAR(100)) PARAMETER STYLE JAVA LANGUAGE JAVA "
+ + "READS SQL DATA DYNAMIC RESULT SETS 1 EXTERNAL NAME "
+ + "'org.apache.tuscany.das.rdb.test.framework.JavaStoredProcs.getNamedCompany'");
+ s.execute("CREATE PROCEDURE GETCUSTOMERANDORDERS(theID INTEGER) PARAMETER STYLE JAVA LANGUAGE JAVA "
+ + "READS SQL DATA DYNAMIC RESULT SETS 1 EXTERNAL NAME "
+ + "'org.apache.tuscany.das.rdb.test.framework.JavaStoredProcs.getCustomerAndOrders'");
+ s.execute("CREATE PROCEDURE GETNAMEDCUSTOMERS(theName VARCHAR(100), OUT theCount INTEGER) "
+ + "PARAMETER STYLE JAVA LANGUAGE JAVA READS SQL DATA DYNAMIC RESULT SETS 1 EXTERNAL NAME "
+ + "'org.apache.tuscany.das.rdb.test.framework.JavaStoredProcs.getNamedCustomers'");
+ s.execute("CREATE PROCEDURE GETALLCUSTOMERSANDORDERS() PARAMETER STYLE JAVA LANGUAGE JAVA "
+ + "READS SQL DATA DYNAMIC RESULT SETS 2 EXTERNAL NAME "
+ + "'org.apache.tuscany.das.rdb.test.framework.JavaStoredProcs.getAllCustomersAndAllOrders'");
+ // TODO - "GETNAMEDCUSTOMERS" is failing on DB2 with SQLCODE: 42723. Need to investigate
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ //
+ // This section povides methods that return strings for table creation.
+ // Platform-specific sublcasses
+ // can override these as necessary
+ //
+
+ protected String getCreateCustomer() {
+ return "CREATE TABLE CUSTOMER (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL, "
+ + getStringColumn("LASTNAME", 30)
+ + " DEFAULT 'Garfugengheist', " + getStringColumn("ADDRESS", 30) + ")";
+ }
+
+ protected String getCreateAnOrder() {
+ return "CREATE TABLE ANORDER (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL, "
+ + getStringColumn("PRODUCT", 30) + ", "
+ + getIntegerColumn("QUANTITY") + "," + getIntegerColumn("CUSTOMER_ID") + ")";
+ }
+
+ protected String getCreateOrderDetails() {
+ return "CREATE TABLE ORDERDETAILS (" + getIntegerColumn("ORDERID") + " NOT NULL, "
+ + getIntegerColumn("PRODUCTID")
+ + " NOT NULL, PRICE FLOAT, PRIMARY KEY (ORDERID, PRODUCTID))";
+ }
+
+ protected String getCreateItem() {
+ return "CREATE TABLE ITEM (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL, "
+ + getStringColumn("NAME", 30) + ")";
+ }
+
+ protected String getCreateCompany() {
+ return "CREATE TABLE COMPANY (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL "
+ + getGeneratedKeyClause() + " , "
+ + getStringColumn("NAME", 30) + ", " + getIntegerColumn("EOTMID") + ")";
+ }
+
+ protected String getCreateEmployee() {
+ return "CREATE TABLE EMPLOYEE (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL "
+ + getGeneratedKeyClause() + ","
+ + getStringColumn("NAME", 30) + "," + getStringColumn("SN", 10) + ", MANAGER SMALLINT, "
+ + getIntegerColumn("DEPARTMENTID") + ")";
+ }
+
+ protected String getCreateDepartment() {
+ return "CREATE TABLE DEPARTMENT (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL "
+ + getGeneratedKeyClause() + ", "
+ + getStringColumn("NAME", 30) + "," + getStringColumn("LOCATION", 30) + ", "
+ + getStringColumn("DEPNUMBER", 10) + ","
+ + getIntegerColumn("COMPANYID") + ")";
+ }
+
+ protected String getCreateBook() {
+ return "CREATE TABLE BOOK (" + getIntegerColumn("BOOK_ID") + " PRIMARY KEY NOT NULL, "
+ + getStringColumn("NAME", 50) + ","
+ + getStringColumn("AUTHOR", 30) + ", " + getIntegerColumn("QUANTITY") + ","
+ + getIntegerColumn("OCC") + ")";
+ }
+
+ protected String getCreatePart() {
+ return "CREATE TABLE PART (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL, NAME VARCHAR(50), "
+ + getIntegerColumn("QUANTITY") + ","
+ + getIntegerColumn("PARENT_ID") + " )";
+ }
+
+ protected String getCreateTypeTest() {
+ return "CREATE TABLE TYPETEST (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL, "
+ + getTimestampColumn("ATIMESTAMP") + ","
+ + getDecimalColumn("ADECIMAL", 9, 2) + "," + getFloatColumn("AFLOAT") + ")";
+ }
+
+ protected String getCreateStates() {
+ return "CREATE TABLE STATES (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL, "
+ + getStringColumn("NAME", 2) + ")";
+ }
+
+ protected String getCreateCities() {
+ return "CREATE TABLE CITIES (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL,"
+ + getStringColumn("NAME", 50) + ","
+ + getIntegerColumn("STATE_ID") + "," + getForeignKeyConstraint("STATES", "ID", "STATE_ID") + ")";
+ }
+
+ protected String getCreateServerStatus() {
+
+ 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)";
+
+ }
+
+ // Dog Kennel Schema
+
+ protected String getCreateDog() {
+ return "CREATE TABLE DOG (" + getIntegerColumn("ID") + " NOT NULL " + getGeneratedKeyClause() + " , "
+ + getIntegerColumn("OWNER_ID") + " , "
+ + getStringColumn("NAME", 20) + ", " + getStringColumn("BREED", 20) + ", "
+ + getIntegerColumn("OCC_COUNT") + ", "
+ + "PRIMARY KEY(ID))";
+ }
+
+ protected String getCreateOwner() {
+ return "CREATE TABLE OWNER (" + getIntegerColumn("ID") + " NOT NULL " + getGeneratedKeyClause() + " , "
+ + getStringColumn("NAME", 20) + ", "
+ + getStringColumn("CONTACT_PHONE", 20) + ", " + getIntegerColumn("OCC_COUNT") + ", "
+ + "PRIMARY KEY(ID))";
+ }
+
+ protected String getCreateKennel() {
+ return "CREATE TABLE KENNEL (" + getIntegerColumn("ID") + " NOT NULL " + getGeneratedKeyClause()
+ + " , " + getIntegerColumn("KNUMBER") + ", "
+ + getStringColumn("KIND", 20) + ", " + getIntegerColumn("OCC_COUNT") + ", " + "PRIMARY KEY(ID))";
+ }
+
+ protected String getCreateVisit() {
+ return "CREATE TABLE VISIT (" + getIntegerColumn("ID") + " NOT NULL " + getGeneratedKeyClause() + " , "
+ + getTimestampColumn("CHECK_IN")
+ + ", " + getTimestampColumn("CHECK_OUT") + ", " + getIntegerColumn("OCC_COUNT") + ", "
+ + "PRIMARY KEY(ID))";
+ }
+
+ protected String getCreateOrderDetailsDesc() {
+ return "CREATE TABLE ORDERDETAILSDESC ("+ getIntegerColumn("ID") + " NOT NULL, " + getIntegerColumn("ORDERID") + " NOT NULL, "
+ + getIntegerColumn("PRODUCTID")
+ + " NOT NULL,"+ getStringColumn("DESCR", 20)+", PRIMARY KEY (ID))";
+ }
+
+ //JIRA-952 start
+ protected String getCreateDASTEST1Customer() {
+ return "CREATE TABLE DASTEST1.CUSTOMER (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL, "
+ + getStringColumn("LASTNAME", 30)
+ + " DEFAULT 'Garfugengheist', " + getStringColumn("ADDRESS", 30) + ")";
+ }
+
+ protected String getCreateDASTEST1Employee() {
+ return "CREATE TABLE DASTEST1.EMPLOYEE (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL, "
+ + getStringColumn("LASTNAME", 30)
+ + " DEFAULT 'Garfugengheist', " + getStringColumn("ADDRESS", 30) + ")";
+ }
+
+ protected String getCreateDASTEST2Customer() {
+ return "CREATE TABLE DASTEST2.CUSTOMER (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL, "
+ + getStringColumn("LASTNAME", 30)
+ + " DEFAULT 'Garfugengheist', " + getStringColumn("ADDRESS", 30) + ")";
+ }
+
+ protected String getCreateDASTEST3Customer() {
+ return "CREATE TABLE DASTEST3.CUSTOMER (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL, "
+ + getStringColumn("LASTNAME", 30)
+ + " DEFAULT 'Garfugengheist', " + getStringColumn("ADDRESS", 30) + ")";
+ }
+
+ protected String getCreateDASTEST1City() {
+ return "CREATE TABLE DASTEST1.CITY (" + getIntegerColumn("INDX") + " PRIMARY KEY NOT NULL,"
+ + getStringColumn("NAME", 50) + ")";
+ }
+
+ protected String getCreateDASTEST2City() {
+ return "CREATE TABLE DASTEST2.CITY (" + getIntegerColumn("INDX") + " PRIMARY KEY NOT NULL,"
+ + getStringColumn("NAME", 50) + ")";
+ }
+
+ protected String getCreateDASTEST2Account() {
+ return "CREATE TABLE DASTEST2.ACCOUNT ("+ getIntegerColumn("ACCOUNT_ID") + " PRIMARY KEY NOT NULL," +
+ getIntegerColumn("CUSTOMER_ID") +", "+ getIntegerColumn("BALANCE") + ")";
+ }
+
+ protected String getCreateDASTEST3CustOrder() {
+ return "CREATE TABLE DASTEST3.CUSTORDER ("+ getIntegerColumn("ORDER_ID") + " PRIMARY KEY NOT NULL," +
+ getIntegerColumn("CUSTOMER_ID") +", "+getIntegerColumn("ORDER_COUNT")+ ")";
+ }
+
+ protected String getCreateDASTEST1OrderDetails() {
+ return "CREATE TABLE DASTEST1.ORDERDETAILS (" + getIntegerColumn("ORDERID") + " NOT NULL, "
+ + getIntegerColumn("PRODUCTID")
+ + " NOT NULL, PRICE FLOAT, PRIMARY KEY (ORDERID, PRODUCTID))";
+ }
+
+ protected String getCreateDASTEST3OrderDetailsDesc() {
+ return "CREATE TABLE DASTEST3.ORDERDETAILSDESC ("+ getIntegerColumn("ID") + " NOT NULL, " + getIntegerColumn("ORDERID") + " NOT NULL, "
+ + getIntegerColumn("PRODUCTID")
+ + " NOT NULL,"+ getStringColumn("DESCR", 20)+", PRIMARY KEY (ID))";
+ }
+ //JIRA-952 end
+ // /////////////////
+
+ protected String getForeignKeyConstraint(String pkTable, String pkColumn, String foreignKey) {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("CONSTRAINT FK1 FOREIGN KEY (");
+ buffer.append(foreignKey);
+ buffer.append(") REFERENCES ");
+ buffer.append(pkTable);
+ buffer.append("(");
+ buffer.append(pkColumn);
+ buffer.append(") ON DELETE NO ACTION ON UPDATE NO ACTION");
+ return buffer.toString();
+ }
+
+ protected String getStringColumn(String name, int length) {
+ return name + ' ' + stringType + "(" + Integer.valueOf(length).toString() + ")";
+ }
+
+ protected String getIntegerColumn(String name) {
+ return name + ' ' + integerType;
+ }
+
+ protected String getGeneratedKeyClause() {
+ return "GENERATED ALWAYS AS IDENTITY";
+ }
+
+ protected String getDecimalColumn(String name, int size1, int size2) {
+ return name + ' ' + decimalType + "(" + Integer.valueOf(size1).toString() + ','
+ + Integer.valueOf(size2).toString() + ")";
+ }
+
+ protected String getFloatColumn(String name) {
+ return name + ' ' + floatType;
+ }
+
+ protected String getTimestampColumn(String name) {
+ return name + ' ' + timestampType;
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DerbySetup.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DerbySetup.java
new file mode 100644
index 0000000000..300f315465
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DerbySetup.java
@@ -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.framework;
+
+import java.util.Properties;
+
+import junit.framework.Test;
+
+public class DerbySetup extends DatabaseSetup {
+
+ public DerbySetup(Test test) {
+ super(test);
+ }
+
+ protected void initConnectionProtocol() {
+
+ // Set the derby property to explicitly specify the database location relative
+ // from current directory to "target"
+ Properties p = System.getProperties();
+ p.put("derby.system.home", "target");
+
+ platformName = "Derby";
+ driverName = "org.apache.derby.jdbc.EmbeddedDriver";
+ databaseURL = "jdbc:derby:dastest; create = true";
+
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/JavaStoredProcs.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/JavaStoredProcs.java
new file mode 100644
index 0000000000..71a7d1c4e4
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/JavaStoredProcs.java
@@ -0,0 +1,97 @@
+/*
+ * 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.framework;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+/**
+ * Stored Procedures for DB2 and Derby SP tests
+ *
+ */
+public final class JavaStoredProcs {
+
+ private JavaStoredProcs() {
+
+ }
+
+ public static void getAllCustomersAndAllOrders(ResultSet[] result1, ResultSet[] result2) throws SQLException {
+ Connection conn = DriverManager.getConnection("jdbc:default:connection");
+ PreparedStatement ps = conn.prepareStatement("SELECT * FROM CUSTOMER");
+
+ result1[0] = ps.executeQuery();
+
+ PreparedStatement ps2 = conn.prepareStatement("select * from anorder");
+ result2[0] = ps2.executeQuery();
+
+ }
+
+ public static void getAllCompanies(ResultSet[] results) throws SQLException {
+
+ Connection conn = DriverManager.getConnection("jdbc:default:connection");
+ PreparedStatement ps = conn.prepareStatement("SELECT * FROM COMPANY");
+ results[0] = ps.executeQuery();
+ }
+
+ public static void deleteCustomer(int theId) throws SQLException {
+
+ Connection conn = DriverManager.getConnection("jdbc:default:connection");
+ PreparedStatement ps = conn.prepareStatement("DELETE FROM CUSTOMER WHERE ID = ?");
+ ps.setInt(1, theId);
+ ps.execute();
+
+ }
+
+ public static void getNamedCompany(String theName, ResultSet[] results) throws SQLException {
+
+ Connection conn = DriverManager.getConnection("jdbc:default:connection");
+ PreparedStatement ps = conn.prepareStatement("SELECT * FROM COMPANY WHERE NAME = ?");
+ ps.setString(1, theName);
+ results[0] = ps.executeQuery();
+ }
+
+ public static void getCustomerAndOrders(int theId, ResultSet[] results) throws SQLException {
+
+ Connection conn = DriverManager.getConnection("jdbc:default:connection");
+ PreparedStatement ps = conn
+ .prepareStatement("SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON CUSTOMER.ID = ANORDER.CUSTOMER_ID "
+ + "WHERE CUSTOMER.ID = ?");
+ ps.setInt(1, theId);
+ results[0] = ps.executeQuery();
+ }
+
+ public static void getNamedCustomers(String theName, int[] outCount, ResultSet[] results) throws SQLException {
+
+ Connection conn = DriverManager.getConnection("jdbc:default:connection");
+ PreparedStatement ps = conn.prepareStatement("SELECT * FROM CUSTOMER WHERE LASTNAME = ?");
+ ps.setString(1, theName);
+ results[0] = ps.executeQuery();
+
+ ps = conn.prepareStatement("SELECT COUNT(*) FROM CUSTOMER WHERE LASTNAME = ?");
+ ps.setString(1, theName);
+
+ ResultSet rs = ps.executeQuery();
+ rs.next();
+ outCount[0] = rs.getInt(1);
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/MySQLSetup.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/MySQLSetup.java
new file mode 100644
index 0000000000..580f1c5f25
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/MySQLSetup.java
@@ -0,0 +1,105 @@
+/*
+ * 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.framework;
+
+import java.sql.SQLException;
+
+import junit.framework.Test;
+
+public class MySQLSetup extends DatabaseSetup {
+
+ public MySQLSetup(Test test) {
+ super(test);
+ }
+
+ protected void initConnectionProtocol() {
+
+ platformName = "MySQL";
+ driverName = "com.mysql.jdbc.Driver";
+ databaseURL = "jdbc:mysql:///dastest?user=dastester&password=dastester";
+
+ }
+
+ protected void createProcedures() {
+
+ String createGetAllCompanies = "CREATE PROCEDURE `dastest`.`GETALLCOMPANIES` () "
+ + " SELECT * FROM COMPANY ";
+
+ String createDeleteCustomer = "CREATE PROCEDURE `dastest`.`DELETECUSTOMER` (theId INT) "
+ + " DELETE FROM CUSTOMER WHERE ID = theId ";
+
+ String createGetNamedCustomers = "CREATE PROCEDURE `dastest`.`GETNAMEDCUSTOMERS`(IN thename VARCHAR(30), "
+ + "OUT theCount INTEGER ) " + " BEGIN "
+ + " SELECT * FROM CUSTOMER AS CUSTOMER WHERE LASTNAME = theName; "
+ + " SET theCount = (SELECT COUNT(*) FROM CUSTOMER WHERE LASTNAME = theName); " + " END ";
+
+ String createGetCustomerAndOrders = " CREATE PROCEDURE `dastest`.`GETCUSTOMERANDORDERS` (theId INT) "
+ + " SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON CUSTOMER.ID = ANORDER.CUSTOMER_ID "
+ + "WHERE CUSTOMER.ID = theId ";
+
+ String createGetNamedCompany = " CREATE PROCEDURE `dastest`.`GETNAMEDCOMPANY` (theName VARCHAR(100)) "
+ + " SELECT * FROM COMPANY WHERE NAME = theName";
+
+ String createCustomersAndOrders = "CREATE PROCEDURE `dastest`.`GETALLCUSTOMERSANDORDERS` () "
+ + " BEGIN SELECT * FROM CUSTOMER; SELECT * FROM ANORDER; END;";
+
+ System.out.println("Creating procedures");
+ try {
+
+ s.execute(createGetAllCompanies);
+ s.execute(createDeleteCustomer);
+ s.execute(createGetNamedCompany);
+ s.execute(createGetCustomerAndOrders);
+ s.execute(createGetNamedCustomers);
+ s.execute(createCustomersAndOrders);
+
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ // Overrides for table creation
+ protected String getCreateCompany() {
+ return "CREATE TABLE COMPANY (ID INT PRIMARY KEY NOT NULL AUTO_INCREMENT, NAME VARCHAR(30), EOTMID INT)";
+ }
+
+ protected String getCreateEmployee() {
+ return "CREATE TABLE EMPLOYEE (ID INT PRIMARY KEY NOT NULL AUTO_INCREMENT, NAME VARCHAR(30), "
+ + "SN VARCHAR(10), MANAGER SMALLINT, DEPARTMENTID INT)";
+ }
+
+// protected String getCreateDepartment() {
+// return "CREATE TABLE DEPARTMENT (ID INT PRIMARY KEY NOT NULL AUTO_INCREMENT, NAME VARCHAR(30), "
+// + "LOCATION VARCHAR(30), DEPNUMBER VARCHAR(10), COMPANYID INT, EOTM INT)";
+// }
+
+ protected String getCreateTypeTest() {
+ return "CREATE TABLE TYPETEST (ID INT PRIMARY KEY NOT NULL, ATIMESTAMP DATETIME, ADECIMAL DECIMAL(9,2), "
+ + "AFLOAT FLOAT)";
+ }
+
+ protected String getCreateServerStatus() {
+ return "CREATE TABLE CONMGT.SERVERSTATUS (STATUSID INT PRIMARY KEY NOT NULL AUTO_INCREMENT, "
+ + "MANAGEDSERVERID INTEGER NOT NULL, TIMESTAMP TIMESTAMP NOT NULL)";
+ }
+ protected String getGeneratedKeyClause() {
+ return "AUTO_INCREMENT";
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/RelationshipData.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/RelationshipData.java
new file mode 100644
index 0000000000..094fe13456
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/RelationshipData.java
@@ -0,0 +1,80 @@
+/*
+ * 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.framework;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+public abstract class RelationshipData {
+ protected Object[][] data;
+
+ protected Connection connection;
+
+ private int currentRow = -1;
+
+ public RelationshipData(Connection c, Object[][] inputData) {
+ this.connection = c;
+ this.data = inputData;
+ }
+
+ public int size() {
+ return data[0].length;
+ }
+
+ public int numberOfRows() {
+ return data.length;
+ }
+
+ public boolean next() {
+ ++currentRow;
+ return currentRow < numberOfRows();
+ }
+
+ public void refresh() throws SQLException {
+ updateRelationships();
+ }
+
+ protected abstract String getParentRetrievalStatement();
+
+ protected abstract String getChildUpdateStatement();
+
+ protected void updateRelationships() throws SQLException {
+ // { MegaCorp, Advanced Technologies }
+ // select company.id from company where company.name = ?
+ PreparedStatement retrieveParent = connection.prepareStatement(getParentRetrievalStatement());
+ // update department set department.companyid = ? where department.name = ?
+ PreparedStatement updateChild = connection.prepareStatement(getChildUpdateStatement());
+
+ while (next()) {
+ retrieveParent.setObject(1, data[currentRow][0]);
+ retrieveParent.execute();
+ ResultSet rs = retrieveParent.getResultSet();
+ rs.next();
+ Object parentID = rs.getObject(1);
+ retrieveParent.clearParameters();
+
+ updateChild.setObject(1, parentID);
+ updateChild.setObject(2, data[currentRow][1]);
+ updateChild.execute();
+ updateChild.clearParameters();
+ }
+ }
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestData.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestData.java
new file mode 100644
index 0000000000..4b91cde06b
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestData.java
@@ -0,0 +1,126 @@
+/*
+ * 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.framework;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public abstract class TestData {
+
+ protected static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd hh:ss:mm.SSS");
+
+ protected static final Timestamp TIMESTAMP = getTimestamp();
+
+ protected Object[][] data;
+
+ protected Connection connection;
+
+ private int currentRow = -1;
+
+
+ public TestData(Connection c, Object[][] customerData) {
+ this.connection = c;
+ this.data = customerData;
+ }
+
+ public int size() {
+ return data[0].length;
+ }
+
+ public int numberOfRows() {
+ return data.length;
+ }
+
+ public boolean next() {
+ ++currentRow;
+ return currentRow < numberOfRows();
+ }
+
+ public abstract String getTableName();
+
+ public Object getObject(int i) {
+ return data[currentRow][i - 1];
+ }
+
+ public void refresh() throws SQLException {
+ deleteRowsFromTable();
+ insertRows();
+ }
+
+ protected void deleteRowsFromTable() throws SQLException {
+ PreparedStatement ps = connection.prepareStatement("delete from " + getTableName());
+ ps.execute();
+ ps.close();
+ }
+
+ protected void insertRows() throws SQLException {
+ StringBuffer sql = new StringBuffer();
+ sql.append("insert into ");
+ sql.append(getTableName());
+ sql.append(" values (");
+ for (int i = 1; i < size(); i++) {
+ sql.append("?,");
+ }
+ sql.append("?)");
+ PreparedStatement ps = connection.prepareStatement(sql.toString());
+
+ while (next()) {
+ for (int i = 1; i <= size(); i++) {
+ ps.setObject(i, getObject(i));
+ }
+ ps.execute();
+ ps.clearParameters();
+ }
+ ps.close();
+ }
+
+ // Utilities
+ protected static Date getDate() {
+
+ try {
+ return DATE_FORMAT.parse("1966-12-20 00:00:00.0");
+ } catch (ParseException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ protected static Date getDate(String timeStamp) {
+
+ try {
+ return DATE_FORMAT.parse(timeStamp);
+ } catch (ParseException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public static Timestamp getTimestamp() {
+ return new Timestamp(getDate().getTime());
+ }
+
+ public static Timestamp getTimestamp(String timeStamp) {
+ return new Timestamp(getDate(timeStamp).getTime());
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestDataWithExplicitColumns.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestDataWithExplicitColumns.java
new file mode 100644
index 0000000000..5a329d0b74
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/TestDataWithExplicitColumns.java
@@ -0,0 +1,87 @@
+/*
+ * 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.framework;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+
+import org.apache.log4j.Logger;
+
+public abstract class TestDataWithExplicitColumns extends TestData {
+
+ private String[] columns;
+
+ private int[] sqlTypes;
+
+ private final Logger logger = Logger.getLogger(TestDataWithExplicitColumns.class);
+
+ public TestDataWithExplicitColumns(Connection c, Object[][] data, String[] columns, int[] sqlTypes) {
+ super(c, data);
+ this.columns = columns;
+ this.sqlTypes = sqlTypes;
+ }
+
+ private String getColumn(int i) {
+ return columns[i - 1];
+ }
+
+ private int getSqlType(int i) {
+ return sqlTypes[i - 1];
+ }
+
+ // Create an insert statement of the following form ...
+ // "INSERT INTO table_name (column1, column2,...) VALUES (value1, value2,....)"
+ // This is necessary for tables with a generated column since the PK value is not provided
+ protected void insertRows() throws SQLException {
+ StringBuffer sql = new StringBuffer();
+ sql.append("insert into ");
+ sql.append(getTableName());
+
+ sql.append(" (");
+ for (int i = 1; i <= size(); i++) {
+ sql.append(getColumn(i));
+ if (i < size()) {
+ sql.append(',');
+ }
+ }
+ sql.append(" )");
+
+ sql.append(" values (");
+ for (int i = 1; i < size(); i++) {
+ sql.append("?,");
+ }
+ sql.append("?)");
+
+ if (this.logger.isDebugEnabled()) {
+ this.logger.debug(sql.toString());
+ }
+
+ PreparedStatement ps = connection.prepareStatement(sql.toString());
+
+ while (next()) {
+ for (int i = 1; i <= size(); i++) {
+ ps.setObject(i, getObject(i), getSqlType(i));
+ }
+ ps.execute();
+ ps.clearParameters();
+ }
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/IntegerToBooleanConverter.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/IntegerToBooleanConverter.java
new file mode 100644
index 0000000000..835a2f5e77
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/IntegerToBooleanConverter.java
@@ -0,0 +1,43 @@
+/*
+ * 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.mappings;
+
+import org.apache.tuscany.das.rdb.Converter;
+
+public class IntegerToBooleanConverter implements Converter {
+
+ public IntegerToBooleanConverter() {
+ super();
+ }
+
+ public Object getPropertyValue(Object columnData) {
+ Integer value = (Integer) columnData;
+ return value.intValue() == 0 ? Boolean.FALSE : Boolean.TRUE;
+ }
+
+ public Object getColumnValue(Object propertyData) {
+ Boolean value = (Boolean) propertyData;
+ if (value.booleanValue()) {
+ return Integer.valueOf(1);
+ }
+ return Integer.valueOf(0);
+ }
+
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/SillyDateStringConverter.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/SillyDateStringConverter.java
new file mode 100644
index 0000000000..df9d2978eb
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/SillyDateStringConverter.java
@@ -0,0 +1,77 @@
+/*
+ * 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.mappings;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.apache.tuscany.das.rdb.Converter;
+
+public class SillyDateStringConverter implements Converter {
+
+ private static DateFormat myformat = new SimpleDateFormat("yyyy.MM.dd");
+
+ private static Date kbday;
+
+ private static Date tbday;
+
+ public SillyDateStringConverter() {
+ super();
+ }
+
+ static {
+ try {
+ kbday = myformat.parse("1957.09.27");
+ tbday = myformat.parse("1966.12.20");
+ } catch (ParseException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public Object getPropertyValue(Object columnData) {
+
+ if (columnData.equals("Williams")) {
+ return kbday;
+ }
+
+ if (columnData.equals("Pavick")) {
+ return tbday;
+ }
+
+ throw new IllegalArgumentException();
+
+ }
+
+ public Object getColumnValue(Object propertyData) {
+
+ if (propertyData.equals(kbday)) {
+ return "Williams";
+ }
+
+ if (propertyData.equals(tbday)) {
+ return "Pavick";
+ }
+
+ throw new IllegalArgumentException();
+
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringObfuscationConverter.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringObfuscationConverter.java
new file mode 100644
index 0000000000..efea61c7de
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringObfuscationConverter.java
@@ -0,0 +1,65 @@
+/*
+ * 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.mappings;
+
+import java.io.UnsupportedEncodingException;
+
+import org.apache.tuscany.das.rdb.Converter;
+
+public class StringObfuscationConverter implements Converter {
+
+ public StringObfuscationConverter() {
+ super();
+ }
+
+ public Object getPropertyValue(Object columnData) {
+ return toRot13((String) columnData);
+ }
+
+ public Object getColumnValue(Object propertyData) {
+ return toRot13((String) propertyData);
+ }
+
+ // Utilities
+
+ // A simple, reversible, obfuscation algorithm using a ROT13 implementation
+ private String toRot13(String original) {
+
+ int abyte = 0;
+ byte[] buffer = {};
+ try {
+ buffer = original.getBytes("ISO-8859-1");
+ } catch (UnsupportedEncodingException e) {
+ throw new Error(e);
+ }
+
+ for (int i = 0; i < buffer.length; i++) {
+ abyte = buffer[i];
+ int cap = abyte & 32;
+ abyte &= ~cap;
+ abyte = ((abyte >= 'A') && (abyte <= 'Z') ? ((abyte - 'A' + 13) % 26 + 'A') : abyte) | cap;
+ buffer[i] = (byte) abyte;
+ }
+ try {
+ return new String(buffer, "ISO-8859-1");
+ } catch (UnsupportedEncodingException e) {
+ throw new Error(e);
+ }
+ }
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToIntegerConverter.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToIntegerConverter.java
new file mode 100644
index 0000000000..2be6522fcc
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToIntegerConverter.java
@@ -0,0 +1,39 @@
+/*
+ * 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.mappings;
+
+import org.apache.tuscany.das.rdb.Converter;
+
+public class StringToIntegerConverter implements Converter {
+
+ public StringToIntegerConverter() {
+ super();
+ }
+
+ public Object getPropertyValue(Object columnData) {
+ // System.out.println("Converting object.. " + columnData);
+
+ return new Integer(columnData.toString());
+ }
+
+ public Object getColumnValue(Object columnData) {
+ return columnData.toString();
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToLongConverter.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToLongConverter.java
new file mode 100644
index 0000000000..a15cef37e6
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/mappings/StringToLongConverter.java
@@ -0,0 +1,37 @@
+/*
+ * 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.mappings;
+
+import org.apache.tuscany.das.rdb.Converter;
+
+public class StringToLongConverter implements Converter {
+
+ public StringToLongConverter() {
+ super();
+ }
+
+ public Object getPropertyValue(Object columnData) {
+ return new Long(columnData.toString());
+ }
+
+ public Object getColumnValue(Object columnData) {
+ return columnData.toString();
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllCommonTests.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllCommonTests.java
new file mode 100644
index 0000000000..c35f8e2362
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllCommonTests.java
@@ -0,0 +1,116 @@
+/*
+ * 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.suites;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.apache.tuscany.das.rdb.test.AliasTests;
+import org.apache.tuscany.das.rdb.test.BestPracticeTests;
+import org.apache.tuscany.das.rdb.test.CUDGeneration;
+import org.apache.tuscany.das.rdb.test.CommandGroupTests;
+import org.apache.tuscany.das.rdb.test.CompanyTests;
+import org.apache.tuscany.das.rdb.test.CompoundKeyRelationshipTests;
+import org.apache.tuscany.das.rdb.test.CompoundKeyTests;
+import org.apache.tuscany.das.rdb.test.ConverterTests;
+import org.apache.tuscany.das.rdb.test.CorrectedDefectTests;
+import org.apache.tuscany.das.rdb.test.CrudWithChangeHistory;
+import org.apache.tuscany.das.rdb.test.ExceptionTests;
+import org.apache.tuscany.das.rdb.test.GeneratedCommandTests;
+import org.apache.tuscany.das.rdb.test.GeneratedId;
+import org.apache.tuscany.das.rdb.test.GraphMergeTests;
+import org.apache.tuscany.das.rdb.test.ImpliedRelationshipTests;
+import org.apache.tuscany.das.rdb.test.KennelTests;
+import org.apache.tuscany.das.rdb.test.MultiSchemaTests;
+import org.apache.tuscany.das.rdb.test.OCCTests;
+import org.apache.tuscany.das.rdb.test.OneToOneRelationshipTests;
+import org.apache.tuscany.das.rdb.test.OperationOrderingTests;
+import org.apache.tuscany.das.rdb.test.Paging;
+import org.apache.tuscany.das.rdb.test.PartialUpdateTests;
+import org.apache.tuscany.das.rdb.test.PassiveConnectionTests;
+import org.apache.tuscany.das.rdb.test.ProgrammaticConfigTests;
+import org.apache.tuscany.das.rdb.test.RecursiveTests;
+import org.apache.tuscany.das.rdb.test.RelationshipTests;
+import org.apache.tuscany.das.rdb.test.ResultSetShapeTests;
+import org.apache.tuscany.das.rdb.test.SerializationTests;
+import org.apache.tuscany.das.rdb.test.SimplestCrud;
+import org.apache.tuscany.das.rdb.test.StoredProcs;
+import org.apache.tuscany.das.rdb.test.TopDown;
+import org.apache.tuscany.das.rdb.test.TransactionTests;
+import org.apache.tuscany.das.rdb.test.TypeTests;
+import org.apache.tuscany.das.rdb.test.typed.SimplestStaticCrud;
+
+public final class AllCommonTests {
+
+ private AllCommonTests() {
+ }
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite("All platform-common DAS tests");
+ // $JUnit-BEGIN$
+
+ suite.addTest(new TestSuite(SimplestCrud.class));
+ suite.addTest(new TestSuite(CrudWithChangeHistory.class));
+ suite.addTest(new TestSuite(SimplestStaticCrud.class));
+ suite.addTest(new TestSuite(Paging.class));
+ suite.addTest(new TestSuite(GeneratedId.class));
+
+ suite.addTest(new TestSuite(StoredProcs.class));
+ suite.addTest(new TestSuite(CUDGeneration.class));
+ suite.addTest(new TestSuite(TopDown.class));
+ suite.addTest(new TestSuite(OCCTests.class));
+ suite.addTest(new TestSuite(RecursiveTests.class));
+
+ suite.addTest(new TestSuite(GraphMergeTests.class));
+ suite.addTest(new TestSuite(CompoundKeyTests.class));
+ suite.addTest(new TestSuite(CompoundKeyRelationshipTests.class));
+ suite.addTest(new TestSuite(RelationshipTests.class));
+ suite.addTest(new TestSuite(GeneratedCommandTests.class));
+
+ suite.addTest(new TestSuite(CompanyTests.class));
+ suite.addTest(new TestSuite(ResultSetShapeTests.class));
+ suite.addTest(new TestSuite(TypeTests.class));
+ suite.addTest(new TestSuite(OperationOrderingTests.class));
+ suite.addTest(new TestSuite(ConverterTests.class));
+
+ suite.addTest(new TestSuite(PartialUpdateTests.class));
+ suite.addTest(new TestSuite(ExceptionTests.class));
+ suite.addTest(new TestSuite(PassiveConnectionTests.class));
+ suite.addTest(new TestSuite(SerializationTests.class));
+
+ suite.addTest(new TestSuite(CommandGroupTests.class));
+ suite.addTest(new TestSuite(BestPracticeTests.class));
+ suite.addTest(new TestSuite(CorrectedDefectTests.class));
+ suite.addTest(new TestSuite(OneToOneRelationshipTests.class));
+
+ suite.addTest(new TestSuite(ProgrammaticConfigTests.class));
+ suite.addTest(new TestSuite(AliasTests.class));
+
+ suite.addTest(new TestSuite(ImpliedRelationshipTests.class));
+
+ suite.addTest(new TestSuite(KennelTests.class));
+
+ suite.addTest(new TestSuite(TransactionTests.class));
+ suite.addTest(new TestSuite(MultiSchemaTests.class));
+
+ //$JUnit-END$
+ return suite;
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDB2.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDB2.java
new file mode 100644
index 0000000000..ea8a2ddbaf
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDB2.java
@@ -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.suites;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.apache.tuscany.das.rdb.test.ReadDBSchemaTests;
+import org.apache.tuscany.das.rdb.test.framework.DB2Setup;
+
+public final class AllTestsDB2 {
+
+ private AllTestsDB2() {
+
+ }
+
+ public static Test suite() {
+
+ TestSuite suite = new TestSuite();
+ suite.addTest(AllCommonTests.suite());
+ suite.addTest(new TestSuite(ReadDBSchemaTests.class));
+
+ TestSuite suite2 = new TestSuite("All DAS tests on DB2");
+ suite2.addTest(new DB2Setup(suite));
+ return suite2;
+
+ }
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDerby.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDerby.java
new file mode 100644
index 0000000000..0649fa815c
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsDerby.java
@@ -0,0 +1,35 @@
+/*
+ * 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.suites;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.apache.tuscany.das.rdb.test.framework.DerbySetup;
+
+public class AllTestsDerby extends TestSuite {
+
+ public static Test suite() {
+
+ TestSuite suite = new TestSuite("All DAS tests on Derby");
+ suite.addTest(new DerbySetup(AllCommonTests.suite()));
+ return suite;
+
+ }
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsMySQL.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsMySQL.java
new file mode 100644
index 0000000000..e68aaad8aa
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllTestsMySQL.java
@@ -0,0 +1,39 @@
+/*
+ * 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.suites;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.apache.tuscany.das.rdb.test.framework.MySQLSetup;
+
+public final class AllTestsMySQL {
+
+ private AllTestsMySQL() {
+
+ }
+
+ public static Test suite() {
+
+ TestSuite suite = new TestSuite("All DAS tests on MySQL");
+ suite.addTest(new MySQLSetup(AllCommonTests.suite()));
+ return suite;
+
+ }
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/typed/SimplestStaticCrud.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/typed/SimplestStaticCrud.java
new file mode 100644
index 0000000000..96d851b5dc
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/typed/SimplestStaticCrud.java
@@ -0,0 +1,56 @@
+/*
+ * 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.typed;
+
+import java.io.InputStream;
+import java.util.Collection;
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.DAS;
+import org.apache.tuscany.das.rdb.test.customer.CustomerFactory;
+import org.apache.tuscany.das.rdb.test.data.CustomerData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+import org.apache.tuscany.sdo.util.SDOUtil;
+
+import commonj.sdo.DataObject;
+
+/**
+ */
+public class SimplestStaticCrud extends DasTest {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ new CustomerData(getAutoConnection()).refresh();
+ }
+
+ public void testRead() throws Exception {
+ InputStream mapping = getClass().getClassLoader().getResourceAsStream("basicStaticCustomer.xml");
+ DAS das = DAS.FACTORY.createDAS(mapping, getConnection());
+ SDOUtil.registerStaticTypes(CustomerFactory.class);
+
+ Command select = das.createCommand("Select ID, LASTNAME, ADDRESS from CUSTOMER where LASTNAME = ?");
+ select.setParameter(1, "Williams");
+
+ DataObject root = select.executeQuery();
+
+ Collection customers = root.getList("Customer");
+ assertEquals(4, customers.size());
+ }
+
+}
diff --git a/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/util/PrintPropertiesOfDataObject.java b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/util/PrintPropertiesOfDataObject.java
new file mode 100644
index 0000000000..897e8d39b3
--- /dev/null
+++ b/das-java/tags/1.0-incubating-beta1-rc4/rdb/src/test/java/org/apache/tuscany/das/rdb/test/util/PrintPropertiesOfDataObject.java
@@ -0,0 +1,134 @@
+/**
+ *
+ * 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.util;
+
+import java.util.List;
+
+import commonj.sdo.DataObject;
+import commonj.sdo.Property;
+import commonj.sdo.Type;
+
+/**
+ * Demonstrates iterating through, and inspecting properites of a DataObject. This
+ * sample shows listing properties of a DataObject, determining if the properties are
+ * set and whether they are simple properties or represent DataObjects <br>
+ * <br>
+ * This sample is from the <a href="http://incubator.apache.org/tuscany"
+ * target="_blank"> Apache Tuscany</a> project. It was written to help users
+ * understand and experiment with SDO. It is based upon code snippets contained
+ * within, and is meant for use with, and reference to the <a
+ * href=http://osoa.org/download/attachments/36/Java-SDO-Spec-v2.1.0-FINAL.pdf?version=1"
+ * target="_bank">SDO Specification</a>. This specific examples was based upon code
+ * snippets in the section titled 'Property Indexes'. <br>
+ * <b>Usage:</b> <br>
+ * This sample can easily be run from within Eclipse as a Java Application if Tuscany or
+ * the sample-sdo project is imported into Eclipse as an existing project.
+ * <br><br>
+ * If executing as a standalone application please do the following:
+ * <br>
+ * <UL>
+ * <LI>Include the following jar files on your classpath :
+ * <UL>
+ * <LI>SDO API and Tuscany Implementation
+ * <UL>
+ * <LI>sdo-api-{version}.jar - SDO API
+ * <LI>tuscany-sdo-impl-{version}.jar - Tuscany SDO implementation
+ * </UL>
+ * </LI>
+ * <LI>EMF dependencies.
+ * <UL>
+ * <LI>emf-common-{version}.jar - some common framework utility and base classes
+ * <LI>emf-ecore-{version}.jar - the EMF core runtime implementation classes (the Ecore metamodel)
+ * <LI>emf-ecore-change-{version}.jar - the EMF change recorder and framework
+ * <LI>emf-ecore-xmi-{version}.jar - EMF's default XML (and XMI) serializer and loader
+ * <LI>xsd-{version}.jar - the XML Schema model
+ * </UL>
+ * </LI>
+ * </UL>
+ *
+ * These jar files can be obtained by downloading and unpacking a <a href="http://cwiki.apache.org/TUSCANY/sdo-downloads.html" target="_blank">Tuscany binary distribution</a> </LI>
+ * <LI>Execute: <br>
+ * java org.apache.tuscany.samples.sdo.specCodeSnippets.PrintPropertiesOfDataObject</LI>
+ * </UL>
+ */
+
+public class PrintPropertiesOfDataObject {
+
+ /**
+ * Calls recursive method to inspect and print properties of a DataObject.
+ *
+ * @param DataObject.
+ * The DataObject to print the properties of
+ */
+ public static void printDataObjectProperties(DataObject myDo) throws Exception {
+ System.out.println("Recursivly inspecting and printing properties of DataObject");
+ printAndInspectDataObject(" ", myDo);
+ }
+
+ /**
+ * Recursivly inspects and prints DataObject. This method will list all set
+ * properties
+ *
+ * @param buffer.
+ * Blank string to help with formating
+ * @param myDo.
+ * DataObject to recursivly inspect and print the properties of.
+ * @throws Exception
+ */
+ private static void printAndInspectDataObject(String buffer, DataObject dataObject) throws Exception {
+ for (int i = 0; i < dataObject.getInstanceProperties().size(); i++) {
+ Property p = (Property) dataObject.getInstanceProperties().get(i);
+ // just print out the name, type and string value of the property
+ Type type = p.getType();
+ System.out.print(buffer + " " + p.getName() + ",type=" + type.getName());
+ if (dataObject.isSet(p)) {
+ // see if this represents a simple property or if the type is also a
+ // datatype
+ if (type.isDataType()) {
+ System.out.println(", simple type : " + dataObject.get(i));
+ } else {
+
+ // check to see if the property has many values
+ if (p.isMany()) {
+ System.out.println(buffer + ", many valued with list of DataObjects : ");
+ List dataObjects = dataObject.getList(p);
+ for (int x = 0; x < dataObjects.size(); x++) {
+ if (p.isContainment()) {
+ printAndInspectDataObject(buffer + " ", (DataObject) dataObjects.get(x));
+ System.out.println();
+ }
+ }
+
+ } else {
+
+ System.out.println(buffer + ", data object : ");
+ DataObject newDataObject = dataObject.getDataObject(p);
+ printAndInspectDataObject(buffer + " ", newDataObject);
+ System.out.println("");
+ }
+ }
+ } else {
+ System.out.println(buffer + ", is not set");
+ }
+ }
+
+ }
+}