[
http://issues.apache.org/jira/browse/JDO-246?page=comments#action_12364818 ]
Erik Bengtson commented on JDO-246:
-----------------------------------
> I'm a little confused about the term intersection. Just for my understanding:
> do you mean Cartesian product?
We are using intersection between Department.employees vs Employee, since we
only retain
the employees that are on both sets.
Employee = {"Employee1","Employee2","Employee3"}
Department = {"dept1","dept2","dept3"}
Department.employees =
{{"Employee1","Employee3"},{"Employee2"},{"Employee1","Employee2"}}
{"Employee1", "emp2Last"}
{"Employee3", null}
{"Employee2", "emp2Last"}
{"Employee1", "emp2Last"}
{"Employee2", "emp2Last"}
A cartesian product would result in return all employees from Employee set for
each Department.
> Here is my understanding of the semantics of your query including the
> resource variable. Please note, this does not necessarily mean it needs to be
> implemented that way :-):
You are the JDOQL expert here ;).
Now the second example, The way I exemplified I was thinking in a kind of outer
join from Employee vs Resource. Meaning returning a row if one of both has an
element in the set.
{"Employee1", "emp2Last", "Resource2"}
{"Employee3", null, null}
{"Employee2", "emp2Last","Resource2"}
{null,null,"Resource3"}
{null,null,"Resource1"}
{"Employee1", "emp2Last","Resource1"}
{"Employee2", "emp2Last","Resource2"}
The way you did it is different, you take Employee vs Resource and calculates
the Cartesian product.
Then the query result would be:
{"Employee1", "emp2Last", "Resource2"}
{"Employee3", null, "Resource2"}
{"Employee2", "emp2Last","Resource2"}
{"Employee2", "emp2Last","Resource3"}
{"Employee2", "emp2Last","Resource1"}
{"Employee1", "emp2Last","Resource1"}
{"Employee1", "emp2Last","Resource2"}
{"Employee2", "emp2Last","Resource1"}
{"Employee2", "emp2Last","Resource2"}
>About the difference between uisng && or ||:
>I think with && only those tripels are retained where both the employee and
>the resource have a relationship to the department of the triple. Using || the
>set of retained tripels before the projection is bigger, because it also
>includes tripels where only one of the two (employee, resource) is related to
>the department.
You mean an inner join if &&, and outer join ||
> Does this make sense?
I don't know. :(
We have these steps to calculate
1. Set e =Department.employees (Intersect) Employee
2. Set r =Departments.resources (Intersect) Resource
3. Set result = d (Cartesian Product) (e (Cartesian Product) r) (your example)
or
3. Set result = d (Cartesian Product) (e (outer join) r) (my example)
> JPOX eliminates duplicates in the query result although DISTINCT is not
> specified.
> ----------------------------------------------------------------------------------
>
> Key: JDO-246
> URL: http://issues.apache.org/jira/browse/JDO-246
> Project: JDO
> Type: Bug
> Components: tck20
> Reporter: Michael Watzek
> Assignee: Erik Bengtson
>
> Test case NPEInResultExpr fails because the result of the query below is
> expected to contain duplicates. JPOX eliminates the duplicates.
> 14:22:55,046 (main) DEBUG [org.apache.jdo.tck] - Executing API query: SELECT
> employee.manager.lastname FROM org.apache.jdo.tck.pc.company.Department WHERE
> employees.contains(employee) VARIABLES Employee employee
> 14:22:55,078 (main) DEBUG [org.apache.jdo.tck] - Query result: [emp2Last,
> null]
> 14:22:55,078 (main) DEBUG [org.apache.jdo.tck] - Wrong query result:
> expected: [emp2Last, null, emp2Last, emp2Last, emp2Last]
> got: [emp2Last, null]
> 14:22:55,078 (main) INFO [org.apache.jdo.tck] - Exception during setUp or
> runtest:
> junit.framework.AssertionFailedError: Assertion A14.6.9-4 (NPEInResultExpr)
> failed:
> Wrong query result:
> expected: [emp2Last, null, emp2Last, emp2Last, emp2Last]
> got: [emp2Last, null]
> at junit.framework.Assert.fail(Assert.java:47)
> at org.apache.jdo.tck.JDO_Test.fail(JDO_Test.java:546)
> at org.apache.jdo.tck.query.QueryTest.queryFailed(QueryTest.java:500)
> at
> org.apache.jdo.tck.query.QueryTest.checkQueryResultWithoutOrder(QueryTest.java:485)
> at org.apache.jdo.tck.query.QueryTest.execute(QueryTest.java:1189)
> at org.apache.jdo.tck.query.QueryTest.execute(QueryTest.java:1029)
> at
> org.apache.jdo.tck.query.QueryTest.executeAPIQuery(QueryTest.java:966)
> at
> org.apache.jdo.tck.query.QueryTest.executeAPIQuery(QueryTest.java:946)
> at
> org.apache.jdo.tck.query.result.NPEInResultExpr.testPositive(NPEInResultExpr.java:106)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:324)
> at junit.framework.TestCase.runTest(TestCase.java:154)
> at org.apache.jdo.tck.JDO_Test.runBare(JDO_Test.java:204)
> at junit.framework.TestResult$1.protect(TestResult.java:106)
> at junit.framework.TestResult.runProtected(TestResult.java:124)
> at junit.framework.TestResult.run(TestResult.java:109)
> at junit.framework.TestCase.run(TestCase.java:118)
> at junit.framework.TestSuite.runTest(TestSuite.java:208)
> at junit.framework.TestSuite.run(TestSuite.java:203)
> at junit.framework.TestSuite.runTest(TestSuite.java:208)
> at junit.framework.TestSuite.run(TestSuite.java:203)
> at junit.textui.TestRunner.doRun(TestRunner.java:116)
> at junit.textui.TestRunner.doRun(TestRunner.java:109)
> at
> org.apache.jdo.tck.util.BatchTestRunner.start(BatchTestRunner.java:120)
> at org.apache.jdo.tck.util.BatchTestRunner.main(BatchTestRunner.java:95)
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira