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