Compiler error when preparing a procedure call with an output parameter of user 
defined type.
---------------------------------------------------------------------------------------------

                 Key: DERBY-4499
                 URL: https://issues.apache.org/jira/browse/DERBY-4499
             Project: Derby
          Issue Type: Bug
          Components: SQL
            Reporter: Rick Hillegas


The byte-code compiler complains about a missing setValue() overload. When this 
is fixed, it would be good to make sure that output parameters of UDT type work 
for the network client too.

When compiling the following CALL statement

    call changeCurrencyCode( ?, ? )

given the following procedure declaration

   create procedure changeCurrencyCode
   ( in newCurrencyCode char( 3 ), inout oldPrice Price )
   language java parameter style java no sql
   external name 
'org.apache.derbyTesting.functionTests.tests.lang.UDTTest.changeCurrencyCode'

I see this stack trace:

java.lang.NoSuchMethodException: 
org.apache.derby.iapi.types.DataValueDescriptor.setValue(org.apache.derbyTesting.functionTests.tests.lang.Price)
        at java.lang.Class.getDeclaredMethod(Class.java:1909)
        at 
org.apache.derby.impl.services.bytecode.d_BCValidate.checkMethod(d_BCValidate.java:132)
        at 
org.apache.derby.impl.services.bytecode.BCMethod.callMethod(BCMethod.java:745)
        at 
org.apache.derby.impl.sql.compile.StaticMethodCallNode.generateExpression(StaticMethodCallNode.java:1197)
        at 
org.apache.derby.impl.sql.compile.JavaValueNode.generate(JavaValueNode.java:253)
        at 
org.apache.derby.impl.sql.compile.CallStatementNode.generate(CallStatementNode.java:225)
        at 
org.apache.derby.impl.sql.compile.StatementNode.generate(StatementNode.java:347)
        at 
org.apache.derby.impl.sql.GenericStatement.prepMinion(GenericStatement.java:469)
        at 
org.apache.derby.impl.sql.GenericStatement.prepare(GenericStatement.java:90)
        at 
org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(GenericLanguageConnectionContext.java:828)
        at 
org.apache.derby.impl.jdbc.EmbedPreparedStatement.<init>(EmbedPreparedStatement.java:129)
        at 
org.apache.derby.impl.jdbc.EmbedCallableStatement.<init>(EmbedCallableStatement.java:69)
        at 
org.apache.derby.impl.jdbc.EmbedCallableStatement20.<init>(EmbedCallableStatement20.java:85)
        at 
org.apache.derby.impl.jdbc.EmbedCallableStatement30.<init>(EmbedCallableStatement30.java:61)
        at 
org.apache.derby.jdbc.Driver30.newEmbedCallableStatement(Driver30.java:122)
        at 
org.apache.derby.impl.jdbc.EmbedConnection.prepareCall(EmbedConnection.java:1699)
        at 
org.apache.derby.impl.jdbc.EmbedConnection.prepareCall(EmbedConnection.java:1648)
        at MyDerbyClient.prepareCall(MyDerbyClient.java:940)
        at MyDerbyClient.execute(MyDerbyClient.java:161)
        at MyDerbyClient.main(MyDerbyClient.java:90)
Invalid method org.apache.derby.iapi.types.DataValueDescriptor >> void 
setValue(org.apache.derbyTesting.functionTests.tests.lang.Price) because 
java.lang.NoSuchMethodException: 
org.apache.derby.iapi.types.DataValueDescriptor.setValue(org.apache.derbyTesting.functionTests.tests.lang.Price)
Exception in thread "main" java.sql.SQLException: Java exception: 'ASSERT 
FAILED Invalid method org.apache.derby.iapi.types.DataValueDescriptor >> void 
setValue(org.apache.derbyTesting.functionTests.tests.lang.Price) because 
java.lang.NoSuchMethodException: 
org.apache.derby.iapi.types.DataValueDescriptor.setValue(org.apache.derbyTesting.functionTests.tests.lang.Price):
 org.apache.derby.shared.common.sanity.AssertFailure'.
        at 
org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:45)
        at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Util.java:142)
        at org.apache.derby.impl.jdbc.Util.javaException(Util.java:299)
        at 
org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(TransactionResourceImpl.java:403)
        at 
org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(TransactionResourceImpl.java:346)
        at 
org.apache.derby.impl.jdbc.EmbedConnection.handleException(EmbedConnection.java:2269)
        at 
org.apache.derby.impl.jdbc.ConnectionChild.handleException(ConnectionChild.java:81)
        at 
org.apache.derby.impl.jdbc.EmbedPreparedStatement.<init>(EmbedPreparedStatement.java:147)
        at 
org.apache.derby.impl.jdbc.EmbedCallableStatement.<init>(EmbedCallableStatement.java:69)
        at 
org.apache.derby.impl.jdbc.EmbedCallableStatement20.<init>(EmbedCallableStatement20.java:85)
        at 
org.apache.derby.impl.jdbc.EmbedCallableStatement30.<init>(EmbedCallableStatement30.java:61)
        at 
org.apache.derby.jdbc.Driver30.newEmbedCallableStatement(Driver30.java:122)
        at 
org.apache.derby.impl.jdbc.EmbedConnection.prepareCall(EmbedConnection.java:1699)
        at 
org.apache.derby.impl.jdbc.EmbedConnection.prepareCall(EmbedConnection.java:1648)
        at MyDerbyClient.prepareCall(MyDerbyClient.java:940)
        at MyDerbyClient.execute(MyDerbyClient.java:161)
        at MyDerbyClient.main(MyDerbyClient.java:90)
Caused by: org.apache.derby.shared.common.sanity.AssertFailure: ASSERT FAILED 
Invalid method org.apache.derby.iapi.types.DataValueDescriptor >> void 
setValue(org.apache.derbyTesting.functionTests.tests.lang.Price) because 
java.lang.NoSuchMethodException: 
org.apache.derby.iapi.types.DataValueDescriptor.setValue(org.apache.derbyTesting.functionTests.tests.lang.Price)
        at 
org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:162)
        at 
org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:147)
        at 
org.apache.derby.impl.services.bytecode.d_BCValidate.checkMethod(d_BCValidate.java:191)
        at 
org.apache.derby.impl.services.bytecode.BCMethod.callMethod(BCMethod.java:745)
        at 
org.apache.derby.impl.sql.compile.StaticMethodCallNode.generateExpression(StaticMethodCallNode.java:1197)
        at 
org.apache.derby.impl.sql.compile.JavaValueNode.generate(JavaValueNode.java:253)
        at 
org.apache.derby.impl.sql.compile.CallStatementNode.generate(CallStatementNode.java:225)
        at 
org.apache.derby.impl.sql.compile.StatementNode.generate(StatementNode.java:347)
        at 
org.apache.derby.impl.sql.GenericStatement.prepMinion(GenericStatement.java:469)
        at 
org.apache.derby.impl.sql.GenericStatement.prepare(GenericStatement.java:90)
        at 
org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(GenericLanguageConnectionContext.java:828)
        at 
org.apache.derby.impl.jdbc.EmbedPreparedStatement.<init>(EmbedPreparedStatement.java:129)
        ... 9 more


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to