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