Repository: cayenne
Updated Branches:
  refs/heads/master 66e2727e8 -> 64dad5641


CAY-2359 EJBQL: db path in not supported in ORDER BY


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

Branch: refs/heads/master
Commit: 64dad5641cbd7297eb0b76071471ce707f1478ef
Parents: 66e2727
Author: Nikita Timofeev <stari...@gmail.com>
Authored: Thu Aug 31 12:53:25 2017 +0300
Committer: Nikita Timofeev <stari...@gmail.com>
Committed: Thu Aug 31 12:53:25 2017 +0300

----------------------------------------------------------------------
 .../translator/ejbql/EJBQLOrderByTranslator.java   |  8 +++++++-
 .../org/apache/cayenne/query/EJBQLQueryIT.java     | 17 +++++++++++++++--
 docs/doc/src/main/resources/RELEASE-NOTES.txt      |  1 +
 3 files changed, 23 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/64dad564/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLOrderByTranslator.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLOrderByTranslator.java
 
b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLOrderByTranslator.java
index 6b004f9..2183af4 100644
--- 
a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLOrderByTranslator.java
+++ 
b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLOrderByTranslator.java
@@ -72,6 +72,12 @@ class EJBQLOrderByTranslator extends EJBQLBaseVisitor {
 
     @Override
     public boolean visitDbPath(EJBQLExpression expression, int 
finishedChildIndex) {
-        return super.visitDbPath(expression, finishedChildIndex);
+        expression.visit(new EJBQLDbPathTranslator(context) {
+            @Override
+            protected void appendMultiColumnPath(EJBQLMultiColumnOperand 
operand) {
+                throw new EJBQLException("Can't order on multi-column paths or 
objects");
+            }
+        });
+        return false;
     }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/64dad564/cayenne-server/src/test/java/org/apache/cayenne/query/EJBQLQueryIT.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/test/java/org/apache/cayenne/query/EJBQLQueryIT.java 
b/cayenne-server/src/test/java/org/apache/cayenne/query/EJBQLQueryIT.java
index a760f3c..2c29ba5 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/query/EJBQLQueryIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/query/EJBQLQueryIT.java
@@ -665,8 +665,8 @@ public class EJBQLQueryIT extends ServerCase {
         registry.addCallback(LifecycleEvent.POST_LOAD, Painting.class, 
"postAddCallback");
 
         // select Paintings, where one of it will be null
-        EJBQLQuery queryFullProduct = new EJBQLQuery("select a.paintingArray+ 
from Artist a order by a.artistName");
-        List<Painting> result1 = context.performQuery(queryFullProduct);
+        EJBQLQuery query = new EJBQLQuery("select a.paintingArray+ from Artist 
a order by a.artistName");
+        List<Painting> result1 = context.performQuery(query);
         assertEquals(4, result1.size());
         assertNull(result1.get(3));
         for(int i=0; i<3; i++) {
@@ -674,4 +674,17 @@ public class EJBQLQueryIT extends ServerCase {
             assertTrue(result1.get(i).isPostAdded());
         }
     }
+
+    @Test
+    public void testOrderByDbPath() throws Exception {
+        tArtist.insert(1, "a3");
+        tArtist.insert(2, "a2");
+        tArtist.insert(3, "a1");
+
+        EJBQLQuery query = new EJBQLQuery("SELECT a FROM Artist a ORDER BY 
db:a.ARTIST_ID DESC");
+        List<Artist> result = context.performQuery(query);
+        assertEquals("a1", result.get(0).getArtistName());
+        assertEquals("a2", result.get(1).getArtistName());
+        assertEquals("a3", result.get(2).getArtistName());
+    }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/64dad564/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 d80050a..fa8be5a 100644
--- a/docs/doc/src/main/resources/RELEASE-NOTES.txt
+++ b/docs/doc/src/main/resources/RELEASE-NOTES.txt
@@ -39,6 +39,7 @@ CAY-2354 DbGenerator.runGenerator must commit its connection
 CAY-2356 EJBQL: Incorrect COUNT() on outer joined table
 CAY-2357 Generic select queries silently convert result to nulls if no PK 
column found
 CAY-2358 NPE when callbacks invoked on null objects
+CAY-2359 EJBQL: db path in not supported in ORDER BY
 
 ----------------------------------
 Release: 4.0.B1

Reply via email to