From the documentation it is clear that there is no current support for
blob/clob as parameters. I always assumed that extended to return value
also. It is sort of unclear from the documentation.
Anyone know if current code was meant to support blob/clob as return value?
Øystein Grøvlen (JIRA) wrote:
[ http://issues.apache.org/jira/browse/DERBY-2201?page=all ]
Øystein Grøvlen updated DERBY-2201:
-----------------------------------
Attachment: getClobDataValue.diff
I tried defining getBlobDataValue/getClobDataValue that takes a Blob/Clob
parameter instead of a String (see attached getClobDataValue.diff), but then
the repro fails because getObject is not implemented for SQLBlob/SQLClob:
java.sql.SQLException: An attempt was made to get a data value of type
'java.lang.Object' from a data value of type 'CLOB'.
ERROR 22005: An attempt was made to get a data value of type 'java.lang.Object'
from a data value of type 'CLOB'.
at
org.apache.derby.iapi.error.StandardException.newException(StandardException.java:316)
at
org.apache.derby.iapi.types.DataType.dataTypeConversion(DataType.java:1038)
at org.apache.derby.iapi.types.SQLClob.getObject(SQLClob.java:141)
at
org.apache.derby.exe.ac07170079x010fxc918x10adx0000001741881.e1(Unknown Source)
at
org.apache.derby.impl.services.reflect.DirectCall.invoke(ReflectGeneratedClass.java:141)
at
org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.doProjection(ProjectRestrictResultSet.java:488)
at
org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.getNextRowCore(ProjectRestrictResultSet.java:292)
at
org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl.getNextRow(BasicNoPutResultSetImpl.java:475)
at
org.apache.derby.impl.jdbc.EmbedResultSet.movePosition(EmbedResultSet.java:440)
at
org.apache.derby.impl.jdbc.EmbedResultSet.next(EmbedResultSet.java:384)
at lobtests.ClobFunction.main(ClobFunction.java:89)
Calling functions that return Blob/Clob does not work.
------------------------------------------------------
Key: DERBY-2201
URL: http://issues.apache.org/jira/browse/DERBY-2201
Project: Derby
Issue Type: Bug
Components: SQL
Affects Versions: 10.3.0.0
Environment: Derby, head of trunk. Sun JVM 5. Solaris 10 (x86).
Reporter: Øystein Grøvlen
Priority: Minor
Attachments: ClobFunction.java, getClobDataValue.diff
Calling functions that return Blob/Clob results in NoSuchMethodException (See
stackTrace below). It fails because DataValueFactory.getClobDataValue(Clob,
StringDataValue) does not exist. However, getClobDataValue(String,
StringDataValue) exists. I will attach program to repro this.
java.lang.NoSuchMethodException:
org.apache.derby.iapi.types.DataValueFactory.getClobDataValue(java.sql.Clob,
org.apache.derby.iapi.types.StringDataValue) at
java.lang.Class.getDeclaredMethod(Class.java:1909)
at
org.apache.derby.impl.services.bytecode.d_BCValidate.checkMethod(d_BCValidate.java:133)
at
org.apache.derby.impl.services.bytecode.BCMethod.callMethod(BCMethod.java:745)
at
org.apache.derby.impl.sql.compile.BaseTypeCompiler.generateDataValue(BaseTypeCompiler.java:135)
at
org.apache.derby.impl.sql.compile.ExpressionClassBuilder.generateDataValue(ExpressionClassBuilder.java:918)
at
org.apache.derby.impl.sql.compile.JavaToSQLValueNode.generateExpression(JavaToSQLValueNode.java:179)
at
org.apache.derby.impl.sql.compile.CastNode.generateExpression(CastNode.java:884)
at
org.apache.derby.impl.sql.compile.SQLToJavaValueNode.generateSQLValue(SQLToJavaValueNode.java:361)
at
org.apache.derby.impl.sql.compile.SQLToJavaValueNode.generateExpression(SQLToJavaValueNode.java:341)
at
org.apache.derby.impl.sql.compile.JavaToSQLValueNode.generateExpression(JavaToSQLValueNode.java:176)
at
org.apache.derby.impl.sql.compile.ResultColumn.generateExpression(ResultColumn.java:884)
at
org.apache.derby.impl.sql.compile.ResultColumnList.generateCore(ResultColumnList.java:1097)
at
org.apache.derby.impl.sql.compile.ProjectRestrictNode.generateMinion(ProjectRestrictNode.java:1516)
at
org.apache.derby.impl.sql.compile.ProjectRestrictNode.generate(ProjectRestrictNode.java:1303)
at
org.apache.derby.impl.sql.compile.ScrollInsensitiveResultSetNode.generate(ScrollInsensitiveResultSetNode.java:110)
at
org.apache.derby.impl.sql.compile.CursorNode.generate(CursorNode.java:565)
at
org.apache.derby.impl.sql.compile.StatementNode.generate(StatementNode.java:333)
at
org.apache.derby.impl.sql.GenericStatement.prepMinion(GenericStatement.java:447)
at
org.apache.derby.impl.sql.GenericStatement.prepare(GenericStatement.java:88)
at
org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(GenericLanguageConnectionContext.java:741)
at
org.apache.derby.impl.jdbc.EmbedPreparedStatement.<init>(EmbedPreparedStatement.java:129)
at
org.apache.derby.impl.jdbc.EmbedPreparedStatement20.<init>(EmbedPreparedStatement20.java:83)
at
org.apache.derby.impl.jdbc.EmbedPreparedStatement30.<init>(EmbedPreparedStatement30.java:63)
at
org.apache.derby.jdbc.Driver30.newEmbedPreparedStatement(Driver30.java:93)
at
org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(EmbedConnection.java:742)
at
org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(EmbedConnection.java:586)
at lobtests.ClobFunction.main(ClobFunction.java:87)
Invalid method org.apache.derby.iapi.types.DataValueFactory >>
org.apache.derby.iapi.types.StringDataValue getClobDataValue(java.sql.Clob,
org.apache.derby.iapi.types.StringDataValue) because java.lang.NoSuchMethodException:
org.apache.derby.iapi.types.DataValueFactory.getClobDataValue(java.sql.Clob,
org.apache.derby.iapi.types.StringDataValue)
java.sql.SQLException: Java exception: 'ASSERT FAILED Invalid method
org.apache.derby.iapi.types.DataValueFactory >>
org.apache.derby.iapi.types.StringDataValue getClobDataValue(java.sql.Clob,
org.apache.derby.iapi.types.StringDataValue) because java.lang.NoSuchMethodException:
org.apache.derby.iapi.types.DataValueFactory.getClobDataValue(java.sql.Clob,
org.apache.derby.iapi.types.StringDataValue):
org.apache.derby.shared.common.sanity.AssertFailure'.
org.apache.derby.shared.common.sanity.AssertFailure: ASSERT FAILED Invalid method
org.apache.derby.iapi.types.DataValueFactory >>
org.apache.derby.iapi.types.StringDataValue getClobDataValue(java.sql.Clob,
org.apache.derby.iapi.types.StringDataValue) because java.lang.NoSuchMethodException:
org.apache.derby.iapi.types.DataValueFactory.getClobDataValue(java.sql.Clob,
org.apache.derby.iapi.types.StringDataValue)
at
org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:149)
at
org.apache.derby.impl.services.bytecode.d_BCValidate.checkMethod(d_BCValidate.java:192)
at
org.apache.derby.impl.services.bytecode.BCMethod.callMethod(BCMethod.java:745)
at
org.apache.derby.impl.sql.compile.BaseTypeCompiler.generateDataValue(BaseTypeCompiler.java:135)
at
org.apache.derby.impl.sql.compile.ExpressionClassBuilder.generateDataValue(ExpressionClassBuilder.java:918)
at
org.apache.derby.impl.sql.compile.JavaToSQLValueNode.generateExpression(JavaToSQLValueNode.java:179)
at
org.apache.derby.impl.sql.compile.CastNode.generateExpression(CastNode.java:884)
at
org.apache.derby.impl.sql.compile.SQLToJavaValueNode.generateSQLValue(SQLToJavaValueNode.java:361)
at
org.apache.derby.impl.sql.compile.SQLToJavaValueNode.generateExpression(SQLToJavaValueNode.java:341)
at
org.apache.derby.impl.sql.compile.JavaToSQLValueNode.generateExpression(JavaToSQLValueNode.java:176)
at
org.apache.derby.impl.sql.compile.ResultColumn.generateExpression(ResultColumn.java:884)
at
org.apache.derby.impl.sql.compile.ResultColumnList.generateCore(ResultColumnList.java:1097)
at
org.apache.derby.impl.sql.compile.ProjectRestrictNode.generateMinion(ProjectRestrictNode.java:1516)
at
org.apache.derby.impl.sql.compile.ProjectRestrictNode.generate(ProjectRestrictNode.java:1303)
at
org.apache.derby.impl.sql.compile.ScrollInsensitiveResultSetNode.generate(ScrollInsensitiveResultSetNode.java:110)
at
org.apache.derby.impl.sql.compile.CursorNode.generate(CursorNode.java:565)
at
org.apache.derby.impl.sql.compile.StatementNode.generate(StatementNode.java:333)
at
org.apache.derby.impl.sql.GenericStatement.prepMinion(GenericStatement.java:447)
at
org.apache.derby.impl.sql.GenericStatement.prepare(GenericStatement.java:88)
at
org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(GenericLanguageConnectionContext.java:741)
at
org.apache.derby.impl.jdbc.EmbedPreparedStatement.<init>(EmbedPreparedStatement.java:129)
at
org.apache.derby.impl.jdbc.EmbedPreparedStatement20.<init>(EmbedPreparedStatement20.java:83)
at
org.apache.derby.impl.jdbc.EmbedPreparedStatement30.<init>(EmbedPreparedStatement30.java:63)
at
org.apache.derby.jdbc.Driver30.newEmbedPreparedStatement(Driver30.java:93)
at
org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(EmbedConnection.java:742)
at
org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(EmbedConnection.java:586)
at lobtests.ClobFunction.main(ClobFunction.java:87)