diff --git a/src/main/java/com/mysema/query/ExtQuery.java b/src/main/java/com/mysema/query/ExtQuery.java index 646c4dccb..497b63ea9 100644 --- a/src/main/java/com/mysema/query/ExtQuery.java +++ b/src/main/java/com/mysema/query/ExtQuery.java @@ -14,7 +14,7 @@ import com.mysema.query.grammar.Types.EntityExpr; * @author tiwe * @version $Id$ */ -public interface ExtQuery> extends Query { +public interface ExtQuery> extends Query { A innerJoin(EntityExpr object); A join(EntityExpr object); A leftJoin(EntityExpr object); diff --git a/src/main/java/com/mysema/query/Query.java b/src/main/java/com/mysema/query/Query.java index e4a97455b..d5d0fb224 100644 --- a/src/main/java/com/mysema/query/Query.java +++ b/src/main/java/com/mysema/query/Query.java @@ -17,7 +17,7 @@ import com.mysema.query.grammar.Types.OrderSpecifier; * @author tiwe * @version $Id$ */ -public interface Query>{ +public interface Query>{ A select(Expr... objects); A from(EntityExpr... objects); A where(BooleanExpr... objects); diff --git a/src/main/java/com/mysema/query/QueryBase.java b/src/main/java/com/mysema/query/QueryBase.java index 8b9efeda6..4f5322716 100644 --- a/src/main/java/com/mysema/query/QueryBase.java +++ b/src/main/java/com/mysema/query/QueryBase.java @@ -1,5 +1,8 @@ package com.mysema.query; +import java.util.ArrayList; +import java.util.List; + import com.mysema.query.grammar.Types.BooleanExpr; import com.mysema.query.grammar.Types.EntityExpr; import com.mysema.query.grammar.Types.Expr; @@ -10,80 +13,87 @@ import com.mysema.query.grammar.Types.OrderSpecifier; * @author tiwe * @version $Id$ */ -public class QueryBase implements ExtQuery { +@SuppressWarnings("unchecked") +public class QueryBase> implements ExtQuery { + public enum JoinType{ + DEFAULT,IJ,LJ,J + } - protected EntityExpr[] from; + public class JoinExpression{ + public final JoinType type; + public final EntityExpr target; + JoinExpression(JoinType type, EntityExpr target){ + this.type = type; + this.target = target; + } + public BooleanExpr[] conditions; + } + + protected List joins = new ArrayList(); protected Expr[] groupBy; protected BooleanExpr[] having; -// protected EntityExpr[] innerJoin; -// protected EntityExpr[] join; -// protected EntityExpr[] leftJoin; protected OrderSpecifier[] orderBy; protected Expr[] select; protected BooleanExpr[] where; protected BooleanExpr[] with; protected void clear(){ - from = null; + joins.clear(); groupBy = null; having = null; -// innerJoin = null; -// join = null; -// leftJoin = null; orderBy = null; select = null; where = null; - with = null; } - public QueryBase from(EntityExpr... objects) { - from = objects; - return this; + public A from(EntityExpr... objects) { + // TODO + return (A) this; } - public QueryBase groupBy(Expr... objects) { + public A groupBy(Expr... objects) { groupBy = objects; - return this; + return (A) this; } - public QueryBase having(BooleanExpr... objects) { + public A having(BooleanExpr... objects) { having = objects; - return this; + return (A) this; } - public QueryBase innerJoin(EntityExpr object) { + public A innerJoin(EntityExpr object) { // innerJoin = objects; - return this; + return (A) this; } - public QueryBase join(EntityExpr object) { + public A join(EntityExpr object) { // join = objects; - return this; + return (A) this; } - public QueryBase leftJoin(EntityExpr object) { + public A leftJoin(EntityExpr object) { // leftJoin = objects; - return this; + return (A) this; } - public QueryBase orderBy(OrderSpecifier... objects) { + public A orderBy(OrderSpecifier... objects) { orderBy = objects; - return this; + return (A) this; } - public QueryBase select(Expr... objects) { + public A select(Expr... objects) { select = objects; - return this; + return (A) this; } - public QueryBase where(BooleanExpr... objects) { + public A where(BooleanExpr... objects) { where = objects; - return this; + return (A) this; } - public QueryBase with(BooleanExpr... objects) { + public A with(BooleanExpr... objects) { with = objects; - return this; + return (A) this; } } diff --git a/src/main/java/com/mysema/query/grammar/Visitor.java b/src/main/java/com/mysema/query/grammar/Visitor.java index def8f6ff3..778a24f12 100644 --- a/src/main/java/com/mysema/query/grammar/Visitor.java +++ b/src/main/java/com/mysema/query/grammar/Visitor.java @@ -35,7 +35,9 @@ public abstract class Visitor> { sigClass = sigClass.getSuperclass(); } } - method.setAccessible(true); + if (method != null){ + method.setAccessible(true); + } return method; } catch (Exception e) { throw new RuntimeException(e);