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 {
 

Reply via email to