From 29e33b375019034b0bcef10bd8f7e63ac70e205f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 30 Jan 2009 14:22:06 +0000 Subject: [PATCH] --- .../src/main/java/com/mysema/query/Query.java | 3 +- .../main/java/com/mysema/query/QueryBase.java | 49 ++++++++++--------- .../query/grammar/types/Projection.java | 8 ++- .../mysema/query/grammar/types/SubQuery.java | 2 +- 4 files changed, 33 insertions(+), 29 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/Query.java b/querydsl-core/src/main/java/com/mysema/query/Query.java index bfe121400..678b3730a 100644 --- a/querydsl-core/src/main/java/com/mysema/query/Query.java +++ b/querydsl-core/src/main/java/com/mysema/query/Query.java @@ -21,8 +21,7 @@ public interface Query>{ A join(EEntity o); A fullJoin(EEntity o); A leftJoin(EEntity o); - A with(Expr.EBoolean o); - A where(Expr.EBoolean... o); + A on(Expr.EBoolean o); A groupBy(Expr... o); A having(Expr.EBoolean... o); A orderBy(OrderSpecifier... o); diff --git a/querydsl-core/src/main/java/com/mysema/query/QueryBase.java b/querydsl-core/src/main/java/com/mysema/query/QueryBase.java index 317eed94b..d3420a4aa 100644 --- a/querydsl-core/src/main/java/com/mysema/query/QueryBase.java +++ b/querydsl-core/src/main/java/com/mysema/query/QueryBase.java @@ -11,6 +11,7 @@ import java.util.List; import com.mysema.query.grammar.OrderSpecifier; import com.mysema.query.grammar.types.Expr; +import com.mysema.query.grammar.types.Expr.EBoolean; import com.mysema.query.grammar.types.Expr.EEntity; /** @@ -42,7 +43,7 @@ public class QueryBase> implements Quer private final Metadata metadata = new Metadata(); - public A from(Expr.EEntity... o) { + public A from(EEntity... o) { for (EEntity expr : o){ joins.add(new JoinExpression(JoinType.DEFAULT,expr)); } @@ -51,56 +52,56 @@ public class QueryBase> implements Quer public A groupBy(Expr... o) { groupBy.addAll(Arrays.asList(o)); - return (A) this; + return self; } - public A having(Expr.EBoolean... o) { - for (Expr.EBoolean b : o) having.and(b); - return (A) this; + public A having(EBoolean... o) { + for (EBoolean b : o) having.and(b); + return self; } public A innerJoin(EEntity o) { joins.add(new JoinExpression(JoinType.INNERJOIN,o)); - return (A) this; + return self; } public A fullJoin(EEntity o) { joins.add(new JoinExpression(JoinType.FULLJOIN,o)); - return (A) this; + return self; } public A join(EEntity o) { joins.add(new JoinExpression(JoinType.JOIN,o)); - return (A) this; + return self; } public A leftJoin(EEntity o) { joins.add(new JoinExpression(JoinType.LEFTJOIN,o)); - return (A) this; + return self; + } + + public A on(EBoolean o) { + if (!joins.isEmpty()){ + joins.get(joins.size()-1).setCondition(o); + } + return self; } public A orderBy(OrderSpecifier... o) { orderBy.addAll(Arrays.asList(o)); - return (A) this; + return self; } protected A select(Expr... o) { select.addAll(Arrays.asList(o)); - return (A) this; + return self; } - public A where(Expr.EBoolean... o) { - for (Expr.EBoolean b : o) where.and(b); - return (A) this; + public A where(EBoolean... o) { + for (EBoolean b : o) where.and(b); + return self; } - - public A with(Expr.EBoolean o) { - if (!joins.isEmpty()){ - joins.get(joins.size()-1).setCondition(o); - } - return (A) this; - } - + public Metadata getMetadata(){ return metadata; } @@ -112,7 +113,7 @@ public class QueryBase> implements Quer public List> getGroupBy() { return groupBy; } - public Expr.EBoolean getHaving() { + public EBoolean getHaving() { return having.self(); } public List> getJoins() { @@ -124,7 +125,7 @@ public class QueryBase> implements Quer public List> getSelect() { return select; } - public Expr.EBoolean getWhere() { + public EBoolean getWhere() { return where.self(); } } diff --git a/querydsl-core/src/main/java/com/mysema/query/grammar/types/Projection.java b/querydsl-core/src/main/java/com/mysema/query/grammar/types/Projection.java index e97202366..a4e8f14df 100644 --- a/querydsl-core/src/main/java/com/mysema/query/grammar/types/Projection.java +++ b/querydsl-core/src/main/java/com/mysema/query/grammar/types/Projection.java @@ -63,7 +63,7 @@ public class Projection extends Path.PEntity{ ParameterizedType type = (ParameterizedType) field.getGenericType(); Class exprType = (Class) type.getActualTypeArguments()[0]; Expr fieldVal; - if (Boolean.class.isAssignableFrom(exprType)){ + if (Boolean.class.isAssignableFrom(exprType)){ fieldVal = _boolean(field.getName()); }else if (Number.class.isAssignableFrom(exprType)){ fieldVal = (Expr) _numberMethod.invoke(this, field.getName(), exprType); @@ -74,7 +74,11 @@ public class Projection extends Path.PEntity{ }else{ fieldVal = _simple(field.getName(), exprType); } - field.set(this, fieldVal); + if (field.getType().isAssignableFrom(fieldVal.getClass())){ + field.set(this, fieldVal); + }else{ + // unsupported + } } public String getName(){ diff --git a/querydsl-core/src/main/java/com/mysema/query/grammar/types/SubQuery.java b/querydsl-core/src/main/java/com/mysema/query/grammar/types/SubQuery.java index a924c6b8c..a162bed78 100644 --- a/querydsl-core/src/main/java/com/mysema/query/grammar/types/SubQuery.java +++ b/querydsl-core/src/main/java/com/mysema/query/grammar/types/SubQuery.java @@ -37,11 +37,11 @@ public class SubQuery extends Expr implements Query>, Co public SubQuery innerJoin(EEntity o) {query.innerJoin(o); return this;} public SubQuery join(EEntity o) {query.join(o); return this;} public SubQuery leftJoin(EEntity o) {query.leftJoin(o); return this;} + public SubQuery on(EBoolean o) {query.on(o); return this;} public SubQuery orderBy(OrderSpecifier... o) {query.orderBy(o); return this;} public SubQuery select(Expr... o) { query.s(o); return this;} public SubQuery where(EBoolean... o) {query.where(o); return this;} - public SubQuery with(EBoolean o) {query.with(o); return this;} // TODO : add some validation that the given Projection is valid for this subquery public Alias.ASimple as(Projection to) { to.accept(this);