Mike Matrigali wrote:
Rick Hillegas wrote:
Thanks, Mike. I don't think I understand what the upgrade issues are. Could you explain?

Regards,
-Rick

I may just have jumped in too soon, as I don't really understand what the encoding that was a problem is actually doing. I was just working off the info in the bug and saw the word's encoding which felt like something that was going to encode something that went to disk and then would be read from disk later on subsequent database boots. Anything like that would seem like it might present problems if we have to change the encoding in a new version of the software - so it would be easier to get it "right" now rather than have multiple versions of it.

Maybe you could explain what is being encoded and if it is actually ever
making it to disk. From description I was assuming it was in some catalog that held the info about the table function.
Thanks for digging into this issue, Mike. What's being serialized (and encoded) is the signature of a Table Function. This serialized form is kept in the in-memory query plan and retrieved from memory when the Table Function is instantiated. I don't believe that these plans are ever stored on disk. If they were, I agree that we would want to sand this down now.

Regards,
-Rick


Mike Matrigali wrote:
Knut's suggestions seems good. Also whatever we decide it would be nice to get this right in the 10.4 release to avoid any upgrade issues with
changing the format in the future.

/mikem

Knut Anders Hatlen (JIRA) wrote:
[ https://issues.apache.org/jira/browse/DERBY-3616?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Knut Anders Hatlen updated DERBY-3616:
--------------------------------------

    Attachment: enc.diff

I think the patch works, but I don't think we need to write our own code to perform encoding/decoding. Instead, we could use the constructor and getBytes() method that take the encoding parameter, and specify a well-known 8-bit encoding (for instance ISO-8859-1). See the attached patch for an example (this patch makes TableFunctionTest pass, but a real patch should probably create friendly helper methods around new String() and getBytes()). Another benefit with this approach, is that we waste less space (one byte maps to one char, whereas derby-3616-01-improvedEncoding.diff maps one byte to two chars).

TableFunctionTest fails under Ubuntu 7.10
-----------------------------------------

                Key: DERBY-3616
                URL: https://issues.apache.org/jira/browse/DERBY-3616
            Project: Derby
         Issue Type: Bug
         Components: Regression Test Failure
   Affects Versions: 10.5.0.0
        Environment: Operating System: Ubuntu 7.10
JVMs tested: 1.4 and 1.6
           Reporter: Tiago R. Espinha
           Priority: Minor
        Attachments: derby-3616-01-improvedEncoding.diff, enc.diff


When running the test org.apache.derbyTesting.functionTests.tests.lang.TableFunctionTest, it fails with the output shown below. This test blocks the proper execution of suites.All and it was tested under Ubuntu 7.10 (also tested on Windows Vista and it doesn't throw an error there).
There were 2 errors:
1) noSpecialCollation(org.apache.derbyTesting.functionTests.tests.lang.TableFunctionTest)java.sql.SQLException: The exception 'java.lang.ClassNotFoundException: ERROR XBM0U: No class was registered for identifier 495.' was thrown while evaluating an expression. at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:45) at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Util.java:87) at org.apache.derby.impl.jdbc.Util.seeNextException(Util.java:223) at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(TransactionResourceImpl.java:398) at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(TransactionResourceImpl.java:346) at org.apache.derby.impl.jdbc.EmbedConnection.handleException(EmbedConnection.java:2125) at org.apache.derby.impl.jdbc.ConnectionChild.handleException(ConnectionChild.java:81) at org.apache.derby.impl.jdbc.EmbedResultSet.closeOnTransactionError(EmbedResultSet.java:4320) at org.apache.derby.impl.jdbc.EmbedResultSet.movePosition(EmbedResultSet.java:463) at org.apache.derby.impl.jdbc.EmbedResultSet.next(EmbedResultSet.java:367) at org.apache.derbyTesting.functionTests.tests.lang.TableFunctionTest.assertResults(TableFunctionTest.java:1935) at org.apache.derbyTesting.functionTests.tests.lang.TableFunctionTest.assertResults(TableFunctionTest.java:1776) at org.apache.derbyTesting.functionTests.tests.lang.TableFunctionTest.assertResults(TableFunctionTest.java:1762) at org.apache.derbyTesting.functionTests.tests.lang.TableFunctionTest.simpleVTIResults(TableFunctionTest.java:1079) at org.apache.derbyTesting.functionTests.tests.lang.TableFunctionTest.tableFunctionTest(TableFunctionTest.java:920) at org.apache.derbyTesting.functionTests.tests.lang.TableFunctionTest.noSpecialCollation(TableFunctionTest.java:897) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at org.apache.derbyTesting.junit.BaseTestCase.runBare(BaseTestCase.java:103) Caused by: java.sql.SQLException: Java exception: 'ERROR XBM0U: No class was registered for identifier 495.: java.lang.ClassNotFoundException'. at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:45) at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Util.java:87) at org.apache.derby.impl.jdbc.Util.javaException(Util.java:244) at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(TransactionResourceImpl.java:403)
        ... 29 more
Caused by: java.lang.ClassNotFoundException: ERROR XBM0U: No class was registered for identifier 495. at org.apache.derby.iapi.services.io.FormatIdInputStream.readObject(FormatIdInputStream.java:129) at org.apache.derby.catalog.types.TypeDescriptorImpl.readExternal(TypeDescriptorImpl.java:491) at org.apache.derby.iapi.services.io.FormatIdInputStream.readObject(FormatIdInputStream.java:126) at org.apache.derby.impl.sql.execute.VTIResultSet.thawReturnType(VTIResultSet.java:696) at org.apache.derby.impl.sql.execute.VTIResultSet.getReturnColumnTypes(VTIResultSet.java:670) at org.apache.derby.impl.sql.execute.VTIResultSet.populateFromResultSet(VTIResultSet.java:559) at org.apache.derby.impl.sql.execute.VTIResultSet.getNextRowCore(VTIResultSet.java:347) at org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl.getNextRow(BasicNoPutResultSetImpl.java:460) at org.apache.derby.impl.jdbc.EmbedResultSet.movePosition(EmbedResultSet.java:423)
        ... 23 more
2) specialCollation(org.apache.derbyTesting.functionTests.tests.lang.TableFunctionTest)java.sql.SQLException: The exception 'java.lang.ClassNotFoundException: ERROR XBM0U: No class was registered for identifier 495.' was thrown while evaluating an expression. at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:45) at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Util.java:87) at org.apache.derby.impl.jdbc.Util.seeNextException(Util.java:223) at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(TransactionResourceImpl.java:398) at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(TransactionResourceImpl.java:346) at org.apache.derby.impl.jdbc.EmbedConnection.handleException(EmbedConnection.java:2125) at org.apache.derby.impl.jdbc.ConnectionChild.handleException(ConnectionChild.java:81) at org.apache.derby.impl.jdbc.EmbedResultSet.closeOnTransactionError(EmbedResultSet.java:4320) at org.apache.derby.impl.jdbc.EmbedResultSet.movePosition(EmbedResultSet.java:463) at org.apache.derby.impl.jdbc.EmbedResultSet.next(EmbedResultSet.java:367) at org.apache.derbyTesting.functionTests.tests.lang.TableFunctionTest.assertResults(TableFunctionTest.java:1935) at org.apache.derbyTesting.functionTests.tests.lang.TableFunctionTest.assertResults(TableFunctionTest.java:1776) at org.apache.derbyTesting.functionTests.tests.lang.TableFunctionTest.assertResults(TableFunctionTest.java:1762) at org.apache.derbyTesting.functionTests.tests.lang.TableFunctionTest.simpleVTIResults(TableFunctionTest.java:1079) at org.apache.derbyTesting.functionTests.tests.lang.TableFunctionTest.tableFunctionTest(TableFunctionTest.java:920) at org.apache.derbyTesting.functionTests.tests.lang.TableFunctionTest.specialCollation(TableFunctionTest.java:907) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at org.apache.derbyTesting.junit.BaseTestCase.runBare(BaseTestCase.java:103) at junit.extensions.TestDecorator.basicRun(TestDecorator.java:22)
        at junit.extensions.TestSetup$1.protect(TestSetup.java:19)
        at junit.extensions.TestSetup.run(TestSetup.java:23)
at org.apache.derbyTesting.junit.BaseTestSetup.run(BaseTestSetup.java:57) at junit.extensions.TestDecorator.basicRun(TestDecorator.java:22)
        at junit.extensions.TestSetup$1.protect(TestSetup.java:19)
        at junit.extensions.TestSetup.run(TestSetup.java:23)
at org.apache.derbyTesting.junit.BaseTestSetup.run(BaseTestSetup.java:57) at junit.extensions.TestDecorator.basicRun(TestDecorator.java:22)
        at junit.extensions.TestSetup$1.protect(TestSetup.java:19)
        at junit.extensions.TestSetup.run(TestSetup.java:23)
Caused by: java.sql.SQLException: Java exception: 'ERROR XBM0U: No class was registered for identifier 495.: java.lang.ClassNotFoundException'. at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:45) at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Util.java:87) at org.apache.derby.impl.jdbc.Util.javaException(Util.java:244) at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(TransactionResourceImpl.java:403)
        ... 45 more
Caused by: java.lang.ClassNotFoundException: ERROR XBM0U: No class was registered for identifier 495. at org.apache.derby.iapi.services.io.FormatIdInputStream.readObject(FormatIdInputStream.java:129) at org.apache.derby.catalog.types.TypeDescriptorImpl.readExternal(TypeDescriptorImpl.java:491) at org.apache.derby.iapi.services.io.FormatIdInputStream.readObject(FormatIdInputStream.java:126) at org.apache.derby.impl.sql.execute.VTIResultSet.thawReturnType(VTIResultSet.java:696) at org.apache.derby.impl.sql.execute.VTIResultSet.getReturnColumnTypes(VTIResultSet.java:670) at org.apache.derby.impl.sql.execute.VTIResultSet.populateFromResultSet(VTIResultSet.java:559) at org.apache.derby.impl.sql.execute.VTIResultSet.getNextRowCore(VTIResultSet.java:347) at org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl.getNextRow(BasicNoPutResultSetImpl.java:460) at org.apache.derby.impl.jdbc.EmbedResultSet.movePosition(EmbedResultSet.java:423)
        ... 39 more
FAILURES!!!
Tests run: 2,  Failures: 0,  Errors: 2






Reply via email to