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);