From e2a8d69bb58fbeabc5ed287762e0673407ad2bdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 20 Feb 2008 19:50:55 +0000 Subject: [PATCH] refactorings --- .../com/mysema/query/grammar/BoOpImpl.java | 11 -- .../com/mysema/query/grammar/Grammar.java | 119 +++++++++++++----- .../com/mysema/query/grammar/NumOpImpl.java | 11 -- .../java/com/mysema/query/grammar/OpImpl.java | 13 -- .../com/mysema/query/grammar/StrOpImpl.java | 11 -- .../java/com/mysema/query/grammar/Types.java | 65 ++++++---- .../java/com/mysema/query/test/QueryBase.java | 3 +- .../java/com/mysema/query/test/QueryTest.java | 9 ++ 8 files changed, 142 insertions(+), 100 deletions(-) delete mode 100644 src/main/java/com/mysema/query/grammar/BoOpImpl.java delete mode 100644 src/main/java/com/mysema/query/grammar/NumOpImpl.java delete mode 100644 src/main/java/com/mysema/query/grammar/OpImpl.java delete mode 100644 src/main/java/com/mysema/query/grammar/StrOpImpl.java diff --git a/src/main/java/com/mysema/query/grammar/BoOpImpl.java b/src/main/java/com/mysema/query/grammar/BoOpImpl.java deleted file mode 100644 index e077ea13c..000000000 --- a/src/main/java/com/mysema/query/grammar/BoOpImpl.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.mysema.query.grammar; - -/** - * BoOpImpl provides - * - * @author tiwe - * @version $Id$ - */ -public class BoOpImpl implements Types.BoOp{ - -} diff --git a/src/main/java/com/mysema/query/grammar/Grammar.java b/src/main/java/com/mysema/query/grammar/Grammar.java index c1129b494..39859ebf8 100644 --- a/src/main/java/com/mysema/query/grammar/Grammar.java +++ b/src/main/java/com/mysema/query/grammar/Grammar.java @@ -11,17 +11,25 @@ import com.mysema.query.grammar.Types.*; */ public class Grammar { + static Operation _binOp(Op type, Expr left, Expr right) { + BinaryOperation op = new BinaryOperation(); + op.type = type; + op.left = left; + op.right = right; + return op; + } + + static Expr _const(A obj){ + ConstantExpr e = new ConstantExpr(); + e.constant = obj; + return e; + } + static OrderSpecifier _orderAsc(Expr target) { OrderSpecifier os = new OrderSpecifier(); os.order = Order.ASC; os.target = target; return os; - } - - static Expr _asConst(A obj){ - ConstantExpr e = new ConstantExpr(); - e.constant = obj; - return e; } static OrderSpecifier _orderDesc(Expr target) { @@ -30,58 +38,109 @@ public class Grammar { os.target = target; return os; } - - public static Expr and(Expr left, Expr right){ - return _bbe(BoOp.AND, left, right); + + static Operation _terOp(Op type, Expr fst, Expr snd, Expr trd){ + TertiaryOperation op = new TertiaryOperation(); + op.type = type; + op.first = fst; + op.second = snd; + op.third = trd; + return op; } + static Operation _unOp(Op type, Expr left) { + UnaryOperation op = new UnaryOperation(); + op.type = type; + op.left = left; + return op; + } + + public static Expr and(Expr left, Expr right){ + return _binOp(BoOp.AND, left, right); + } + public static OrderSpecifier asc(Expr target){ return _orderAsc(target); } + public static Expr concat(Expr left, Expr right){ + return _binOp(StrOp.CONCAT, left, right); + } + public static OrderSpecifier desc(Expr target){ return _orderDesc(target); - } - - public static Expr eq(Object left, Object right){ - return _bbe(NumOp.EQ, left, right); } - public static Expr goe(Object left, Object right){ - return _bbe(NumOp.GOE, left, right); + public static Expr eq(Expr left, Expr right){ + return _binOp(NumOp.EQ, left, right); } - public static Expr gt(Object left, Object right){ - return _bbe(NumOp.GT, left, right); - } + public static Expr eq(Expr left, A right){ + return _binOp(NumOp.EQ, left, _const(right)); + } + + public static Expr goe(Expr left, A right){ + return _binOp(NumOp.GOE, left, _const(right)); + } + + public static Expr goe(Expr left, Expr right){ + return _binOp(NumOp.GOE, left, right); + } + + public static Expr gt(Expr left, A right){ + return _binOp(NumOp.GT, left, _const(right)); + } + + public static Expr gt(Expr left, Expr right){ + return _binOp(NumOp.GT, left, right); + } public static Expr like(Expr left, String right){ - return _bbe(StrOp.LIKE, left, right); + return _binOp(StrOp.LIKE, left, _const(right)); } - public static Expr loe(Object left, Object right){ - return _bbe(NumOp.LOE, left, right); + public static Expr loe(Expr left, Expr right){ + return _binOp(NumOp.LOE, left, right); } - public static Expr lower(Expr path){ - return null; + public static Expr lower(Expr left){ + return _unOp(StrOp.LOWER, left); } - public static Expr lt(Object left, Object right){ - return _bbe(NumOp.LT, left, right); + public static Expr lt(Expr left, A right){ + return _binOp(NumOp.LT, left, _const(right)); } - public static Expr ne(Object left, Object right){ - return _bbe(NumOp.NE, left, right); + public static Expr lt(Expr left, Expr right){ + return _binOp(NumOp.LT, left, right); + } + + public static Expr ne(Expr left, A right){ + return _binOp(NumOp.NE, left, _const(right)); + } + + public static Expr ne(Expr left, Expr right){ + return _binOp(NumOp.NE, left, right); } public static Expr not(Expr left){ - return _bue(BoOp.NE, left); - } + return _unOp(BoOp.NOT, left); + } public static Expr or(Expr left, Expr right){ - return _bbe(BoOp.OR, left, right); + return _binOp(BoOp.OR, left, right); } + public static Expr substr(Expr left, int start){ + return _binOp(StrOp.SUBSTRING, left, _const(start)); + } + + public static Expr substr(Expr left, int start, int offset){ + return _terOp(StrOp.SUBSTRING, left, _const(start), _const(offset)); + } + + public static Expr upper(Expr left){ + return _unOp(StrOp.UPPER, left); + } } diff --git a/src/main/java/com/mysema/query/grammar/NumOpImpl.java b/src/main/java/com/mysema/query/grammar/NumOpImpl.java deleted file mode 100644 index bac4620fd..000000000 --- a/src/main/java/com/mysema/query/grammar/NumOpImpl.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.mysema.query.grammar; - -/** - * NumOpImpl provides - * - * @author tiwe - * @version $Id$ - */ -class NumOpImpl implements Types.NumOp { - -} diff --git a/src/main/java/com/mysema/query/grammar/OpImpl.java b/src/main/java/com/mysema/query/grammar/OpImpl.java deleted file mode 100644 index 09bba7326..000000000 --- a/src/main/java/com/mysema/query/grammar/OpImpl.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.mysema.query.grammar; - -import com.mysema.query.grammar.Types.Op; - -/** - * OpImpl provides - * - * @author tiwe - * @version $Id$ - */ -public class OpImpl implements Op { - -} diff --git a/src/main/java/com/mysema/query/grammar/StrOpImpl.java b/src/main/java/com/mysema/query/grammar/StrOpImpl.java deleted file mode 100644 index a5ca1ca5f..000000000 --- a/src/main/java/com/mysema/query/grammar/StrOpImpl.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.mysema.query.grammar; - -/** - * StrOpImpl provides - * - * @author tiwe - * @version $Id$ - */ -class StrOpImpl implements Types.StrOp{ - -} diff --git a/src/main/java/com/mysema/query/grammar/Types.java b/src/main/java/com/mysema/query/grammar/Types.java index 03bc9206e..54d07f56e 100644 --- a/src/main/java/com/mysema/query/grammar/Types.java +++ b/src/main/java/com/mysema/query/grammar/Types.java @@ -17,27 +17,19 @@ public class Types { } } - /** - * Binary boolean expression (expression with two arguments and boolean type) - */ - public static class BooleanBinaryExpr implements Expr{ - public Expr left; - public Expr right; - public Op type; + public static class BinaryOperation implements Operation{ + /** + * arguments don't need to be of same type as return type + */ + public Expr left; + public Expr right; + public Op type; } public static class BooleanProperty extends Reference{ public BooleanProperty(String path) {super(path);} } - /** - * Unary boolean expression (expression with one argument and boolean type) - */ - public static class BooleanUnaryExpr implements Expr{ - public Expr left; - public Op type; - } - /** * Boolean operators (operators used with boolean operands) */ @@ -49,6 +41,8 @@ public class Types { BoOp XOR = new BoOpImpl(); } + static class BoOpImpl implements BoOp{} + public static class CharProperty extends Reference{ public CharProperty(String path) {super(path);} } @@ -65,16 +59,16 @@ public class Types { public EntityPathExpr as(DomainType to){ return new AsExpr(this, to); } - } - + } + public static interface EntityPathExpr extends Expr{} - public interface Expr { } - + public interface Expr { } + public static class NumberProperty extends Reference{ public NumberProperty(String path) {super(path);} } - + /** * Numeric Operators (operators used with numeric operands) */ @@ -90,15 +84,20 @@ public class Types { NumOp SUB = new NumOpImpl(); } + static class NumOpImpl implements Types.NumOp {} + /** - * Operators (the return type is encoded in the generic parameter) + * Operators (the return type is encoded in the 1st generic parameter) */ public interface Op { Op EQ = new OpImpl(); Op NE = new OpImpl(); } + + public interface Operation extends Expr {} + static class OpImpl implements Op {} - public enum Order{ ASC,DESC } + public enum Order{ ASC,DESC } public static class OrderSpecifier{ public Order order; @@ -122,7 +121,7 @@ public class Types { protected StringProperty str(String path) { return new StringProperty(this._path+"."+path); } - } + } public static class StringProperty extends Reference{ public StringProperty(String path) {super(path);} @@ -138,5 +137,25 @@ public class Types { StrOp SUBSTRING = new StrOpImpl(); StrOp UPPER = new StrOpImpl(); } + + static class StrOpImpl implements StrOp{} + + public static class TertiaryOperation implements Operation{ + /** + * arguments don't need to be of same type as return type + */ + public Expr first; + public Expr second; + public Expr third; + public Op type; + } + + public static class UnaryOperation implements Operation{ + /** + * argument doesn't need to be of same type as return type + */ + public Expr left; + public Op type; + } } diff --git a/src/test/java/com/mysema/query/test/QueryBase.java b/src/test/java/com/mysema/query/test/QueryBase.java index 13b67dc45..2b806c849 100644 --- a/src/test/java/com/mysema/query/test/QueryBase.java +++ b/src/test/java/com/mysema/query/test/QueryBase.java @@ -9,7 +9,7 @@ import com.mysema.query.grammar.Types.*; * @version $Id$ */ public class QueryBase implements ExtQuery { - + public QueryBase from(EntityPathExpr... objects) { return this; } @@ -27,6 +27,7 @@ public class QueryBase implements ExtQuery { } public QueryBase where(Expr... objects) { + return this; } diff --git a/src/test/java/com/mysema/query/test/QueryTest.java b/src/test/java/com/mysema/query/test/QueryTest.java index 1dbdb6038..c7a561b9d 100644 --- a/src/test/java/com/mysema/query/test/QueryTest.java +++ b/src/test/java/com/mysema/query/test/QueryTest.java @@ -15,6 +15,15 @@ import org.junit.Test; */ public class QueryTest extends QueryBase{ + @Test + public void testSimple(){ + from(cat); + from(cat,cust).where(gt(cat.name,cust.name().firstName)); + select(lower(cat.name)).from(cat).where(eq(substr(cat.name,0,2),"Mi")); + select(upper(cat.name)).from(cat); + select(concat(lower(cat.name),cat.mate().name)).from(cat); + } + // cats @Test