You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by rh...@apache.org on 2010/06/24 19:45:44 UTC
svn commit: r957650 - in /db/derby/code/trunk/java:
engine/org/apache/derby/impl/sql/compile/
testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/
Author: rhillegas
Date: Thu Jun 24 17:45:44 2010
New Revision: 957650
URL: http://svn.apache.org/viewvc?rev=957650&view=rev
Log:
DERBY-4659: Allow BOOLEAN args in procedures.
Modified:
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/MethodCallNode.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/StaticMethodCallNode.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/DatabaseMetaDataTest.java
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/ParameterMetaDataJdbc30Test.java
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/MethodCallNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/MethodCallNode.java?rev=957650&r1=957649&r2=957650&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/MethodCallNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/MethodCallNode.java Thu Jun 24 17:45:44 2010
@@ -1108,6 +1108,7 @@ abstract class MethodCallNode extends Ja
// as it (incorrectly but historically always has) maps a DECIMAL to a double.
switch (ctid.getJDBCTypeId()) {
+ case java.sql.Types.BOOLEAN:
case java.sql.Types.SMALLINT:
case java.sql.Types.INTEGER:
case java.sql.Types.BIGINT:
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/StaticMethodCallNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/StaticMethodCallNode.java?rev=957650&r1=957649&r2=957650&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/StaticMethodCallNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/StaticMethodCallNode.java Thu Jun 24 17:45:44 2010
@@ -457,6 +457,7 @@ public class StaticMethodCallNode extend
String arrayType;
switch (typeId.getJDBCTypeId()) {
+ case java.sql.Types.BOOLEAN:
case java.sql.Types.SMALLINT:
case java.sql.Types.INTEGER:
case java.sql.Types.BIGINT:
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj?rev=957650&r1=957649&r2=957650&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj Thu Jun 24 17:45:44 2010
@@ -10778,7 +10778,7 @@ procedureParameterDefinition(Vector[] li
[ LOOKAHEAD( { dataTypeCheck(2) })
parameterName = identifier(Limits.MAX_IDENTIFIER_LENGTH, true)
]
- typeDescriptor = dataTypeDDL( false )
+ typeDescriptor = dataTypeDDL( true )
{
list[0].addElement(parameterName);
list[1].addElement(typeDescriptor.getCatalogType());
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/DatabaseMetaDataTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/DatabaseMetaDataTest.java?rev=957650&r1=957649&r2=957650&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/DatabaseMetaDataTest.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/DatabaseMetaDataTest.java Thu Jun 24 17:45:44 2010
@@ -4370,8 +4370,12 @@ public class DatabaseMetaDataTest extend
// Possible TODO:
// rewrite data portion of this test to compare results from
// metadata with sys.sys* query results (leave shape check in place)
- public void testGetProceduresGetProcColumns() throws SQLException {
-
+ public void testGetProceduresGetProcColumns() throws Exception {
+
+ boolean supportsBoolean = true;
+ Version dataVersion = getDataVersion( getConnection() );
+ if ( dataVersion.compareTo( new Version( 10, 7, 0, 0 ) ) < 0 ) { supportsBoolean = false; }
+
Statement s = createStatement();
getConnection().setAutoCommit(false);
@@ -4406,7 +4410,15 @@ public class DatabaseMetaDataTest extend
s.execute("create procedure GETPCTEST4Bx(out retparam INTEGER) "+
"language java external name " +
"'org.apache.derbyTesting.functionTests.tests.jdbcapi.DatabaseMetaDataTest.getpc4b'" +
- " parameter style java");
+ " parameter style java");
+
+ if ( supportsBoolean )
+ {
+ s.execute("create procedure GETPCTEST5(in inarg boolean, out outarg boolean, inout inoutarg boolean) "+
+ "language java external name " +
+ "'org.apache.derbyTesting.functionTests.tests.jdbcapi.DatabaseMetaDataTest.foo'" +
+ " parameter style java");
+ }
ResultSet rs[] = getProcedures(null, "%", "GETPCTEST%");
String[][] expRS = new String[][] {
@@ -4418,10 +4430,22 @@ public class DatabaseMetaDataTest extend
{"","APP","GETPCTEST4B","null","null","null","getpc4b","1"},
{"","APP","GETPCTEST4BX","null","null","null","getpc4b","1"},
};
+
+ if ( supportsBoolean )
+ {
+ expRS = appendArray
+ (
+ expRS,
+ new String[][]
+ {
+ {"","APP","GETPCTEST5","null","null","null","foo","1"},
+ }
+ );
+ }
for (int j=0 ; j<2 ; j++)
{
int rowcount = 0;
- while (rowcount < 7){
+ while (rowcount < expRS.length){
rs[j].next();
assertEquals(expRS[rowcount][0], rs[j].getString(1));
assertEquals(expRS[rowcount][1], rs[j].getString(2));
@@ -4457,12 +4481,25 @@ public class DatabaseMetaDataTest extend
{null,"APP","GETPCTEST3A","STRING2","4","12","VARCHAR","5","10",null,null,"1",null,null,"12",null,"10","2","YES","genid","2","1"},
{null,"APP","GETPCTEST3B","STRING3","1","12","VARCHAR","5","10",null,null,"1",null,null,"12",null,"10","1","YES","genid","2","0"},
{null,"APP","GETPCTEST3B","STRING4","2","12","VARCHAR","5","10",null,null,"1",null,null,"12",null,"10","2","YES","genid","2","1"},
- {null,"APP","GETPCTEST4BX","RETPARAM","4","4","INTEGER","10","4","0","10","1",null,null,"4",null,null,"1","YES","genid","1","0"}
+ {null,"APP","GETPCTEST4BX","RETPARAM","4","4","INTEGER","10","4","0","10","1",null,null,"4",null,null,"1","YES","genid","1","0"},
};
+ if ( supportsBoolean )
+ {
+ expRS = appendArray
+ (
+ expRS,
+ new String[][]
+ {
+ {null,"APP","GETPCTEST5","INARG","1","16","BOOLEAN","1","1",null,null,"1",null,null,"16",null,null,"1","YES","genid","3","0"},
+ {null,"APP","GETPCTEST5","OUTARG","4","16","BOOLEAN","1","1",null,null,"1",null,null,"16",null,null,"2","YES","genid","3","1"},
+ {null,"APP","GETPCTEST5","INOUTARG","2","16","BOOLEAN","1","1",null,null,"1",null,null,"16",null,null,"3","YES","genid","3","2"},
+ }
+ );
+ }
for (int j=0 ; j<2 ; j++)
{
int rowcount = 0;
- while (rowcount < 19){
+ while (rowcount < expRS.length){
rs[j].next();
for (int k=0 ; k<19 ; k++){
if (j == 0 && (k == 14 || k == 15))
@@ -4495,6 +4532,7 @@ public class DatabaseMetaDataTest extend
}
}
+ if ( supportsBoolean ) { s.execute("drop procedure GETPCTEST5"); }
s.execute("drop procedure GETPCTEST4Bx");
s.execute("drop procedure GETPCTEST4B");
s.execute("drop procedure GETPCTEST4A");
@@ -4504,6 +4542,20 @@ public class DatabaseMetaDataTest extend
s.execute("drop procedure GETPCTEST1");
commit();
}
+ private String[][] appendArray( String[][] target, String[][] suffix )
+ {
+ int targetLength = target.length;
+ int suffixLength = suffix.length;
+ int resultLength = targetLength + suffixLength;
+
+ String[][] result = new String[ resultLength ][];
+ for ( int i = 0; i < targetLength; i++ ) { result[ i ] = target[ i ]; }
+ for ( int i = 0; i < suffixLength; i++ ) { result[ targetLength + i ] = suffix[ i ]; }
+
+ println( "Appended array" );
+
+ return result;
+ }
/**
* Helper method for testing getProcedures - calls the ODBC procedure
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/ParameterMetaDataJdbc30Test.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/ParameterMetaDataJdbc30Test.java?rev=957650&r1=957649&r2=957650&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/ParameterMetaDataJdbc30Test.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/ParameterMetaDataJdbc30Test.java Thu Jun 24 17:45:44 2010
@@ -281,6 +281,56 @@ public class ParameterMetaDataJdbc30Test
ps.close();
}
+ /**
+ * Testing a callable statement by calling a SQL procedure with
+ * boolean IN parameters, OUT parameters and IN_OUT parameters.
+ */
+ public void testBooleanProcedureArgs() throws Exception
+ {
+ Statement stmt = createStatement();
+
+ stmt.executeUpdate("create procedure booleanProc" +
+ "( in inarg boolean, out outarg boolean, inout inoutarg boolean )" +
+ "language java external name "+
+ "'org.apache.derbyTesting.functionTests." +
+ "tests.jdbcapi.ParameterMetaDataJdbc30Test.booleanProc' " +
+ "parameter style java");
+
+ CallableStatement cs = prepareCall("CALL booleanProc(?,?,?)");
+ cs.registerOutParameter(2,Types.BOOLEAN);
+ cs.registerOutParameter(3,Types.BOOLEAN);
+
+ //verify the meta data for the parameters
+ ParameterMetaData paramMetaData = cs.getParameterMetaData();
+ assertEquals("Unexpected parameter count", 3, paramMetaData.getParameterCount());
+
+ //expected values to be stored in a 2dim. array
+ String [][] parameterMetaDataArray0 =
+ {
+ //isNullable, isSigned, getPrecision, getScale, getParameterType, getParameterTypeName, getParameterClassName, getParameterMode
+ {"PARAMETER_NULLABLE", "false", "1", "0", "16", "BOOLEAN", "java.lang.Boolean", "PARAMETER_MODE_IN"},
+ {"PARAMETER_NULLABLE", "false", "1", "0", "16", "BOOLEAN", "java.lang.Boolean", "PARAMETER_MODE_OUT"},
+ {"PARAMETER_NULLABLE", "false", "1", "0", "16", "BOOLEAN", "java.lang.Boolean", "PARAMETER_MODE_IN_OUT"},
+ };
+
+ testParameterMetaData(paramMetaData, parameterMetaDataArray0);
+
+ cs.setBoolean( 1, true );
+ cs.setBoolean( 3, true );
+ cs.execute();
+ assertEquals( true, cs.getBoolean( 2 ) );
+ assertEquals( false, cs.getBoolean( 3 ) );
+
+ cs.setObject( 1, Boolean.FALSE );
+ cs.setObject( 3, Boolean.FALSE );
+ cs.execute();
+ assertEquals( false, cs.getBoolean( 2 ) );
+ assertEquals( true, cs.getBoolean( 3 ) );
+
+ stmt.close();
+ cs.close();
+ }
+
/**
* DERBY-44 added support for SELECT ... WHERE column LIKE ? ESCAPE ?
* This test case tests
@@ -850,4 +900,11 @@ public class ParameterMetaDataJdbc30Test
*/
public static void dummyDecimal(BigDecimal in_param, BigDecimal in_param2, BigDecimal[] in_param3, BigDecimal[] in_param4) {
}
+
+ /** Java method for testing procedures with boolean args */
+ public static void booleanProc( boolean inarg, boolean[] outarg, boolean[] inoutarg )
+ {
+ outarg[ 0 ] = inarg;
+ inoutarg[ 0 ] = !inoutarg[ 0 ];
+ }
}