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,V> path, Expr value){
+ return operationFactory.createBoolean(Ops.CONTAINS_VALUE, (Expr>)path, value);
+ }
+
+ /**
+ *
+ * @param
+ * @param path
+ * @param value
+ * @return
+ */
+ public static EBoolean containsValue(PMap,V> 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 extends A> 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 extends A> 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