diff --git a/querydsl-hibernate/src/main/java/com/mysema/query/grammar/HqlGrammar.java b/querydsl-hibernate/src/main/java/com/mysema/query/grammar/HqlGrammar.java index 46dbe50b1..7ed92bb40 100644 --- a/querydsl-hibernate/src/main/java/com/mysema/query/grammar/HqlGrammar.java +++ b/querydsl-hibernate/src/main/java/com/mysema/query/grammar/HqlGrammar.java @@ -26,22 +26,6 @@ public class HqlGrammar extends Grammar{ return new CountExpr(expr); } - public static > ExprNoEntity distinct(ExprNoEntity left){ - return _comparable(OpHql.DISTINCT, left); - } - - public static Expr newInstance(Class a, Expr... args){ - return new Constructor(a,args); - } - - public static > ExprComparable sum(Expr left){ - return _number(OpHql.SUM, left); - } - - public static ExprComparable sysdate(){ - return _comparable(OpHql.SYSDATE); - } - public static ExprComparable current_date(){ return _comparable(OpHql.CURRENT_DATE); } @@ -53,7 +37,61 @@ public class HqlGrammar extends Grammar{ public static ExprComparable current_timestamp(){ return _comparable(OpHql.CURRENT_TIMESTAMP); } + public static ExprComparable day(Expr date){ + return _comparable(OpHql.DAY, date); + } + + public static > ExprNoEntity distinct(ExprNoEntity left){ + return _comparable(OpHql.DISTINCT, left); + } + + public static ExprComparable hour(Expr date){ + return _comparable(OpHql.HOUR, date); + } + + public static ExprComparable maxindex(PathEntityCollection collection) { + return _comparable(OpHql.MAXINDEX, collection); + } + + public static ExprComparable minindex(PathEntityCollection collection) { + return _comparable(OpHql.MININDEX, collection); + } + + public static ExprBoolean isempty(PathEntityCollection collection) { + return _boolean(OpHql.ISEMPTY, collection); + } + + public static ExprBoolean isnotempty(PathEntityCollection collection) { + return _boolean(OpHql.ISNOTEMPTY, collection); + } + + public static ExprComparable minute(Expr date){ + return _comparable(OpHql.MINUTE, date); + } + + public static ExprComparable month(Expr date){ + return _comparable(OpHql.MONTH, date); + } + + public static Expr newInstance(Class a, Expr... args){ + return new Constructor(a,args); + } + public static ExprComparable second(Expr date){ + return _comparable(OpHql.SECOND, date); + } + + public static > ExprComparable sum(Expr left){ + return _number(OpHql.SUM, left); + } + public static ExprComparable sysdate(){ + return _comparable(OpHql.SYSDATE); + } + + public static ExprComparable year(Expr date){ + return _comparable(OpHql.YEAR, date); + } + public static class Constructor extends Expr{ public final Expr[] args; public Constructor(Class type, Expr... args){ diff --git a/querydsl-hibernate/src/main/java/com/mysema/query/grammar/HqlOps.java b/querydsl-hibernate/src/main/java/com/mysema/query/grammar/HqlOps.java index afb015f02..d7cca9f79 100644 --- a/querydsl-hibernate/src/main/java/com/mysema/query/grammar/HqlOps.java +++ b/querydsl-hibernate/src/main/java/com/mysema/query/grammar/HqlOps.java @@ -9,6 +9,8 @@ import java.util.Date; import java.util.HashMap; import java.util.Map; +import com.mysema.query.grammar.Ops.Op; + /** * Ops provides * @@ -68,6 +70,12 @@ public class HqlOps extends Ops { patterns.put(OpHql.CURRENT_DATE, "current_date()"); patterns.put(OpHql.CURRENT_TIME, "current_time()"); patterns.put(OpHql.CURRENT_TIMESTAMP, "current_timestamp()"); + patterns.put(OpHql.SECOND, "second(%s)"); + patterns.put(OpHql.MINUTE, "minute(%s)"); + patterns.put(OpHql.HOUR, "hour(%s)"); + patterns.put(OpHql.DAY, "day(%s)"); + patterns.put(OpHql.MONTH, "month(%s)"); + patterns.put(OpHql.YEAR, "year(%s)"); } public static String getPattern(Op op){ @@ -81,6 +89,16 @@ public class HqlOps extends Ops { Op> DISTINCT = new OpImpl>(); Op SUM = new OpImpl(); Op SYSDATE = new OpImpl(); + Op SECOND = new OpImpl(); + Op MINUTE = new OpImpl(); + Op HOUR = new OpImpl(); + Op DAY = new OpImpl(); + Op MONTH = new OpImpl(); + Op YEAR = new OpImpl(); + Op MAXINDEX = new OpImpl(); + Op MININDEX = new OpImpl(); + Op ISNOTEMPTY = new OpImpl(); + Op ISEMPTY = new OpImpl(); } } diff --git a/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/FeaturesTest.java b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/FeaturesTest.java index c1cf5b0da..c7483e8e7 100644 --- a/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/FeaturesTest.java +++ b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/FeaturesTest.java @@ -11,6 +11,8 @@ import com.mysema.query.grammar.HqlQueryBase; import com.mysema.query.grammar.HqlSerializer; import com.mysema.query.grammar.HqlGrammar.Constructor; import com.mysema.query.grammar.Types.Expr; +import com.mysema.query.grammar.Types.PathEntityCollection; +import com.mysema.query.grammar.hql.domain.Cat; /** * FeaturesTest provides @@ -86,13 +88,13 @@ public class FeaturesTest extends HqlQueryBase{ @Test public void testCollectionOperations(){ // HQL functions that take collection-valued path expressions: size(), minelement(), maxelement(), minindex(), maxindex(), along with the special elements() and indices functions which may be quantified using some, all, exists, any, in. -// size(cat.kittens()); -// minelement(cat.kittens()); -// maxelement(cat.kittens()); -// minindex(cat.kittens()); -// maxindex(cat.kittens()); +// size(cat.kittens); +// minelement(cat.kittens); +// maxelement(cat.kittens); + minindex(cat.kittens); + maxindex(cat.kittens); toString("cat.kittens[0]",cat.kittens(0)); - toString("cat.kittens[0]",cat.kittens.get(0)); + toString("cat.kittens[0]",cat.kittens.get(0)); } @SuppressWarnings("unchecked") @@ -119,12 +121,12 @@ public class FeaturesTest extends HqlQueryBase{ @Test public void testDateOperations2(){ // second(...), minute(...), hour(...), day(...), month(...), year(...), -// second(catalog.effectiveDate); -// minute(catalog.effectiveDate); -// hour(catalog.effectiveDate); -// day(catalog.effectiveDate); -// month(catalog.effectiveDate); -// year(catalog.effectiveDate); + second(catalog.effectiveDate); + minute(catalog.effectiveDate); + hour(catalog.effectiveDate); + day(catalog.effectiveDate); + month(catalog.effectiveDate); + year(catalog.effectiveDate); } @Test @@ -174,8 +176,8 @@ public class FeaturesTest extends HqlQueryBase{ kitten.bodyWeight.between(10, 20); kitten.bodyWeight.isnull(); kitten.bodyWeight.isnotnull(); -// cat.kittens.isEmpty(); -// cat.kittens.isNotEmpty(); + isempty(cat.kittens); + isnotempty(cat.kittens); } @Test