Cleanup
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/fa1efbce Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/fa1efbce Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/fa1efbce Branch: refs/heads/master Commit: fa1efbce67608a5267660d606cc9fd1169c363c5 Parents: e996e80 Author: Arseni Bulatski <ancars...@gmail.com> Authored: Fri Jan 4 11:58:19 2019 +0300 Committer: Arseni Bulatski <ancars...@gmail.com> Committed: Fri Jan 4 12:08:52 2019 +0300 ---------------------------------------------------------------------- .../apache/cayenne/exp/parser/ASTDbPath.java | 12 +- .../apache/cayenne/exp/parser/ASTObjPath.java | 6 +- .../org/apache/cayenne/exp/parser/ASTPath.java | 6 +- .../cayenne/exp/property/BaseProperty.java | 10 +- .../cayenne/exp/property/EntityProperty.java | 8 +- .../cayenne/exp/property/ListProperty.java | 12 +- .../cayenne/exp/property/MapProperty.java | 15 +- .../cayenne/exp/property/PropertyFactory.java | 4 +- .../cayenne/exp/property/PropertyUtils.java | 50 ++--- .../exp/property/RelationshipProperty.java | 31 +-- .../cayenne/exp/property/SetProperty.java | 12 +- .../cayenne/query/SelectQueryMetadata.java | 30 +-- .../cayenne/exp/property/ListPropertyTest.java | 8 +- .../cayenne/exp/property/MapPropertyTest.java | 4 +- .../cayenne/exp/property/PathAliasesIT.java | 197 +++++++++++++++++++ .../cayenne/exp/property/PropertyAliasesIT.java | 189 ------------------ .../apache/cayenne/query/ColumnSelectIT.java | 25 +-- .../apache/cayenne/query/ObjectSelectTest.java | 20 +- .../cayenne/query/ObjectSelect_AggregateIT.java | 22 +-- .../cayenne/query/ObjectSelect_RunIT.java | 4 +- .../org/apache/cayenne/query/SelectQueryIT.java | 22 +-- 21 files changed, 334 insertions(+), 353 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cayenne/blob/fa1efbce/cayenne-server/src/main/java/org/apache/cayenne/exp/parser/ASTDbPath.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/exp/parser/ASTDbPath.java b/cayenne-server/src/main/java/org/apache/cayenne/exp/parser/ASTDbPath.java index 870b84d..6503bf2 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/exp/parser/ASTDbPath.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/exp/parser/ASTDbPath.java @@ -19,6 +19,12 @@ package org.apache.cayenne.exp.parser; +import java.io.IOException; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + import org.apache.cayenne.Cayenne; import org.apache.cayenne.ObjectContext; import org.apache.cayenne.ObjectId; @@ -33,12 +39,6 @@ import org.apache.cayenne.query.ObjectSelect; import org.apache.cayenne.query.SelectById; import org.apache.cayenne.util.CayenneMapEntry; -import java.io.IOException; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; - /** * Path expression traversing DB relationships and attributes. * http://git-wip-us.apache.org/repos/asf/cayenne/blob/fa1efbce/cayenne-server/src/main/java/org/apache/cayenne/exp/parser/ASTObjPath.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/exp/parser/ASTObjPath.java b/cayenne-server/src/main/java/org/apache/cayenne/exp/parser/ASTObjPath.java index c536fc6..8535b28 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/exp/parser/ASTObjPath.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/exp/parser/ASTObjPath.java @@ -19,6 +19,9 @@ package org.apache.cayenne.exp.parser; +import java.io.IOException; +import java.util.List; + import org.apache.cayenne.CayenneRuntimeException; import org.apache.cayenne.DataObject; import org.apache.cayenne.exp.Expression; @@ -28,9 +31,6 @@ import org.apache.cayenne.reflect.PropertyUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.IOException; -import java.util.List; - public class ASTObjPath extends ASTPath { private static final long serialVersionUID = -3574281576491705706L; http://git-wip-us.apache.org/repos/asf/cayenne/blob/fa1efbce/cayenne-server/src/main/java/org/apache/cayenne/exp/parser/ASTPath.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/exp/parser/ASTPath.java b/cayenne-server/src/main/java/org/apache/cayenne/exp/parser/ASTPath.java index f88b570..8ab1a39 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/exp/parser/ASTPath.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/exp/parser/ASTPath.java @@ -19,12 +19,12 @@ package org.apache.cayenne.exp.parser; -import org.apache.cayenne.map.Entity; -import org.apache.cayenne.util.CayenneMapEntry; - import java.util.Iterator; import java.util.Map; +import org.apache.cayenne.map.Entity; +import org.apache.cayenne.util.CayenneMapEntry; + /** * Generic path expression. * http://git-wip-us.apache.org/repos/asf/cayenne/blob/fa1efbce/cayenne-server/src/main/java/org/apache/cayenne/exp/property/BaseProperty.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/exp/property/BaseProperty.java b/cayenne-server/src/main/java/org/apache/cayenne/exp/property/BaseProperty.java index 28bc264..1ce3836 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/exp/property/BaseProperty.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/exp/property/BaseProperty.java @@ -19,6 +19,11 @@ package org.apache.cayenne.exp.property; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.function.Supplier; + import org.apache.cayenne.exp.Expression; import org.apache.cayenne.exp.ExpressionFactory; import org.apache.cayenne.exp.FunctionExpressionFactory; @@ -28,11 +33,6 @@ import org.apache.cayenne.query.Orderings; import org.apache.cayenne.query.SortOrder; import org.apache.cayenne.reflect.PropertyUtils; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.function.Supplier; - /** * Property that represents generic attribute. * <p> http://git-wip-us.apache.org/repos/asf/cayenne/blob/fa1efbce/cayenne-server/src/main/java/org/apache/cayenne/exp/property/EntityProperty.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/exp/property/EntityProperty.java b/cayenne-server/src/main/java/org/apache/cayenne/exp/property/EntityProperty.java index 1f087d6..41c225f 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/exp/property/EntityProperty.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/exp/property/EntityProperty.java @@ -21,6 +21,7 @@ package org.apache.cayenne.exp.property; import org.apache.cayenne.Persistent; import org.apache.cayenne.exp.Expression; +import org.apache.cayenne.exp.parser.ASTPath; /** * Property that represents to-one relationships. @@ -56,11 +57,8 @@ public class EntityProperty<E extends Persistent> extends BaseProperty<E> implem */ @Override public EntityProperty<E> alias(String alias) { - String substrPath = PropertyUtils.substringPath(this.getName()); - String aliasedPath = substrPath + alias; - return PropertyFactory.createEntity(aliasedPath, - PropertyUtils.createPathExp(aliasedPath, this.getName().substring(substrPath.length()), alias, getExpression().getPathAliases()), - this.getType()); + ASTPath exp = PropertyUtils.createPathExp(this.getName(), alias, getExpression().getPathAliases()); + return PropertyFactory.createEntity(exp.getPath(), exp, this.getType()); } /** http://git-wip-us.apache.org/repos/asf/cayenne/blob/fa1efbce/cayenne-server/src/main/java/org/apache/cayenne/exp/property/ListProperty.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/exp/property/ListProperty.java b/cayenne-server/src/main/java/org/apache/cayenne/exp/property/ListProperty.java index d8021dc..ded0084 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/exp/property/ListProperty.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/exp/property/ListProperty.java @@ -19,10 +19,11 @@ package org.apache.cayenne.exp.property; +import java.util.List; + import org.apache.cayenne.Persistent; import org.apache.cayenne.exp.Expression; - -import java.util.List; +import org.apache.cayenne.exp.parser.ASTPath; /** * Property that represents to-many relationship mapped on {@link List}. @@ -52,11 +53,8 @@ public class ListProperty<V extends Persistent> extends CollectionProperty<V, Li */ @Override public ListProperty<V> alias(String alias) { - String substrPath = PropertyUtils.substringPath(this.getName()); - String aliasedPath = substrPath + alias; - return PropertyFactory.createList(aliasedPath, - PropertyUtils.createPathExp(aliasedPath, this.getName().substring(substrPath.length()), alias, getExpression().getPathAliases()), - this.getEntityType()); + ASTPath exp = PropertyUtils.createPathExp(this.getName(), alias, getExpression().getPathAliases()); + return PropertyFactory.createList(exp.getPath(), exp, this.getEntityType()); } /** http://git-wip-us.apache.org/repos/asf/cayenne/blob/fa1efbce/cayenne-server/src/main/java/org/apache/cayenne/exp/property/MapProperty.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/exp/property/MapProperty.java b/cayenne-server/src/main/java/org/apache/cayenne/exp/property/MapProperty.java index 1974de4..b9b24b3 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/exp/property/MapProperty.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/exp/property/MapProperty.java @@ -19,12 +19,13 @@ package org.apache.cayenne.exp.property; +import java.util.Collection; +import java.util.Map; + import org.apache.cayenne.Persistent; import org.apache.cayenne.exp.Expression; import org.apache.cayenne.exp.ExpressionFactory; - -import java.util.Collection; -import java.util.Map; +import org.apache.cayenne.exp.parser.ASTPath; /** * Property that represents to-many relationship mapped on {@link Map}. @@ -204,12 +205,8 @@ public class MapProperty<K, V extends Persistent> extends BaseProperty<Map<K, V> */ @Override public MapProperty<K, V> alias(String alias) { - String substrPath = PropertyUtils.substringPath(this.getName()); - String aliasedPath = substrPath + alias; - return PropertyFactory.createMap(aliasedPath, - PropertyUtils.createPathExp(aliasedPath, this.getName().substring(substrPath.length()), alias, getExpression().getPathAliases()), - this.getKeyType(), - this.getEntityType()); + ASTPath exp = PropertyUtils.createPathExp(this.getName(), alias, getExpression().getPathAliases()); + return PropertyFactory.createMap(exp.getPath(), exp, this.getKeyType(), this.getEntityType()); } /** http://git-wip-us.apache.org/repos/asf/cayenne/blob/fa1efbce/cayenne-server/src/main/java/org/apache/cayenne/exp/property/PropertyFactory.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/exp/property/PropertyFactory.java b/cayenne-server/src/main/java/org/apache/cayenne/exp/property/PropertyFactory.java index e16d936..c355d73 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/exp/property/PropertyFactory.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/exp/property/PropertyFactory.java @@ -19,14 +19,14 @@ package org.apache.cayenne.exp.property; +import java.time.LocalDateTime; + import org.apache.cayenne.ObjectContext; import org.apache.cayenne.Persistent; import org.apache.cayenne.exp.Expression; import org.apache.cayenne.exp.ExpressionFactory; import org.apache.cayenne.exp.FunctionExpressionFactory; -import java.time.LocalDateTime; - /** * * Factory class that produces all property types. http://git-wip-us.apache.org/repos/asf/cayenne/blob/fa1efbce/cayenne-server/src/main/java/org/apache/cayenne/exp/property/PropertyUtils.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/exp/property/PropertyUtils.java b/cayenne-server/src/main/java/org/apache/cayenne/exp/property/PropertyUtils.java index 43b41fc..098fc40 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/exp/property/PropertyUtils.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/exp/property/PropertyUtils.java @@ -19,52 +19,30 @@ package org.apache.cayenne.exp.property; -import org.apache.cayenne.CayenneRuntimeException; -import org.apache.cayenne.exp.Expression; -import org.apache.cayenne.exp.parser.ASTObjPath; -import org.apache.cayenne.exp.parser.ASTPath; - import java.util.HashMap; import java.util.Map; +import org.apache.cayenne.exp.parser.ASTObjPath; +import org.apache.cayenne.exp.parser.ASTPath; + /** * @since 4.2 */ class PropertyUtils { - static ASTPath createPathExp(String aliasedPath, String segment, String alias, Map<String, String> aliasMap) { - ASTPath pathExp = new ASTObjPath(aliasedPath); - Map<String, String> aliases = new HashMap<>(aliasMap); - aliases.put(alias, segment); - pathExp.setPathAliases(aliases); + static ASTPath createPathExp(String path, String alias, Map<String, String> aliasMap) { + int index = path.lastIndexOf("."); + String aliasedPath = index != -1 ? path.substring(0, index + 1) + alias : alias; + String segmentPath = path.substring(index != -1 ? index + 1 : 0); - return pathExp; + Map<String, String> pathAliases = new HashMap<>(aliasMap); + pathAliases.put(alias, segmentPath); + return buildExp(aliasedPath, pathAliases); } - static ASTPath createExpressionWithCopiedAliases(String name, Expression expression) { - if(expression instanceof ASTPath) { - ASTPath pathExp = new ASTObjPath(name); - pathExp.setPathAliases(expression.getPathAliases()); - return pathExp; - } - - throw new CayenneRuntimeException("Dot is used only with path expressions."); - } - - static String substringPath(String propertyName){ - for(int i = propertyName.length() - 1; i >= 0; i--) { - if(propertyName.charAt(i) == '.') { - return propertyName.substring(0, i + 1); - } - } - - return ""; - } - - static void checkAliases(Expression expression) { - if(!expression.getPathAliases().isEmpty()) { - throw new CayenneRuntimeException("Can't use aliases with prefetch"); - } + static ASTPath buildExp(String path, Map<String, String> pathAliases) { + ASTPath pathExp = new ASTObjPath(path); + pathExp.setPathAliases(pathAliases); + return pathExp; } - } http://git-wip-us.apache.org/repos/asf/cayenne/blob/fa1efbce/cayenne-server/src/main/java/org/apache/cayenne/exp/property/RelationshipProperty.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/exp/property/RelationshipProperty.java b/cayenne-server/src/main/java/org/apache/cayenne/exp/property/RelationshipProperty.java index 76e9d5a..a4e4ba5 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/exp/property/RelationshipProperty.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/exp/property/RelationshipProperty.java @@ -19,6 +19,7 @@ package org.apache.cayenne.exp.property; +import org.apache.cayenne.CayenneRuntimeException; import org.apache.cayenne.Persistent; import org.apache.cayenne.query.PrefetchTreeNode; @@ -40,7 +41,7 @@ public interface RelationshipProperty<E> extends Property<E> { default BaseProperty<Object> dot(String property) { String path = getName() + "." + property; return PropertyFactory.createBase(path, - PropertyUtils.createExpressionWithCopiedAliases(path, getExpression()), + PropertyUtils.buildExp(path, getExpression().getPathAliases()), null); } @@ -53,7 +54,7 @@ public interface RelationshipProperty<E> extends Property<E> { default <T> BaseProperty<T> dot(BaseProperty<T> property) { String path = getName() + "." + property.getName(); return PropertyFactory.createBase(path, - PropertyUtils.createExpressionWithCopiedAliases(path, getExpression()), + PropertyUtils.buildExp(path, getExpression().getPathAliases()), property.getType()); } @@ -66,7 +67,7 @@ public interface RelationshipProperty<E> extends Property<E> { default <T extends Number> NumericProperty<T> dot(NumericProperty<T> property) { String path = getName() + "." + property.getName(); return PropertyFactory.createNumeric(path, - PropertyUtils.createExpressionWithCopiedAliases(path, getExpression()), + PropertyUtils.buildExp(path, getExpression().getPathAliases()), property.getType()); } @@ -79,7 +80,7 @@ public interface RelationshipProperty<E> extends Property<E> { default <T extends CharSequence> StringProperty<T> dot(StringProperty<T> property) { String path = getName() + "." + property.getName(); return PropertyFactory.createString(path, - PropertyUtils.createExpressionWithCopiedAliases(path, getExpression()), + PropertyUtils.buildExp(path, getExpression().getPathAliases()), property.getType()); } @@ -92,7 +93,7 @@ public interface RelationshipProperty<E> extends Property<E> { default <T> DateProperty<T> dot(DateProperty<T> property) { String path = getName() + "." + property.getName(); return PropertyFactory.createDate(path, - PropertyUtils.createExpressionWithCopiedAliases(path, getExpression()), + PropertyUtils.buildExp(path, getExpression().getPathAliases()), property.getType()); } @@ -105,7 +106,7 @@ public interface RelationshipProperty<E> extends Property<E> { default <T extends Persistent> EntityProperty<T> dot(EntityProperty<T> property) { String path = getName() + "." + property.getName(); return PropertyFactory.createEntity(path, - PropertyUtils.createExpressionWithCopiedAliases(path, getExpression()), + PropertyUtils.buildExp(path, getExpression().getPathAliases()), property.getType()); } @@ -118,7 +119,7 @@ public interface RelationshipProperty<E> extends Property<E> { default <T extends Persistent> ListProperty<T> dot(ListProperty<T> property) { String path = getName() + "." + property.getName(); return PropertyFactory.createList(path, - PropertyUtils.createExpressionWithCopiedAliases(path, getExpression()), + PropertyUtils.buildExp(path, getExpression().getPathAliases()), property.getEntityType()); } @@ -131,7 +132,7 @@ public interface RelationshipProperty<E> extends Property<E> { default <T extends Persistent> SetProperty<T> dot(SetProperty<T> property) { String path = getName() + "." + property.getName(); return PropertyFactory.createSet(path, - PropertyUtils.createExpressionWithCopiedAliases(path, getExpression()), + PropertyUtils.buildExp(path, getExpression().getPathAliases()), property.getEntityType()); } @@ -144,7 +145,7 @@ public interface RelationshipProperty<E> extends Property<E> { default <K, V extends Persistent> MapProperty<K, V> dot(MapProperty<K, V> property) { String path = getName() + "." + property.getName(); return PropertyFactory.createMap(path, - PropertyUtils.createExpressionWithCopiedAliases(path, getExpression()), + PropertyUtils.buildExp(path, getExpression().getPathAliases()), property.getKeyType(), property.getEntityType()); } @@ -162,7 +163,9 @@ public interface RelationshipProperty<E> extends Property<E> { * prefetch semantics. */ default PrefetchTreeNode joint() { - PropertyUtils.checkAliases(getExpression()); + if(!getExpression().getPathAliases().isEmpty()) { + throw new CayenneRuntimeException("Can't use aliases with prefetch"); + } return PrefetchTreeNode.withPath(getName(), PrefetchTreeNode.JOINT_PREFETCH_SEMANTICS); } @@ -172,7 +175,9 @@ public interface RelationshipProperty<E> extends Property<E> { * "disjoint" prefetch semantics. */ default PrefetchTreeNode disjoint() { - PropertyUtils.checkAliases(getExpression()); + if(!getExpression().getPathAliases().isEmpty()) { + throw new CayenneRuntimeException("Can't use aliases with prefetch"); + } return PrefetchTreeNode.withPath(getName(), PrefetchTreeNode.DISJOINT_PREFETCH_SEMANTICS); } @@ -182,7 +187,9 @@ public interface RelationshipProperty<E> extends Property<E> { * "disjoint by id" prefetch semantics. */ default PrefetchTreeNode disjointById() { - PropertyUtils.checkAliases(getExpression()); + if(!getExpression().getPathAliases().isEmpty()) { + throw new CayenneRuntimeException("Can't use aliases with prefetch"); + } return PrefetchTreeNode.withPath(getName(), PrefetchTreeNode.DISJOINT_BY_ID_PREFETCH_SEMANTICS); } http://git-wip-us.apache.org/repos/asf/cayenne/blob/fa1efbce/cayenne-server/src/main/java/org/apache/cayenne/exp/property/SetProperty.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/exp/property/SetProperty.java b/cayenne-server/src/main/java/org/apache/cayenne/exp/property/SetProperty.java index 908fab7..12b1fd2 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/exp/property/SetProperty.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/exp/property/SetProperty.java @@ -19,10 +19,11 @@ package org.apache.cayenne.exp.property; +import java.util.Set; + import org.apache.cayenne.Persistent; import org.apache.cayenne.exp.Expression; - -import java.util.Set; +import org.apache.cayenne.exp.parser.ASTPath; /** * Property that represents to-many relationship mapped on {@link Set}. @@ -48,11 +49,8 @@ public class SetProperty<V extends Persistent> extends CollectionProperty<V, Set */ @Override public SetProperty<V> alias(String alias) { - String substrPath = PropertyUtils.substringPath(this.getName()); - String aliasedPath = substrPath + alias; - return PropertyFactory.createSet(aliasedPath, - PropertyUtils.createPathExp(aliasedPath, this.getName().substring(substrPath.length()), alias, getExpression().getPathAliases()), - this.getEntityType()); + ASTPath exp = PropertyUtils.createPathExp(this.getName(), alias, getExpression().getPathAliases()); + return PropertyFactory.createSet(exp.getPath(), exp, this.getEntityType()); } /** http://git-wip-us.apache.org/repos/asf/cayenne/blob/fa1efbce/cayenne-server/src/main/java/org/apache/cayenne/query/SelectQueryMetadata.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/query/SelectQueryMetadata.java b/cayenne-server/src/main/java/org/apache/cayenne/query/SelectQueryMetadata.java index 63e72f8..8a9e7d9 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/query/SelectQueryMetadata.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/query/SelectQueryMetadata.java @@ -18,6 +18,15 @@ ****************************************************************/ package org.apache.cayenne.query; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; + import org.apache.cayenne.CayenneRuntimeException; import org.apache.cayenne.ObjectId; import org.apache.cayenne.Persistent; @@ -48,15 +57,6 @@ import org.apache.cayenne.reflect.ToManyProperty; import org.apache.cayenne.reflect.ToOneProperty; import org.apache.cayenne.util.CayenneMapEntry; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - /** * @since 3.0 */ @@ -206,14 +206,16 @@ class SelectQueryMetadata extends BaseQueryMetadata { if (pathSplitAliases == null) { pathSplitAliases = new HashMap<>(); } - for(String key : aliases.keySet()) { - if(pathSplitAliases.containsKey(key)) { - if(!pathSplitAliases.get(key).equals(aliases.get(key))) { + + for(Map.Entry<String, String> entry : aliases.entrySet()) { + pathSplitAliases.compute(entry.getKey(), (key, value) -> { + if(value != null && !value.equals(entry.getValue())){ throw new CayenneRuntimeException("Can't add the same alias to different path segments."); + } else { + return entry.getValue(); } - } + }); } - pathSplitAliases.putAll(aliases); } int len = expression.getOperandCount(); http://git-wip-us.apache.org/repos/asf/cayenne/blob/fa1efbce/cayenne-server/src/test/java/org/apache/cayenne/exp/property/ListPropertyTest.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/exp/property/ListPropertyTest.java b/cayenne-server/src/test/java/org/apache/cayenne/exp/property/ListPropertyTest.java index df87539..c8df661 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/exp/property/ListPropertyTest.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/exp/property/ListPropertyTest.java @@ -19,16 +19,16 @@ package org.apache.cayenne.exp.property; +import java.util.Arrays; +import java.util.Collection; + import org.apache.cayenne.exp.Expression; import org.apache.cayenne.exp.ExpressionFactory; import org.apache.cayenne.testdo.testmap.Artist; import org.junit.Before; import org.junit.Test; -import java.util.Arrays; -import java.util.Collection; - -import static org.junit.Assert.assertEquals; +import static org.junit.Assert.*; /** * @since 4.2 http://git-wip-us.apache.org/repos/asf/cayenne/blob/fa1efbce/cayenne-server/src/test/java/org/apache/cayenne/exp/property/MapPropertyTest.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/exp/property/MapPropertyTest.java b/cayenne-server/src/test/java/org/apache/cayenne/exp/property/MapPropertyTest.java index 5545942..0a866ad 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/exp/property/MapPropertyTest.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/exp/property/MapPropertyTest.java @@ -19,14 +19,14 @@ package org.apache.cayenne.exp.property; +import java.util.Arrays; + import org.apache.cayenne.exp.Expression; import org.apache.cayenne.exp.ExpressionFactory; import org.apache.cayenne.testdo.testmap.Artist; import org.junit.Before; import org.junit.Test; -import java.util.Arrays; - import static org.junit.Assert.assertEquals; /** http://git-wip-us.apache.org/repos/asf/cayenne/blob/fa1efbce/cayenne-server/src/test/java/org/apache/cayenne/exp/property/PathAliasesIT.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/exp/property/PathAliasesIT.java b/cayenne-server/src/test/java/org/apache/cayenne/exp/property/PathAliasesIT.java new file mode 100644 index 0000000..45fdee7 --- /dev/null +++ b/cayenne-server/src/test/java/org/apache/cayenne/exp/property/PathAliasesIT.java @@ -0,0 +1,197 @@ +/***************************************************************** + * 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 + * + * http://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.exp.property; + +import java.util.Collections; +import java.util.List; + +import org.apache.cayenne.Cayenne; +import org.apache.cayenne.CayenneRuntimeException; +import org.apache.cayenne.access.DataContext; +import org.apache.cayenne.di.Inject; +import org.apache.cayenne.exp.Expression; +import org.apache.cayenne.exp.ExpressionFactory; +import org.apache.cayenne.exp.parser.ASTEqual; +import org.apache.cayenne.exp.parser.ASTObjPath; +import org.apache.cayenne.exp.parser.ASTPath; +import org.apache.cayenne.query.ObjectSelect; +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.testmap.Artist; +import org.apache.cayenne.testdo.testmap.Gallery; +import org.apache.cayenne.testdo.testmap.Painting; +import org.apache.cayenne.unit.di.server.CayenneProjects; +import org.apache.cayenne.unit.di.server.ServerCase; +import org.apache.cayenne.unit.di.server.UseServerRuntime; +import org.junit.Before; +import org.junit.Test; + +import static junit.framework.TestCase.assertTrue; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +/** + * @since 4.2 + */ +@UseServerRuntime(CayenneProjects.TESTMAP_PROJECT) +public class PathAliasesIT extends ServerCase { + + @Inject + private DataContext context; + + @Inject + private DBHelper dbHelper; + + @Before + public void createArtistsDataSet() throws Exception { + TableHelper tArtist = new TableHelper(dbHelper, "ARTIST"); + tArtist.setColumns("ARTIST_ID", "ARTIST_NAME", "DATE_OF_BIRTH"); + + long dateBase = System.currentTimeMillis(); + for (int i = 1; i <= 20; i++) { + tArtist.insert(i, "artist" + i, new java.sql.Date(dateBase + 10000 * i)); + } + + TableHelper tGallery = new TableHelper(dbHelper, "GALLERY"); + tGallery.setColumns("GALLERY_ID", "GALLERY_NAME"); + tGallery.insert(1, "tate modern"); + + TableHelper tGallery1 = new TableHelper(dbHelper, "GALLERY"); + tGallery1.setColumns("GALLERY_ID", "GALLERY_NAME"); + tGallery1.insert(2, "test gallery"); + + TableHelper tPaintings = new TableHelper(dbHelper, "PAINTING"); + tPaintings.setColumns("PAINTING_ID", "PAINTING_TITLE", "ARTIST_ID", "GALLERY_ID"); + for (int i = 1; i <= 20; i++) { + tPaintings.insert(i, "painting" + i, + i % 2 == 0 ? 4 : i % 5 + 1, + i % 2 == 0 ? 2 : 1); + } + } + + @Test + public void testBeginAlias() { + List<Artist> artists = ObjectSelect.query(Artist.class) + .where(Artist.PAINTING_ARRAY.alias("p1").dot(Painting.PAINTING_TITLE).eq("painting2")) + .and(Artist.PAINTING_ARRAY.alias("p2").dot(Painting.PAINTING_TITLE).eq("painting4")) + .select(context); + assertEquals(1, artists.size()); + assertEquals("artist4", artists.get(0).getArtistName()); + } + + @Test + public void testTheSameAliases() { + List<Object[]> results = ObjectSelect.columnQuery(Artist.class, + Artist.ARTIST_NAME, + Artist.PAINTING_ARRAY.alias("p1").dot(Painting.PAINTING_TITLE), + Artist.PAINTING_ARRAY.alias("p2").dot(Painting.PAINTING_TITLE)) + .where(Artist.PAINTING_ARRAY.alias("p1").dot(Painting.PAINTING_TITLE).eq("painting2")) + .and(Artist.PAINTING_ARRAY.alias("p2").dot(Painting.PAINTING_TITLE).eq("painting4")) + .select(context); + assertEquals(1, results.size()); + assertEquals("artist4", results.get(0)[0]); + assertEquals("painting2", results.get(0)[1]); + assertEquals("painting4", results.get(0)[2]); + } + + @Test + public void testMiddleAlias() { + List<Artist> artists = ObjectSelect.query(Artist.class) + .where(Artist.PAINTING_ARRAY.dot(Painting.TO_GALLERY).dot(Gallery.PAINTING_ARRAY).alias("p1").dot(Painting.PAINTING_TITLE).eq("painting2")) + .and(Artist.PAINTING_ARRAY.dot(Painting.TO_GALLERY).dot(Gallery.PAINTING_ARRAY).alias("p2").dot(Painting.PAINTING_TITLE).eq("painting4")) + .select(context); + assertEquals(1, artists.size()); + assertEquals("artist4", artists.get(0).getArtistName()); + } + + @Test + public void testEntityPropertyAliases() { + Artist artist = Cayenne.objectForPK(context, Artist.class, 1); + + SelectQuery<Painting> query = SelectQuery.query(Painting.class); + Expression expression = Painting.TO_ARTIST.alias("p1").eq(artist); + query.setQualifier(expression); + List<Painting> paintings = query.select(context); + assertEquals(2, paintings.size()); + assertEquals("painting5", paintings.get(0).getPaintingTitle()); + } + + @Test + public void testAliases() { + SelectQuery<Artist> query1 = new SelectQuery<>(Artist.class); + Expression expression = ExpressionFactory.and( + Artist.PAINTING_ARRAY.alias("p1").dot(Painting.PAINTING_TITLE).eq("painting2"), + Artist.PAINTING_ARRAY.alias("p2").dot(Painting.PAINTING_TITLE).eq("painting4") + ); + query1.setQualifier(expression); + List<Artist> artists = query1.select(context); + assertEquals(1, artists.size()); + assertNotNull(artists.get(0)); + assertEquals("artist4", artists.get(0).getArtistName()); + } + + @Test + public void testAliasForPath() { + ASTPath astPath = new ASTObjPath("a.galleryName"); + astPath.setPathAliases(Collections.singletonMap("a", "paintingArray.toGallery")); + ASTEqual astEqual = new ASTEqual(astPath, "tate modern"); + List<Object[]> artists = ObjectSelect.columnQuery(Artist.class, Artist.ARTIST_NAME, PropertyFactory.createBase(astPath, String.class)) + .where(astEqual) + .orderBy(Artist.ARTIST_NAME.asc()) + .select(context); + assertEquals(5, artists.size()); + assertEquals("artist1", artists.get(0)[0]); + } + + @Test + public void testAggregationWithAliases() { + List<Object[]> artistAndPaintingCount = ObjectSelect.columnQuery(Artist.class, Artist.ARTIST_NAME, Artist.PAINTING_ARRAY.count()) + .having(Artist.PAINTING_ARRAY.alias("p1").count().lt(5L)) + .select(context); + assertEquals(4, artistAndPaintingCount.size()); + assertTrue((Long)artistAndPaintingCount.get(0)[1] < 5); + } + + @Test + public void testOrderWithAlias() { + ObjectSelect<Artist> query = ObjectSelect.query(Artist.class) + .orderBy(Artist.PAINTING_ARRAY.alias("p1").dot(Painting.ESTIMATED_PRICE).asc()) + .prefetch(Artist.PAINTING_ARRAY.disjoint()); + List<Artist> artists = query.select(context); + assertEquals(5, artists.size()); + assertEquals(2, artists.get(0).getPaintingArray().size()); + } + + @Test(expected = CayenneRuntimeException.class) + public void testPrefetchWithAliases() { + ObjectSelect<Artist> query = ObjectSelect.query(Artist.class); + query.prefetch(Artist.PAINTING_ARRAY.alias("p1").disjoint()); + query.select(context); + } + + @Test(expected = CayenneRuntimeException.class) + public void testTheSameAliasesToDifferentProperties() { + ObjectSelect<Artist> query = ObjectSelect.query(Artist.class); + query.where(Artist.PAINTING_ARRAY.alias("p1").dot(Painting.PAINTING_TITLE).eq("p1")); + query.and(Artist.PAINTING_ARRAY.dot(Painting.TO_GALLERY).alias("p1").dot(Gallery.GALLERY_NAME).eq("g1")); + query.select(context); + } +} http://git-wip-us.apache.org/repos/asf/cayenne/blob/fa1efbce/cayenne-server/src/test/java/org/apache/cayenne/exp/property/PropertyAliasesIT.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/exp/property/PropertyAliasesIT.java b/cayenne-server/src/test/java/org/apache/cayenne/exp/property/PropertyAliasesIT.java deleted file mode 100644 index 5dbfe14..0000000 --- a/cayenne-server/src/test/java/org/apache/cayenne/exp/property/PropertyAliasesIT.java +++ /dev/null @@ -1,189 +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 - * - * http://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.exp.property; - -import org.apache.cayenne.Cayenne; -import org.apache.cayenne.CayenneRuntimeException; -import org.apache.cayenne.access.DataContext; -import org.apache.cayenne.di.Inject; -import org.apache.cayenne.exp.Expression; -import org.apache.cayenne.exp.ExpressionFactory; -import org.apache.cayenne.exp.parser.ASTEqual; -import org.apache.cayenne.exp.parser.ASTObjPath; -import org.apache.cayenne.exp.parser.ASTPath; -import org.apache.cayenne.query.ObjectSelect; -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.testmap.Artist; -import org.apache.cayenne.testdo.testmap.Gallery; -import org.apache.cayenne.testdo.testmap.Painting; -import org.apache.cayenne.unit.di.server.CayenneProjects; -import org.apache.cayenne.unit.di.server.ServerCase; -import org.apache.cayenne.unit.di.server.UseServerRuntime; -import org.junit.Before; -import org.junit.Test; - -import java.util.Collections; -import java.util.List; - -import static junit.framework.TestCase.assertTrue; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -/** - * @since 4.2 - */ -@UseServerRuntime(CayenneProjects.TESTMAP_PROJECT) -public class PropertyAliasesIT extends ServerCase { - - @Inject - private DataContext context; - - @Inject - private DBHelper dbHelper; - - @Before - public void createArtistsDataSet() throws Exception { - TableHelper tArtist = new TableHelper(dbHelper, "ARTIST"); - tArtist.setColumns("ARTIST_ID", "ARTIST_NAME", "DATE_OF_BIRTH"); - - long dateBase = System.currentTimeMillis(); - for (int i = 1; i <= 20; i++) { - tArtist.insert(i, "artist" + i, new java.sql.Date(dateBase + 10000 * i)); - } - - TableHelper tGallery = new TableHelper(dbHelper, "GALLERY"); - tGallery.setColumns("GALLERY_ID", "GALLERY_NAME"); - tGallery.insert(1, "tate modern"); - - TableHelper tGallery1 = new TableHelper(dbHelper, "GALLERY"); - tGallery1.setColumns("GALLERY_ID", "GALLERY_NAME"); - tGallery1.insert(2, "test gallery"); - - TableHelper tPaintings = new TableHelper(dbHelper, "PAINTING"); - tPaintings.setColumns("PAINTING_ID", "PAINTING_TITLE", "ARTIST_ID", "GALLERY_ID"); - for (int i = 1; i <= 20; i++) { - tPaintings.insert(i, "painting" + i, - i % 2 == 0 ? 4 : i % 5 + 1, - i % 2 == 0 ? 2 : 1); - } - } - - @Test - public void testBeginAlias() { - List<Artist> artists = ObjectSelect.query(Artist.class) - .where(Artist.PAINTING_ARRAY.alias("p1").dot(Painting.PAINTING_TITLE).eq("painting2")) - .and(Artist.PAINTING_ARRAY.alias("p2").dot(Painting.PAINTING_TITLE).eq("painting4")) - .select(context); - assertEquals(1, artists.size()); - assertEquals("artist4", artists.get(0).getArtistName()); - } - - @Test - public void testTheSameAliases() { - List<Object[]> results = ObjectSelect.columnQuery(Artist.class, - Artist.ARTIST_NAME, - Artist.PAINTING_ARRAY.alias("p1").dot(Painting.PAINTING_TITLE), - Artist.PAINTING_ARRAY.alias("p2").dot(Painting.PAINTING_TITLE)) - .where(Artist.PAINTING_ARRAY.alias("p1").dot(Painting.PAINTING_TITLE).eq("painting2")) - .and(Artist.PAINTING_ARRAY.alias("p2").dot(Painting.PAINTING_TITLE).eq("painting4")) - .select(context); - assertEquals(1, results.size()); - assertEquals("artist4", results.get(0)[0]); - assertEquals("painting2", results.get(0)[1]); - assertEquals("painting4", results.get(0)[2]); - } - - @Test - public void testMiddleAlias() { - List<Artist> artists = ObjectSelect.query(Artist.class) - .where(Artist.PAINTING_ARRAY.dot(Painting.TO_GALLERY).dot(Gallery.PAINTING_ARRAY).alias("p1").dot(Painting.PAINTING_TITLE).eq("painting2")) - .and(Artist.PAINTING_ARRAY.dot(Painting.TO_GALLERY).dot(Gallery.PAINTING_ARRAY).alias("p2").dot(Painting.PAINTING_TITLE).eq("painting4")) - .select(context); - assertEquals(1, artists.size()); - assertEquals("artist4", artists.get(0).getArtistName()); - } - - @Test - public void testEntityPropertyAliases() { - Artist artist = Cayenne.objectForPK(context, Artist.class, 1); - - SelectQuery<Painting> query = SelectQuery.query(Painting.class); - Expression expression = Painting.TO_ARTIST.alias("p1").eq(artist); - query.setQualifier(expression); - List<Painting> paintings = query.select(context); - assertEquals(2, paintings.size()); - assertEquals("painting5", paintings.get(0).getPaintingTitle()); - } - - @Test - public void testAliases() { - SelectQuery<Artist> query1 = new SelectQuery<>(Artist.class); - Expression expression = ExpressionFactory.and( - Artist.PAINTING_ARRAY.alias("p1").dot(Painting.PAINTING_TITLE).eq("painting2"), - Artist.PAINTING_ARRAY.alias("p2").dot(Painting.PAINTING_TITLE).eq("painting4") - ); - query1.setQualifier(expression); - List<Artist> artists = query1.select(context); - assertEquals(1, artists.size()); - assertNotNull(artists.get(0)); - assertEquals("artist4", artists.get(0).getArtistName()); - } - - @Test - public void testAliasForPath() { - ASTPath astPath = new ASTObjPath("a.galleryName"); - astPath.setPathAliases(Collections.singletonMap("a", "paintingArray.toGallery")); - ASTEqual astEqual = new ASTEqual(astPath, "tate modern"); - List<Object[]> artists = ObjectSelect.columnQuery(Artist.class, Artist.ARTIST_NAME, PropertyFactory.createBase(astPath, String.class)) - .where(astEqual) - .orderBy(Artist.ARTIST_NAME.asc()) - .select(context); - assertEquals(5, artists.size()); - assertEquals("artist1", artists.get(0)[0]); - } - - @Test - public void testAggregationWithAliases() { - List<Object[]> artistAndPaintingCount = ObjectSelect.columnQuery(Artist.class, Artist.ARTIST_NAME, Artist.PAINTING_ARRAY.count()) - .having(Artist.PAINTING_ARRAY.alias("p1").count().lt(5L)) - .select(context); - assertEquals(4, artistAndPaintingCount.size()); - assertTrue((Long)artistAndPaintingCount.get(0)[1] < 5); - } - - @Test - public void testOrderWithAlias() { - ObjectSelect<Artist> query = ObjectSelect.query(Artist.class) - .orderBy(Artist.PAINTING_ARRAY.alias("p1").dot(Painting.ESTIMATED_PRICE).asc()) - .prefetch(Artist.PAINTING_ARRAY.disjoint()); - List<Artist> artists = query.select(context); - assertEquals(5, artists.size()); - assertEquals(2, artists.get(0).getPaintingArray().size()); - } - - @Test(expected = CayenneRuntimeException.class) - public void testPrefetchWithAliases() { - ObjectSelect<Artist> query = ObjectSelect.query(Artist.class); - query.prefetch(Artist.PAINTING_ARRAY.alias("p1").disjoint()); - query.select(context); - } -} http://git-wip-us.apache.org/repos/asf/cayenne/blob/fa1efbce/cayenne-server/src/test/java/org/apache/cayenne/query/ColumnSelectIT.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/ColumnSelectIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/ColumnSelectIT.java index 4d2ebab..5e8f95a 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/query/ColumnSelectIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/query/ColumnSelectIT.java @@ -19,6 +19,15 @@ package org.apache.cayenne.query; +import java.math.BigDecimal; +import java.math.BigInteger; +import java.sql.SQLException; +import java.sql.Types; +import java.text.DateFormat; +import java.util.Date; +import java.util.List; +import java.util.Locale; + import org.apache.cayenne.CayenneRuntimeException; import org.apache.cayenne.Fault; import org.apache.cayenne.ObjectContext; @@ -46,21 +55,7 @@ import org.junit.Before; import org.junit.Ignore; import org.junit.Test; -import java.math.BigDecimal; -import java.math.BigInteger; -import java.sql.SQLException; -import java.sql.Types; -import java.text.DateFormat; -import java.util.Date; -import java.util.List; -import java.util.Locale; - -import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +import static org.junit.Assert.*; /** * @since 4.0 http://git-wip-us.apache.org/repos/asf/cayenne/blob/fa1efbce/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelectTest.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelectTest.java b/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelectTest.java index ae06952..dd9e1f2 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelectTest.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelectTest.java @@ -18,16 +18,6 @@ ****************************************************************/ package org.apache.cayenne.query; -import org.apache.cayenne.DataRow; -import org.apache.cayenne.exp.Expression; -import org.apache.cayenne.exp.ExpressionFactory; -import org.apache.cayenne.testdo.testmap.Artist; -import org.junit.Test; - -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; - import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; @@ -35,6 +25,16 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; + +import org.apache.cayenne.DataRow; +import org.apache.cayenne.exp.Expression; +import org.apache.cayenne.exp.ExpressionFactory; +import org.apache.cayenne.testdo.testmap.Artist; +import org.junit.Test; + public class ObjectSelectTest { @Test http://git-wip-us.apache.org/repos/asf/cayenne/blob/fa1efbce/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_AggregateIT.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_AggregateIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_AggregateIT.java index b5910bc..80a67b4 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_AggregateIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_AggregateIT.java @@ -19,9 +19,15 @@ package org.apache.cayenne.query; +import java.sql.Types; +import java.text.DateFormat; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Locale; + import org.apache.cayenne.access.DataContext; import org.apache.cayenne.di.Inject; -import org.apache.cayenne.exp.FunctionExpressionFactory; import org.apache.cayenne.exp.property.BaseProperty; import org.apache.cayenne.exp.property.NumericProperty; import org.apache.cayenne.exp.property.PropertyFactory; @@ -36,13 +42,7 @@ import org.junit.Before; import org.junit.Ignore; import org.junit.Test; -import java.sql.Types; -import java.text.DateFormat; -import java.util.Arrays; -import java.util.Date; -import java.util.List; -import java.util.Locale; - +import static org.apache.cayenne.exp.FunctionExpressionFactory.*; import static org.junit.Assert.assertEquals; /** @@ -101,7 +101,7 @@ public class ObjectSelect_AggregateIT extends ServerCase { .selectOne(context); assertEquals(20L, count); } - + @Test public void testCountDistinct() throws Exception { List<Artist> artists = ObjectSelect.query(Artist.class).select(context); @@ -121,7 +121,7 @@ public class ObjectSelect_AggregateIT extends ServerCase { @Test @Ignore("Not all databases support AVG(DATE) aggregation") public void testAvg() throws Exception { - BaseProperty<Date> avgProp = PropertyFactory.createBase(FunctionExpressionFactory.avgExp(Artist.DATE_OF_BIRTH.getExpression()), Date.class); + BaseProperty<Date> avgProp = PropertyFactory.createBase(avgExp(Artist.DATE_OF_BIRTH.getExpression()), Date.class); Date avg = ObjectSelect.query(Artist.class) .column(avgProp) @@ -178,4 +178,4 @@ public class ObjectSelect_AggregateIT extends ServerCase { assertEquals("artist1", result[0]); assertEquals(4L, result[1]); } -} +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cayenne/blob/fa1efbce/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_RunIT.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_RunIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_RunIT.java index df5632f..3414ba7 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_RunIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_RunIT.java @@ -18,6 +18,8 @@ ****************************************************************/ package org.apache.cayenne.query; +import java.util.List; + import org.apache.cayenne.CayenneRuntimeException; import org.apache.cayenne.DataRow; import org.apache.cayenne.ResultBatchIterator; @@ -33,8 +35,6 @@ import org.apache.cayenne.unit.di.server.UseServerRuntime; import org.junit.Before; import org.junit.Test; -import java.util.List; - import static org.hamcrest.CoreMatchers.instanceOf; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; http://git-wip-us.apache.org/repos/asf/cayenne/blob/fa1efbce/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryIT.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryIT.java index 2352612..869a5e0 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryIT.java @@ -19,6 +19,17 @@ package org.apache.cayenne.query; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; + +import java.sql.Types; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + import org.apache.cayenne.Cayenne; import org.apache.cayenne.DataRow; import org.apache.cayenne.ObjectContext; @@ -46,17 +57,6 @@ import org.apache.cayenne.unit.di.server.UseServerRuntime; import org.junit.Before; import org.junit.Test; -import java.sql.Types; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; - @UseServerRuntime(CayenneProjects.TESTMAP_PROJECT) public class SelectQueryIT extends ServerCase {