From 38225517b289c6fddc8bd7e17c315f255a7c55cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 23 Feb 2008 18:35:26 +0000 Subject: [PATCH] updated --- .../java/com/mysema/query/ExtQueryBase.java | 41 +++++++++++++++++ src/main/java/com/mysema/query/QueryBase.java | 31 ++++--------- .../com/mysema/query/grammar/Grammar.java | 4 ++ .../java/com/mysema/query/grammar/Types.java | 45 ++++++++++++++----- .../com/mysema/query/grammar/Visitor.java | 4 ++ .../mysema/query/grammar/VisitorAdapter.java | 10 +++++ 6 files changed, 102 insertions(+), 33 deletions(-) create mode 100644 src/main/java/com/mysema/query/ExtQueryBase.java 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 implements BoOp{} + + public static class CollectionAlias extends Reference implements EntityExpr{ + public final CollectionReference from; + public final Reference to; + CollectionAlias(CollectionReference from, Reference to) { + super(to.toString()); + this.from = from; + this.to = to; + } + } + public static class CollectionReference extends Reference> implements + EntityExpr>{ + public CollectionReference(String p) { + super(p); + } + } + /** * Operators for Comparable objects */ @@ -70,10 +90,10 @@ public class Types { CompOp GT = new CompOpImpl(); CompOp LOE = new CompOpImpl(); CompOp LT = new CompOpImpl(); - } - - static class CompOpImpl implements CompOp {} + } + static class CompOpImpl implements CompOp {} + public static class ConstantExpr implements Expr{ public A constant; } @@ -96,6 +116,9 @@ public class Types { protected BooleanProperty _boolean(String path){ return new BooleanProperty(this+"."+path); } + protected CollectionReference _collection(String path,Class type) { + return new CollectionReference(this+"."+path); + } protected Reference _prop(String path,Class type) { return new Reference(this+"."+path); } @@ -126,11 +149,11 @@ public class Types { */ public interface Op { Op EQ = new OpImpl(); + Op IN = new OpImpl(); + Op ISNOTNULL = new OpImpl(); + Op ISNULL = new OpImpl(); Op ISTYPEOF = new OpImpl(); Op NE = new OpImpl(); - Op IN = new OpImpl(); - Op ISNULL = new OpImpl(); - Op ISNOTNULL = new OpImpl(); } public interface Operation extends Expr {} @@ -177,9 +200,9 @@ public class Types { * arguments don't need to be of same type as return type */ public Expr first; + public Op operator; public Expr second; - public Expr third; - public Op operator; + public Expr third; } public static class UnaryBooleanOperation extends UnaryOperation diff --git a/src/main/java/com/mysema/query/grammar/Visitor.java b/src/main/java/com/mysema/query/grammar/Visitor.java index 778a24f12..62d7f806b 100644 --- a/src/main/java/com/mysema/query/grammar/Visitor.java +++ b/src/main/java/com/mysema/query/grammar/Visitor.java @@ -64,6 +64,10 @@ public abstract class Visitor> { protected abstract void visit(BooleanProperty expr); + protected abstract void visit(CollectionAlias expr); + + protected abstract void visit(CollectionReference expr); + protected abstract void visit(ConstantExpr expr); protected abstract void visit(DomainType expr); diff --git a/src/main/java/com/mysema/query/grammar/VisitorAdapter.java b/src/main/java/com/mysema/query/grammar/VisitorAdapter.java index fd717a52f..796bb9f8a 100644 --- a/src/main/java/com/mysema/query/grammar/VisitorAdapter.java +++ b/src/main/java/com/mysema/query/grammar/VisitorAdapter.java @@ -25,6 +25,16 @@ public abstract class VisitorAdapter> extends Visito visit((Reference)expr); } + @Override + protected void visit(CollectionAlias expr){ + visit((Reference)expr); + } + + @Override + protected void visit(CollectionReference expr){ + visit((Reference)expr); + } + @Override protected void visit(DomainType expr) { visit((Reference)expr);