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 bc1b18ebe6f083de681cd360e478b897864df6df
Author: Andrus Adamchik <[email protected]>
AuthorDate: Sat May 30 18:56:31 2026 -0400

    CAY-2955 Get rid of QueryEngine abstraction
---
 RELEASE-NOTES.txt                                  |   1 +
 UPGRADE.md                                         |   4 +
 .../java/org/apache/cayenne/access/DataDomain.java |  10 +-
 .../access/DataDomainLegacyQueryAction.java        |  29 +++---
 .../cayenne/access/DataDomainQueryAction.java      |  22 ++---
 .../java/org/apache/cayenne/access/DataNode.java   |   4 +-
 .../org/apache/cayenne/access/ObjectStore.java     |   2 +-
 .../org/apache/cayenne/access/OperationHints.java  |   2 +-
 .../apache/cayenne/access/OperationObserver.java   |   2 +-
 .../org/apache/cayenne/access/QueryEngine.java     |  45 ---------
 .../org/apache/cayenne/query/AbstractQuery.java    |   2 +-
 .../java/org/apache/cayenne/query/BatchQuery.java  |   2 +-
 .../java/org/apache/cayenne/query/EJBQLQuery.java  |   2 +-
 .../main/java/org/apache/cayenne/query/Query.java  |   6 +-
 .../org/apache/cayenne/query/QueryMetadata.java    |   2 +-
 .../java/org/apache/cayenne/query/QueryRouter.java |  54 +++++++----
 .../java/org/apache/cayenne/query/SQLTemplate.java |   8 +-
 .../org/apache/cayenne/access/MockQueryEngine.java | 108 ---------------------
 .../org/apache/cayenne/query/MockQueryRouter.java  |  15 ++-
 19 files changed, 90 insertions(+), 230 deletions(-)

diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index c0714ef48..5462d7e07 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -47,6 +47,7 @@ CAY-2946 Claude Code "plugin" for agentic coding with Cayenne
 CAY-2947 Merge "cayenne-commitlog" into the core
 CAY-2948 Modeler: use native FileDialog on Mac
 CAY-2953 Upgrade Gradle to 9.4.0
+CAY-2955 Get rid of QueryEngine abstraction
 
 Bug Fixes:
 
diff --git a/UPGRADE.md b/UPGRADE.md
index 9494f770c..7554218f5 100644
--- a/UPGRADE.md
+++ b/UPGRADE.md
@@ -105,6 +105,10 @@ Expression caseWhenExp = caseWhen(
   open CayenneModeler.app --args path/to/cayenne-project.xml
   ```
 
+* Per [CAY-2955](https://issues.apache.org/jira/browse/CAY-2955) the obsolete 
`QueryEngine` abstraction (`org.apache.cayenne.access.QueryEngine`) has been 
removed.
+  `DataNode` is now used directly wherever `QueryEngine` was previously 
referenced. So you must subclass `DataNode` 
+  and override `performQueries()` if you previously implemented a custom 
`QueryEngine`.
+
 ## Upgrading to 5.0.M1
 
 * Per [CAY-2737](https://issues.apache.org/jira/browse/CAY-2737) All code 
deprecated in Cayenne 4.1 and 4.2 was deleted — please review your code before
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/DataDomain.java 
b/cayenne/src/main/java/org/apache/cayenne/access/DataDomain.java
index 440d626c9..4fe3fc292 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/DataDomain.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/DataDomain.java
@@ -62,7 +62,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
  * user. When a child DataContext sends a query to the DataDomain, it is
  * transparently routed to an appropriate DataNode.
  */
-public class DataDomain implements QueryEngine, DataChannel {
+public class DataDomain implements DataChannel {
 
     public static final String SHARED_CACHE_ENABLED_PROPERTY = 
"cayenne.DataDomain.sharedCache";
     public static final boolean SHARED_CACHE_ENABLED_DEFAULT = true;
@@ -529,9 +529,11 @@ public class DataDomain implements QueryEngine, 
DataChannel {
     }
 
     /**
-     * Routes queries to appropriate DataNodes for execution.
+     * Routes queries to appropriate DataNodes for execution
+     *
+     * @deprecated use {@link #onQuery(ObjectContext, Query)} instead.
      */
-    @Override
+    @Deprecated(since = "5.0", forRemoval = true)
     public void performQueries(Collection<? extends Query> queries, 
OperationObserver callback) {
         transactionManager.performInTransaction(() -> {
             new DataDomainLegacyQueryAction(DataDomain.this, new 
QueryChain(queries), callback).execute();
@@ -539,8 +541,6 @@ public class DataDomain implements QueryEngine, DataChannel 
{
         });
     }
 
-    // ****** DataChannel methods:
-
     /**
      * Runs query returning generic QueryResponse.
      *
diff --git 
a/cayenne/src/main/java/org/apache/cayenne/access/DataDomainLegacyQueryAction.java
 
b/cayenne/src/main/java/org/apache/cayenne/access/DataDomainLegacyQueryAction.java
index acefda9e7..f8cd0d290 100644
--- 
a/cayenne/src/main/java/org/apache/cayenne/access/DataDomainLegacyQueryAction.java
+++ 
b/cayenne/src/main/java/org/apache/cayenne/access/DataDomainLegacyQueryAction.java
@@ -33,12 +33,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-/**
- * DataDomain query action that relies on externally provided 
OperationObserver to process
- * the results.
- * 
- * @since 1.2
- */
+@Deprecated
 class DataDomainLegacyQueryAction implements QueryRouter, OperationObserver {
 
     DataDomain domain;
@@ -46,7 +41,7 @@ class DataDomainLegacyQueryAction implements QueryRouter, 
OperationObserver {
     Query query;
     QueryMetadata metadata;
 
-    Map<QueryEngine, List<Query>> queriesByNode;
+    Map<DataNode, List<Query>> queriesByNode;
     Map<Query, Query> queriesByExecutedQueries;
 
     DataDomainLegacyQueryAction(DataDomain domain, Query query, 
OperationObserver callback) {
@@ -70,9 +65,9 @@ class DataDomainLegacyQueryAction implements QueryRouter, 
OperationObserver {
 
         // run categorized queries
         if (queriesByNode != null) {
-            for (final Map.Entry<QueryEngine, List<Query>> entry : 
queriesByNode
+            for (final Map.Entry<DataNode, List<Query>> entry : queriesByNode
                     .entrySet()) {
-                QueryEngine nextNode = entry.getKey();
+                DataNode nextNode = entry.getKey();
                 Collection<Query> nodeQueries = entry.getValue();
                 nextNode.performQueries(nodeQueries, this);
             }
@@ -80,19 +75,19 @@ class DataDomainLegacyQueryAction implements QueryRouter, 
OperationObserver {
     }
 
     @Override
-    public void route(QueryEngine engine, Query query, Query substitutedQuery) 
{
+    public void route(DataNode node, Query query, Query substitutedQuery) {
 
         List<Query> queries = null;
         if (queriesByNode == null) {
             queriesByNode = new HashMap<>();
         }
         else {
-            queries = queriesByNode.get(engine);
+            queries = queriesByNode.get(node);
         }
 
         if (queries == null) {
             queries = new ArrayList<>(5);
-            queriesByNode.put(engine, queries);
+            queriesByNode.put(node, queries);
         }
 
         queries.add(query);
@@ -110,12 +105,12 @@ class DataDomainLegacyQueryAction implements QueryRouter, 
OperationObserver {
     }
 
     @Override
-    public QueryEngine engineForDataMap(DataMap map) {
+    public DataNode nodeForDataMap(DataMap map) {
         if (map == null) {
             throw new NullPointerException("Null DataMap, can't determine 
DataNode.");
         }
 
-        QueryEngine node = domain.lookupDataNode(map);
+        DataNode node = domain.lookupDataNode(map);
 
         if (node == null) {
             throw new CayenneRuntimeException("No DataNode exists for DataMap 
%s", map);
@@ -125,12 +120,12 @@ class DataDomainLegacyQueryAction implements QueryRouter, 
OperationObserver {
     }
     
     /**
-     * @since 4.0
+     * @since 5.0
      */
     @Override
-    public QueryEngine engineForName(String name) {
+    public DataNode nodeForName(String name) {
 
-        QueryEngine node;
+        DataNode node;
 
         if (name != null) {
             node = domain.getDataNode(name);
diff --git 
a/cayenne/src/main/java/org/apache/cayenne/access/DataDomainQueryAction.java 
b/cayenne/src/main/java/org/apache/cayenne/access/DataDomainQueryAction.java
index 0978c1a73..6858c3f63 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/DataDomainQueryAction.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/DataDomainQueryAction.java
@@ -96,7 +96,7 @@ class DataDomainQueryAction implements QueryRouter, 
OperationObserver {
     private QueryResponse response;
     private GenericResponse fullResponse;
     private Map<CayennePath, List<?>> prefetchResultsByPath;
-    private Map<QueryEngine, Collection<Query>> queriesByNode;
+    private Map<DataNode, Collection<Query>> queriesByNode;
     private boolean noObjectConversion;
     // True when using a caching strategy (shared or local cache), indicating 
lists are immutable and need copying
     private boolean cachedResult;
@@ -518,8 +518,8 @@ class DataDomainQueryAction implements QueryRouter, 
OperationObserver {
 
         // run categorized queries
         if (queriesByNode != null) {
-            for (Map.Entry<QueryEngine, Collection<Query>> entry : 
queriesByNode.entrySet()) {
-                QueryEngine nextNode = entry.getKey();
+            for (Map.Entry<DataNode, Collection<Query>> entry : 
queriesByNode.entrySet()) {
+                DataNode nextNode = entry.getKey();
                 Collection<Query> nodeQueries = entry.getValue();
                 nextNode.performQueries(nodeQueries, this);
             }
@@ -600,29 +600,29 @@ class DataDomainQueryAction implements QueryRouter, 
OperationObserver {
     }
 
     @Override
-    public void route(QueryEngine engine, Query query, Query substitutedQuery) 
{
+    public void route(DataNode node, Query query, Query substitutedQuery) {
         Collection<Query> queries = null;
         if (queriesByNode == null) {
             queriesByNode = new HashMap<>();
         } else {
-            queries = queriesByNode.get(engine);
+            queries = queriesByNode.get(node);
         }
 
         if (queries == null) {
             queries = new ArrayList<>(5);
-            queriesByNode.put(engine, queries);
+            queriesByNode.put(node, queries);
         }
 
         queries.add(query);
     }
 
     @Override
-    public QueryEngine engineForDataMap(DataMap map) {
+    public DataNode nodeForDataMap(DataMap map) {
         if (map == null) {
             throw new NullPointerException("Null DataMap, can't determine 
DataNode.");
         }
 
-        QueryEngine node = domain.lookupDataNode(map);
+        DataNode node = domain.lookupDataNode(map);
 
         if (node == null) {
             throw new CayenneRuntimeException("No DataNode exists for DataMap 
%s", map);
@@ -632,12 +632,12 @@ class DataDomainQueryAction implements QueryRouter, 
OperationObserver {
     }
 
     /**
-     * @since 4.0
+     * @since 5.0
      */
     @Override
-    public QueryEngine engineForName(String name) {
+    public DataNode nodeForName(String name) {
 
-        QueryEngine node;
+        DataNode node;
 
         if (name != null) {
             node = domain.getDataNode(name);
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/DataNode.java 
b/cayenne/src/main/java/org/apache/cayenne/access/DataNode.java
index fbffa6f23..c00633270 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/DataNode.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/DataNode.java
@@ -60,7 +60,7 @@ import java.util.logging.Logger;
  * server, but can potentially be some other storage type like an LDAP server,
  * etc.
  */
-public class DataNode implements QueryEngine {
+public class DataNode {
 
        protected String name;
        protected DataSource dataSource;
@@ -228,7 +228,6 @@ public class DataNode implements QueryEngine {
         *
         * @since 1.1
         */
-       @Override
        public void performQueries(Collection<? extends Query> queries, 
OperationObserver callback) {
 
                int listSize = queries.size();
@@ -297,7 +296,6 @@ public class DataNode implements QueryEngine {
        /**
         * Returns EntityResolver that handles DataMaps of this node.
         */
-       @Override
        public EntityResolver getEntityResolver() {
                return entityResolver;
        }
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/ObjectStore.java 
b/cayenne/src/main/java/org/apache/cayenne/access/ObjectStore.java
index e181f9ec7..955036dc8 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/ObjectStore.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/ObjectStore.java
@@ -460,7 +460,7 @@ public class ObjectStore implements Serializable, 
SnapshotEventListener, GraphMa
 
     /**
      * Returns a snapshot for ObjectId from the underlying snapshot cache. If 
cache
-     * contains no snapshot, it will attempt fetching it using provided 
QueryEngine. If
+     * contains no snapshot, it will attempt fetching it using provided 
DataNode. If
      * fetch attempt fails or inconsistent data is returned, underlying cache 
will throw a
      * CayenneRuntimeException.
      * 
diff --git 
a/cayenne/src/main/java/org/apache/cayenne/access/OperationHints.java 
b/cayenne/src/main/java/org/apache/cayenne/access/OperationHints.java
index 8d8003a6e..e2f0d3b6c 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/OperationHints.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/OperationHints.java
@@ -20,7 +20,7 @@
 package org.apache.cayenne.access;
 
 /**
- * Defines API that allows QueryEngine to obtain information about query 
execution strategy.
+ * Defines API that allows a DataNode to obtain information about query 
execution strategy.
  * 
  */
 public interface OperationHints {
diff --git 
a/cayenne/src/main/java/org/apache/cayenne/access/OperationObserver.java 
b/cayenne/src/main/java/org/apache/cayenne/access/OperationObserver.java
index 036f3aaa8..dfd70cac6 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/OperationObserver.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/OperationObserver.java
@@ -26,7 +26,7 @@ import org.apache.cayenne.query.Query;
 import java.util.List;
 
 /**
- * Defines a set of callback methods that allow {@link QueryEngine} to pass 
back query
+ * Defines a set of callback methods that allow {@link DataNode} to pass back 
query
  * results and notify caller about exceptions.
  */
 public interface OperationObserver extends OperationHints {
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/QueryEngine.java 
b/cayenne/src/main/java/org/apache/cayenne/access/QueryEngine.java
deleted file mode 100644
index dbc9deaab..000000000
--- a/cayenne/src/main/java/org/apache/cayenne/access/QueryEngine.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    https://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-
-package org.apache.cayenne.access;
-
-import org.apache.cayenne.map.EntityResolver;
-import org.apache.cayenne.query.Query;
-
-import java.util.Collection;
-
-/**
- * Defines methods used to run Cayenne queries.
- */
-public interface QueryEngine {
-
-    /**
-     * Executes a list of queries wrapping them in its own transaction. 
Results of
-     * execution are passed to {@link OperationObserver}object via its 
callback methods.
-     *
-     * @since 1.1
-     */
-    void performQueries(Collection<? extends Query> queries, OperationObserver 
resultConsumer);
-
-    /**
-     * Returns a resolver for this query engine that is capable of resolving 
between
-     * classes, entity names, and obj/db entities
-     */
-    EntityResolver getEntityResolver();
-}
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 feee8496d..71d5401cc 100644
--- a/cayenne/src/main/java/org/apache/cayenne/query/AbstractQuery.java
+++ b/cayenne/src/main/java/org/apache/cayenne/query/AbstractQuery.java
@@ -113,6 +113,6 @@ public abstract class AbstractQuery extends CacheableQuery {
             throw new CayenneRuntimeException("No DataMap found, can't route 
query %s", this);
         }
 
-        router.route(router.engineForDataMap(map), this, substitutedQuery);
+        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 874311e92..b7c96ba4f 100644
--- a/cayenne/src/main/java/org/apache/cayenne/query/BatchQuery.java
+++ b/cayenne/src/main/java/org/apache/cayenne/query/BatchQuery.java
@@ -84,7 +84,7 @@ public abstract class BatchQuery implements Query {
      */
     @Override
     public void route(QueryRouter router, EntityResolver resolver, Query 
substitutedQuery) {
-        router.route(router.engineForDataMap(dbEntity.getDataMap()), this, 
substitutedQuery);
+        router.route(router.nodeForDataMap(dbEntity.getDataMap()), this, 
substitutedQuery);
     }
 
     /**
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 5bf95064f..dd5a06dcb 100644
--- a/cayenne/src/main/java/org/apache/cayenne/query/EJBQLQuery.java
+++ b/cayenne/src/main/java/org/apache/cayenne/query/EJBQLQuery.java
@@ -85,7 +85,7 @@ public class EJBQLQuery extends CacheableQuery {
             throw new CayenneRuntimeException("No DataMap found, can't route 
query %s", this);
         }
 
-        router.route(router.engineForDataMap(map), this, substitutedQuery);
+        router.route(router.nodeForDataMap(map), this, substitutedQuery);
     }
 
     public SQLAction createSQLAction(SQLActionVisitor visitor) {
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 5a60aa21f..423f83319 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,7 @@
 
 package org.apache.cayenne.query;
 
-import org.apache.cayenne.access.QueryEngine;
+import org.apache.cayenne.access.DataNode;
 import org.apache.cayenne.map.EntityResolver;
 
 import java.io.Serializable;
@@ -42,9 +42,9 @@ public interface Query extends Serializable {
     /**
      * A callback method invoked by Cayenne during the routing phase of the 
query
      * execution. Mapping of DataNodes is provided by QueryRouter. Query 
should use a
-     * {@link QueryRouter#route(QueryEngine, Query, Query)} callback method to 
route
+     * {@link QueryRouter#route(DataNode, Query, Query)} callback method to 
route
      * itself. Query can create one or more substitute queries or even provide 
its own
-     * QueryEngine to execute itself.
+     * DataNode to execute itself.
      * 
      * @since 1.2
      */
diff --git a/cayenne/src/main/java/org/apache/cayenne/query/QueryMetadata.java 
b/cayenne/src/main/java/org/apache/cayenne/query/QueryMetadata.java
index 49dae73a5..412a104ac 100644
--- a/cayenne/src/main/java/org/apache/cayenne/query/QueryMetadata.java
+++ b/cayenne/src/main/java/org/apache/cayenne/query/QueryMetadata.java
@@ -156,7 +156,7 @@ public interface QueryMetadata {
     /**
      * Returns <code>true</code> if this query should produce a list of data 
rows as
      * opposed to Persistent objects, <code>false</code> for Persistent 
objects. This is a hint to
-     * QueryEngine executing this query.
+     * the DataNode executing this query.
      */
     boolean isFetchingDataRows();
 
diff --git a/cayenne/src/main/java/org/apache/cayenne/query/QueryRouter.java 
b/cayenne/src/main/java/org/apache/cayenne/query/QueryRouter.java
index 73a3da9ac..80390a57d 100644
--- a/cayenne/src/main/java/org/apache/cayenne/query/QueryRouter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/query/QueryRouter.java
@@ -19,43 +19,59 @@
 
 package org.apache.cayenne.query;
 
-import org.apache.cayenne.access.QueryEngine;
+import org.apache.cayenne.access.DataNode;
 import org.apache.cayenne.map.DataMap;
 
 /**
- * An interface used by Queries to route themselves to an appropriate 
QueryEngine. As of
+ * An interface used by Queries to route themselves to an appropriate 
DataNode. As of
  * 1.2 QueryRouter only supports routing by DataMap.
- * 
+ *
  * @since 1.2
  */
 public interface QueryRouter {
 
     /**
-     * A callback method that allows a query to set its preferred engine 
during the
+     * A callback method that allows a query to set its preferred node during 
the
      * routing phase. It allows query to further customize its routing, e.g. 
it is
      * possible to implement query chains that pass multiple queries for 
execution.
-     * 
-     * @param engine engine to use for query execution
-     * @param query A query to execute.
+     *
+     * @param node             node to use for query execution
+     * @param query            A query to execute.
      * @param substitutedQuery a query that was substituted for "query". 
Results must be
-     *            mapped back to substituted query.
+     *                         mapped back to substituted query.
      */
-    void route(QueryEngine engine, Query query, Query substitutedQuery);
-    
+    void route(DataNode node, Query query, Query substitutedQuery);
+
     /**
-     * Returns a QueryEngine for a given name. If the name is null, a default
-     * QueryEngine is returned. If there's no default engine, an exception is
+     * Returns a DataNode for a given name. If the name is null, a default
+     * DataNode is returned. If there's no default node, an exception is
      * thrown.
-     * 
+     *
+     * @since 5.0
+     */
+    DataNode nodeForName(String name);
+
+    /**
+     * Returns a DataNode that is configured to handle a given DataMap.
+     *
+     * @since 5.0
+     */
+    DataNode nodeForDataMap(DataMap map);
+
+    /**
      * @since 4.0
+     * @deprecated renamed to {@link #nodeForName(String)}.
      */
-    QueryEngine engineForName(String name);
+    @Deprecated(since = "5.0", forRemoval = true)
+    default DataNode engineForName(String name) {
+        return nodeForName(name);
+    }
 
     /**
-     * Returns a QueryEngine that is configured to handle a given DataMap.
-     * 
-     * @throws org.apache.cayenne.CayenneRuntimeException if an engine can't 
be found.
-     * @throws NullPointerException if a map parameter is null.
+     * @deprecated renamed to {@link #nodeForDataMap(DataMap)}.
      */
-    QueryEngine engineForDataMap(DataMap map);
+    @Deprecated(since = "5.0", forRemoval = true)
+    default DataNode engineForDataMap(DataMap map) {
+        return nodeForDataMap(map);
+    }
 }
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 19b1968dd..eeff19214 100644
--- a/cayenne/src/main/java/org/apache/cayenne/query/SQLTemplate.java
+++ b/cayenne/src/main/java/org/apache/cayenne/query/SQLTemplate.java
@@ -31,7 +31,7 @@ import java.util.function.Function;
 import java.util.stream.Stream;
 
 import org.apache.cayenne.CayenneRuntimeException;
-import org.apache.cayenne.access.QueryEngine;
+import org.apache.cayenne.access.DataNode;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.EntityResolver;
@@ -130,11 +130,11 @@ public class SQLTemplate extends AbstractQuery implements 
ParameterizedQuery {
        public void route(QueryRouter router, EntityResolver resolver, Query 
substitutedQuery) {
                DataMap map = getMetaData(resolver).getDataMap();
 
-               QueryEngine engine;
+               DataNode engine;
                if (map != null) {
-                       engine = router.engineForDataMap(map);
+                       engine = router.nodeForDataMap(map);
                } else {
-                       engine = router.engineForName(getDataNodeName());
+                       engine = router.nodeForName(getDataNodeName());
                }
 
                router.route(engine, this, substitutedQuery);
diff --git 
a/cayenne/src/test/java/org/apache/cayenne/access/MockQueryEngine.java 
b/cayenne/src/test/java/org/apache/cayenne/access/MockQueryEngine.java
deleted file mode 100644
index 478c789ac..000000000
--- a/cayenne/src/test/java/org/apache/cayenne/access/MockQueryEngine.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    https://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-
-package org.apache.cayenne.access;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.map.EntityResolver;
-import org.apache.cayenne.query.Query;
-import org.apache.cayenne.tx.BaseTransaction;
-
-/**
- * A query engine used for unit testing. Returns canned results instead of 
doing the
- * actual query.
- * 
- */
-public class MockQueryEngine implements QueryEngine {
-
-    // mockup the actual results
-    protected Map results = new HashMap();
-    protected EntityResolver entityResolver;
-    protected int runCount;
-
-    public MockQueryEngine() {
-    }
-
-    public MockQueryEngine(QueryEngine engine) {
-        this(engine.getEntityResolver());
-    }
-
-    public MockQueryEngine(EntityResolver resolver) {
-        this.entityResolver = resolver;
-    }
-
-    public void reset() {
-        runCount = 0;
-        results.clear();
-    }
-
-    public int getRunCount() {
-        return runCount;
-    }
-
-    public void addExpectedResult(Query query, List result) {
-        results.put(query, result);
-    }
-
-    public void performQueries(
-            Collection queries,
-            OperationObserver resultConsumer,
-            BaseTransaction transaction) {
-        initWithPresetResults(queries, resultConsumer);
-    }
-
-    public void performQueries(Collection queries, OperationObserver 
resultConsumer) {
-        initWithPresetResults(queries, resultConsumer);
-    }
-
-    private void initWithPresetResults(
-            Collection queries,
-            OperationObserver resultConsumer) {
-
-        runCount++;
-
-        // stick preset results to the consumer
-        Iterator it = queries.iterator();
-        while (it.hasNext()) {
-            Query query = (Query) it.next();
-            resultConsumer.nextRows(query, (List) results.get(query));
-        }
-    }
-
-    public DataNode lookupDataNode(DataMap dataMap) {
-        return null;
-    }
-
-    public EntityResolver getEntityResolver() {
-        return entityResolver;
-    }
-
-    public Collection getDataMaps() {
-        return (entityResolver != null)
-                ? entityResolver.getDataMaps()
-                : Collections.EMPTY_LIST;
-    }
-}
diff --git 
a/cayenne/src/test/java/org/apache/cayenne/query/MockQueryRouter.java 
b/cayenne/src/test/java/org/apache/cayenne/query/MockQueryRouter.java
index fd0164be3..c11d8ff07 100644
--- a/cayenne/src/test/java/org/apache/cayenne/query/MockQueryRouter.java
+++ b/cayenne/src/test/java/org/apache/cayenne/query/MockQueryRouter.java
@@ -23,8 +23,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
-import org.apache.cayenne.access.MockQueryEngine;
-import org.apache.cayenne.access.QueryEngine;
+import org.apache.cayenne.access.DataNode;
 import org.apache.cayenne.map.DataMap;
 
 public class MockQueryRouter implements QueryRouter {
@@ -43,16 +42,16 @@ public class MockQueryRouter implements QueryRouter {
         return queries.size();
     }
 
-    public void route(QueryEngine engine, Query query, Query substitutedQuery) 
{
+    public void route(DataNode node, Query query, Query substitutedQuery) {
         queries.add(query);
     }
 
-    public QueryEngine engineForDataMap(DataMap map) {
-        return new MockQueryEngine();
+    public DataNode nodeForDataMap(DataMap map) {
+        return new DataNode();
     }
-    
+
     @Override
-    public QueryEngine engineForName(String name) {
-        return new MockQueryEngine();
+    public DataNode nodeForName(String name) {
+        return new DataNode();
     }
 }

Reply via email to