================================================================================ Merge Diffs: /ade/cdelahun_toplinkmain/tldev/source/foundation/oracle/toplink/essentials/mappings/OneToOneMapping.java vs. /net/stottnfs2.ca.oracle.com/vol/vol1/ade_ottawa_txn/cdelahun/cdelahun_main_5683148_070208/ade_storage/000001/AB0952363AC40CBFE034080020E8C54E.54 Report generated at Fri Feb 9 17:39:04 2007 -------------------------------------------------------------------------------- *** /net/stottnfs2.ca.oracle.com/vol/vol1/ade_ottawa_txn/cdelahun/cdelahun_main_5683148_070208/ade_storage/000001/AB0952363AC40CBFE034080020E8C54E.54 Fri Feb 9 10:55:40 2007 --- /ade/cdelahun_toplinkmain/tldev/source/foundation/oracle/toplink/essentials/mappings/OneToOneMapping.java Fri Feb 9 17:39:03 2007 *************** *** 203,223 **** public Expression buildObjectJoinExpression(Expression expression, Expression argument, AbstractSession session) { Expression base = ((oracle.toplink.internal.expressions.ObjectExpression)expression).getBaseExpression(); Expression foreignKeyJoin = null; ! Iterator targetFieldsEnum = getSourceToTargetKeyFields().values().iterator(); ! for (Iterator sourceFieldsEnum = getSourceToTargetKeyFields().keySet().iterator(); ! sourceFieldsEnum.hasNext();) { ! DatabaseField sourceField = (DatabaseField)sourceFieldsEnum.next(); ! DatabaseField targetField = (DatabaseField)targetFieldsEnum.next(); ! Expression join = null; ! if (expression.isObjectExpression() && ((ObjectExpression)expression).shouldUseOuterJoin()){ ! join = base.getField(sourceField).equalOuterJoin(argument.getField(targetField)); ! } else { ! join = base.getField(sourceField).equal(argument.getField(targetField)); } ! if (foreignKeyJoin == null) { ! foreignKeyJoin = join; ! } else { ! foreignKeyJoin = foreignKeyJoin.and(join); } } return foreignKeyJoin; --- 203,241 ---- public Expression buildObjectJoinExpression(Expression expression, Expression argument, AbstractSession session) { Expression base = ((oracle.toplink.internal.expressions.ObjectExpression)expression).getBaseExpression(); Expression foreignKeyJoin = null; ! if (expression==argument){ ! for (Iterator sourceFieldsEnum = getSourceToTargetKeyFields().keySet().iterator(); ! sourceFieldsEnum.hasNext();) { ! DatabaseField field = (DatabaseField)sourceFieldsEnum.next(); ! Expression join = base.getField(field); ! if (expression.isObjectExpression() && ((ObjectExpression)expression).shouldUseOuterJoin()){ ! join = join.equalOuterJoin(join); ! } else { ! join = join.equal(join); ! } ! if (foreignKeyJoin == null) { ! foreignKeyJoin = join; ! } else { ! foreignKeyJoin = foreignKeyJoin.and(join); ! } } ! }else{ ! Iterator targetFieldsEnum = getSourceToTargetKeyFields().values().iterator(); ! for (Iterator sourceFieldsEnum = getSourceToTargetKeyFields().keySet().iterator(); ! sourceFieldsEnum.hasNext();) { ! DatabaseField sourceField = (DatabaseField)sourceFieldsEnum.next(); ! DatabaseField targetField = (DatabaseField)targetFieldsEnum.next(); ! Expression join = null; ! if (expression.isObjectExpression() && ((ObjectExpression)expression).shouldUseOuterJoin()){ ! join = base.getField(sourceField).equalOuterJoin(argument.getField(targetField)); ! } else { ! join = base.getField(sourceField).equal(argument.getField(targetField)); ! } ! if (foreignKeyJoin == null) { ! foreignKeyJoin = join; ! } else { ! foreignKeyJoin = foreignKeyJoin.and(join); ! } } } return foreignKeyJoin; ================================================================================ Merge Diffs: /ade/cdelahun_toplinkmain/tltest/source/foundation-entity-persistence/oracle/toplink/essentials/testing/tests/cmp3/relationships/EMQueryJUnitTestSuite.java vs. /net/stottnfs2.ca.oracle.com/vol/vol1/ade_ottawa_txn/cdelahun/cdelahun_main_5683148_070208/ade_storage/000002/AB0952363AC40CBFE034080020E8C54E.1 Report generated at Fri Feb 9 17:39:04 2007 -------------------------------------------------------------------------------- *** /net/stottnfs2.ca.oracle.com/vol/vol1/ade_ottawa_txn/cdelahun/cdelahun_main_5683148_070208/ade_storage/000002/AB0952363AC40CBFE034080020E8C54E.1 Fri Feb 9 17:11:12 2007 --- /ade/cdelahun_toplinkmain/tltest/source/foundation-entity-persistence/oracle/toplink/essentials/testing/tests/cmp3/relationships/EMQueryJUnitTestSuite.java Fri Feb 9 17:39:04 2007 *************** *** 28,34 **** import javax.persistence.EntityManager; - import oracle.toplink.internal.ejb.cmp3.EntityManagerImpl; import oracle.toplink.testing.framework.junit.JUnitTestCase; import javax.persistence.EntityNotFoundException; --- 28,33 ---- *************** *** 195,199 **** --- 194,224 ---- } } + + /* + * bug 5683148/2380: Reducing unnecessary joins on an equality check between the a statement + * and itself + */ + public void testExcludingUnneccesaryJoin() throws Exception { + EntityManager em = createEntityManager(); + try{ + em.getTransaction().begin(); + + Order o = new Order(); + Order o2 = new Order(); + em.persist(o); + em.persist(o2); + + java.util.List results = em.createQuery( + "Select Distinct Object(a) From OrderBean a where a.item Is Null OR a.item <> a.item") + .getResultList(); + assertTrue("Incorrect results returned when testing equal does not produce an unnecessary join ", results.size()==2 ); + }finally{ + try{ + em.getTransaction().rollback(); + em.close(); + }catch(Exception ee){} + } + } }