diff --git a/querydsl-core/src/main/java/com/mysema/query/serialization/OperationPatterns.java b/querydsl-core/src/main/java/com/mysema/query/serialization/OperationPatterns.java index a365fa388..e0250c56f 100644 --- a/querydsl-core/src/main/java/com/mysema/query/serialization/OperationPatterns.java +++ b/querydsl-core/src/main/java/com/mysema/query/serialization/OperationPatterns.java @@ -139,6 +139,10 @@ public abstract class OperationPatterns { add(Ops.OpString.LTRIM, "ltrim(%s)"); add(Ops.OpString.RTRIM, "rtrim(%s)"); add(Ops.OpString.SPACE, "space(%s)"); + + // collection + add(Ops.CONTAINS_KEY, "containsKey(%s,%s)"); + add(Ops.CONTAINS_VALUE, "containsValue(%s,%s)"); // path types for (PathType type : new PathType[] { PathMetadata.LISTVALUE, diff --git a/querydsl-core/src/main/java/com/mysema/query/types/Grammar.java b/querydsl-core/src/main/java/com/mysema/query/types/Grammar.java index bbd46bb07..73cde7f44 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/Grammar.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/Grammar.java @@ -23,6 +23,7 @@ import com.mysema.query.types.operation.Ops.OpNumberAgg; import com.mysema.query.types.path.PCollection; import com.mysema.query.types.path.PEntity; import com.mysema.query.types.path.PEntityCollection; +import com.mysema.query.types.path.PMap; /** * Grammar provides the factory methods for the fluent grammar. @@ -38,9 +39,6 @@ public class Grammar { protected static final OperationFactory operationFactory = SimpleOperationFactory .getInstance(); - protected Grammar() { - }; - /** * Expr : left > right * @@ -54,20 +52,7 @@ public class Grammar { // types return operationFactory.createBoolean(Ops.AFTER, left, exprFactory .createConstant(right)); - } - - /** - * Expr : left >= right (after or equals) - * - * @param - * @param left - * @param right - * @return - */ - public static > EBoolean aoe(Expr left, A right) { - return operationFactory.createBoolean(Ops.AOE, left, exprFactory - .createConstant(right)); - } + }; /** * Expr : left > right @@ -84,7 +69,31 @@ public class Grammar { // types return operationFactory.createBoolean(Ops.AFTER, left, right); } - + + /** + * Expr : left and right + * + * @param left + * @param right + * @return + */ + public static EBoolean and(EBoolean left, EBoolean right) { + return operationFactory.createBoolean(Ops.AND, left, right); + } + + /** + * Expr : left >= right (after or equals) + * + * @param + * @param left + * @param right + * @return + */ + public static > EBoolean aoe(Expr left, A right) { + return operationFactory.createBoolean(Ops.AOE, left, exprFactory + .createConstant(right)); + } + /** * Expr : left >= right * @@ -97,18 +106,7 @@ public class Grammar { Expr right) { return operationFactory.createBoolean(Ops.AOE, left, right); } - - /** - * Expr : left and right - * - * @param left - * @param right - * @return - */ - public static EBoolean and(EBoolean left, EBoolean right) { - return operationFactory.createBoolean(Ops.AND, left, right); - } - + /** * Expr : from as to * @@ -188,19 +186,6 @@ public class Grammar { .createConstant(right)); } - /** - * Expr : left <= right (before or equals) - * - * @param - * @param left - * @param right - * @return - */ - public static > EBoolean boe(Expr left, A right) { - return operationFactory.createBoolean(Ops.BOE, left, exprFactory - .createConstant(right)); - } - /** * Expr : left < right * @@ -211,25 +196,11 @@ public class Grammar { */ public static > EBoolean before(Expr left, Expr right) { - // NOTE : signature is for Comparables to support other than Java's date - // types + // NOTE : signature is for Comparables to support other than Java's date types // NOTE : basically same as lt return operationFactory.createBoolean(Ops.BEFORE, left, right); } - /** - * Expr : left <= right - * - * @param - * @param left - * @param right - * @return - */ - public static > EBoolean boe(Expr left, - Expr right) { - return operationFactory.createBoolean(Ops.BOE, left, right); - } - /** * Expr : left between start and end * @@ -259,6 +230,32 @@ public class Grammar { return operationFactory.createBoolean(Ops.BETWEEN, left, start, end); } + /** + * Expr : left <= right (before or equals) + * + * @param + * @param left + * @param right + * @return + */ + public static > EBoolean boe(Expr left, A right) { + return operationFactory.createBoolean(Ops.BOE, left, exprFactory + .createConstant(right)); + } + + /** + * Expr : left <= right + * + * @param + * @param left + * @param right + * @return + */ + public static > EBoolean boe(Expr left, + Expr right) { + return operationFactory.createBoolean(Ops.BOE, left, right); + } + /** * Expr : left.chartAt(right) * @@ -330,6 +327,50 @@ public class Grammar { .createConstant(right)); } + /** + * + * @param + * @param path + * @param key + * @return + */ + public static EBoolean containsKey(PMap path, Expr key){ + return operationFactory.createBoolean(Ops.CONTAINS_KEY, (Expr)path, key); + } + + /** + * + * @param + * @param path + * @param key + * @return + */ + public static EBoolean containsKey(PMap path, K key){ + return operationFactory.createBoolean(Ops.CONTAINS_KEY, (Expr)path, exprFactory.createConstant(key)); + } + + /** + * + * @param + * @param path + * @param value + * @return + */ + public static EBoolean containsValue(PMap path, Expr value){ + return operationFactory.createBoolean(Ops.CONTAINS_VALUE, (Expr)path, value); + } + + /** + * + * @param + * @param path + * @param value + * @return + */ + public static EBoolean containsValue(PMap path, V value){ + return operationFactory.createBoolean(Ops.CONTAINS_VALUE, (Expr)path, exprFactory.createConstant(value)); + } + /** * Expr : count(*) * @@ -371,11 +412,6 @@ public class Grammar { (Expr) collection); } - public static EBoolean notEmpty(PCollection collection) { - return operationFactory.createBoolean(Ops.COL_ISNOTEMPTY, - (Expr) collection); - } - /** * Expr : left.endsWith(right) * @@ -556,19 +592,6 @@ public class Grammar { .createConstant(left), (Expr) right); } - /** - * Expr : left in right OR right contains left - * - * @param - * @param left - * @param right - * @return - */ - public static EBoolean in(Expr left, Collection right) { - return operationFactory.createBoolean(Ops.IN, left, exprFactory - .createConstant(right)); - } - /** * Expr : left in rest OR rest contains left * @@ -582,6 +605,19 @@ public class Grammar { .createConstant(rest)); } + /** + * Expr : left in right OR right contains left + * + * @param + * @param left + * @param right + * @return + */ + public static EBoolean in(Expr left, Collection right) { + return operationFactory.createBoolean(Ops.IN, left, exprFactory + .createConstant(right)); + } + /** * Expr : left in right OR right contains left * @@ -633,6 +669,21 @@ public class Grammar { .createConstant(i)); } + /** + * Expr : left instanceOf right + * + * @param + * @param + * @param left + * @param right + * @return + */ + public static EBoolean instanceOf(Expr left, + Class right) { + return operationFactory.createBoolean(Ops.ISTYPEOF, left, exprFactory + .createConstant(right)); + } + /** * Expr : left.isEmpty() * @@ -899,6 +950,11 @@ public class Grammar { return operationFactory.createBoolean(Ops.NOTBETWEEN, left, start, end); } + public static EBoolean notEmpty(PCollection collection) { + return operationFactory.createBoolean(Ops.COL_ISNOTEMPTY, + (Expr) collection); + } + /** * Expr : left not in rest * @@ -945,16 +1001,6 @@ public class Grammar { } } - /** - * Expr : cast(source as String) - * - * @param source - * @return - */ - public static EString stringCast(EComparable source) { - return operationFactory.createString(Ops.STRING_CAST, source); - } - /** * Expr : left or right * @@ -1035,6 +1081,16 @@ public class Grammar { } } + /** + * Expr : cast(source as String) + * + * @param source + * @return + */ + public static EString stringCast(EComparable source) { + return operationFactory.createString(Ops.STRING_CAST, source); + } + /** * Expr : left.substring(right) * @@ -1072,21 +1128,6 @@ public class Grammar { return operationFactory.createString(Ops.TRIM, left); } - /** - * Expr : left instanceOf right - * - * @param - * @param - * @param left - * @param right - * @return - */ - public static EBoolean instanceOf(Expr left, - Class right) { - return operationFactory.createBoolean(Ops.ISTYPEOF, left, exprFactory - .createConstant(right)); - } - /** * Expr : left.toUpperCase() * @@ -1096,4 +1137,7 @@ public class Grammar { public static EString upper(Expr left) { return operationFactory.createString(Ops.UPPER, left); } + + protected Grammar() { + } } diff --git a/querydsl-core/src/main/java/com/mysema/query/types/operation/Ops.java b/querydsl-core/src/main/java/com/mysema/query/types/operation/Ops.java index 2dde3767d..b5867f23f 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/operation/Ops.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/operation/Ops.java @@ -18,7 +18,7 @@ import java.util.List; * @version $Id$ */ public interface Ops { - + static List> Boolean_x_2 = unmodifiableList(Arrays.> asList(Boolean.class, Boolean.class)); static List> Comparable_x_2 = unmodifiableList(Arrays.> asList(Comparable.class, Comparable.class)); @@ -122,6 +122,8 @@ public interface Ops { Op ENDSWITH = new Op(String_x_2); Op ENDSWITH_IC = new Op(String_x_2); Op CONTAINS = new Op(String_x_2); + Op CONTAINS_KEY = new Op(Object_x_2); + Op CONTAINS_VALUE = new Op(Object_x_2); // subquery operations Op EXISTS = new Op(Object.class); diff --git a/querydsl-core/src/main/java/com/mysema/query/types/path/PComponentMap.java b/querydsl-core/src/main/java/com/mysema/query/types/path/PComponentMap.java index e845906d3..7667a6f94 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/path/PComponentMap.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/path/PComponentMap.java @@ -83,4 +83,24 @@ public class PComponentMap extends ESimple> implements return o instanceof Path ? ((Path) o).getMetadata().equals(metadata) : false; } + + @Override + public EBoolean containsKey(Expr key) { + return Grammar.containsKey(this, key); + } + + @Override + public EBoolean containsKey(K key) { + return Grammar.containsKey(this, key); + } + + @Override + public EBoolean containsValue(Expr value) { + return Grammar.containsValue(this, value); + } + + @Override + public EBoolean containsValue(V value) { + return Grammar.containsValue(this, value); + } } \ No newline at end of file diff --git a/querydsl-core/src/main/java/com/mysema/query/types/path/PEntityMap.java b/querydsl-core/src/main/java/com/mysema/query/types/path/PEntityMap.java index 6d0b2c6f3..d0418733b 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/path/PEntityMap.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/path/PEntityMap.java @@ -88,4 +88,24 @@ public class PEntityMap extends Expr> implements PMap { return o instanceof Path ? ((Path) o).getMetadata().equals(metadata) : false; } + + @Override + public EBoolean containsKey(Expr key) { + return Grammar.containsKey(this, key); + } + + @Override + public EBoolean containsKey(K key) { + return Grammar.containsKey(this, key); + } + + @Override + public EBoolean containsValue(Expr value) { + return Grammar.containsValue(this, value); + } + + @Override + public EBoolean containsValue(V value) { + return Grammar.containsValue(this, value); + } } \ No newline at end of file diff --git a/querydsl-core/src/main/java/com/mysema/query/types/path/PMap.java b/querydsl-core/src/main/java/com/mysema/query/types/path/PMap.java index da2032c9b..f75589e9d 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/path/PMap.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/path/PMap.java @@ -5,6 +5,7 @@ */ package com.mysema.query.types.path; +import com.mysema.query.types.expr.EBoolean; import com.mysema.query.types.expr.Expr; /** @@ -21,4 +22,12 @@ public interface PMap extends Path> { Class getKeyType(); Class getValueType(); + + EBoolean containsKey(Expr key); + + EBoolean containsKey(K key); + + EBoolean containsValue(Expr value); + + EBoolean containsValue(V value); } \ No newline at end of file