db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Knut Anders Hatlen (JIRA)" <j...@apache.org>
Subject [jira] Commented: (DERBY-4457) 'Column value mismatch' in 'testDistinctInsertWithGeneratedColumn(...lang.DistinctTest)' on Jvm 1.5, 1.4, phoneME.
Date Tue, 01 Dec 2009 10:49:20 GMT

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

Knut Anders Hatlen commented on DERBY-4457:
-------------------------------------------

This failure was introduced by DERBY-4442, and the root cause is that the test relies on a
specific implicit ordering of the results that's not guaranteed.

In short, the following sequence of statements (simplified test case)

create table source (x int);
insert into source values 1,2;
create table dest (x int, y int generated always as identity);
insert into dest(x) select distinct x from source;

used to result in the table DEST containing the rows (1,1) and (2,2) regardless of JVM.

After DERBY-4442, it contains (1,1), (2,2) with Sun's JVM version 1.6 or later, whereas earlier
JVM versions produce a table that contains the rows (2,1) and (1,2).

Even without the DERBY-4442 patch, one will see that "SELECT DISTINCT X FROM SOURCE" gives
different results on different JVMs. But before DERBY-4442, a SELECT DISTINCT that acted as
a source for an INSERT statement would go through a sort if the target table contained an
identity column, so the rows would happen to be inserted in sorted order. After DERBY-4442,
a sort is no longer needed, and the rows are inserted in the same order by which they returned
from the DistinctScanResultSet.

Since the insertion order is not guaranteed unless there's an ORDER BY clause (which is not
accepted syntax until DERBY-4 is fixed), the difference in the results depending on JVM is
OK, and the test should be changed to be independent of the JVM's hash implementation.

> 'Column value mismatch' in 'testDistinctInsertWithGeneratedColumn(...lang.DistinctTest)'
on Jvm 1.5, 1.4, phoneME.
> ------------------------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-4457
>                 URL: https://issues.apache.org/jira/browse/DERBY-4457
>             Project: Derby
>          Issue Type: Bug
>    Affects Versions: 10.6.0.0
>         Environment: JVM:
> Sun Microsystems Inc.
> java version "1.5.0_14"
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_14-b03)
> Java HotSpot(TM) Server VM (build 1.5.0_14-b03 mixed mode 32-bit)
> Sun Microsystems Inc.
> java version "1.4.2_02"
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_02-b03)
> Java HotSpot(TM) Client VM (build 1.4.2_02-b03 mixed mode 32-bit)
> Product: phoneME Advanced (phoneme_advanced_mr2-b116)
> Profile: Foundation Profile Specification 1.1
> JVM:     CVM phoneme_advanced_mr2-b116 (interpreter loop)
>            Reporter: Ole Solberg
>            Assignee: Knut Anders Hatlen
>
> See e.g. http://dbtg.foundry.sun.com/derby/test/Daily/jvm1.5/testing/testlog/sol/885498-suitesAll_diff.txt
:
> 1) testDistinctInsertWithGeneratedColumn(org.apache.derbyTesting.functionTests.tests.lang.DistinctTest)junit.framework.AssertionFailedError:
Column value mismatch @ column 'C12', row 1:
>     Expected: >1<
>     Found:    >2<
> 	at org.apache.derbyTesting.junit.JDBC.assertRowInResultSet(JDBC.java:1081)
> 	at org.apache.derbyTesting.junit.JDBC.assertRowInResultSet(JDBC.java:993)
> 	at org.apache.derbyTesting.junit.JDBC.assertFullResultSet(JDBC.java:881)
> 	at org.apache.derbyTesting.junit.JDBC.assertFullResultSet(JDBC.java:819)
> 	at org.apache.derbyTesting.junit.JDBC.assertFullResultSet(JDBC.java:777)
> 	at org.apache.derbyTesting.functionTests.tests.lang.DistinctTest.testDistinctInsertWithGeneratedColumn(DistinctTest.java:462)
> 	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:109)
> 	at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
> 	at junit.extensions.TestSetup$1.protect(TestSetup.java:21)
> 	at junit.extensions.TestSetup.run(TestSetup.java:25)
> 	at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
> 	at junit.extensions.TestSetup$1.protect(TestSetup.java:21)
> 	at junit.extensions.TestSetup.run(TestSetup.java:25)

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