#80 added conversion of non path projections to aliased projections

This commit is contained in:
Timo Westkämper 2012-01-14 19:29:53 +02:00
parent 8eb96da120
commit df948b1da2
4 changed files with 28 additions and 3 deletions

View File

@ -1,7 +1,7 @@
----------------------------------------------------------------
Tue Dec 20 21:23:01 EET 2011:
Booting Derby version The Apache Software Foundation - Apache Derby - 10.8.2.2 - (1181258): instance a816c00e-0134-5ced-4557-000002bb1ce0
on database directory /home/tiwe/work/querydsl/querydsl-jpa/target/derbydb with class loader sun.misc.Launcher$AppClassLoader@16f0472
Sat Jan 14 19:25:17 EET 2012:
Booting Derby version The Apache Software Foundation - Apache Derby - 10.8.2.2 - (1181258): instance a816c00e-0134-dd40-7974-000002cca5a0
on database directory /home/tiwe/work/querydsl/querydsl-jpa/target/derbydb with class loader sun.misc.Launcher$AppClassLoader@1a16869
Loaded from file:/home/tiwe/.m2/repository/org/apache/derby/derby/10.8.2.2/derby-10.8.2.2.jar
java.vendor=Sun Microsystems Inc.
java.runtime.version=1.6.0_26-b03

View File

@ -42,6 +42,7 @@ import com.mysema.query.sql.SQLTemplates;
import com.mysema.query.sql.Union;
import com.mysema.query.sql.UnionImpl;
import com.mysema.query.types.Expression;
import com.mysema.query.types.ExpressionUtils;
import com.mysema.query.types.FactoryExpression;
import com.mysema.query.types.Path;
import com.mysema.query.types.SubQueryExpression;
@ -109,6 +110,12 @@ public abstract class AbstractHibernateSQLQuery<Q extends AbstractHibernateSQLQu
}
public Query createQuery(Expression<?>... args) {
for (int i = 0; i < args.length; i++) {
// create aliases for non path projections
if (!(args[i] instanceof Path) && !(args[i] instanceof FactoryExpression)) {
args[i] = ExpressionUtils.as(args[i], "col"+(i+1));
}
}
queryMixin.getMetadata().setValidate(false);
queryMixin.addToProjection(args);
return createQuery(toQueryString());
@ -258,6 +265,7 @@ public abstract class AbstractHibernateSQLQuery<Q extends AbstractHibernateSQLQu
return innerUnion(sq);
}
@SuppressWarnings("unchecked")
private <RT> Union<RT> innerUnion(SubQueryExpression<?>... sq) {
queryMixin.getMetadata().setValidate(false);
if (!queryMixin.getMetadata().getJoins().isEmpty()) {

View File

@ -43,6 +43,9 @@ import com.mysema.query.sql.Union;
import com.mysema.query.sql.UnionImpl;
import com.mysema.query.types.EntityPath;
import com.mysema.query.types.Expression;
import com.mysema.query.types.ExpressionUtils;
import com.mysema.query.types.FactoryExpression;
import com.mysema.query.types.Path;
import com.mysema.query.types.SubQueryExpression;
import com.mysema.query.types.query.ListSubQuery;
@ -100,6 +103,12 @@ public abstract class AbstractJPASQLQuery<Q extends AbstractJPASQLQuery<Q> & com
}
public Query createQuery(Expression<?>... args) {
for (int i = 0; i < args.length; i++) {
// create aliases for non path projections
if (!(args[i] instanceof Path) && !(args[i] instanceof FactoryExpression)) {
args[i] = ExpressionUtils.as(args[i], "col"+(i+1));
}
}
queryMixin.getMetadata().setValidate(false);
queryMixin.addToProjection(args);
return createQuery(toQueryString());

View File

@ -102,6 +102,14 @@ public class JPADerbySQLTest {
assertEquals(6, query().from(cat).where(cat.dtype.eq("C")).list(cat.id).size());
}
@Test
public void List_Non_Path() {
assertEquals(6, query().from(cat).where(cat.dtype.eq("C")).list(
cat.birthdate.year(),
cat.birthdate.month(),
cat.birthdate.dayOfMonth()).size());
}
@Test
public void List_With_Limit(){
assertEquals(3, query().from(cat).limit(3).list(cat.id).size());