Repository: deltaspike
Updated Branches:
  refs/heads/master 376114096 -> 5fb4ec168


DELTASPIKE-1340 Delegate to JPA 2.2 getResultStream

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

Branch: refs/heads/master
Commit: 5fb4ec168fb8c7a7d0431e5d5e62d03979d0d8a3
Parents: 3761140
Author: Thomas Andraschko <tandrasc...@apache.org>
Authored: Wed Apr 25 10:46:15 2018 +0200
Committer: Thomas Andraschko <tandrasc...@apache.org>
Committed: Wed Apr 25 10:46:15 2018 +0200

----------------------------------------------------------------------
 .../builder/result/QueryProcessorFactory.java   | 29 ++++++++++++++++++++
 1 file changed, 29 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltaspike/blob/5fb4ec16/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/builder/result/QueryProcessorFactory.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/builder/result/QueryProcessorFactory.java
 
b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/builder/result/QueryProcessorFactory.java
index 89da622..d3ce308 100644
--- 
a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/builder/result/QueryProcessorFactory.java
+++ 
b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/builder/result/QueryProcessorFactory.java
@@ -18,6 +18,7 @@
  */
 package org.apache.deltaspike.data.impl.builder.result;
 
+import java.lang.reflect.Method;
 import java.util.List;
 import java.util.Optional;
 import javax.enterprise.context.ApplicationScoped;
@@ -27,6 +28,7 @@ import javax.persistence.Query;
 import org.apache.deltaspike.core.util.ClassUtils;
 
 import org.apache.deltaspike.data.api.Modifying;
+import org.apache.deltaspike.data.api.QueryInvocationException;
 import org.apache.deltaspike.data.api.QueryResult;
 import org.apache.deltaspike.data.api.SingleResultType;
 import org.apache.deltaspike.data.impl.handler.CdiQueryInvocationContext;
@@ -85,9 +87,36 @@ public class QueryProcessorFactory
 
     private static final class StreamQueryProcessor implements QueryProcessor
     {
+        private Method getResultStreamMethod;
+        
+        public StreamQueryProcessor()
+        {
+            try
+            {
+                getResultStreamMethod = 
Query.class.getMethod("getResultStream");
+            }
+            catch (Exception e)
+            {
+                // ignore
+            }
+        }
+        
         @Override
         public Object executeQuery(Query query, CdiQueryInvocationContext 
context)
         {
+            if (getResultStreamMethod != null)
+            {
+                try
+                {
+                    // delegate to JPA 2.2, which is probably optimized and 
fetches the data lazy
+                    return getResultStreamMethod.invoke(query);
+                }
+                catch (Exception e)
+                {
+                    throw new QueryInvocationException(e, context);
+                }
+            }
+            
             return query.getResultList().stream();
         }
     }

Reply via email to