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/08/24 23:24:29 UTC

svn commit: r434527 - in /incubator/tuscany/java/das/rdb/src: main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ main/java/org/apache/tuscany/das/rdb/impl/ test/java/org/apache/tuscany/das/rdb/test/ test/java/org/apache/tuscany/das/rdb/test/fram...

Author: kwilliams
Date: Thu Aug 24 14:24:28 2006
New Revision: 434527

URL: http://svn.apache.org/viewvc?rev=434527&view=rev
Log:
Brent's pactch for TUSCANY-665: Add support for multiple result sets from Stored Procedure.  Nice one!

Modified:
    incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ESchemaMaker.java
    incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java
    incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SPCommandImpl.java
    incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Statement.java
    incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/StoredProcs.java
    incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DatabaseSetup.java
    incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/JavaStoredProcs.java

Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ESchemaMaker.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ESchemaMaker.java?rev=434527&r1=434526&r2=434527&view=diff
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ESchemaMaker.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ESchemaMaker.java Thu Aug 24 14:24:28 2006
@@ -86,10 +86,12 @@
 			while (names.hasNext()) {
 				String tableName = (String) names.next();
 	
-				Type tableType = SDOUtil.createType(typeHelper, getURI(), tableName, false);										
-				Property property = SDOUtil.createProperty(rootType, tableName, tableType);
-				SDOUtil.setMany(property,true);		
-				SDOUtil.setContainment(property, true);
+				if ( rootType.getProperty(tableName) == null ) {
+					Type tableType = SDOUtil.createType(typeHelper, getURI(), tableName, false);										
+					Property property = SDOUtil.createProperty(rootType, tableName, tableType);
+					SDOUtil.setMany(property,true);		
+					SDOUtil.setContainment(property, true);
+				}
 			}
 		
 			// TODO tablePropertyMap is temporary until Tuscany-203 is fixed

Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java?rev=434527&r1=434526&r2=434527&view=diff
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java Thu Aug 24 14:24:28 2006
@@ -18,9 +18,7 @@
  */
 package org.apache.tuscany.das.rdb.impl;
 
-import java.sql.ResultSet;
 import java.sql.SQLException;
-import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
@@ -58,9 +56,9 @@
 
         boolean success = false;
         try {
-            ResultSet rs = statement.executeQuery(parameters);
+            List results = statement.executeQuery(parameters);
             success = true;
-            return buildGraph(rs);
+            return buildGraph(results);
         } catch (SQLException e) {
             throw new RuntimeException(e);
         } finally {
@@ -71,10 +69,7 @@
         }
     }
 
-    protected DataObject buildGraph(ResultSet result) throws SQLException {
-
-        List results = new ArrayList();
-        results.add(result);
+    protected DataObject buildGraph(List results) throws SQLException {      
 
         // Before we use the mappingModel, do some checking/updating. If
         // inferrable information

Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SPCommandImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SPCommandImpl.java?rev=434527&r1=434526&r2=434527&view=diff
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SPCommandImpl.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SPCommandImpl.java Thu Aug 24 14:24:28 2006
@@ -18,7 +18,6 @@
  */
 package org.apache.tuscany.das.rdb.impl;
 
-import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.Iterator;
 import java.util.List;
@@ -60,10 +59,10 @@
 
 		boolean success = false;
 		try {
-			ResultSet rs = statement.executeCall(parameters);
+			List results = statement.executeCall(parameters);
 			success = true;
 			
-			return buildGraph(rs);
+			return buildGraph(results);
 		} catch (SQLException e) {
 			DebugUtil.debugln(getClass(), debug, e);
 			throw new RuntimeException(e);

Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Statement.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Statement.java?rev=434527&r1=434526&r2=434527&view=diff
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Statement.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Statement.java Thu Aug 24 14:24:28 2006
@@ -23,7 +23,10 @@
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Iterator;
+import java.util.List;
 
 import org.apache.tuscany.das.rdb.util.DebugUtil;
 
@@ -44,24 +47,22 @@
         this.queryString = sqlString; //new QueryString(sqlString);
     }
 
-    public ResultSet executeQuery(Parameters parameters) throws SQLException {
+    public List executeQuery(Parameters parameters) throws SQLException {
 
         PreparedStatement ps = getPreparedStatement();
         ps = setParameters(ps, parameters);
         ResultSet rs = ps.executeQuery();
 
-        return rs;
+        return Collections.singletonList(rs);
     }
 
-    public ResultSet executeCall(Parameters parameters) throws SQLException {
-        try {
+    public List executeCall(Parameters parameters) throws SQLException {
+      
             CallableStatement cs = jdbcConnection.prepareCall(queryString);
 
             Iterator inParams = parameters.inParams().iterator();
             while (inParams.hasNext()) {
                 ParameterImpl param = (ParameterImpl) inParams.next();
-//                if (param.getIndex() == 0)
-//                    param.setIndex(queryString.getParameterIndex(param.getName()));
                 cs.setObject(param.getIndex(), param.getValue());
             }
 
@@ -69,8 +70,6 @@
             Iterator outParams = parameters.outParams().iterator();
             while (outParams.hasNext()) {
                 ParameterImpl param = (ParameterImpl) outParams.next();
-//                if (param.getIndex() == 0)
-//                    param.setIndex(queryString.getParameterIndex(param.getName()));
                 DebugUtil.debugln(getClass(), debug, "Registering parameter " + param.getName());
                 cs.registerOutParameter(param.getIndex(), SDODataTypeHelper.sqlTypeFor(param.getType()));
             }
@@ -79,19 +78,19 @@
             // executeQuery
             // for SP
             cs.execute();
-            ResultSet results = cs.getResultSet();
-
+            ArrayList results = new ArrayList();
+            results.add(cs.getResultSet());
+            while ( cs.getMoreResults(java.sql.Statement.KEEP_CURRENT_RESULT) ) {
+            	results.add(cs.getResultSet());
+            }
+            
             Iterator i = parameters.outParams().iterator();
             while (i.hasNext()) {
                 ParameterImpl param = (ParameterImpl) i.next();
                 param.setValue(cs.getObject(param.getIndex()));
             }
 
-            return results;
-        } catch (SQLException ex) {
-            ex.printStackTrace();
-            throw ex;
-        }
+            return results;       
 
     }
 
@@ -137,8 +136,6 @@
         while (i.hasNext()) {
             ParameterImpl param = (ParameterImpl) i.next();
 
-//            if (param.getIndex() == 0)
-//                param.setIndex(queryString.getParameterIndex(param.getName()));
             Object value = param.getValue();
             DebugUtil.debugln(getClass(), debug, "Setting parameter " + param.getIndex() + " to " + value);
             if (value == null) {
@@ -162,8 +159,6 @@
         Iterator i = parameters.inParams().iterator();
         while (i.hasNext()) {
             ParameterImpl param = (ParameterImpl) i.next();
-//            if (param.getIndex() == 0)
-//                param.setIndex(queryString.getParameterIndex(param.getName()));
             ps.setObject(param.getIndex(), param.getValue());
         }
         return ps;

Modified: incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/StoredProcs.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/StoredProcs.java?rev=434527&r1=434526&r2=434527&view=diff
==============================================================================
--- incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/StoredProcs.java (original)
+++ incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/StoredProcs.java Thu Aug 24 14:24:28 2006
@@ -21,12 +21,14 @@
 
 import org.apache.tuscany.das.rdb.Command;
 import org.apache.tuscany.das.rdb.DAS;
+import org.apache.tuscany.das.rdb.impl.ParameterImpl;
 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;
+import commonj.sdo.helper.TypeHelper;
 
 
 public class StoredProcs extends DasTest {
@@ -44,10 +46,22 @@
 		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()}");	
+		Command read = das.createCommand("{call GETALLCOMPANIES()}");
+
 		DataObject root = read.executeQuery();
 
 		//Verify

Modified: incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DatabaseSetup.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DatabaseSetup.java?rev=434527&r1=434526&r2=434527&view=diff
==============================================================================
--- incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DatabaseSetup.java (original)
+++ incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DatabaseSetup.java Thu Aug 24 14:24:28 2006
@@ -33,6 +33,9 @@
     protected String driverName = "Not initialized";
 
     protected String databaseURL = "Not initialized";
+    
+    protected String userName = null;
+    protected String password = null;
 
     private Connection connection;
 
@@ -54,7 +57,11 @@
         try {
 
             Class.forName(driverName).newInstance();
-            connection = DriverManager.getConnection(databaseURL);
+            if ( userName != null ) {
+            	connection = DriverManager.getConnection(databaseURL, userName, password);
+            } else {
+            	connection = DriverManager.getConnection(databaseURL);
+            }
             connection.setAutoCommit(false);
 
         } catch (Exception e) {
@@ -78,9 +85,14 @@
         s = connection.createStatement();
 
         try {
+        	dropTriggers();
+        	dropSequences();
             dropTables();
             dropProcedures();
+           
+            createSequences();            
             createTables();
+            createTriggers();
             createProcedures();
             connection.commit();
         } catch (SQLException e) {
@@ -121,6 +133,22 @@
         }
     }
 
+    protected void dropTriggers() {
+    	
+    }
+    
+    protected void createTriggers() {
+    	
+    }
+    
+    protected void dropSequences() {
+    	
+    }
+    
+  protected void createSequences() {
+    	
+    }
+    
     protected void dropProcedures() {
 
 //        System.out.println("Dropping procedures");
@@ -128,7 +156,7 @@
         String[] statements = {
 
         "DROP PROCEDURE GETALLCOMPANIES", "DROP PROCEDURE DELETECUSTOMER", "DROP PROCEDURE GETNAMEDCOMPANY",
-                "DROP PROCEDURE GETCUSTOMERANDORDERS", "DROP PROCEDURE GETNAMEDCUSTOMERS"
+                "DROP PROCEDURE GETCUSTOMERANDORDERS", "DROP PROCEDURE GETNAMEDCUSTOMERS", "DROP PROCEDURE GETALLCUSTOMERSANDORDERS"
 
         };
 
@@ -137,7 +165,7 @@
                 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"))
+                if (!e.getMessage().contains("does not exist") && !e.getMessage().contains("42704"))
                     throw new RuntimeException(e);
             }
         }
@@ -178,6 +206,7 @@
             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);

Modified: incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/JavaStoredProcs.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/JavaStoredProcs.java?rev=434527&r1=434526&r2=434527&view=diff
==============================================================================
--- incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/JavaStoredProcs.java (original)
+++ incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/JavaStoredProcs.java Thu Aug 24 14:24:28 2006
@@ -30,6 +30,17 @@
  */
 public class 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");



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