This is an automated email from the ASF dual-hosted git repository. asf-gitbox-commits pushed a commit to branch past-M2 in repository https://gitbox.apache.org/repos/asf/cayenne.git
commit 987406f349b43faec30f1cc5326821d63e799e31 Author: Andrus Adamchik <[email protected]> AuthorDate: Sun May 31 09:47:40 2026 -0400 CAY-2955 Get rid of QueryEngine abstraction actually removing DataDomain.performQuery(..)... No need to carry it around --- .../java/org/apache/cayenne/access/DataDomain.java | 14 -- .../access/DataDomainLegacyQueryAction.java | 194 --------------------- .../sqltemplate/directive/ResultDirectiveIT.java | 15 +- 3 files changed, 7 insertions(+), 216 deletions(-) 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 4fe3fc292..e4d33513a 100644 --- a/cayenne/src/main/java/org/apache/cayenne/access/DataDomain.java +++ b/cayenne/src/main/java/org/apache/cayenne/access/DataDomain.java @@ -42,7 +42,6 @@ import org.apache.cayenne.map.DataMap; import org.apache.cayenne.map.EntityResolver; import org.apache.cayenne.map.EntitySorter; import org.apache.cayenne.query.Query; -import org.apache.cayenne.query.QueryChain; import org.apache.cayenne.tx.BaseTransaction; import org.apache.cayenne.tx.Transaction; import org.apache.cayenne.tx.TransactionManager; @@ -528,19 +527,6 @@ public class DataDomain implements DataChannel { } } - /** - * Routes queries to appropriate DataNodes for execution - * - * @deprecated use {@link #onQuery(ObjectContext, Query)} instead. - */ - @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(); - return null; - }); - } - /** * 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 deleted file mode 100644 index f8cd0d290..000000000 --- a/cayenne/src/main/java/org/apache/cayenne/access/DataDomainLegacyQueryAction.java +++ /dev/null @@ -1,194 +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.CayenneRuntimeException; -import org.apache.cayenne.ObjectId; -import org.apache.cayenne.ResultIterator; -import org.apache.cayenne.map.DataMap; -import org.apache.cayenne.query.Query; -import org.apache.cayenne.query.QueryMetadata; -import org.apache.cayenne.query.QueryRouter; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Deprecated -class DataDomainLegacyQueryAction implements QueryRouter, OperationObserver { - - DataDomain domain; - OperationObserver callback; - Query query; - QueryMetadata metadata; - - Map<DataNode, List<Query>> queriesByNode; - Map<Query, Query> queriesByExecutedQueries; - - DataDomainLegacyQueryAction(DataDomain domain, Query query, OperationObserver callback) { - this.domain = domain; - this.query = query; - this.metadata = query.getMetaData(domain.getEntityResolver()); - this.callback = callback; - } - - /* - * Gets response from the underlying DataNodes. - */ - final void execute() { - - // reset - queriesByNode = null; - queriesByExecutedQueries = null; - - // categorize queries by node and by "executable" query... - query.route(this, domain.getEntityResolver(), null); - - // run categorized queries - if (queriesByNode != null) { - for (final Map.Entry<DataNode, List<Query>> entry : queriesByNode - .entrySet()) { - DataNode nextNode = entry.getKey(); - Collection<Query> nodeQueries = entry.getValue(); - nextNode.performQueries(nodeQueries, this); - } - } - } - - @Override - public void route(DataNode node, Query query, Query substitutedQuery) { - - List<Query> queries = null; - if (queriesByNode == null) { - queriesByNode = new HashMap<>(); - } - else { - queries = queriesByNode.get(node); - } - - if (queries == null) { - queries = new ArrayList<>(5); - queriesByNode.put(node, queries); - } - - queries.add(query); - - // handle case when routing resuled in an "executable" query different from the - // original query. - if (substitutedQuery != null && substitutedQuery != query) { - - if (queriesByExecutedQueries == null) { - queriesByExecutedQueries = new HashMap<>(); - } - - queriesByExecutedQueries.put(query, substitutedQuery); - } - } - - @Override - public DataNode nodeForDataMap(DataMap map) { - if (map == null) { - throw new NullPointerException("Null DataMap, can't determine DataNode."); - } - - DataNode node = domain.lookupDataNode(map); - - if (node == null) { - throw new CayenneRuntimeException("No DataNode exists for DataMap %s", map); - } - - return node; - } - - /** - * @since 5.0 - */ - @Override - public DataNode nodeForName(String name) { - - DataNode node; - - if (name != null) { - node = domain.getDataNode(name); - if (node == null) { - throw new CayenneRuntimeException("No DataNode exists for name %s", name); - } - } else { - node = domain.getDefaultNode(); - if (node == null) { - throw new CayenneRuntimeException("No default DataNode exists."); - } - } - - return node; - } - - @Override - public void nextCount(Query query, int resultCount) { - callback.nextCount(queryForExecutedQuery(query), resultCount); - } - - @Override - public void nextBatchCount(Query query, int[] resultCount) { - callback.nextBatchCount(queryForExecutedQuery(query), resultCount); - } - - @Override - public void nextRows(Query query, List<?> dataRows) { - callback.nextRows(queryForExecutedQuery(query), dataRows); - } - - @Override - public void nextRows(Query q, ResultIterator it) { - callback.nextRows(queryForExecutedQuery(q), it); - } - - @Override - public void nextGeneratedRows(Query query, ResultIterator<?> keys, List<ObjectId> idsToUpdate) { - callback.nextGeneratedRows(queryForExecutedQuery(query), keys, idsToUpdate); - } - - @Override - public void nextQueryException(Query query, Exception ex) { - callback.nextQueryException(queryForExecutedQuery(query), ex); - } - - @Override - public void nextGlobalException(Exception e) { - callback.nextGlobalException(e); - } - - @Override - public boolean isIteratedResult() { - return callback.isIteratedResult(); - } - - Query queryForExecutedQuery(Query executedQuery) { - Query q = null; - - if (queriesByExecutedQueries != null) { - q = queriesByExecutedQueries.get(executedQuery); - } - - return q != null ? q : executedQuery; - } -} diff --git a/cayenne/src/test/java/org/apache/cayenne/access/translator/sqltemplate/directive/ResultDirectiveIT.java b/cayenne/src/test/java/org/apache/cayenne/access/translator/sqltemplate/directive/ResultDirectiveIT.java index 387f5881d..76c3b504b 100644 --- a/cayenne/src/test/java/org/apache/cayenne/access/translator/sqltemplate/directive/ResultDirectiveIT.java +++ b/cayenne/src/test/java/org/apache/cayenne/access/translator/sqltemplate/directive/ResultDirectiveIT.java @@ -18,11 +18,6 @@ ****************************************************************/ package org.apache.cayenne.access.translator.sqltemplate.directive; -import java.sql.SQLException; -import java.util.Collections; -import java.util.List; -import java.util.Map; - import org.apache.cayenne.access.MockOperationObserver; import org.apache.cayenne.query.CapsStrategy; import org.apache.cayenne.query.SQLTemplate; @@ -34,11 +29,15 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; +import java.sql.SQLException; +import java.util.Collections; +import java.util.List; +import java.util.Map; + import static org.junit.jupiter.api.Assertions.assertEquals; /** - * Test for Result directive to check if we could use ResultDirective - * optionally. + * Test for Result directive to check if we could use ResultDirective optionally. */ public class ResultDirectiveIT { @@ -96,7 +95,7 @@ public class ResultDirectiveIT { SQLTemplate template = new SQLTemplate(Artist.class, sql); template.setColumnNamesCapitalization(CapsStrategy.UPPER); MockOperationObserver observer = new MockOperationObserver(); - runtime.getDataDomain().performQueries(Collections.singletonList(template), observer); + runtime.getDataDomain().getDefaultNode().performQueries(Collections.singletonList(template), observer); @SuppressWarnings("unchecked") List<Map<String, Object>> data = observer.rowsForQuery(template);
