This is an automated email from the ASF dual-hosted git repository. asf-gitbox-commits pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/cayenne.git
commit 8ba638365c6475e137a3a103a515ed1f8fb3f164 Author: Andrus Adamchik <[email protected]> AuthorDate: Sun Aug 30 13:34:02 2026 -0400 Query cleanup .. route() can be implemented at the top --- .../org/apache/cayenne/query/AbstractQuery.java | 18 ---------------- .../java/org/apache/cayenne/query/BatchQuery.java | 8 -------- .../java/org/apache/cayenne/query/EJBQLQuery.java | 12 ----------- .../org/apache/cayenne/query/FluentSelect.java | 2 +- .../main/java/org/apache/cayenne/query/Query.java | 15 +++++++++++++- .../java/org/apache/cayenne/query/SQLTemplate.java | 24 +++++++++++----------- 6 files changed, 27 insertions(+), 52 deletions(-) diff --git a/cayenne/src/main/java/org/apache/cayenne/query/AbstractQuery.java b/cayenne/src/main/java/org/apache/cayenne/query/AbstractQuery.java index 71d5401cc..f3dfa8fa5 100644 --- a/cayenne/src/main/java/org/apache/cayenne/query/AbstractQuery.java +++ b/cayenne/src/main/java/org/apache/cayenne/query/AbstractQuery.java @@ -19,7 +19,6 @@ package org.apache.cayenne.query; -import org.apache.cayenne.CayenneRuntimeException; import org.apache.cayenne.map.DataMap; import org.apache.cayenne.map.DbEntity; import org.apache.cayenne.map.EntityResolver; @@ -98,21 +97,4 @@ public abstract class AbstractQuery extends CacheableQuery { * @since 1.2 */ public abstract SQLAction createSQLAction(SQLActionVisitor visitor); - - /** - * Implements default routing mechanism relying on the EntityResolver to find DataMap - * based on the query root. This mechanism should be sufficient for most queries that - * "know" their root. - * - * @since 1.2 - */ - public void route(QueryRouter router, EntityResolver resolver, Query substitutedQuery) { - DataMap map = getMetaData(resolver).getDataMap(); - - if (map == null) { - throw new CayenneRuntimeException("No DataMap found, can't route query %s", this); - } - - router.route(router.nodeForDataMap(map), this, substitutedQuery); - } } diff --git a/cayenne/src/main/java/org/apache/cayenne/query/BatchQuery.java b/cayenne/src/main/java/org/apache/cayenne/query/BatchQuery.java index 43cff829b..a4e7cfe32 100644 --- a/cayenne/src/main/java/org/apache/cayenne/query/BatchQuery.java +++ b/cayenne/src/main/java/org/apache/cayenne/query/BatchQuery.java @@ -71,14 +71,6 @@ public abstract class BatchQuery implements Query { }; } - /** - * @since 1.2 - */ - @Override - public void route(QueryRouter router, EntityResolver resolver, Query substitutedQuery) { - router.route(router.nodeForDataMap(dbEntity.getDataMap()), this, substitutedQuery); - } - /** * Calls "batchAction" on the visitor. * diff --git a/cayenne/src/main/java/org/apache/cayenne/query/EJBQLQuery.java b/cayenne/src/main/java/org/apache/cayenne/query/EJBQLQuery.java index dd5a06dcb..f49436d7b 100644 --- a/cayenne/src/main/java/org/apache/cayenne/query/EJBQLQuery.java +++ b/cayenne/src/main/java/org/apache/cayenne/query/EJBQLQuery.java @@ -22,11 +22,9 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; -import org.apache.cayenne.CayenneRuntimeException; import org.apache.cayenne.ejbql.EJBQLCompiledExpression; import org.apache.cayenne.ejbql.EJBQLException; import org.apache.cayenne.ejbql.EJBQLParserFactory; -import org.apache.cayenne.map.DataMap; import org.apache.cayenne.map.EntityResolver; /** @@ -78,16 +76,6 @@ public class EJBQLQuery extends CacheableQuery { return metadata; } - public void route(QueryRouter router, EntityResolver resolver, Query substitutedQuery) { - DataMap map = getMetaData(resolver).getDataMap(); - - if (map == null) { - throw new CayenneRuntimeException("No DataMap found, can't route query %s", this); - } - - router.route(router.nodeForDataMap(map), this, substitutedQuery); - } - public SQLAction createSQLAction(SQLActionVisitor visitor) { return visitor.ejbqlAction(this); } diff --git a/cayenne/src/main/java/org/apache/cayenne/query/FluentSelect.java b/cayenne/src/main/java/org/apache/cayenne/query/FluentSelect.java index 093fc2731..e7cfb1512 100644 --- a/cayenne/src/main/java/org/apache/cayenne/query/FluentSelect.java +++ b/cayenne/src/main/java/org/apache/cayenne/query/FluentSelect.java @@ -493,7 +493,7 @@ public abstract class FluentSelect<T, S extends FluentSelect<T, S>> extends Abst @Override public void route(QueryRouter router, EntityResolver resolver, Query substitutedQuery) { - super.route(router, resolver, substitutedQuery); + Select.super.route(router, resolver, substitutedQuery); // suppress prefetches for paginated queries.. instead prefetches will be resolved per row... if (getPageSize() <= 0) { diff --git a/cayenne/src/main/java/org/apache/cayenne/query/Query.java b/cayenne/src/main/java/org/apache/cayenne/query/Query.java index 423f83319..aae9a33e4 100644 --- a/cayenne/src/main/java/org/apache/cayenne/query/Query.java +++ b/cayenne/src/main/java/org/apache/cayenne/query/Query.java @@ -19,7 +19,9 @@ package org.apache.cayenne.query; +import org.apache.cayenne.CayenneRuntimeException; import org.apache.cayenne.access.DataNode; +import org.apache.cayenne.map.DataMap; import org.apache.cayenne.map.EntityResolver; import java.io.Serializable; @@ -45,10 +47,21 @@ public interface Query extends Serializable { * {@link QueryRouter#route(DataNode, Query, Query)} callback method to route * itself. Query can create one or more substitute queries or even provide its own * DataNode to execute itself. + * <p> + * The default implementation relies on the EntityResolver to find the DataMap based on + * the query metadata. This mechanism is sufficient for most queries that "know" their root. * * @since 1.2 */ - void route(QueryRouter router, EntityResolver resolver, Query substitutedQuery); + default void route(QueryRouter router, EntityResolver resolver, Query substitutedQuery) { + DataMap map = getMetaData(resolver).getDataMap(); + + if (map == null) { + throw new CayenneRuntimeException("No DataMap found, can't route query %s", this); + } + + router.route(router.nodeForDataMap(map), this, substitutedQuery); + } /** * A callback method invoked by Cayenne during the final execution phase of the query diff --git a/cayenne/src/main/java/org/apache/cayenne/query/SQLTemplate.java b/cayenne/src/main/java/org/apache/cayenne/query/SQLTemplate.java index dadbeafca..157541adb 100644 --- a/cayenne/src/main/java/org/apache/cayenne/query/SQLTemplate.java +++ b/cayenne/src/main/java/org/apache/cayenne/query/SQLTemplate.java @@ -19,6 +19,14 @@ package org.apache.cayenne.query; +import org.apache.cayenne.CayenneRuntimeException; +import org.apache.cayenne.access.DataNode; +import org.apache.cayenne.map.DataMap; +import org.apache.cayenne.map.DbEntity; +import org.apache.cayenne.map.EntityResolver; +import org.apache.cayenne.map.ObjEntity; +import org.apache.cayenne.map.SQLResult; + import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -30,14 +38,6 @@ import java.util.Map; import java.util.function.Function; import java.util.stream.Stream; -import org.apache.cayenne.CayenneRuntimeException; -import org.apache.cayenne.access.DataNode; -import org.apache.cayenne.map.DataMap; -import org.apache.cayenne.map.DbEntity; -import org.apache.cayenne.map.EntityResolver; -import org.apache.cayenne.map.ObjEntity; -import org.apache.cayenne.map.SQLResult; - /** * A query that executes unchanged (except for template preprocessing) "raw" SQL * specified by the user. <h3>Template Script</h3> @@ -130,14 +130,14 @@ public class SQLTemplate extends AbstractQuery { public void route(QueryRouter router, EntityResolver resolver, Query substitutedQuery) { DataMap map = getMetaData(resolver).getDataMap(); - DataNode engine; + DataNode dataNode; if (map != null) { - engine = router.nodeForDataMap(map); + dataNode = router.nodeForDataMap(map); } else { - engine = router.nodeForName(getDataNodeName()); + dataNode = router.nodeForName(getDataNodeName()); } - router.route(engine, this, substitutedQuery); + router.route(dataNode, this, substitutedQuery); } /**
