db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Mamta A. Satoor (JIRA)" <j...@apache.org>
Subject [jira] Commented: (DERBY-2961) TriggerTest.testTypesINActionStatement fails with 'ASSERT FAILED col1.getClass() (class org.apache.derby.iapi.types.SQLClob) expected to be the same as col2.getClass() (class org.apache.derby.iapi.types.CollatorSQLClob)
Date Thu, 16 Aug 2007 15:51:31 GMT

    [ https://issues.apache.org/jira/browse/DERBY-2961?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12520278
] 

Mamta A. Satoor commented on DERBY-2961:
----------------------------------------

I spent some time on this jira entry and the reproducible sql is as follows
CREATE TABLE T_MAIN (ID INT  GENERATED ALWAYS AS IDENTITY PRIMARY KEY, V XML);
INSERT INTO T_MAIN(V) VALUES NULL;
SELECT ID, XMLSERIALIZE(V AS CLOB), XMLSERIALIZE(V AS CLOB) FROM T_MAIN ORDER BY 1

The exception is thrown for the last sql statement.

The problem arises from (V AS CLOB). At runtime, this always ends up creating a SQLClob object
(org.apache.derby.iapi.types.XML:XMLSerialize:line 685) without regards to the collation type
of the database. As per Rule 3 (copied below for reference) under section Collation Determination
from wiki page http://wiki.apache.org/db-derby/BuiltInLanguageBasedOrderingDERBY-1478
**********
3)<character string type> (SQL spec section 6.1 <data type> Syntax Rule 3b and
16) - Rule 3b says that collation type of character string type is the character set's collation
AND rule 16 says that if <character string type> is not contained in a <column definition>,
then an implementation-defined character set is associated with the <character string type>.
We define Derby's implementation-defined character set for such <character string type>
to be current schema's character set. The collation derivation will be implicit. 
**********

I think there is a typo in the rule above, ie, rather than the current schema's character
set, it should say current compilation schema's character set. Based on this rule, the resultant
string type from V AS CLOB/CHAR etc should use the collation of the current compilation schema.

I will work on implementing this change. Any feedback on the approach, please let me know.

> TriggerTest.testTypesINActionStatement fails with 'ASSERT FAILED col1.getClass() (class
org.apache.derby.iapi.types.SQLClob) expected to be the same as col2.getClass() (class org.apache.derby.iapi.types.CollatorSQLClob)
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-2961
>                 URL: https://issues.apache.org/jira/browse/DERBY-2961
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.4.0.0
>            Reporter: Kathey Marsden
>            Assignee: Mamta A. Satoor
>         Attachments: TypesInActionStatement.java
>
>
> I have not yet been able to create a stand-alone repro but the test TriggerTest.testTypesINActionStatement
fails with 'ASSERT FAILED col1.getClass() (class org.apache.derby.iapi.types.SQLClob) expected
to be the same as col2.getClass() (class org.apache.derby.iapi.types.CollatorSQLClob)
> Failed statement is:
>             sqlMain = "SELECT ID, XMLSERIALIZE(V AS CLOB), " +
>                     "XMLSERIALIZE(V AS CLOB) FROM T_MAIN ORDER BY 1";
> 2) testTypesInActionStatement(org.apache.derbyTesting.functionTests.tests.lang.TriggerTest)java.sql.SQLException:
Java exception: 'ASSERT FAILED col1.getClass() (class org.apache.derby.iapi.types.SQLClob)
expected to be the same as col2.getClass() (class org.apache.derby.iapi.types.CollatorSQLClob):
org.apache.derby.shared.common.sanity.AssertFailure'.
> 	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:45)
> 	at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Util.java:88)
> 	at org.apache.derby.impl.jdbc.Util.javaException(Util.java:245)
> 	at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(TransactionResourceImpl.java:403)
> 	at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(TransactionResourceImpl.java:346)
> 	at org.apache.derby.impl.jdbc.EmbedConnection.handleException(EmbedConnection.java:1572)
> 	at org.apache.derby.impl.jdbc.ConnectionChild.handleException(ConnectionChild.java:81)
> 	at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1293)
> 	at org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java:596)
> 	at org.apache.derby.impl.jdbc.EmbedStatement.executeQuery(EmbedStatement.java:153)
> 	at org.apache.derbyTesting.functionTests.tests.lang.TriggerTest.actionTypesCompareMainToAction(TriggerTest.java:769)
> 	at org.apache.derbyTesting.functionTests.tests.lang.TriggerTest.actionTypesInsertTest(TriggerTest.java:546)
> 	at org.apache.derbyTesting.functionTests.tests.lang.TriggerTest.actionTypeTest(TriggerTest.java:445)
> 	at org.apache.derbyTesting.functionTests.tests.lang.TriggerTest.testTypesInActionStatement(TriggerTest.java:427)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at org.apache.derbyTesting.junit.BaseTestCase.runBare(BaseTestCase.java:95)
> 	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)
> 	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: org.apache.derby.shared.common.sanity.AssertFailure: ASSERT FAILED col1.getClass()
(class org.apache.derby.iapi.types.SQLClob) expected to be the same as col2.getClass() (class
org.apache.derby.iapi.types.CollatorSQLClob)
> 	at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:162)
> 	at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:147)
> 	at org.apache.derby.impl.store.access.sort.MergeSort.checkColumnTypes(MergeSort.java:467)
> 	at org.apache.derby.impl.store.access.sort.MergeInserter.insert(MergeInserter.java:98)
> 	at org.apache.derby.impl.sql.execute.SortResultSet.loadSorter(SortResultSet.java:317)
> 	at org.apache.derby.impl.sql.execute.SortResultSet.openCore(SortResultSet.java:268)
> 	at org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl.open(BasicNoPutResultSetImpl.java:258)
> 	at org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:370)
> 	at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1203)
> 	... 45 more

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message