You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by jo...@apache.org on 2016/05/23 02:10:10 UTC

deltaspike git commit: DELTASPIKE-1153 Added support for ordering without a where clause.

Repository: deltaspike
Updated Branches:
  refs/heads/master f632269f1 -> 7c83662d0


DELTASPIKE-1153 Added support for ordering without a where clause.


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

Branch: refs/heads/master
Commit: 7c83662d0e981d214ffefe73ae0748540299e6ba
Parents: f632269
Author: John D. Ament <jo...@apache.org>
Authored: Sun May 22 22:10:13 2016 -0400
Committer: John D. Ament <jo...@apache.org>
Committed: Sun May 22 22:10:13 2016 -0400

----------------------------------------------------------------------
 .../data/impl/builder/part/QueryRoot.java       |  4 ++-
 .../deltaspike/data/impl/meta/MethodPrefix.java | 24 ++++++++++-----
 .../data/impl/handler/QueryHandlerTest.java     | 32 +++++++++++++++++++-
 .../data/impl/meta/MethodPrefixTest.java        | 31 +++++++++++++++++++
 .../data/test/service/SimpleRepository.java     |  4 +++
 documentation/src/main/asciidoc/data.adoc       | 19 ++++++++++++
 6 files changed, 104 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltaspike/blob/7c83662d/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/builder/part/QueryRoot.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/builder/part/QueryRoot.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/builder/part/QueryRoot.java
index 1d484c8..767efa1 100644
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/builder/part/QueryRoot.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/builder/part/QueryRoot.java
@@ -138,7 +138,9 @@ public class QueryRoot extends QueryPart
 
     private boolean hasQueryConditions(String[] orderByParts)
     {
-        return !methodPrefix.getPrefix().equals(orderByParts[0]);
+        String orderByPart = orderByParts[0];
+        String prefix = methodPrefix.getPrefix();
+        return !prefix.equals(orderByPart) && !orderByPart.matches(prefix);
     }
 
     private String removePrefix(String queryPart)

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/7c83662d/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/MethodPrefix.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/MethodPrefix.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/MethodPrefix.java
index 37f73b5..b93e45c 100644
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/MethodPrefix.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/MethodPrefix.java
@@ -30,9 +30,10 @@ public class MethodPrefix
     public static final String DEFAULT_ANY_PREFIX = "findAnyBy";
     public static final String DEFAULT_DELETE_PREFIX = "deleteBy";
     public static final String DEFAULT_REMOVE_PREFIX = "removeBy";
+    private static final String FIND_ALL_PREFIX = "findAll";
 
-    private static final String FIND_FIRST_PREFIX = "find(First|Top)(\\d+)By";
-    private static final String FIND_FIRST_PREFIX_PATTERN = FIND_FIRST_PREFIX + "(.+)";
+    private static final String FIND_FIRST_PREFIX = "find(First|Top)(\\d+)(By)*";
+    private static final String FIND_FIRST_PREFIX_PATTERN = FIND_FIRST_PREFIX + "(.*)";
     private static final Pattern DIGIT_PATTERN = Pattern.compile("\\d+");
 
     private final String customPrefix;
@@ -103,7 +104,7 @@ public class MethodPrefix
                 this.getPrefix().equalsIgnoreCase(DEFAULT_REMOVE_PREFIX);
     }
 
-    public int getDefinedMaxResults()
+    int getDefinedMaxResults()
     {
         return definedMaxResults;
     }
@@ -123,9 +124,15 @@ public class MethodPrefix
     private enum KnownQueryPrefix
     {
         DEFAULT(DEFAULT_PREFIX, SingleResultType.JPA),
+        ALL(FIND_ALL_PREFIX, SingleResultType.JPA),
         FIND_FIRST(FIND_FIRST_PREFIX, SingleResultType.JPA)
         {
             @Override
+            public boolean matches(String name)
+            {
+                return name.matches(FIND_FIRST_PREFIX_PATTERN);
+            }
+            @Override
             public String removePrefix(String queryPart)
             {
                 return queryPart.replaceFirst(FIND_FIRST_PREFIX,"");
@@ -160,15 +167,16 @@ public class MethodPrefix
             return this.singleResultType;
         }
 
+        public boolean matches(String name)
+        {
+            return name.startsWith(getPrefix());
+        }
+
         public static KnownQueryPrefix fromMethodName(String name)
         {
-            if (name.matches(FIND_FIRST_PREFIX_PATTERN))
-            {
-                return FIND_FIRST;
-            }
             for (KnownQueryPrefix mapping : values())
             {
-                if (name.startsWith(mapping.getPrefix()))
+                if (mapping.matches(name))
                 {
                     return mapping;
                 }

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/7c83662d/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/handler/QueryHandlerTest.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/handler/QueryHandlerTest.java b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/handler/QueryHandlerTest.java
index f7b8ccd..75f8543 100644
--- a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/handler/QueryHandlerTest.java
+++ b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/handler/QueryHandlerTest.java
@@ -61,7 +61,6 @@ public class QueryHandlerTest extends TransactionalTestCase
     @Inject
     private Simple2Repository repo2;
 
-
     private SimpleBuilder builder;
 
     @Test
@@ -486,6 +485,37 @@ public class QueryHandlerTest extends TransactionalTestCase
         assertEquals(2, result.size());
     }
 
+    @Test
+    public void should_find_top_3_ordered()
+    {
+        builder.createSimple("zebra");
+        builder.createSimple("willow");
+        builder.createSimple("kangaroo");
+        builder.createSimple("bologna");
+
+        List<Simple> result = repo.findFirst3OrderByName();
+
+        assertEquals("bologna", result.get(0).getName());
+        assertEquals("kangaroo", result.get(1).getName());
+        assertEquals("willow", result.get(2).getName());
+    }
+
+    @Test
+    public void should_find_all_ordered()
+    {
+        builder.createSimple("zebra");
+        builder.createSimple("willow");
+        builder.createSimple("kangaroo");
+        builder.createSimple("bologna");
+
+        List<Simple> result = repo.findAllOrderByName();
+
+        assertEquals("bologna", result.get(0).getName());
+        assertEquals("kangaroo", result.get(1).getName());
+        assertEquals("willow", result.get(2).getName());
+        assertEquals("zebra", result.get(3).getName());
+    }
+
     @Before
     public void setup()
     {

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/7c83662d/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/meta/MethodPrefixTest.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/meta/MethodPrefixTest.java b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/meta/MethodPrefixTest.java
index 04e1aa1..bcfa0a2 100644
--- a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/meta/MethodPrefixTest.java
+++ b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/meta/MethodPrefixTest.java
@@ -63,4 +63,35 @@ public class MethodPrefixTest
 
         assertEquals(0, maxResults);
     }
+
+    @Test
+    public void shouldParseOrderByEmailDesc()
+    {
+        MethodPrefix methodPrefix = new MethodPrefix("","findFirst3OrderByEmailDesc");
+
+        String resultingQuery = methodPrefix.removePrefix("findFirst3OrderByEmailDesc");
+
+        assertEquals("OrderByEmailDesc", resultingQuery);
+    }
+
+    @Test
+    public void shouldParseOrderByEmail()
+    {
+        MethodPrefix methodPrefix = new MethodPrefix("","findFirst3OrderByEmail");
+
+        String resultingQuery = methodPrefix.removePrefix("findFirst3OrderByEmail");
+
+        assertEquals("OrderByEmail", resultingQuery);
+    }
+
+    @Test
+    public void shouldParseFindAllOrderByName()
+    {
+        MethodPrefix methodPrefix = new MethodPrefix("","findAllOrderByName");
+
+        String resultingQuery = methodPrefix.removePrefix("findAllOrderByName");
+
+        assertEquals("OrderByName", resultingQuery);
+    }
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/7c83662d/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/SimpleRepository.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/SimpleRepository.java b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/SimpleRepository.java
index 62dcb24..977736d 100755
--- a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/SimpleRepository.java
+++ b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/SimpleRepository.java
@@ -89,6 +89,10 @@ public abstract class SimpleRepository extends AbstractEntityRepository<Simple,
 
     public abstract List<Simple> findTop2ByName(String name);
 
+    public abstract List<Simple> findFirst3OrderByName();
+
+    public abstract List<Simple> findAllOrderByName();
+
     public abstract List<Simple> findByOrderByCounterAscIdDesc();
 
     @Query(value = "SELECT * from SIMPLE_TABLE s WHERE s.name = ?1", isNative = true)

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/7c83662d/documentation/src/main/asciidoc/data.adoc
----------------------------------------------------------------------
diff --git a/documentation/src/main/asciidoc/data.adoc b/documentation/src/main/asciidoc/data.adoc
index 904a468..e8ea354 100644
--- a/documentation/src/main/asciidoc/data.adoc
+++ b/documentation/src/main/asciidoc/data.adoc
@@ -540,6 +540,25 @@ public interface PersonRepository extends EntityRepository<Person, Long>
 }
 ------------------------------------------------------------------------------
 
+Query Limits can be applied even when there is no where clause defined by your
+query.
+
+[source,java]
+------------------------------------------------------------------------------
+@Repository
+public interface PersonRepository extends EntityRepository<Person, Long>
+{
+
+    List<Person> findAllOrderByAgeAsc();
+
+    List<Person> findTop20OrderByLastNameDesc();
+
+}
+------------------------------------------------------------------------------
+
+The first query finding all entries ordered by age, and the second only 20
+ordered by last name.
+
 === Nested Properties
 
 To create a comparison on a nested property, the traversal parts can be