This is an automated email from the ASF dual-hosted git repository. ntimofeev pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/cayenne.git
commit 281f674f34a15558cb908e7e8225027531032aa2 Author: Nikita Timofeev <stari...@gmail.com> AuthorDate: Tue Sep 29 12:22:36 2020 +0300 CAY-2378 Switch usage of SelectQuery to ObjectSelect internally --- .../cayenne/access/HierarchicalObjectResolver.java | 6 ++-- .../cayenne/access/IncrementalFaultList.java | 36 ++++++++-------------- .../access/MixedResultIncrementalFaultList.java | 25 ++++++++------- .../cayenne/access/OptimisticLockException.java | 10 +++--- .../translator/select/SelectQueryWrapper.java | 2 +- .../java/org/apache/cayenne/dba/AutoAdapter.java | 1 + .../java/org/apache/cayenne/dba/JdbcAdapter.java | 1 + .../org/apache/cayenne/query/CacheableQuery.java | 2 +- .../org/apache/cayenne/query/FluentSelect.java | 2 +- .../query/FluentSelectPrefetchRouterAction.java | 4 +-- .../org/apache/cayenne/query/ObjectIdQuery.java | 11 ++++--- .../apache/cayenne/query/PrefetchSelectQuery.java | 24 +++++++++------ .../apache/cayenne/query/RelationshipQuery.java | 16 +++++----- .../query/SelectQueryPrefetchRouterAction.java | 4 +-- .../access/DataContextPrefetchMultistepIT.java | 6 ++-- .../cayenne/access/DataContextQueryChainIT.java | 6 ++-- .../java/org/apache/cayenne/access/EnumIT.java | 14 ++++++++- .../cayenne/access/VerticalInheritanceIT.java | 12 +++----- .../query/FluentSelectPrefetchRouterActionIT.java | 12 ++++---- ...electPrefetchRouterActionQualifiedEntityIT.java | 8 ++--- .../query/SelectQueryPrefetchRouterActionIT.java | 12 ++++---- ...QueryPrefetchRouterActionQualifiedEntityIT.java | 8 ++--- .../apache/cayenne/query/StatementFetchSizeIT.java | 2 +- 23 files changed, 114 insertions(+), 110 deletions(-) diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/HierarchicalObjectResolver.java b/cayenne-server/src/main/java/org/apache/cayenne/access/HierarchicalObjectResolver.java index 9060c91..66ecfe3 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/access/HierarchicalObjectResolver.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/access/HierarchicalObjectResolver.java @@ -158,7 +158,7 @@ class HierarchicalObjectResolver { createDisjointByIdPrefetchQualifier(pathPrefix, currentQuery, joins, values); currentQuery = new PrefetchSelectQuery<>(node.getPath(), relationship); - currentQuery.setFetchingDataRows(true); + currentQuery.fetchDataRows(); queries.add(currentQuery); qualifiersCount = 0; values = new HashSet<>(); @@ -203,7 +203,7 @@ class HierarchicalObjectResolver { return true; } - private void createDisjointByIdPrefetchQualifier(String pathPrefix, PrefetchSelectQuery currentQuery, + private void createDisjointByIdPrefetchQualifier(String pathPrefix, PrefetchSelectQuery<?> currentQuery, List<DbJoin> joins, Set<List<Object>> values) { Expression allJoinsQualifier; if(currentQuery != null) { @@ -223,7 +223,7 @@ class HierarchicalObjectResolver { qualifiers[i++] = allJoinsQualifier; } - currentQuery.orQualifier(ExpressionFactory.joinExp(Expression.OR, qualifiers)); + currentQuery.or(ExpressionFactory.joinExp(Expression.OR, qualifiers)); } } diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/IncrementalFaultList.java b/cayenne-server/src/main/java/org/apache/cayenne/access/IncrementalFaultList.java index b1bbb01..43f64ba 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/access/IncrementalFaultList.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/access/IncrementalFaultList.java @@ -25,9 +25,9 @@ import org.apache.cayenne.ResultIterator; import org.apache.cayenne.exp.Expression; import org.apache.cayenne.exp.ExpressionFactory; import org.apache.cayenne.map.ObjEntity; +import org.apache.cayenne.query.ObjectSelect; import org.apache.cayenne.query.Query; import org.apache.cayenne.query.QueryMetadata; -import org.apache.cayenne.query.SelectQuery; import org.apache.cayenne.util.Util; import java.io.Serializable; @@ -62,7 +62,6 @@ public class IncrementalFaultList<E> implements List<E>, Serializable { protected final List elements; protected DataContext dataContext; protected ObjEntity rootEntity; - protected SelectQuery<?> internalQuery; protected int unfetchedObjects; /** @@ -116,13 +115,6 @@ public class IncrementalFaultList<E> implements List<E>, Serializable { throw new CayenneRuntimeException("Pagination is not supported for queries not rooted in an ObjEntity"); } - // create an internal query, it is a partial replica of - // the original query and will serve as a value holder for - // various parameters - this.internalQuery = new SelectQuery<>(rootEntity); - this.internalQuery.setFetchingDataRows(metadata.isFetchingDataRows()); - this.internalQuery.setPrefetchTree(metadata.getPrefetchTree()); - this.idWidth = metadata.getDbEntity().getPrimaryKeys().size(); List<Object> elementsUnsynced = new ArrayList<>(); @@ -151,13 +143,6 @@ public class IncrementalFaultList<E> implements List<E>, Serializable { } /** - * @since 1.2 - */ - SelectQuery getInternalQuery() { - return internalQuery; - } - - /** * Performs initialization of the list of objects. Only the first page is * fully resolved. For the rest of the list, only ObjectIds are read. * @@ -167,7 +152,7 @@ public class IncrementalFaultList<E> implements List<E>, Serializable { elementsList.clear(); - try (ResultIterator it = dataContext.performIteratedQuery(query)) { + try (ResultIterator<?> it = dataContext.performIteratedQuery(query)) { while (it.hasNextRow()) { elementsList.add(it.nextRow()); } @@ -191,7 +176,7 @@ public class IncrementalFaultList<E> implements List<E>, Serializable { // I am not sure if such a check makes sense??? - if (internalQuery.isFetchingDataRows()) { + if (metadata.isFetchingDataRows()) { if (!(object instanceof Map)) { throw new IllegalArgumentException("Only Map objects can be stored in this list."); } @@ -249,7 +234,7 @@ public class IncrementalFaultList<E> implements List<E>, Serializable { int fetchEnd = Math.min(qualsSize, fetchSize); int fetchBegin = 0; while (fetchBegin < qualsSize) { - SelectQuery<Object> query = createSelectQuery(quals.subList(fetchBegin, fetchEnd)); + ObjectSelect<Persistent> query = createSelectQuery(quals.subList(fetchBegin, fetchEnd)); objects.addAll(dataContext.performQuery(query)); fetchBegin = fetchEnd; fetchEnd += Math.min(fetchSize, qualsSize - fetchEnd); @@ -271,12 +256,15 @@ public class IncrementalFaultList<E> implements List<E>, Serializable { unfetchedObjects -= objects.size(); } - SelectQuery<Object> createSelectQuery(List<Expression> expressions) { - SelectQuery<Object> query = new SelectQuery<>(rootEntity, ExpressionFactory.joinExp(Expression.OR, expressions)); + ObjectSelect<Persistent> createSelectQuery(List<Expression> expressions) { + ObjectSelect<Persistent> query = ObjectSelect.query(Persistent.class) + .entityName(rootEntity.getName()) + .where(ExpressionFactory.joinExp(Expression.OR, expressions)); - query.setFetchingDataRows(internalQuery.isFetchingDataRows()); - if (!query.isFetchingDataRows()) { - query.setPrefetchTree(internalQuery.getPrefetchTree()); + if(metadata.isFetchingDataRows()) { + query.fetchDataRows(); + } else if (metadata.getPrefetchTree() != null) { + query.prefetch(metadata.getPrefetchTree()); } return query; diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/MixedResultIncrementalFaultList.java b/cayenne-server/src/main/java/org/apache/cayenne/access/MixedResultIncrementalFaultList.java index df145cb..65bcb30 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/access/MixedResultIncrementalFaultList.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/access/MixedResultIncrementalFaultList.java @@ -21,6 +21,7 @@ package org.apache.cayenne.access; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -29,13 +30,14 @@ import org.apache.cayenne.Persistent; import org.apache.cayenne.ResultIterator; import org.apache.cayenne.exp.Expression; import org.apache.cayenne.exp.ExpressionFactory; +import org.apache.cayenne.exp.property.Property; import org.apache.cayenne.map.ObjAttribute; import org.apache.cayenne.map.ObjEntity; import org.apache.cayenne.query.ColumnSelect; import org.apache.cayenne.query.EntityResultSegment; +import org.apache.cayenne.query.ObjectSelect; import org.apache.cayenne.query.Query; import org.apache.cayenne.query.QueryMetadata; -import org.apache.cayenne.query.SelectQuery; import org.apache.cayenne.util.Util; /** @@ -46,7 +48,7 @@ import org.apache.cayenne.util.Util; * if there is no Persistent objects in the result Collection it will be iterated as is, without faulting anything. * * @see QueryMetadata#getPageSize() - * @see org.apache.cayenne.query.SelectQueryMetadata + * @see org.apache.cayenne.query.QueryMetadata * * @since 4.0 */ @@ -72,11 +74,6 @@ class MixedResultIncrementalFaultList<E> extends IncrementalFaultList<E> { */ MixedResultIncrementalFaultList(DataContext dataContext, Query query, int maxFetchSize) { super(dataContext, query, maxFetchSize); - - // this should generally be true, and may be it worth to do something if it's not - if(query instanceof ColumnSelect) { - this.internalQuery.setColumns(((ColumnSelect<?>) query).getColumns()); - } } @Override @@ -160,8 +157,8 @@ class MixedResultIncrementalFaultList<E> extends IncrementalFaultList<E> { int fetchEnd = Math.min(qualsSize, fetchSize); int fetchBegin = 0; while (fetchBegin < qualsSize) { - SelectQuery<Persistent> query = createSelectQuery(entry.getValue(), quals.subList(fetchBegin, fetchEnd)); - objects.addAll(dataContext.performQuery(query)); + ObjectSelect<Persistent> query = createSelectQuery(entry.getValue(), quals.subList(fetchBegin, fetchEnd)); + objects.addAll(query.select(dataContext)); fetchBegin = fetchEnd; fetchEnd += Math.min(fetchSize, qualsSize - fetchEnd); } @@ -179,10 +176,12 @@ class MixedResultIncrementalFaultList<E> extends IncrementalFaultList<E> { } } - SelectQuery<Persistent> createSelectQuery(ObjEntity entity, List<Expression> expressions) { - SelectQuery<Persistent> query = new SelectQuery<>(entity, ExpressionFactory.joinExp(Expression.OR, expressions)); - if (entity.equals(rootEntity)) { - query.setPrefetchTree(internalQuery.getPrefetchTree()); + ObjectSelect<Persistent> createSelectQuery(ObjEntity entity, List<Expression> expressions) { + ObjectSelect<Persistent> query = ObjectSelect.query(Persistent.class) + .entityName(entity.getName()) + .where(ExpressionFactory.joinExp(Expression.OR, expressions)); + if (entity.equals(rootEntity) && metadata.getPrefetchTree() != null) { + query.prefetch(metadata.getPrefetchTree()); } return query; } diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/OptimisticLockException.java b/cayenne-server/src/main/java/org/apache/cayenne/access/OptimisticLockException.java index 842dafb..5d39ec9 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/access/OptimisticLockException.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/access/OptimisticLockException.java @@ -23,16 +23,14 @@ import java.util.Collections; import java.util.Iterator; import java.util.Map; -import org.apache.cayenne.Cayenne; import org.apache.cayenne.CayenneRuntimeException; -import org.apache.cayenne.DataRow; import org.apache.cayenne.ObjectContext; import org.apache.cayenne.ObjectId; import org.apache.cayenne.exp.Expression; import org.apache.cayenne.exp.ExpressionFactory; import org.apache.cayenne.map.DbAttribute; import org.apache.cayenne.map.DbEntity; -import org.apache.cayenne.query.SelectQuery; +import org.apache.cayenne.query.ObjectSelect; /** * An exception thrown on optimistic lock failure. @@ -85,9 +83,9 @@ public class OptimisticLockException extends CayenneRuntimeException { : attributeQualifier; } - SelectQuery<DataRow> query = new SelectQuery<DataRow>(rootEntity, qualifier); - query.setFetchingDataRows(true); - return (Map<?, ?>) Cayenne.objectForQuery(context, query); + return ObjectSelect.dbQuery(rootEntity.getName(), qualifier) + .fetchDataRows() + .selectFirst(context); } /** diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/SelectQueryWrapper.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/SelectQueryWrapper.java index 5c95718..3d4ca1e 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/SelectQueryWrapper.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/SelectQueryWrapper.java @@ -23,7 +23,6 @@ import java.util.Collection; import java.util.Objects; import org.apache.cayenne.exp.Expression; -import org.apache.cayenne.exp.property.BaseProperty; import org.apache.cayenne.exp.property.Property; import org.apache.cayenne.map.EntityResolver; import org.apache.cayenne.query.Ordering; @@ -32,6 +31,7 @@ import org.apache.cayenne.query.SelectQuery; /** * @since 4.2 + * @deprecated this class should gone with the {@link SelectQuery} */ public class SelectQueryWrapper implements TranslatableQueryWrapper { diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/AutoAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/AutoAdapter.java index 9109288..54baa19 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/dba/AutoAdapter.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/AutoAdapter.java @@ -102,6 +102,7 @@ public class AutoAdapter implements DbAdapter { * @since 4.0 */ @Override + @Deprecated public SelectTranslator getSelectTranslator(SelectQuery<?> query, EntityResolver entityResolver) { return getAdapter().getSelectTranslator(query, entityResolver); } diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java index c71e063..4a23596 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java @@ -541,6 +541,7 @@ public class JdbcAdapter implements DbAdapter { } @Override + @Deprecated public SelectTranslator getSelectTranslator(SelectQuery<?> query, EntityResolver entityResolver) { return new DefaultSelectTranslator(query, this, entityResolver); } diff --git a/cayenne-server/src/main/java/org/apache/cayenne/query/CacheableQuery.java b/cayenne-server/src/main/java/org/apache/cayenne/query/CacheableQuery.java index 71a39af..ca643cb 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/query/CacheableQuery.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/query/CacheableQuery.java @@ -29,7 +29,7 @@ import org.slf4j.LoggerFactory; */ public abstract class CacheableQuery implements Query { - protected static final Logger logger = LoggerFactory.getLogger(SelectQuery.class); + protected static final Logger logger = LoggerFactory.getLogger(CacheableQuery.class); abstract protected BaseQueryMetadata getBaseMetaData(); diff --git a/cayenne-server/src/main/java/org/apache/cayenne/query/FluentSelect.java b/cayenne-server/src/main/java/org/apache/cayenne/query/FluentSelect.java index 58201c0..8dad2de 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/query/FluentSelect.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/query/FluentSelect.java @@ -199,7 +199,7 @@ public abstract class FluentSelect<T> extends AbstractQuery implements Select<T> return false; } - private void routePrefetches(QueryRouter router, EntityResolver resolver) { + protected void routePrefetches(QueryRouter router, EntityResolver resolver) { new FluentSelectPrefetchRouterAction().route(this, router, resolver); } diff --git a/cayenne-server/src/main/java/org/apache/cayenne/query/FluentSelectPrefetchRouterAction.java b/cayenne-server/src/main/java/org/apache/cayenne/query/FluentSelectPrefetchRouterAction.java index 572d82a..2256e25 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/query/FluentSelectPrefetchRouterAction.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/query/FluentSelectPrefetchRouterAction.java @@ -97,9 +97,9 @@ class FluentSelectPrefetchRouterAction implements PrefetchProcessor { // create and configure PrefetchSelectQuery PrefetchSelectQuery<?> prefetchQuery = new PrefetchSelectQuery<>(prefetchPath, relationship); - prefetchQuery.setStatementFetchSize(query.getStatementFetchSize()); + prefetchQuery.statementFetchSize(query.getStatementFetchSize()); - prefetchQuery.setQualifier(classDescriptor.getEntity() + prefetchQuery.where(classDescriptor.getEntity() .translateToRelatedEntity(queryQualifier, prefetchPath)); if (relationship.isSourceIndependentFromTargetChange()) { diff --git a/cayenne-server/src/main/java/org/apache/cayenne/query/ObjectIdQuery.java b/cayenne-server/src/main/java/org/apache/cayenne/query/ObjectIdQuery.java index 94e9c23..d78d58c 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/query/ObjectIdQuery.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/query/ObjectIdQuery.java @@ -21,6 +21,7 @@ package org.apache.cayenne.query; import org.apache.cayenne.CayenneRuntimeException; import org.apache.cayenne.ObjectId; +import org.apache.cayenne.Persistent; import org.apache.cayenne.exp.Expression; import org.apache.cayenne.exp.ExpressionFactory; import org.apache.cayenne.map.EntityResolver; @@ -124,11 +125,13 @@ public class ObjectIdQuery extends IndirectQuery { throw new CayenneRuntimeException("Can't build a query for temporary id: %s", objectId); } - SelectQuery<Object> query = new SelectQuery<>(objectId.getEntityName(), ExpressionFactory - .matchAllDbExp(objectId.getIdSnapshot(), Expression.EQUAL_TO)); - + ObjectSelect<Persistent> query = ObjectSelect.query(Persistent.class) + .entityName(objectId.getEntityName()) + .where(ExpressionFactory.matchAllDbExp(objectId.getIdSnapshot(), Expression.EQUAL_TO)); // if we got to the point of fetch, always force refresh.... - query.setFetchingDataRows(fetchingDataRows); + if(fetchingDataRows) { + query.fetchDataRows(); + } return query; } diff --git a/cayenne-server/src/main/java/org/apache/cayenne/query/PrefetchSelectQuery.java b/cayenne-server/src/main/java/org/apache/cayenne/query/PrefetchSelectQuery.java index 7efb1a3..08e98f7 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/query/PrefetchSelectQuery.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/query/PrefetchSelectQuery.java @@ -30,8 +30,10 @@ import org.apache.cayenne.util.Util; /** * A SelectQuery to perform a prefetch based on another query. Used internally by Cayenne * and is normally never used directly. + * + * @since 4.2 this query extends {@link ObjectSelect} as part of the deprecation of the {@link SelectQuery} */ -public class PrefetchSelectQuery<T> extends SelectQuery<T> { +public class PrefetchSelectQuery<T> extends ObjectSelect<T> { /** * The relationship path from root objects to the objects being prefetched. @@ -53,19 +55,13 @@ public class PrefetchSelectQuery<T> extends SelectQuery<T> { * @since 3.1 */ public PrefetchSelectQuery(String prefetchPath, ObjRelationship lastPrefetchHint) { - setRoot(lastPrefetchHint.getTargetEntity()); + entityName(lastPrefetchHint.getTargetEntityName()); this.prefetchPath = prefetchPath; this.lastPrefetchHint = lastPrefetchHint; } - /** - * Overrides super implementation to suppress disjoint prefetch routing, as the parent - * query should take care of that. - * - * @since 1.2 - */ @Override - void routePrefetches(QueryRouter router, EntityResolver resolver) { + protected void routePrefetches(QueryRouter router, EntityResolver resolver) { // noop - intentional. } @@ -86,6 +82,16 @@ public class PrefetchSelectQuery<T> extends SelectQuery<T> { } /** + * Clean set of the prefetch tree without any merge with existing nodes. + * + * @param prefetch prefetch tree + * @since 4.2 + */ + public void setPrefetchTree(PrefetchTreeNode prefetch) { + getBaseMetaData().setPrefetchTree(prefetch); + } + + /** * Returns last incoming ObjRelationship in the prefetch relationship chain. * * @since 1.1 diff --git a/cayenne-server/src/main/java/org/apache/cayenne/query/RelationshipQuery.java b/cayenne-server/src/main/java/org/apache/cayenne/query/RelationshipQuery.java index 96c25bf..e43d632 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/query/RelationshipQuery.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/query/RelationshipQuery.java @@ -21,6 +21,7 @@ package org.apache.cayenne.query; import org.apache.cayenne.CayenneRuntimeException; import org.apache.cayenne.ObjectId; +import org.apache.cayenne.Persistent; import org.apache.cayenne.exp.Expression; import org.apache.cayenne.exp.ExpressionFactory; import org.apache.cayenne.map.EntityResolver; @@ -117,14 +118,13 @@ public class RelationshipQuery extends IndirectQuery { ObjRelationship relationship = getRelationship(resolver); // build executable select... - Expression qualifier = ExpressionFactory.matchDbExp(relationship - .getReverseDbRelationshipPath(), objectId); - - SelectQuery<Object> query = new SelectQuery<Object>( - (ObjEntity) relationship.getTargetEntity(), - qualifier); - query.setStatementFetchSize(statementFetchSize); - return query; + Expression qualifier = ExpressionFactory + .matchDbExp(relationship.getReverseDbRelationshipPath(), objectId); + + return ObjectSelect.query(Persistent.class) + .entityName(relationship.getTargetEntityName()) + .where(qualifier) + .statementFetchSize(statementFetchSize); } /** diff --git a/cayenne-server/src/main/java/org/apache/cayenne/query/SelectQueryPrefetchRouterAction.java b/cayenne-server/src/main/java/org/apache/cayenne/query/SelectQueryPrefetchRouterAction.java index a25d49b..032a5b1 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/query/SelectQueryPrefetchRouterAction.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/query/SelectQueryPrefetchRouterAction.java @@ -98,9 +98,9 @@ class SelectQueryPrefetchRouterAction implements PrefetchProcessor { // create and configure PrefetchSelectQuery PrefetchSelectQuery<?> prefetchQuery = new PrefetchSelectQuery<>(prefetchPath, relationship); - prefetchQuery.setStatementFetchSize(query.getStatementFetchSize()); + prefetchQuery.statementFetchSize(query.getStatementFetchSize()); - prefetchQuery.setQualifier(classDescriptor.getEntity() + prefetchQuery.where(classDescriptor.getEntity() .translateToRelatedEntity(queryQualifier, prefetchPath)); if (relationship.isSourceIndependentFromTargetChange()) { diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextPrefetchMultistepIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextPrefetchMultistepIT.java index 465b6c1..d312f10 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextPrefetchMultistepIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextPrefetchMultistepIT.java @@ -220,11 +220,11 @@ public class DataContextPrefetchMultistepIT extends ServerCase { public void testMixedPrefetch2() throws Exception { createTwoArtistsWithExhibitsDataSet(); - List<Gallery> galleries = ObjectSelect.query(Gallery.class) + ObjectSelect<Gallery> gallerySelect = ObjectSelect.query(Gallery.class) .where(Gallery.GALLERY_NAME.eq("gallery2")) .prefetch(Gallery.EXHIBIT_ARRAY.disjoint()) - .prefetch(Gallery.EXHIBIT_ARRAY.dot(Exhibit.ARTIST_EXHIBIT_ARRAY).joint()) - .select(context); + .prefetch(Gallery.EXHIBIT_ARRAY.dot(Exhibit.ARTIST_EXHIBIT_ARRAY).joint()); + List<Gallery> galleries = gallerySelect.select(context); assertEquals(1, galleries.size()); Gallery g2 = galleries.get(0); diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextQueryChainIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextQueryChainIT.java index 01acd47..51a2362 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextQueryChainIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextQueryChainIT.java @@ -23,8 +23,8 @@ import java.util.List; import org.apache.cayenne.DataRow; import org.apache.cayenne.QueryResponse; import org.apache.cayenne.di.Inject; +import org.apache.cayenne.query.ObjectSelect; import org.apache.cayenne.query.QueryChain; -import org.apache.cayenne.query.SelectQuery; import org.apache.cayenne.testdo.testmap.Artist; import org.apache.cayenne.unit.di.server.CayenneProjects; import org.apache.cayenne.unit.di.server.ServerCase; @@ -48,8 +48,8 @@ public class DataContextQueryChainIT extends ServerCase { context.commitChanges(); QueryChain chain = new QueryChain(); - chain.addQuery(new SelectQuery(Artist.class)); - chain.addQuery(new SelectQuery(Artist.class)); + chain.addQuery(ObjectSelect.query(Artist.class)); + chain.addQuery(ObjectSelect.query(Artist.class)); QueryResponse r = context.performGenericQuery(chain); diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/EnumIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/EnumIT.java index f25d704..09b1227 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/access/EnumIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/access/EnumIT.java @@ -71,7 +71,7 @@ public class EnumIT extends ServerCase { public void testSelectQuery() throws Exception { createDataSet(); - SelectQuery q = new SelectQuery(EnumEntity.class); + SelectQuery<EnumEntity> q = new SelectQuery<>(EnumEntity.class); q.andQualifier(EnumEntity.ENUM_ATTRIBUTE.eq(Enum1.one)); EnumEntity e = (EnumEntity) Cayenne.objectForQuery(context, q); @@ -80,6 +80,18 @@ public class EnumIT extends ServerCase { } @Test + public void testObjectSelect() throws Exception { + createDataSet(); + + EnumEntity e = ObjectSelect.query(EnumEntity.class) + .where(EnumEntity.ENUM_ATTRIBUTE.eq(Enum1.one)) + .selectOne(context); + + assertNotNull(e); + assertSame(Enum1.one, e.getEnumAttribute()); + } + + @Test public void testSQLTemplate() throws Exception { createDataSet(); diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/VerticalInheritanceIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/VerticalInheritanceIT.java index 1b49875..4e7645e 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/access/VerticalInheritanceIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/access/VerticalInheritanceIT.java @@ -31,7 +31,6 @@ import org.apache.cayenne.di.Inject; import org.apache.cayenne.query.EJBQLQuery; import org.apache.cayenne.query.ObjectSelect; import org.apache.cayenne.query.SelectById; -import org.apache.cayenne.query.SelectQuery; import org.apache.cayenne.test.jdbc.DBHelper; import org.apache.cayenne.test.jdbc.TableHelper; import org.apache.cayenne.testdo.inheritance_vertical.Iv1Root; @@ -308,7 +307,6 @@ public class VerticalInheritanceIT extends ServerCase { } @Test - @Deprecated public void testSelectQuery_SuperSub() throws Exception { TableHelper ivRootTable = new TableHelper(dbHelper, "IV_ROOT"); @@ -323,7 +321,7 @@ public class VerticalInheritanceIT extends ServerCase { ivRootTable.insert(2, "xSUB1_ROOT", "IvSub1"); ivSub1Table.insert(2, "xSUB1"); - SelectQuery<IvRoot> query = new SelectQuery<>(IvRoot.class); + ObjectSelect<IvRoot> query = ObjectSelect.query(IvRoot.class); List<IvRoot> results = context.select(query); assertEquals(2, results.size()); @@ -351,7 +349,6 @@ public class VerticalInheritanceIT extends ServerCase { } @Test - @Deprecated public void testSelectQuery_DeepAndWide() throws Exception { TableHelper ivRootTable = new TableHelper(dbHelper, "IV_ROOT"); @@ -380,7 +377,7 @@ public class VerticalInheritanceIT extends ServerCase { ivRootTable.insert(4, "xROOT_SUB2", "IvSub2"); ivSub2Table.insert(4, "xSUB2"); - SelectQuery<IvRoot> query = new SelectQuery<>(IvRoot.class); + ObjectSelect<IvRoot> query = ObjectSelect.query(IvRoot.class); List<IvRoot> results = context.select(query); assertEquals(4, results.size()); @@ -422,7 +419,6 @@ public class VerticalInheritanceIT extends ServerCase { } @Test - @Deprecated public void testSelectQuery_MiddleLeaf() throws Exception { TableHelper ivRootTable = new TableHelper(dbHelper, "IV_ROOT"); @@ -451,7 +447,7 @@ public class VerticalInheritanceIT extends ServerCase { ivRootTable.insert(4, "xROOT_SUB2", "IvSub2"); ivSub2Table.insert(4, "xSUB2"); - SelectQuery<IvSub1> query = new SelectQuery<>(IvSub1.class); + ObjectSelect<IvSub1> query = ObjectSelect.query(IvSub1.class); List<IvSub1> results = context.select(query); assertEquals(2, results.size()); @@ -556,7 +552,7 @@ public class VerticalInheritanceIT extends ServerCase { iv1RootTable.insert(2, "xSUB1_ROOT", "Iv1Sub1"); iv1Sub1Table.insert(2, "xSUB1"); - SelectQuery<Iv1Root> query = new SelectQuery<>(Iv1Root.class); + ObjectSelect<Iv1Root> query = ObjectSelect.query(Iv1Root.class); List<Iv1Root> results = context.select(query); assertEquals(2, results.size()); diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/FluentSelectPrefetchRouterActionIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/FluentSelectPrefetchRouterActionIT.java index 29807b4..9b1a0ff 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/query/FluentSelectPrefetchRouterActionIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/query/FluentSelectPrefetchRouterActionIT.java @@ -55,8 +55,8 @@ public class FluentSelectPrefetchRouterActionIT extends ServerCase { PrefetchSelectQuery prefetch = (PrefetchSelectQuery) router.getQueries().get(0); - assertSame(paintingEntity, prefetch.getRoot()); - assertEquals(ExpressionFactory.exp("db:toArtist.ARTIST_NAME = 'abc'"), prefetch.getQualifier()); + assertEquals(paintingEntity.getName(), prefetch.entityName); + assertEquals(ExpressionFactory.exp("db:toArtist.ARTIST_NAME = 'abc'"), prefetch.getWhere()); } @Test @@ -75,9 +75,9 @@ public class FluentSelectPrefetchRouterActionIT extends ServerCase { assertEquals(1, router.getQueryCount()); PrefetchSelectQuery prefetch = (PrefetchSelectQuery) router.getQueries().get(0); - assertSame(paintingEntity, prefetch.getRoot()); + assertEquals(paintingEntity.getName(), prefetch.entityName); assertEquals(ExpressionFactory.exp("db:toArtist.ARTIST_NAME = 'abc' or db:toArtist.ARTIST_NAME = 'xyz'"), - prefetch.getQualifier()); + prefetch.getWhere()); } @Test @@ -94,7 +94,7 @@ public class FluentSelectPrefetchRouterActionIT extends ServerCase { PrefetchSelectQuery prefetch = (PrefetchSelectQuery) router.getQueries().get(0); - assertSame(galleryEntity, prefetch.getRoot()); - assertEquals(ExpressionFactory.exp("db:paintingArray.toArtist.ARTIST_NAME = 'abc'"), prefetch.getQualifier()); + assertEquals(galleryEntity.getName(), prefetch.entityName); + assertEquals(ExpressionFactory.exp("db:paintingArray.toArtist.ARTIST_NAME = 'abc'"), prefetch.getWhere()); } } diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/FluentSelectPrefetchRouterActionQualifiedEntityIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/FluentSelectPrefetchRouterActionQualifiedEntityIT.java index 5361701..7e4a692 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/query/FluentSelectPrefetchRouterActionQualifiedEntityIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/query/FluentSelectPrefetchRouterActionQualifiedEntityIT.java @@ -51,9 +51,9 @@ public class FluentSelectPrefetchRouterActionQualifiedEntityIT extends PeoplePro PrefetchSelectQuery prefetch = (PrefetchSelectQuery) router.getQueries().get(0); - assertSame(departmentEntity, prefetch.getRoot()); + assertEquals(departmentEntity.getName(), prefetch.getEntityName()); assertEquals(ExpressionFactory.exp("db:employees.NAME = 'abc' and (db:employees.PERSON_TYPE = 'EE' " - + "or db:employees.PERSON_TYPE = 'EM')"), prefetch.getQualifier()); + + "or db:employees.PERSON_TYPE = 'EM')"), prefetch.getWhere()); } @Test @@ -70,8 +70,8 @@ public class FluentSelectPrefetchRouterActionQualifiedEntityIT extends PeoplePro assertEquals(1, router.getQueryCount()); PrefetchSelectQuery prefetch = (PrefetchSelectQuery) router.getQueries().get(0); - assertSame(departmentEntity, prefetch.getRoot()); + assertEquals(departmentEntity.getName(), prefetch.getEntityName()); assertEquals(ExpressionFactory.exp("db:employees.NAME = 'abc' and db:employees.PERSON_TYPE = 'EM'"), - prefetch.getQualifier()); + prefetch.getWhere()); } } diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryPrefetchRouterActionIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryPrefetchRouterActionIT.java index 0d08af8..addd8ff 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryPrefetchRouterActionIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryPrefetchRouterActionIT.java @@ -55,8 +55,8 @@ public class SelectQueryPrefetchRouterActionIT extends ServerCase { PrefetchSelectQuery prefetch = (PrefetchSelectQuery) router.getQueries().get(0); - assertSame(paintingEntity, prefetch.getRoot()); - assertEquals(ExpressionFactory.exp("db:toArtist.ARTIST_NAME = 'abc'"), prefetch.getQualifier()); + assertEquals(paintingEntity.getName(), prefetch.entityName); + assertEquals(ExpressionFactory.exp("db:toArtist.ARTIST_NAME = 'abc'"), prefetch.getWhere()); } @Test @@ -73,9 +73,9 @@ public class SelectQueryPrefetchRouterActionIT extends ServerCase { assertEquals(1, router.getQueryCount()); PrefetchSelectQuery prefetch = (PrefetchSelectQuery) router.getQueries().get(0); - assertSame(paintingEntity, prefetch.getRoot()); + assertEquals(paintingEntity.getName(), prefetch.entityName); assertEquals(ExpressionFactory.exp("db:toArtist.ARTIST_NAME = 'abc' or db:toArtist.ARTIST_NAME = 'xyz'"), - prefetch.getQualifier()); + prefetch.getWhere()); } @Test @@ -92,7 +92,7 @@ public class SelectQueryPrefetchRouterActionIT extends ServerCase { PrefetchSelectQuery prefetch = (PrefetchSelectQuery) router.getQueries().get(0); - assertSame(galleryEntity, prefetch.getRoot()); - assertEquals(ExpressionFactory.exp("db:paintingArray.toArtist.ARTIST_NAME = 'abc'"), prefetch.getQualifier()); + assertEquals(galleryEntity.getName(), prefetch.entityName); + assertEquals(ExpressionFactory.exp("db:paintingArray.toArtist.ARTIST_NAME = 'abc'"), prefetch.getWhere()); } } diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryPrefetchRouterActionQualifiedEntityIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryPrefetchRouterActionQualifiedEntityIT.java index 694f284..88fb726 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryPrefetchRouterActionQualifiedEntityIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryPrefetchRouterActionQualifiedEntityIT.java @@ -53,9 +53,9 @@ public class SelectQueryPrefetchRouterActionQualifiedEntityIT extends PeopleProj PrefetchSelectQuery prefetch = (PrefetchSelectQuery) router.getQueries().get(0); - assertSame(departmentEntity, prefetch.getRoot()); + assertEquals(departmentEntity.getName(), prefetch.getEntityName()); assertEquals(ExpressionFactory.exp("db:employees.NAME = 'abc' and (db:employees.PERSON_TYPE = 'EE' " - + "or db:employees.PERSON_TYPE = 'EM')"), prefetch.getQualifier()); + + "or db:employees.PERSON_TYPE = 'EM')"), prefetch.getWhere()); } @Test @@ -72,8 +72,8 @@ public class SelectQueryPrefetchRouterActionQualifiedEntityIT extends PeopleProj assertEquals(1, router.getQueryCount()); PrefetchSelectQuery prefetch = (PrefetchSelectQuery) router.getQueries().get(0); - assertSame(departmentEntity, prefetch.getRoot()); + assertEquals(departmentEntity.getName(), prefetch.getEntityName()); assertEquals(ExpressionFactory.exp("db:employees.NAME = 'abc' and db:employees.PERSON_TYPE = 'EM'"), - prefetch.getQualifier()); + prefetch.getWhere()); } } diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/StatementFetchSizeIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/StatementFetchSizeIT.java index 2e66130..e51448a 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/query/StatementFetchSizeIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/query/StatementFetchSizeIT.java @@ -49,7 +49,7 @@ public class StatementFetchSizeIT extends ServerCase { @Test public void testObjectSelect() { - ObjectSelect query = ObjectSelect.query(Artist.class).statementFetchSize(10); + ObjectSelect<Artist> query = ObjectSelect.query(Artist.class).statementFetchSize(10); assertEquals(10, query .getMetaData(context.getEntityResolver())