[ 
https://issues.apache.org/jira/browse/DERBY-2201?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12671844#action_12671844
 ] 

Kristian Waagan commented on DERBY-2201:
----------------------------------------

I agree it it possible to cast between CHAR/VARCHAR and Clob, and that 
constructing one of these from a CLOB is / should be possible. That, however, 
doesn't mean that it should be represented internally as a java.sql.Clob.
For instance, since a CHAR has a maximum size of 255 characters,  the Clob 
value could be read and then stored in the SQLChar object as a string. I admit 
it's not as clear-cut for VARCHAR.
Using the same code to deal with CHAR and CLOB has caused lots of problems in 
the past, because the maximum length of these values differ so much.

Where will the new constructors and the new setValue(Clob) be used? Is it only 
in the case of functions, and for SQLClob?

> Calling functions that return Blob/Clob does not work.
> ------------------------------------------------------
>
>                 Key: DERBY-2201
>                 URL: https://issues.apache.org/jira/browse/DERBY-2201
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.3.1.4
>         Environment: Derby, head of trunk. Sun JVM 5. Solaris 10 (x86).
>            Reporter: Øystein Grøvlen
>            Priority: Minor
>         Attachments: ClobFunction.java, derby-2201-02-aa-wrapUserLob.diff, 
> derby-2201-aa-01-crudeDog.diff, 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)

-- 
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