[ 
https://issues.apache.org/jira/browse/DERBY-2201?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Rick Hillegas updated DERBY-2201:
---------------------------------

    Attachment: derby-2201-02-ac-wrapUserLob.diff

Attaching derby-2201-02-ac-wrapUserLob.diff. This is the 
derby-2201-02-aa-wrapUserLob.diff patch with the following improvements, 
discussed in the previous comment:

A) 0L changed to 1L in the getSubString() and getBytes() calls.

B) Removed changes to SQLBinary.estimateMemoryUsage().

C) Removed the short-circuiting which prevented us from using the streaming 
apis when serializing SQLClobs which contain user Clobs.

D) Adjusted the serialization of SQLVarchar to use the streaming apis when the 
payload is a user Clob.

I need to run the regression tests now.


Touches the following additional file:

M      
java/testing/org/apache/derbyTesting/functionTests/tests/lang/StringColumnVTI.java

The dummy [BC]lob implementations in this class were coded to use 0-based 
indexing rather than 1-based indexing. This is why the tests did not catch 
problem (A). I have corrected Clob.getSubString() and Blob.getBytes() to use 
1-based indexing.


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