You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2017/11/10 16:06:43 UTC

[1/6] cayenne git commit: CAY-2276 PrePersist listener registered as PostPersist

Repository: cayenne
Updated Branches:
  refs/heads/STABLE-3.1 814de6546 -> 93e1c8c10


CAY-2276 PrePersist listener registered as PostPersist


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/e1667f6a
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/e1667f6a
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/e1667f6a

Branch: refs/heads/STABLE-3.1
Commit: e1667f6ab09d9a128fbb6845dc0a8a91d16062b3
Parents: 814de65
Author: Nikita Timofeev <st...@gmail.com>
Authored: Fri Nov 10 13:11:02 2017 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Fri Nov 10 13:11:02 2017 +0300

----------------------------------------------------------------------
 docs/doc/src/main/resources/RELEASE-NOTES.txt                     | 3 ++-
 .../org/apache/cayenne/reflect/LifecycleCallbackRegistry.java     | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/e1667f6a/docs/doc/src/main/resources/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --git a/docs/doc/src/main/resources/RELEASE-NOTES.txt b/docs/doc/src/main/resources/RELEASE-NOTES.txt
index 37c6509..3ee5c48 100644
--- a/docs/doc/src/main/resources/RELEASE-NOTES.txt
+++ b/docs/doc/src/main/resources/RELEASE-NOTES.txt
@@ -17,10 +17,11 @@ Bug Fixes Since 3.1.1:
 CAY-2084 ObjectIdQuery - no cache access polymorphism
 CAY-2101 DataContext.currentSnapshot() doesn't set snapshot entity name
 CAY-2226 PK generation for Frontbase: PK cache size must be ignored
+CAY-2276 PrePersist listener registered as PostPersist in LifecycleCallbackRegistry.addListener(Class<?>, LifecycleListener)
 
 ----------------------------------
 Release: 3.1.1
-Date: not yet released
+Date: 16 May 2016
 ----------------------------------
 Changes/New Features Since 3.1
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e1667f6a/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/LifecycleCallbackRegistry.java
----------------------------------------------------------------------
diff --git a/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/LifecycleCallbackRegistry.java b/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/LifecycleCallbackRegistry.java
index aa01ca8..e38ca99 100644
--- a/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/LifecycleCallbackRegistry.java
+++ b/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/LifecycleCallbackRegistry.java
@@ -128,7 +128,7 @@ public class LifecycleCallbackRegistry {
      */
     public void addListener(Class<?> entityClass, LifecycleListener listener) {
         addListener(LifecycleEvent.POST_ADD, entityClass, listener, "postAdd");
-        addListener(LifecycleEvent.POST_PERSIST, entityClass, listener, "prePersist");
+        addListener(LifecycleEvent.PRE_PERSIST, entityClass, listener, "prePersist");
         addListener(LifecycleEvent.POST_PERSIST, entityClass, listener, "postPersist");
         addListener(LifecycleEvent.PRE_REMOVE, entityClass, listener, "preRemove");
         addListener(LifecycleEvent.POST_REMOVE, entityClass, listener, "postRemove");


[4/6] cayenne git commit: CAY-1969 Malformed EJBQL Yields NPE

Posted by nt...@apache.org.
CAY-1969 Malformed EJBQL Yields NPE


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/9c66242a
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/9c66242a
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/9c66242a

Branch: refs/heads/STABLE-3.1
Commit: 9c66242a1a999dfca0aa62e394db73caa4e47b9b
Parents: 37faf1d
Author: Nikita Timofeev <st...@gmail.com>
Authored: Fri Nov 10 15:45:11 2017 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Fri Nov 10 15:45:11 2017 +0300

----------------------------------------------------------------------
 docs/doc/src/main/resources/RELEASE-NOTES.txt   |  1 +
 .../apache/cayenne/ejbql/parser/Compiler.java   |  3 +++
 .../ejbql/EJBQLCompiledExpressionTest.java      | 21 ++++++++++++++++++++
 3 files changed, 25 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/9c66242a/docs/doc/src/main/resources/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --git a/docs/doc/src/main/resources/RELEASE-NOTES.txt b/docs/doc/src/main/resources/RELEASE-NOTES.txt
index 569ece0..a8966e5 100644
--- a/docs/doc/src/main/resources/RELEASE-NOTES.txt
+++ b/docs/doc/src/main/resources/RELEASE-NOTES.txt
@@ -14,6 +14,7 @@ Date: not yet released
 
 Bug Fixes Since 3.1.1:
 
+CAY-1969 Malformed EJBQL Yields NPE
 CAY-2084 ObjectIdQuery - no cache access polymorphism
 CAY-2101 DataContext.currentSnapshot() doesn't set snapshot entity name
 CAY-2137 When generating SQL from EJBQL, use "AND" to separate multiple join conditions

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9c66242a/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
----------------------------------------------------------------------
diff --git a/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java b/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
index 30f8189..7d37b80 100644
--- a/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
+++ b/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
@@ -312,6 +312,9 @@ class Compiler {
         if (descriptor == null) {
             descriptor = descriptorsById.get(expression.getText());
         }
+        if(descriptor == null) {
+            throw new EJBQLException("the entity variable '" + id +"' does not refer to any entity in the FROM clause");
+        }
         final EntityResult entityResult = new EntityResult(descriptor.getObjectClass());
         final String prefix = "ec" + position + "_";
         final int[] index = {

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9c66242a/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/ejbql/EJBQLCompiledExpressionTest.java
----------------------------------------------------------------------
diff --git a/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/ejbql/EJBQLCompiledExpressionTest.java b/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/ejbql/EJBQLCompiledExpressionTest.java
index 82f6392..0dcea40 100644
--- a/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/ejbql/EJBQLCompiledExpressionTest.java
+++ b/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/ejbql/EJBQLCompiledExpressionTest.java
@@ -140,4 +140,25 @@ public class EJBQLCompiledExpressionTest extends ServerCase {
         assertNotNull(select2.getEntityDescriptor("PaInTinGAlIaS"));
     }
 
+    /**
+     * <p>If an expression has an 'entity variable' used in the SELECT clause then there should be a
+     * corresponding definition for the 'entity variable' in the FROM clause.  This did, at some
+     * point throw an NPE.</p>
+     */
+    public void testMissingEntityBeanVariable() {
+        String ejbql = "SELECT b FROM Artist a";
+        EJBQLQuery query = new EJBQLQuery(ejbql);
+
+        try {
+            runtime.getContext().performQuery(query);
+            fail("expected an instance of " + EJBQLException.class.getSimpleName() + " to have been thrown.");
+        }
+        catch(EJBQLException e) {
+            assertEquals("the entity variable 'b' does not refer to any entity in the FROM clause", e.getUnlabeledMessage());
+        }
+        catch(Throwable th) {
+            fail("expected an instance of " + EJBQLException.class.getSimpleName() + " to have been thrown.");
+        }
+    }
+
 }


[3/6] cayenne git commit: CAY-2175 AliasName used in EJBQLQuery is not working if it contains mixed case

Posted by nt...@apache.org.
CAY-2175 AliasName used in EJBQLQuery is not working if it contains mixed case


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/37faf1d3
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/37faf1d3
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/37faf1d3

Branch: refs/heads/STABLE-3.1
Commit: 37faf1d392bc5cc64d2bb3a2028241857938aedf
Parents: e210860
Author: Nikita Timofeev <st...@gmail.com>
Authored: Fri Nov 10 15:44:52 2017 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Fri Nov 10 15:44:52 2017 +0300

----------------------------------------------------------------------
 docs/doc/src/main/resources/RELEASE-NOTES.txt   |  1 +
 .../apache/cayenne/ejbql/parser/Compiler.java   | 68 +++++++++++---------
 .../ejbql/EJBQLCompiledExpressionTest.java      | 32 +++++++++
 3 files changed, 69 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/37faf1d3/docs/doc/src/main/resources/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --git a/docs/doc/src/main/resources/RELEASE-NOTES.txt b/docs/doc/src/main/resources/RELEASE-NOTES.txt
index 19fd5a1..569ece0 100644
--- a/docs/doc/src/main/resources/RELEASE-NOTES.txt
+++ b/docs/doc/src/main/resources/RELEASE-NOTES.txt
@@ -17,6 +17,7 @@ Bug Fixes Since 3.1.1:
 CAY-2084 ObjectIdQuery - no cache access polymorphism
 CAY-2101 DataContext.currentSnapshot() doesn't set snapshot entity name
 CAY-2137 When generating SQL from EJBQL, use "AND" to separate multiple join conditions
+CAY-2175 AliasName used in EJBQLQuery is not working if it contains mixed case
 CAY-2226 PK generation for Frontbase: PK cache size must be ignored
 CAY-2276 PrePersist listener registered as PostPersist in LifecycleCallbackRegistry.addListener(Class<?>, LifecycleListener)
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/37faf1d3/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
----------------------------------------------------------------------
diff --git a/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java b/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
index ba8c9f6..30f8189 100644
--- a/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
+++ b/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
@@ -34,6 +34,7 @@ import org.apache.cayenne.ejbql.EJBQLExpressionVisitor;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbJoin;
 import org.apache.cayenne.map.DbRelationship;
+import org.apache.cayenne.map.Entity;
 import org.apache.cayenne.map.EntityResolver;
 import org.apache.cayenne.map.EntityResult;
 import org.apache.cayenne.map.ObjAttribute;
@@ -87,49 +88,48 @@ class Compiler {
 
         Map<EJBQLPath, Integer> pathsInSelect = new HashMap<EJBQLPath, Integer>();
 
-        if (parsed != null) {
-            for (int i = 0; i < parsed.getChildrenCount(); i++) {
-                if (parsed.getChild(i) instanceof EJBQLSelectClause) {
+        for (int i = 0; i < parsed.getChildrenCount(); i++) {
+            if (parsed.getChild(i) instanceof EJBQLSelectClause) {
 
-                    EJBQLExpression parsedTemp = parsed.getChild(i);
-                    boolean stop = false;
+                EJBQLExpression parsedTemp = parsed.getChild(i);
+                boolean stop = false;
 
-                    while (parsedTemp.getChildrenCount() > 0 && !stop) {
-                        EJBQLExpression newParsedTemp = null;
-                        for (int j = 0; j < parsedTemp.getChildrenCount(); j++) {
-                            if (parsedTemp.getChild(j) instanceof EJBQLSelectExpression) {
-                                for (int k = 0; k < parsedTemp
-                                        .getChild(j)
-                                        .getChildrenCount(); k++) {
+                while (parsedTemp.getChildrenCount() > 0 && !stop) {
+                    EJBQLExpression newParsedTemp = null;
+                    for (int j = 0; j < parsedTemp.getChildrenCount(); j++) {
+                        if (parsedTemp.getChild(j) instanceof EJBQLSelectExpression) {
+                            for (int k = 0; k < parsedTemp
+                                    .getChild(j)
+                                    .getChildrenCount(); k++) {
 
-                                    if (parsedTemp.getChild(j).getChild(k) instanceof EJBQLPath) {
-                                        pathsInSelect.put((EJBQLPath) parsedTemp
-                                                .getChild(j)
-                                                .getChild(k), j);
+                                if (parsedTemp.getChild(j).getChild(k) instanceof EJBQLPath) {
+                                    pathsInSelect.put((EJBQLPath) parsedTemp
+                                            .getChild(j)
+                                            .getChild(k), j);
 
-                                    }
                                 }
                             }
+                        }
+                        else {
+                            if (parsedTemp.getChild(j).getChildrenCount() == 0) {
+                                stop = true;
+                            }
                             else {
-                                if (parsedTemp.getChild(j).getChildrenCount() == 0) {
-                                    stop = true;
-                                }
-                                else {
-                                    newParsedTemp = parsedTemp.getChild(j);
-                                }
+                                newParsedTemp = parsedTemp.getChild(j);
                             }
                         }
+                    }
 
-                        if (!stop && newParsedTemp != null) {
-                            parsedTemp = newParsedTemp;
-                        }
-                        else {
-                            stop = true;
-                        }
+                    if (!stop && newParsedTemp != null) {
+                        parsedTemp = newParsedTemp;
+                    }
+                    else {
+                        stop = true;
                     }
                 }
             }
         }
+
         // postprocess paths, now that all id vars are resolved
         if (paths != null) {
             for (EJBQLPath path : paths) {
@@ -147,6 +147,10 @@ class Compiler {
                 for (int i = 1; i < path.getChildrenCount(); i++) {
 
                     String pathChunk = path.getChild(i).getText();
+                    if(pathChunk.endsWith(Entity.OUTER_JOIN_INDICATOR)) {
+                        pathChunk = pathChunk.substring(0, pathChunk.length() - 1);
+                    }
+
                     buffer.append('.').append(pathChunk);
 
                     Property property = descriptor.getProperty(pathChunk);
@@ -173,7 +177,7 @@ class Compiler {
                     Integer integer = pathsInSelect.get(path);
                     if (integer != null) {
                         resultComponents.remove(integer.intValue());
-                        resultComponents.add(pathsInSelect.get(path).intValue(), ident);
+                        resultComponents.add(integer, ident);
                         rootId = pathRelationshipString;
                     }
                 }
@@ -530,7 +534,7 @@ class Compiler {
         @Override
         public boolean visitPath(EJBQLExpression expression, int finishedChildIndex) {
             if (finishedChildIndex + 1 < expression.getChildrenCount()) {
-                this.id = ((EJBQLPath) expression).getId();
+                this.id = normalizeIdPath(((EJBQLPath) expression).getId());
                 this.descriptor = descriptorsById.get(id);
 
                 if (descriptor == null) {
@@ -560,7 +564,7 @@ class Compiler {
         public boolean visitIdentifier(EJBQLExpression expression) {
             if (incoming != null) {
 
-                String aliasId = expression.getText();
+                String aliasId = expression.getText().toLowerCase();
 
                 // map id variable to class descriptor
                 ClassDescriptor old = descriptorsById.put(aliasId, descriptor);

http://git-wip-us.apache.org/repos/asf/cayenne/blob/37faf1d3/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/ejbql/EJBQLCompiledExpressionTest.java
----------------------------------------------------------------------
diff --git a/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/ejbql/EJBQLCompiledExpressionTest.java b/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/ejbql/EJBQLCompiledExpressionTest.java
index 5e16edb..82f6392 100644
--- a/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/ejbql/EJBQLCompiledExpressionTest.java
+++ b/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/ejbql/EJBQLCompiledExpressionTest.java
@@ -21,6 +21,7 @@ package org.apache.cayenne.ejbql;
 import org.apache.cayenne.configuration.server.ServerRuntime;
 import org.apache.cayenne.di.Inject;
 import org.apache.cayenne.map.EntityResolver;
+import org.apache.cayenne.query.EJBQLQuery;
 import org.apache.cayenne.unit.di.server.ServerCase;
 import org.apache.cayenne.unit.di.server.UseServerRuntime;
 
@@ -108,4 +109,35 @@ public class EJBQLCompiledExpressionTest extends ServerCase {
         assertNotNull(select3.getEntityDescriptor("a"));
         assertNotNull(select3.getEntityDescriptor("A"));
     }
+
+    /**
+     * CAY-2175
+     */
+    public void testGetEntityDescriptorCaseSensitivityInJoin() {
+        EntityResolver resolver = runtime.getDataDomain().getEntityResolver();
+        EJBQLParser parser = EJBQLParserFactory.getParser();
+
+        EJBQLCompiledExpression select1 = parser.compile(
+                "SELECT artistAlias FROM Artist artistAlias " +
+                        "WHERE artistAlias.artistName = 'Abcd'",
+                resolver
+        );
+        assertNotNull(select1.getEntityDescriptor("artistalias"));
+        assertNotNull(select1.getEntityDescriptor("artistAlias"));
+        assertNotNull(select1.getEntityDescriptor("ArTiStAlIaS"));
+
+        EJBQLCompiledExpression select2 = parser.compile(
+                "SELECT artistalias from Artist AS ArtistAlias JOIN artistalias.paintingArray as PaintingAlias " +
+                        "where aRtistALiaS.artistName = 'Abcd'",
+                resolver
+        );
+        assertNotNull(select2.getEntityDescriptor("artistalias"));
+        assertNotNull(select2.getEntityDescriptor("artistAlias"));
+        assertNotNull(select2.getEntityDescriptor("ArTiStAlIaS"));
+
+        assertNotNull(select2.getEntityDescriptor("PaintingAlias"));
+        assertNotNull(select2.getEntityDescriptor("paintingalias"));
+        assertNotNull(select2.getEntityDescriptor("PaInTinGAlIaS"));
+    }
+
 }


[2/6] cayenne git commit: CAY-2137 When generating SQL from EJBQL, use "AND" to separate multiple join conditions

Posted by nt...@apache.org.
CAY-2137 When generating SQL from EJBQL, use "AND" to separate multiple join conditions


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/e2108602
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/e2108602
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/e2108602

Branch: refs/heads/STABLE-3.1
Commit: e21086027aeda9e2cba44bf8ec1a08ddb3ab0200
Parents: e1667f6
Author: Nikita Timofeev <st...@gmail.com>
Authored: Fri Nov 10 15:32:44 2017 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Fri Nov 10 15:32:44 2017 +0300

----------------------------------------------------------------------
 docs/doc/src/main/resources/RELEASE-NOTES.txt   |  1 +
 .../cayenne/access/jdbc/EJBQLJoinAppender.java  |  2 +-
 .../apache/cayenne/query/EJBQLQueryTest.java    | 28 ++++++++++++++++++++
 3 files changed, 30 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/e2108602/docs/doc/src/main/resources/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --git a/docs/doc/src/main/resources/RELEASE-NOTES.txt b/docs/doc/src/main/resources/RELEASE-NOTES.txt
index 3ee5c48..19fd5a1 100644
--- a/docs/doc/src/main/resources/RELEASE-NOTES.txt
+++ b/docs/doc/src/main/resources/RELEASE-NOTES.txt
@@ -16,6 +16,7 @@ Bug Fixes Since 3.1.1:
 
 CAY-2084 ObjectIdQuery - no cache access polymorphism
 CAY-2101 DataContext.currentSnapshot() doesn't set snapshot entity name
+CAY-2137 When generating SQL from EJBQL, use "AND" to separate multiple join conditions
 CAY-2226 PK generation for Frontbase: PK cache size must be ignored
 CAY-2276 PrePersist listener registered as PostPersist in LifecycleCallbackRegistry.addListener(Class<?>, LifecycleListener)
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e2108602/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLJoinAppender.java
----------------------------------------------------------------------
diff --git a/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLJoinAppender.java b/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLJoinAppender.java
index 0334dbb..fe47ba3 100644
--- a/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLJoinAppender.java
+++ b/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLJoinAppender.java
@@ -210,7 +210,7 @@ public class EJBQLJoinAppender {
         }
 
         while (it.hasNext()) {
-            context.append(", ");
+            context.append(" AND ");
             DbJoin dbJoin = it.next();
             context
                     .append(sourceAlias)

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e2108602/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/EJBQLQueryTest.java
----------------------------------------------------------------------
diff --git a/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/EJBQLQueryTest.java b/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/EJBQLQueryTest.java
index 072a17a..d0ca97e 100644
--- a/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/EJBQLQueryTest.java
+++ b/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/EJBQLQueryTest.java
@@ -34,6 +34,8 @@ import org.apache.cayenne.map.EntityResolver;
 import org.apache.cayenne.test.jdbc.DBHelper;
 import org.apache.cayenne.test.jdbc.TableHelper;
 import org.apache.cayenne.testdo.testmap.Artist;
+import org.apache.cayenne.testdo.testmap.CompoundFkTestEntity;
+import org.apache.cayenne.testdo.testmap.CompoundPkTestEntity;
 import org.apache.cayenne.testdo.testmap.Painting;
 import org.apache.cayenne.unit.di.DataChannelInterceptor;
 import org.apache.cayenne.unit.di.UnitTestClosure;
@@ -403,4 +405,30 @@ public class EJBQLQueryTest extends ServerCase {
                 + "a.artistName = a.artistName");
         assertTrue(context.performQuery(query).size() > 0);
     }
+
+    private void createCompoundPkDataSet() throws Exception {
+        TableHelper tCompoundPk = new TableHelper(dbHelper, "COMPOUND_PK_TEST");
+        tCompoundPk.setColumns("KEY1", "KEY2", "NAME");
+
+        TableHelper tCompoundFk = new TableHelper(dbHelper, "COMPOUND_FK_TEST");
+        tCompoundFk.setColumns("F_KEY1", "F_KEY2", "NAME", "PKEY");
+
+        tCompoundPk.insert("a", "b", "abc");
+        tCompoundPk.insert("c", "d", "cde");
+
+        tCompoundFk.insert("a", "b", "test", 1);
+        tCompoundFk.insert("c", "d", "nottest", 2);
+    }
+
+    public void testEJBQLCompoundJoin() throws Exception {
+        createCompoundPkDataSet();
+
+        EJBQLQuery query = new EJBQLQuery(
+                "select f from CompoundFkTestEntity f inner join f.toCompoundPk p where p.name like 'a%'");
+        List res = context.performQuery(query);
+        assertEquals(1, res.size());
+        assertTrue(res.get(0) instanceof CompoundFkTestEntity);
+        assertEquals("test", ((CompoundFkTestEntity)res.get(0)).getName());
+    }
+
 }


[5/6] cayenne git commit: Cleanup

Posted by nt...@apache.org.
Cleanup


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/8933c799
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/8933c799
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/8933c799

Branch: refs/heads/STABLE-3.1
Commit: 8933c799de5ba31f254e85c1d5c5f1a01dc08a8f
Parents: 9c66242
Author: Nikita Timofeev <st...@gmail.com>
Authored: Fri Nov 10 16:17:26 2017 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Fri Nov 10 16:17:26 2017 +0300

----------------------------------------------------------------------
 .../src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java  | 4 ----
 1 file changed, 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/8933c799/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
----------------------------------------------------------------------
diff --git a/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java b/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
index 7d37b80..913cad2 100644
--- a/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
+++ b/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
@@ -147,10 +147,6 @@ class Compiler {
                 for (int i = 1; i < path.getChildrenCount(); i++) {
 
                     String pathChunk = path.getChild(i).getText();
-                    if(pathChunk.endsWith(Entity.OUTER_JOIN_INDICATOR)) {
-                        pathChunk = pathChunk.substring(0, pathChunk.length() - 1);
-                    }
-
                     buffer.append('.').append(pathChunk);
 
                     Property property = descriptor.getProperty(pathChunk);


[6/6] cayenne git commit: Fix failing tests + cleanup

Posted by nt...@apache.org.
Fix failing tests + cleanup


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/93e1c8c1
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/93e1c8c1
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/93e1c8c1

Branch: refs/heads/STABLE-3.1
Commit: 93e1c8c107116da3740a8dab51ad125dbc792c71
Parents: 8933c79
Author: Nikita Timofeev <st...@gmail.com>
Authored: Fri Nov 10 19:05:39 2017 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Fri Nov 10 19:05:39 2017 +0300

----------------------------------------------------------------------
 .../access/DataContextEJBQLInheritanceTest.java |  9 +++++--
 ...ataContextObjectIdQuery_PolymorphicTest.java | 27 +++++++++++++++++++-
 .../modeler/cayennemodeler-strings.properties   |  2 +-
 rat.sh                                          |  3 ++-
 4 files changed, 36 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/93e1c8c1/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLInheritanceTest.java
----------------------------------------------------------------------
diff --git a/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLInheritanceTest.java b/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLInheritanceTest.java
index d43abb6..b709b7c 100644
--- a/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLInheritanceTest.java
+++ b/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLInheritanceTest.java
@@ -43,8 +43,6 @@ public class DataContextEJBQLInheritanceTest extends ServerCase {
 
     @Override
     protected void setUpAfterInjection() throws Exception {
-        dbHelper.deleteAll("PERSON");
-
         TableHelper person = new TableHelper(dbHelper, "PERSON");
         person.setColumns("PERSON_ID", "NAME", "PERSON_TYPE", "SALARY")
                 .setColumnTypes(
@@ -53,6 +51,13 @@ public class DataContextEJBQLInheritanceTest extends ServerCase {
                         Types.CHAR,
                         Types.FLOAT);
 
+        person.update().set("DEPARTMENT_ID", null, Types.INTEGER).execute();
+        dbHelper.deleteAll("ADDRESS");
+        dbHelper.deleteAll("DEPARTMENT");
+        dbHelper.deleteAll("PERSON_NOTES");
+        dbHelper.deleteAll("PERSON");
+        dbHelper.deleteAll("CLIENT_COMPANY");
+
         person.insert(1, "a", "EE", 20000);
         person.insert(2, "b", "EE", 25000);
         person.insert(4, "c", "EM", 30000);

http://git-wip-us.apache.org/repos/asf/cayenne/blob/93e1c8c1/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextObjectIdQuery_PolymorphicTest.java
----------------------------------------------------------------------
diff --git a/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextObjectIdQuery_PolymorphicTest.java b/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextObjectIdQuery_PolymorphicTest.java
index e656b7d..99f3cfb 100644
--- a/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextObjectIdQuery_PolymorphicTest.java
+++ b/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextObjectIdQuery_PolymorphicTest.java
@@ -1,3 +1,22 @@
+/*****************************************************************
+ *   Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ ****************************************************************/
+
 package org.apache.cayenne.access;
 
 import org.apache.cayenne.Cayenne;
@@ -36,9 +55,15 @@ public class DataContextObjectIdQuery_PolymorphicTest extends ServerCase {
 
 	@Override
     protected void setUpAfterInjection() throws Exception {
-    	dbHelper.deleteAll("PERSON");
 		tPerson = new TableHelper(dbHelper, "PERSON").setColumns("PERSON_ID", "NAME", "PERSON_TYPE")
 				.setColumnTypes(Types.INTEGER, Types.VARCHAR, Types.CHAR);
+
+		tPerson.update().set("DEPARTMENT_ID", null, Types.INTEGER).execute();
+		dbHelper.deleteAll("ADDRESS");
+		dbHelper.deleteAll("DEPARTMENT");
+		dbHelper.deleteAll("PERSON_NOTES");
+		dbHelper.deleteAll("PERSON");
+		dbHelper.deleteAll("CLIENT_COMPANY");
 	}
 
 	public void testPolymorphicSharedCache() throws SQLException {

http://git-wip-us.apache.org/repos/asf/cayenne/blob/93e1c8c1/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/cayennemodeler-strings.properties
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/cayennemodeler-strings.properties b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/cayennemodeler-strings.properties
index 3ac1d27..de6e56a 100644
--- a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/cayennemodeler-strings.properties
+++ b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/cayennemodeler-strings.properties
@@ -17,7 +17,7 @@
 
 cayenne.bugreport.url = http://issues.apache.org/jira/browse/CAY
 
-cayenne.modeler.about.info = (c) 2001-2016 Apache Software Foundation and individual authors.\
+cayenne.modeler.about.info = (c) 2001-2017 Apache Software Foundation and individual authors.\
     <br><br>http://cayenne.apache.org/<br>
 
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/93e1c8c1/rat.sh
----------------------------------------------------------------------
diff --git a/rat.sh b/rat.sh
index 648efbc..092d823 100755
--- a/rat.sh
+++ b/rat.sh
@@ -63,6 +63,7 @@ java -jar $RAT -d $DIR \
 	-e 'CLOVER.txt' \
 	-e '*.html' \
 	-e '*.css' \
-	-e 'derby.log'
+	-e 'derby.log' \
+	-e '*.iml'