diff --git a/src/main/java/com/mysema/query/ExtQueryBase.java b/src/main/java/com/mysema/query/ExtQueryBase.java
new file mode 100644
index 000000000..625357cd6
--- /dev/null
+++ b/src/main/java/com/mysema/query/ExtQueryBase.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2008 Mysema Ltd.
+ * All rights reserved.
+ *
+ */
+package com.mysema.query;
+
+import com.mysema.query.grammar.Types.BooleanExpr;
+import com.mysema.query.grammar.Types.EntityExpr;
+
+/**
+ * ExtQueryBased provides
+ *
+ * @author tiwe
+ * @version $Id$
+ */
+@SuppressWarnings("unchecked")
+public class ExtQueryBase> extends QueryBase implements ExtQuery {
+
+ public A innerJoin(EntityExpr> object) {
+ joins.add(new JoinExpression(JoinType.IJ,object));
+ return (A) this;
+ }
+
+ public A join(EntityExpr> object) {
+ joins.add(new JoinExpression(JoinType.J,object));
+ return (A) this;
+ }
+
+ public A leftJoin(EntityExpr> object) {
+ joins.add(new JoinExpression(JoinType.LJ,object));
+ return (A) this;
+ }
+
+ public A with(BooleanExpr... objects) {
+ if (!joins.isEmpty()){
+ joins.get(joins.size()-1).conditions = objects;
+ }
+ return (A) this;
+ }
+}
diff --git a/src/main/java/com/mysema/query/QueryBase.java b/src/main/java/com/mysema/query/QueryBase.java
index 4f5322716..a124b0554 100644
--- a/src/main/java/com/mysema/query/QueryBase.java
+++ b/src/main/java/com/mysema/query/QueryBase.java
@@ -1,3 +1,8 @@
+/*
+ * Copyright (c) 2008 Mysema Ltd.
+ * All rights reserved.
+ *
+ */
package com.mysema.query;
import java.util.ArrayList;
@@ -14,7 +19,7 @@ import com.mysema.query.grammar.Types.OrderSpecifier;
* @version $Id$
*/
@SuppressWarnings("unchecked")
-public class QueryBase> implements ExtQuery {
+public class QueryBase> implements Query {
public enum JoinType{
DEFAULT,IJ,LJ,J
}
@@ -35,7 +40,6 @@ public class QueryBase> implements ExtQuery {
protected OrderSpecifier>[] orderBy;
protected Expr>[] select;
protected BooleanExpr[] where;
- protected BooleanExpr[] with;
protected void clear(){
joins.clear();
@@ -47,7 +51,9 @@ public class QueryBase> implements ExtQuery {
}
public A from(EntityExpr>... objects) {
- // TODO
+ for (EntityExpr> expr : objects){
+ joins.add(new JoinExpression(JoinType.DEFAULT,expr));
+ }
return (A) this;
}
@@ -61,20 +67,6 @@ public class QueryBase> implements ExtQuery {
return (A) this;
}
- public A innerJoin(EntityExpr> object) {
-// innerJoin = objects;
- return (A) this;
- }
-
- public A join(EntityExpr> object) {
-// join = objects;
- return (A) this;
- }
-
- public A leftJoin(EntityExpr> object) {
-// leftJoin = objects;
- return (A) this;
- }
public A orderBy(OrderSpecifier>... objects) {
orderBy = objects;
@@ -91,9 +83,4 @@ public class QueryBase> implements ExtQuery {
return (A) this;
}
- public A with(BooleanExpr... objects) {
- with = objects;
- return (A) this;
- }
-
}
diff --git a/src/main/java/com/mysema/query/grammar/Grammar.java b/src/main/java/com/mysema/query/grammar/Grammar.java
index 267865b3a..e35783bb4 100644
--- a/src/main/java/com/mysema/query/grammar/Grammar.java
+++ b/src/main/java/com/mysema/query/grammar/Grammar.java
@@ -121,6 +121,10 @@ public class Grammar {
public static EntityExpr as(DomainType from, DomainType to) {
return new Alias(from, to);
}
+
+ public static EntityExpr as(CollectionReference from, DomainType to) {
+ return new CollectionAlias(from, to);
+ }
public static > OrderSpecifier asc(Expr target) {
return _orderAsc(target);
diff --git a/src/main/java/com/mysema/query/grammar/Types.java b/src/main/java/com/mysema/query/grammar/Types.java
index 18411b840..6a7354cde 100644
--- a/src/main/java/com/mysema/query/grammar/Types.java
+++ b/src/main/java/com/mysema/query/grammar/Types.java
@@ -5,6 +5,9 @@
*/
package com.mysema.query.grammar;
+import java.util.Collection;
+
+
/**
* Types provides the types of the fluent grammar
*
@@ -32,8 +35,8 @@ public class Types {
* arguments don't need to be of same type as return type
*/
public Expr left;
- public Expr right;
public Op operator;
+ public Expr right;
}
/**
@@ -47,7 +50,7 @@ public class Types {
public static class BooleanProperty extends Reference implements BooleanExpr{
public BooleanProperty(String path) {super(path);}
}
-
+
/**
* Boolean operators (operators used with boolean operands)
*/
@@ -58,9 +61,26 @@ public class Types {
BoOp XNOR = new BoOpImpl();
BoOp XOR = new BoOpImpl();
}
-
+
static class BoOpImpl