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 2018/02/14 13:33:42 UTC

[3/5] cayenne git commit: CAY-2406 Add prefetch-related API to SQLSelect

CAY-2406 Add prefetch-related API to SQLSelect


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

Branch: refs/heads/master
Commit: 9183314a9e1d361e14c13cd5f208a71533b5fe8e
Parents: 90e5273
Author: Maxim Petrusevich <ma...@gmail.com>
Authored: Wed Feb 14 10:30:37 2018 +0300
Committer: Maxim Petrusevich <ma...@gmail.com>
Committed: Wed Feb 14 10:30:37 2018 +0300

----------------------------------------------------------------------
 .../java/org/apache/cayenne/query/SQLTemplate.java | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/9183314a/cayenne-server/src/main/java/org/apache/cayenne/query/SQLTemplate.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/query/SQLTemplate.java b/cayenne-server/src/main/java/org/apache/cayenne/query/SQLTemplate.java
index 5a84322..c86bb00 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/query/SQLTemplate.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/query/SQLTemplate.java
@@ -19,6 +19,7 @@
 
 package org.apache.cayenne.query;
 
+import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.access.QueryEngine;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.DbEntity;
@@ -34,7 +35,6 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.TreeSet;
 import java.util.function.Function;
 import java.util.stream.Stream;
 
@@ -502,9 +502,24 @@ public class SQLTemplate extends AbstractQuery implements ParameterizedQuery {
 	 * @since 4.0
 	 */
 	public void addPrefetch(PrefetchTreeNode prefetchElement) {
+		if (hasDisjointNode(prefetchElement)) {
+			throw new CayenneRuntimeException("This query supports only 'joint' and 'disjointById' prefetching semantics.");
+		}
 		metaData.mergePrefetch(prefetchElement);
 	}
 
+	private boolean hasDisjointNode(PrefetchTreeNode prefetchElement) {
+		if (prefetchElement.isDisjointPrefetch()) {
+			return true;
+		}
+		for (PrefetchTreeNode child : prefetchElement.getChildren()) {
+			if (hasDisjointNode(child)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
 	/**
 	 * @since 1.2
 	 */