|
[
Permlink
| « Hide
]
Erik Bengtson added a comment - 18/Feb/06 04:45 AM
JPOX generates a valid SQL. At least I tested in MSSQL and DB2 and it worked, so a problem in Derby. I raised in derby users list but does not seem they will fix it soon. I will work in JPOX to generate a different SQL supported by Derby
The Derby JIRA issue is DERBY-39.
Craig Russell made changes - 25/Feb/06 07:41 AM
Craig Russell made changes - 15/Mar/06 06:39 AM
should be fixed in JPOX CVS
Please review this patch.
I propose to change the queries as in the attached patch. Instead of projecting projects from Employee, it projects employees from Department. The test fails but not because of a Derby issue.
Craig Russell made changes - 19/Mar/06 08:39 AM
The patch looks good. What is the failure when uinsg the patch?
Runnning with this patch, the tests fail but not because of Derby. It appears that JPOX is not constructing the right SQL for this query.
[echo] Starting configuration="clr.conf" with database="derby" identitytype="datastoreidentity" mapping="". [java] RUN VariableInResult.testDistinctNoNavigation FAILURE [java] RUN VariableInResult.testNoNavigation FAILURE [java] RUN VariableInResult.testDistinctNavigation [java] RUN VariableInResult.testNavigation [java] Description: Special Test [java] Time: 026 [java] There were 2 failures: [java] 1) testDistinctNoNavigation(org.apache.jdo.tck.query.result.VariableInResult)junit.framework.AssertionFailedError: Assertion A14.6.9-3 (VariableInResult) failed: [java] Wrong query result: [java] query: SELECT distinct e FROM org.apache.jdo.tck.pc.company.Department WHERE deptid==2 & employees.contains(e) VARIABLES Employee e [java] expected: [PartTimeEmployee(4, emp4Last, emp4First, born 5/Sep/1973, phone {work=124456-3, home=3343}, hired 14/Apr/2001, weeklyhours 0.0, $13.0), FullTimeEmployee(5, emp5Last, emp5First, born 4/Jul/1962, phone {work=126456-3, home=3363}, hired 14/Aug/1998, weeklyhours 0.0, $45000.0)] [java] got: [FullTimeEmployee(1, emp1Last, emp1First, born 9/Jun/1970, phone {work=123456-1,home=1111}, hired 31/Dec/1998, weeklyhours 40.0, $20000.0), FullTimeEmployee(5, emp5Last, emp5First, born 4/Jul/1962, phone {work=126456-3,home=3363}, hired 14/Aug/1998, weeklyhours 0.0, $45000.0), PartTimeEmployee(3, emp3Last, emp3First, born 4/Sep/1972, phone {work=123456-3,home=3333}, hired 14/Aug/2002, weeklyhours 19.0, $15.0), FullTimeEmployee(2, emp2Last, emp2First, born 21/Dec/1975, phone {work=123456-2,home=2222}, hired 30/Jun/2003, weeklyhours 40.0, $10000.0), PartTimeEmployee(4, emp4Last, emp4First, born 5/Sep/1973, phone {work=124456-3,home=3343}, hired 14/Apr/2001, weeklyhours 0.0, $13.0)] [java] at org.apache.jdo.tck.JDO_Test.fail(JDO_Test.java:583) [java] at org.apache.jdo.tck.query.QueryTest.queryFailed(QueryTest.java:508) [java] at org.apache.jdo.tck.query.QueryTest.checkQueryResultWithoutOrder(QueryTest.java:536) [java] at org.apache.jdo.tck.query.QueryTest.execute(QueryTest.java:1230) [java] at org.apache.jdo.tck.query.QueryTest.execute(QueryTest.java:1070) [java] at org.apache.jdo.tck.query.QueryTest.executeAPIQuery(QueryTest.java:1007) [java] at org.apache.jdo.tck.query.QueryTest.executeAPIQuery(QueryTest.java:987) [java] at org.apache.jdo.tck.query.result.VariableInResult.testDistinctNoNavigation(VariableInResult.java:141) [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [java] at org.apache.jdo.tck.JDO_Test.runBare(JDO_Test.java:232) [java] at org.apache.jdo.tck.util.BatchTestRunner.doRun(BatchTestRunner.java:105) [java] at org.apache.jdo.tck.util.BatchTestRunner.start(BatchTestRunner.java:143) [java] at org.apache.jdo.tck.util.BatchTestRunner.main(BatchTestRunner.java:118) [java] 2) testNoNavigation(org.apache.jdo.tck.query.result.VariableInResult)junit.framework.AssertionFailedError: Assertion A14.6.9-3 (VariableInResult) failed: [java] Wrong query result: [java] query: SELECT e FROM org.apache.jdo.tck.pc.company.Department WHERE deptid==2 & employees.contains(e) VARIABLES Employee e [java] expected: [PartTimeEmployee(4, emp4Last, emp4First, born 5/Sep/1973, phone {work=124456-3, home=3343}, hired 14/Apr/2001, weeklyhours 0.0, $13.0), FullTimeEmployee(5, emp5Last, emp5First, born 4/Jul/1962, phone {work=126456-3, home=3363}, hired 14/Aug/1998, weeklyhours 0.0, $45000.0)] [java] got: [FullTimeEmployee(1, emp1Last, emp1First, born 9/Jun/1970, phone {work=123456-1,home=1111}, hired 31/Dec/1998, weeklyhours 40.0, $20000.0), FullTimeEmployee(5, emp5Last, emp5First, born 4/Jul/1962, phone {work=126456-3,home=3363}, hired 14/Aug/1998, weeklyhours 0.0, $45000.0), PartTimeEmployee(3, emp3Last, emp3First, born 4/Sep/1972, phone {work=123456-3,home=3333}, hired 14/Aug/2002, weeklyhours 19.0, $15.0), FullTimeEmployee(2, emp2Last, emp2First, born 21/Dec/1975, phone {work=123456-2,home=2222}, hired 30/Jun/2003, weeklyhours 40.0, $10000.0), PartTimeEmployee(4, emp4Last, emp4First, born 5/Sep/1973, phone {work=124456-3,home=3343}, hired 14/Apr/2001, weeklyhours 0.0, $13.0)] [java] at org.apache.jdo.tck.JDO_Test.fail(JDO_Test.java:583) [java] at org.apache.jdo.tck.query.QueryTest.queryFailed(QueryTest.java:508) [java] at org.apache.jdo.tck.query.QueryTest.checkQueryResultWithoutOrder(QueryTest.java:536) [java] at org.apache.jdo.tck.query.QueryTest.execute(QueryTest.java:1230) [java] at org.apache.jdo.tck.query.QueryTest.execute(QueryTest.java:1070) [java] at org.apache.jdo.tck.query.QueryTest.executeAPIQuery(QueryTest.java:1007) [java] at org.apache.jdo.tck.query.QueryTest.executeAPIQuery(QueryTest.java:987) [java] at org.apache.jdo.tck.query.result.VariableInResult.testNoNavigation(VariableInResult.java:150) [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [java] at org.apache.jdo.tck.JDO_Test.runBare(JDO_Test.java:232) [java] at org.apache.jdo.tck.util.BatchTestRunner.doRun(BatchTestRunner.java:105) [java] at org.apache.jdo.tck.util.BatchTestRunner.start(BatchTestRunner.java:143) [java] at org.apache.jdo.tck.util.BatchTestRunner.main(BatchTestRunner.java:118) [java] FAILURES!!! [java] derby-dsid-clr-junit.txt: [java] ** Tests run: 004, Time: 026 seconds. Failures: 2, Errors: 0 [java] Excluded tests: [org.apache.jdo.tck.enhancement.FieldAccessModified, org.apache.jdo.tck.enhancement.ImplementsPersistenceCapable] [java] [ERROR] Java Result: 1 [echo] Finished configuration="clr.conf" with database="derby" identitytype="datastoreidentity" mapping="". From the JPOX log, the query:
SELECT distinct e FROM org.apache.jdo.tck.pc.company.Department WHERE deptid==2 & employees.contains(e) VARIABLES Employee e generates this SQL: SELECT DISTINCT UNBOUND_E.DATASTORE_IDENTITY FROM datastoreidentity0.DEPARTMENTS THIS,datastoreidentity0.PERSONS UNBOUND_E WHERE EXISTS (SELECT 1 FROM datastoreidentity0.PERSONS THIS_EMPLOYEES_E WHERE THIS_EMPLOYEES_E.DEPARTMENT = THIS.DATASTORE_IDENTITY AND THIS_EMPLOYEES_E.DEPARTMENT = THIS.DATASTORE_IDENTITY AND THIS.ID = <2> [The subselect doesn't use the same variables so it's not a correlated query.The UNBOUND_E doesn't correlate with THIS_EMPLOYEES_E in the subquery] followed by two queries loading the state each of the instances found SELECT THIS.BIRTHDATE,THIS.FIRSTNAME,THIS.LASTNAME,THIS.PERSONID,THIS.HIREDATE,THIS.WEEKLYHOURS,THIS.WAGE FROM datastoreidentity0.PERSONS THIS WHERE (THIS.DATASTORE_IDENTITY=<15235> SELECT "TYPE",PHONENO FROM datastoreidentity0.EMPLOYEE_PHONENO_TYPE WHERE EMPID = <15235> AND "TYPE" IS NOT NULL -- 1 PS parameters
This change works around the Derby bug.
svn commit src/java/org/apache/jdo/tck/query/result/VariableInResult.java Sending src/java/org/apache/jdo/tck/query/result/VariableInResult.java Transmitting file data . Committed revision 387351.
Craig Russell made changes - 21/Mar/06 07:57 AM
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||