You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by ta...@apache.org on 2018/04/23 14:54:06 UTC

deltaspike git commit: DELTASPIKE-1280 Automatic support for count* methods in EntityRepository

Repository: deltaspike
Updated Branches:
  refs/heads/master 1a6a0013a -> aa668679e


DELTASPIKE-1280 Automatic support for count* methods in EntityRepository

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

Branch: refs/heads/master
Commit: aa668679e7105e101226e4a2d2beaafb1e86c403
Parents: 1a6a001
Author: Thomas Andraschko <ta...@apache.org>
Authored: Mon Apr 23 16:53:59 2018 +0200
Committer: Thomas Andraschko <ta...@apache.org>
Committed: Mon Apr 23 16:53:59 2018 +0200

----------------------------------------------------------------------
 .../data/impl/builder/part/QueryRoot.java          |  7 +++++++
 .../data/impl/meta/RepositoryMethodPrefix.java     | 11 +++++++++--
 .../data/impl/handler/QueryHandlerTest.java        | 17 +++++++++++++++++
 .../data/test/service/SimpleRepository.java        |  4 +++-
 4 files changed, 36 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltaspike/blob/aa668679/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 80ec18d..6d9cec5 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
@@ -107,15 +107,22 @@ public class QueryRoot extends QueryPart
         {
             ctx.append(QueryBuilder.deleteQuery(entityName));
         }
+        else if (methodPrefix.isCount())
+        {
+            ctx.append(QueryBuilder.countQuery(entityName));
+        }
         else
         {
             ctx.append(QueryBuilder.selectQuery(entityName));
         }
+        
         if (hasChildren(excludedForWhereCheck()))
         {
             ctx.append(" where ");
         }
+        
         buildQueryForChildren(ctx);
+
         return this;
     }
 

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/aa668679/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryMethodPrefix.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryMethodPrefix.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryMethodPrefix.java
index a166e08..90095cc 100644
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryMethodPrefix.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryMethodPrefix.java
@@ -29,9 +29,10 @@ public class RepositoryMethodPrefix
     public static final String DEFAULT_OPT_PREFIX = "findOptionalBy";
     public static final String DEFAULT_ANY_PREFIX = "findAnyBy";
     public static final String DEFAULT_DELETE_PREFIX = "deleteBy";
+    public static final String DEFAULT_COUNT_PREFIX = "countBy";
     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 Pattern DIGIT_PATTERN = Pattern.compile("\\d+");
@@ -104,6 +105,11 @@ public class RepositoryMethodPrefix
                 this.getPrefix().equalsIgnoreCase(DEFAULT_REMOVE_PREFIX);
     }
 
+    public boolean isCount()
+    {
+        return this.getPrefix().equalsIgnoreCase(DEFAULT_COUNT_PREFIX);
+    }
+    
     public int getDefinedMaxResults()
     {
         return definedMaxResults;
@@ -141,7 +147,8 @@ public class RepositoryMethodPrefix
         OPTIONAL(DEFAULT_OPT_PREFIX,SingleResultType.OPTIONAL),
         ANY(DEFAULT_ANY_PREFIX, SingleResultType.ANY),
         DELETE_DEFAULT(DEFAULT_DELETE_PREFIX, SingleResultType.ANY),
-        REMOVE_DEFAULT(DEFAULT_REMOVE_PREFIX, SingleResultType.ANY);
+        REMOVE_DEFAULT(DEFAULT_REMOVE_PREFIX, SingleResultType.ANY),
+        COUNT_DEFAULT(DEFAULT_COUNT_PREFIX, SingleResultType.ANY);
 
         private final String prefix;
         private final SingleResultType singleResultType;

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/aa668679/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 75f8543..1d34ec0 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
@@ -515,6 +515,23 @@ public class QueryHandlerTest extends TransactionalTestCase
         assertEquals("willow", result.get(2).getName());
         assertEquals("zebra", result.get(3).getName());
     }
+    
+    @Test
+    public void should_count_by_name()
+    {
+        builder.createSimple("zebra");
+        builder.createSimple("zebra");
+        builder.createSimple("willow");
+        builder.createSimple("kangaroo");
+        builder.createSimple("kangaroo");
+        builder.createSimple("kangaroo");
+        builder.createSimple("bologna");
+
+        assertEquals(repo.countByName("bologna"), 1);
+        assertEquals(repo.countByName("kangaroo"), 3);
+        assertEquals(repo.countByName("willow"), 1);
+        assertEquals(repo.countByName("zebra"), 2);
+    }
 
     @Before
     public void setup()

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/aa668679/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 977736d..ac8302a 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
@@ -92,7 +92,9 @@ public abstract class SimpleRepository extends AbstractEntityRepository<Simple,
     public abstract List<Simple> findFirst3OrderByName();
 
     public abstract List<Simple> findAllOrderByName();
-
+    
+    public abstract long countByName(String name);
+    
     public abstract List<Simple> findByOrderByCounterAscIdDesc();
 
     @Query(value = "SELECT * from SIMPLE_TABLE s WHERE s.name = ?1", isNative = true)