You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by kw...@apache.org on 2006/01/10 21:00:38 UTC

svn commit: r367766 - /incubator/tuscany/contrib/java/trunk/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/DefectTests.java

Author: kwilliams
Date: Tue Jan 10 12:00:36 2006
New Revision: 367766

URL: http://svn.apache.org/viewcvs?rev=367766&view=rev
Log:
Adding changes made since contrib snapshot

Modified:
    incubator/tuscany/contrib/java/trunk/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/DefectTests.java

Modified: incubator/tuscany/contrib/java/trunk/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/DefectTests.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/contrib/java/trunk/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/DefectTests.java?rev=367766&r1=367765&r2=367766&view=diff
==============================================================================
--- incubator/tuscany/contrib/java/trunk/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/DefectTests.java (original)
+++ incubator/tuscany/contrib/java/trunk/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/DefectTests.java Tue Jan 10 12:00:36 2006
@@ -28,7 +28,9 @@
 import org.apache.tuscany.das.rdb.ApplyChangesCommand;
 import org.apache.tuscany.das.rdb.Command;
 import org.apache.tuscany.das.rdb.CommandGroup;
+import org.apache.tuscany.das.rdb.SDODataTypes;
 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;
@@ -38,6 +40,7 @@
     protected void setUp() throws Exception {
         super.setUp();
         new CustomerData(getAutoConnection()).refresh();
+        new OrderData(getAutoConnection()).refresh();
     }
 
     protected void tearDown() throws Exception {
@@ -59,13 +62,73 @@
         insert.execute();
 
         // Verify
-        Command select = Command.FACTORY.createCommand("Select * from conmgt.serverstatus where statusid = 316405209");
+        Command select = Command.FACTORY
+                .createCommand("Select * from conmgt.serverstatus where statusid = 316405209");
         select.setConnection(getConnection());
         DataObject root = select.executeQuery();
         assertEquals(1, root.getList("conmgt.serverstatus").size());
 
     }
 
+    /**
+     * Dilton's bug for adding new child data object
+     */
+    public void testAddNewOrder() throws Exception {
+
+        // Read some customers and related orders
+        Command select = Command.FACTORY
+                .createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON CUSTOMER.ID = ANORDER.CUSTOMER_ID");
+        select.setConnection(getConnection());
+
+        // Set minimum metadata necessary to describe relationship
+        select.addRelationship("CUSTOMER.ID", "ANORDER.CUSTOMER_ID");
+        select.addPrimaryKey("CUSTOMER.ID");
+        select.addPrimaryKey("ANORDER.ID");
+
+        DataObject root = select.executeQuery();
+
+        DataObject cust = root.getDataObject("CUSTOMER[1]");
+
+        // Save ID
+        Integer custID = (Integer) cust.get("ID");
+        // save order count
+        Integer custOrderCount = new Integer(cust.getList("ANORDER").size());
+
+        // Create a new Order and add to customer1
+        DataObject order = root.createDataObject("ANORDER");
+
+        order.set("ID", new Integer(99));
+        order.set("PRODUCT", "The 99th product");
+        order.set("QUANTITY", new Integer(99));
+        cust.getList("ANORDER").add(order);
+
+        // Build apply changes command
+        ApplyChangesCommand apply = Command.FACTORY.createApplyChangesCommand();
+        apply.setConnection(getConnection());
+
+        // Metadata
+        apply.addRelationship("CUSTOMER.ID", "ANORDER.CUSTOMER_ID");
+        apply.addPrimaryKey("CUSTOMER.ID");
+        apply.addPrimaryKey("ANORDER.ID");
+
+        // Flush changes
+        apply.execute(root);
+
+        // verify cust1 relationship updates
+        select = Command.FACTORY
+                .createCommand("SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON CUSTOMER.ID = ANORDER.CUSTOMER_ID where CUSTOMER.ID = :ID");
+        select.setConnection(getConnection());
+        select.setParameterValue("ID", custID);
+
+        select.addRelationship("CUSTOMER.ID", "ANORDER.CUSTOMER_ID");
+        select.addPrimaryKey("CUSTOMER.ID");
+        select.addPrimaryKey("ANORDER.ID");
+        root = select.executeQuery();
+
+        assertEquals(custOrderCount.intValue() + 1, root.getList("CUSTOMER[1]/ANORDER").size());
+
+    }
+
     public void testDiltonsInsertWorkaround() throws Exception {
 
         // String sql = "insert into conmgt.serverstatus (statusid,
@@ -117,10 +180,134 @@
 
     }
 
+    /**
+     * 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 {
+
+        Command insert = Command.FACTORY
+                .createCommand("insert into CUSTOMER values (:ID, :LASTNAME, :ADDRESS)");
+        insert.setConnection(getConnection());
+        insert.setParameterValue("ID", new Integer(10));
+        insert.setParameterValue("LASTNAME", "Williams");
+        insert.setParameterValue("ADDRESS", null);
+        insert.execute();
+
+        // Verify
+        Command select = Command.FACTORY.createCommand("Select * from CUSTOMER where ID = 10");
+        select.setConnection(getConnection());
+        DataObject root = select.executeQuery();
+        assertEquals(1, root.getList("CUSTOMER").size());
+        assertEquals("5528 Wells Fargo Dr", root.get("CUSTOMER[1]/ADDRESS"));
+
+    }
+
+    /**
+     * Try a workaround using CommandGroup
+     */
+    public void testYingChen12162005Workaraound() throws Exception {
+
+        // Create the group and set common connection
+        CommandGroup commandGroup = CommandGroup.FACTORY.createCommandGroup(getCustomerConfig());
+        commandGroup.setConnection(getConnection());
+
+        Command insert = commandGroup.getCommand("insert customer");
+        insert.setParameterValue("ID", new Integer(10));
+        insert.setParameterValue("LASTNAME", "Williams");
+        insert.setParameterValue("ADDRESS", null);
+        insert.execute();
+
+        // Verify
+        Command select = commandGroup.getCommand("read customer 10");
+        DataObject root = select.executeQuery();
+        assertEquals(1, root.getList("CUSTOMER").size());
+        assertEquals("5528 Wells Fargo Dr", root.get("CUSTOMER[1]/ADDRESS"));
+
+    }
+    
+    
+
+
+    /**
+     * Should be able to explicitly set a parameter to null.  But, should require
+     * that the parameter type is set.
+     */
+    public void testDiltonsNullParameterBug1() throws Exception {
+        
+        Command insert = Command.FACTORY.createCommand("insert into CUSTOMER values (:ID, :LASTNAME, :ADDRESS)");   
+        insert.setConnection(getConnection());
+        insert.setParameterValue("ID", new Integer(10));
+        insert.setParameterValue("LASTNAME", null);
+        insert.setParameterType("LASTNAME", SDODataTypes.STRING);
+        insert.setParameterValue("ADDRESS", "5528 Wells Fargo Dr");
+        insert.execute();
+
+        //Verify
+        Command select = Command.FACTORY.createCommand("Select * from CUSTOMER where ID = 10");
+        select.setConnection(getConnection());
+        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 {
+        
+        Command insert = Command.FACTORY.createCommand("insert into CUSTOMER values (:ID, :LASTNAME, :ADDRESS)");   
+        insert.setConnection(getConnection());
+        insert.setParameterValue("ID", new Integer(10));
+//        insert.setParameterValue("LASTNAME", null);
+        insert.setParameterValue("ADDRESS", "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 {
+        
+        Command insert = Command.FACTORY.createCommand("insert into CUSTOMER values (:ID, :LASTNAME, :ADDRESS)");   
+        insert.setConnection(getConnection());
+        insert.setParameterValue("ID", new Integer(10));
+        insert.setParameterValue("LASTNAME", "");
+        insert.setParameterValue("ADDRESS", "5528 Wells Fargo Dr");
+        insert.execute();
+
+        //Verify
+        Command select = Command.FACTORY.createCommand("Select * from CUSTOMER where ID = 10");
+        select.setConnection(getConnection());
+        DataObject root = select.executeQuery();    
+        assertEquals(1, root.getList("CUSTOMER").size());
+        assertEquals("5528 Wells Fargo Dr", root.get("CUSTOMER[1]/ADDRESS"));
+
+    }
+    
     // Utilities
 
     private InputStream getCustomerOrderConfig() throws FileNotFoundException {
-        return Thread.currentThread().getContextClassLoader().getResourceAsStream("CustomersOrdersConfig.xml");
+        return Thread.currentThread().getContextClassLoader()
+                .getResourceAsStream("CustomersOrdersConfig.xml");
+    }
+
+    private InputStream getCustomerConfig() throws FileNotFoundException {
+        return Thread.currentThread().getContextClassLoader().getResourceAsStream("CustomerConfig.xml");
     }
 
 }