splitted HQLTemplates into JPQLTemplates and HQLTemplates

This commit is contained in:
Timo Westkämper 2010-06-11 09:07:48 +00:00
parent 826ecea938
commit d2ff00000c
21 changed files with 234 additions and 204 deletions

View File

@ -143,7 +143,7 @@ public class AbstractHQLSubQuery<Q extends AbstractHQLSubQuery<Q>> extends Detac
public String toString(){
if (!queryMixin.getMetadata().getJoins().isEmpty()){
HQLSerializer serializer = new HQLSerializer(HQLTemplates.DEFAULT);
HQLSerializer serializer = new HQLSerializer(JPQLTemplates.DEFAULT);
serializer.serialize(queryMixin.getMetadata(), false, null);
return serializer.toString().trim();
}else{

View File

@ -3,11 +3,8 @@
* All rights reserved.
*
*/
package com.mysema.query;
package com.mysema.query.hql;
import com.mysema.query.hql.HQLTemplates;
import com.mysema.query.types.Constant;
import com.mysema.query.types.Operator;
import com.mysema.query.types.Ops;
/**
@ -16,18 +13,15 @@ import com.mysema.query.types.Ops;
* @author tiwe
*
*/
public class EclipseLinkTemplates extends HQLTemplates{
public class EclipseLinkTemplates extends JPQLTemplates{
public static final EclipseLinkTemplates DEFAULT = new EclipseLinkTemplates();
public static final JPQLTemplates DEFAULT = new EclipseLinkTemplates();
// TODO : indexed list access
// TODO : cast
protected EclipseLinkTemplates() {
// JPQL standard
add(Ops.INSTANCE_OF, "type({0}) = {1}");
// LIKE replacements
add(Ops.STRING_CONTAINS, "locate({1},{0}) > 0");
add(Ops.STRING_CONTAINS_IC, "locate({1l},{0l}) > 0");
@ -50,17 +44,5 @@ public class EclipseLinkTemplates extends HQLTemplates{
}
public boolean wrapElements(Operator<?> operator){
return false;
}
public boolean wrapConstant(Constant<?> expr) {
return false;
}
public boolean isTypeAsString() {
// TODO : get rid of this when Hibernate supports type(alias)
return false;
}
}

View File

@ -27,9 +27,9 @@ public abstract class HQLQueryBase<Q extends HQLQueryBase<Q>> extends Projectabl
private final HQLQueryMixin<Q> queryMixin;
private final HQLTemplates templates;
private final JPQLTemplates templates;
protected HQLTemplates getTemplates(){
protected JPQLTemplates getTemplates(){
return templates;
}
@ -38,7 +38,7 @@ public abstract class HQLQueryBase<Q extends HQLQueryBase<Q>> extends Projectabl
}
@SuppressWarnings("unchecked")
public HQLQueryBase(QueryMetadata md, HQLTemplates templates) {
public HQLQueryBase(QueryMetadata md, JPQLTemplates templates) {
super(new HQLQueryMixin<Q>(md));
super.queryMixin.setSelf((Q) this);
this.queryMixin = (HQLQueryMixin) super.queryMixin;

View File

@ -77,7 +77,7 @@ public class HQLSerializer extends SerializerBase<HQLSerializer> {
private static final Map<JoinType, String> joinTypes = new HashMap<JoinType, String>();
private final HQLTemplates templates;
private final JPQLTemplates templates;
static{
joinTypes.put(JoinType.DEFAULT, COMMA);
@ -89,7 +89,7 @@ public class HQLSerializer extends SerializerBase<HQLSerializer> {
private boolean wrapElements = false;
public HQLSerializer(HQLTemplates templates) {
public HQLSerializer(JPQLTemplates templates) {
super(templates);
this.templates = templates;
}
@ -303,7 +303,7 @@ public class HQLSerializer extends SerializerBase<HQLSerializer> {
if (operator.equals(Ops.IN)){
if (args.get(1) instanceof Path){
super.visitOperation(type, HQLTemplates.MEMBER_OF, args);
super.visitOperation(type, JPQLTemplates.MEMBER_OF, args);
}else{
super.visitOperation(type, operator, args);
}
@ -326,7 +326,7 @@ public class HQLSerializer extends SerializerBase<HQLSerializer> {
} else if (operator.equals(Ops.NUMCAST)) {
Class<?> targetType = (Class<?>) ((Constant<?>) args.get(1)).getConstant();
String typeName = targetType.getSimpleName().toLowerCase(Locale.ENGLISH);
visitOperation(targetType, HQLTemplates.CAST, Arrays.<Expr<?>>asList(args.get(0), ExprConst.create(typeName)));
visitOperation(targetType, JPQLTemplates.CAST, Arrays.<Expr<?>>asList(args.get(0), ExprConst.create(typeName)));
} else if (operator.equals(Ops.EXISTS) && args.get(0) instanceof SubQuery){
SubQuery subQuery = (SubQuery) args.get(0);

View File

@ -1,142 +1,68 @@
/*
* Copyright (c) 2010 Mysema Ltd.
* All rights reserved.
*
*/
package com.mysema.query.hql;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import com.mysema.query.types.Constant;
import com.mysema.query.types.Operator;
import com.mysema.query.types.OperatorImpl;
import com.mysema.query.types.Ops;
import com.mysema.query.types.PathType;
import com.mysema.query.types.Templates;
/**
* HQLTemplates extends Templates to provide operator patterns for HQL
* serialization
*
* @author tiwe
* @version $Id$
*/
public class HQLTemplates extends Templates {
public static final Operator<Object> CAST = new OperatorImpl<Object>(Object.class, Object.class);
public static final Operator<Boolean> MEMBER_OF = new OperatorImpl<Boolean>(Object.class, Object.class);
public static final HQLTemplates DEFAULT = new HQLTemplates();
private final List<Operator<?>> wrapElements = Arrays.<Operator<?>> asList(
Ops.QuantOps.ALL,
Ops.QuantOps.ANY,
Ops.QuantOps.AVG_IN_COL,
Ops.EXISTS);
protected HQLTemplates() {
//CHECKSTYLE:OFF
// boolean
add(Ops.AND, "{0} and {1}", 36);
add(Ops.NOT, "not {0}", 3);
add(Ops.OR, "{0} or {1}", 38);
add(Ops.XNOR, "{0} xnor {1}", 39);
add(Ops.XOR, "{0} xor {1}", 39);
// comparison
add(Ops.BETWEEN, "{0} between {1} and {2}", 30);
// numeric
add(Ops.MathOps.SQRT, "sqrt({0})");
// various
add(Ops.NE_PRIMITIVE, "{0} <> {1}", 25);
add(Ops.NE_OBJECT, "{0} <> {1}", 25);
add(Ops.IS_NULL, "{0} is null", 26);
add(Ops.IS_NOT_NULL, "{0} is not null", 26);
// collection
add(MEMBER_OF, "{0} member of {1}");
add(Ops.IN, "{0} in {1}");
add(Ops.COL_IS_EMPTY, "{0} is empty");
add(Ops.COL_SIZE, "size({0})");
add(Ops.ARRAY_SIZE, "size({0})");
// string
add(Ops.LIKE, "{0} like {1}",1);
add(Ops.CONCAT, "concat({0},{1})",0);
add(Ops.MATCHES, "{0} like {1}", 27); // TODO : support real regexes
add(Ops.LOWER, "lower({0})");
add(Ops.SUBSTR_1ARG, "substring({0},{1}+1)");
add(Ops.SUBSTR_2ARGS, "substring({0},{1}+1,{2})");
add(Ops.TRIM, "trim({0})");
add(Ops.UPPER, "upper({0})");
add(Ops.EQ_IGNORE_CASE, "{0l} = {1l}");
add(Ops.CHAR_AT, "cast(substring({0},{1}+1,1) as char)");
add(Ops.STRING_IS_EMPTY, "length({0}) = 0");
add(Ops.STRING_CONTAINS, "{0} like {%1%}");
add(Ops.STRING_CONTAINS_IC, "{0l} like {%%1%%}");
add(Ops.ENDS_WITH, "{0} like {%1}");
add(Ops.ENDS_WITH_IC, "{0l} like {%%1}");
add(Ops.STARTS_WITH, "{0} like {1%}");
add(Ops.STARTS_WITH_IC, "{0l} like {1%%}");
add(Ops.INDEX_OF, "locate({1},{0}) - 1");
add(Ops.INDEX_OF_2ARGS, "locate({1},{0},{2}+1) - 1");
// date time
add(Ops.DateTimeOps.SYSDATE, "sysdate");
add(Ops.DateTimeOps.CURRENT_DATE, "current_date()");
add(Ops.DateTimeOps.CURRENT_TIME, "current_time()");
add(Ops.DateTimeOps.CURRENT_TIMESTAMP, "current_timestamp()");
// path types
for (PathType type : new PathType[] {
PathType.LISTVALUE,
PathType.MAPVALUE,
PathType.MAPVALUE_CONSTANT }) {
add(type, "{0}[{1}]");
}
add(PathType.LISTVALUE_CONSTANT, "{0}[{1s}]");
add(PathType.PROPERTY, "{0}.{1s}");
add(PathType.VARIABLE, "{0s}");
// case for eq
add(Ops.CASE_EQ, "case {1} end");
add(Ops.CASE_EQ_WHEN, "when {0} = {1} then {2} {3}");
add(Ops.CASE_EQ_ELSE, "else {0}");
// HQL specific
add(CAST, "cast({0} as {1s})");
add(Ops.DateTimeOps.MILLISECOND, "0"); // NOT supported in HQL
add(Ops.DateTimeOps.SECOND, "second({0})");
add(Ops.DateTimeOps.MINUTE, "minute({0})");
add(Ops.DateTimeOps.HOUR, "hour({0})");
add(Ops.DateTimeOps.DAY_OF_MONTH, "day({0})");
add(Ops.DateTimeOps.MONTH, "month({0})");
add(Ops.DateTimeOps.YEAR, "year({0})");
add(Ops.DateTimeOps.YEAR_MONTH, "year({0}) * 100 + month({0})");
//CHECKSTYLE:ON
}
public boolean wrapElements(Operator<?> operator){
return wrapElements.contains(operator);
}
public boolean wrapConstant(Constant<?> expr) {
Class<?> type = expr.asExpr().getType();
return type.isArray() || Collection.class.isAssignableFrom(type);
}
public boolean isTypeAsString() {
return true;
}
}
package com.mysema.query.hql;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import com.mysema.query.types.Constant;
import com.mysema.query.types.Operator;
import com.mysema.query.types.Ops;
import com.mysema.query.types.PathType;
/**
* HQLTemplates extends JPQLTemplates with Hibernate specific fixes
*
* @author tiwe
*
*/
public class HQLTemplates extends JPQLTemplates{
private static final List<Operator<?>> wrapElements = Arrays.<Operator<?>> asList(
Ops.QuantOps.ALL,
Ops.QuantOps.ANY,
Ops.QuantOps.AVG_IN_COL,
Ops.EXISTS);
public static final HQLTemplates DEFAULT = new HQLTemplates();
protected HQLTemplates() {
//CHECKSTYLE:OFF
add(CAST, "cast({0} as {1s})");
add(Ops.INSTANCE_OF, "{0}.class = {1}");
add(MEMBER_OF, "{0} in elements({1})");
// path types
for (PathType type : new PathType[] {
PathType.LISTVALUE,
PathType.MAPVALUE,
PathType.MAPVALUE_CONSTANT }) {
add(type, "{0}[{1}]");
}
add(PathType.LISTVALUE_CONSTANT, "{0}[{1s}]");
// date time
add(Ops.DateTimeOps.MILLISECOND, "0"); // NOT supported in HQL
add(Ops.DateTimeOps.SECOND, "second({0})");
add(Ops.DateTimeOps.MINUTE, "minute({0})");
add(Ops.DateTimeOps.HOUR, "hour({0})");
add(Ops.DateTimeOps.DAY_OF_MONTH, "day({0})");
add(Ops.DateTimeOps.MONTH, "month({0})");
add(Ops.DateTimeOps.YEAR, "year({0})");
add(Ops.DateTimeOps.YEAR_MONTH, "year({0}) * 100 + month({0})");
//CHECKSTYLE:ON
}
public boolean wrapElements(Operator<?> operator){
return wrapElements.contains(operator);
}
public boolean wrapConstant(Constant<?> expr) {
Class<?> type = expr.asExpr().getType();
return type.isArray() || Collection.class.isAssignableFrom(type);
}
public boolean isTypeAsString() {
return true;
}
}

View File

@ -0,0 +1,114 @@
/*
* Copyright (c) 2010 Mysema Ltd.
* All rights reserved.
*
*/
package com.mysema.query.hql;
import com.mysema.query.types.Constant;
import com.mysema.query.types.Operator;
import com.mysema.query.types.OperatorImpl;
import com.mysema.query.types.Ops;
import com.mysema.query.types.PathType;
import com.mysema.query.types.Templates;
/**
* JPQLTemplates extends Templates to provide operator patterns for HQL
* serialization
*
* @author tiwe
* @version $Id$
*/
public class JPQLTemplates extends Templates {
public static final Operator<Object> CAST = new OperatorImpl<Object>(Object.class, Object.class);
public static final Operator<Boolean> MEMBER_OF = new OperatorImpl<Boolean>(Object.class, Object.class);
public static final JPQLTemplates DEFAULT = new JPQLTemplates();
protected JPQLTemplates() {
//CHECKSTYLE:OFF
// boolean
add(Ops.AND, "{0} and {1}", 36);
add(Ops.NOT, "not {0}", 3);
add(Ops.OR, "{0} or {1}", 38);
add(Ops.XNOR, "{0} xnor {1}", 39);
add(Ops.XOR, "{0} xor {1}", 39);
// comparison
add(Ops.BETWEEN, "{0} between {1} and {2}", 30);
// numeric
add(Ops.MathOps.SQRT, "sqrt({0})");
// various
add(Ops.NE_PRIMITIVE, "{0} <> {1}", 25);
add(Ops.NE_OBJECT, "{0} <> {1}", 25);
add(Ops.IS_NULL, "{0} is null", 26);
add(Ops.IS_NOT_NULL, "{0} is not null", 26);
// collection
add(MEMBER_OF, "{0} member of {1}");
add(Ops.IN, "{0} in {1}");
add(Ops.COL_IS_EMPTY, "{0} is empty");
add(Ops.COL_SIZE, "size({0})");
add(Ops.ARRAY_SIZE, "size({0})");
// string
add(Ops.LIKE, "{0} like {1}",1);
add(Ops.CONCAT, "concat({0},{1})",0);
add(Ops.MATCHES, "{0} like {1}", 27); // TODO : support real regexes
add(Ops.LOWER, "lower({0})");
add(Ops.SUBSTR_1ARG, "substring({0},{1}+1)");
add(Ops.SUBSTR_2ARGS, "substring({0},{1}+1,{2})");
add(Ops.TRIM, "trim({0})");
add(Ops.UPPER, "upper({0})");
add(Ops.EQ_IGNORE_CASE, "{0l} = {1l}");
add(Ops.CHAR_AT, "cast(substring({0},{1}+1,1) as char)");
add(Ops.STRING_IS_EMPTY, "length({0}) = 0");
add(Ops.STRING_CONTAINS, "{0} like {%1%}");
add(Ops.STRING_CONTAINS_IC, "{0l} like {%%1%%}");
add(Ops.ENDS_WITH, "{0} like {%1}");
add(Ops.ENDS_WITH_IC, "{0l} like {%%1}");
add(Ops.STARTS_WITH, "{0} like {1%}");
add(Ops.STARTS_WITH_IC, "{0l} like {1%%}");
add(Ops.INDEX_OF, "locate({1},{0}) - 1");
add(Ops.INDEX_OF_2ARGS, "locate({1},{0},{2}+1) - 1");
// date time
add(Ops.DateTimeOps.SYSDATE, "sysdate");
add(Ops.DateTimeOps.CURRENT_DATE, "current_date()");
add(Ops.DateTimeOps.CURRENT_TIME, "current_time()");
add(Ops.DateTimeOps.CURRENT_TIMESTAMP, "current_timestamp()");
// path types
add(PathType.PROPERTY, "{0}.{1s}");
add(PathType.VARIABLE, "{0s}");
// case for eq
add(Ops.CASE_EQ, "case {1} end");
add(Ops.CASE_EQ_WHEN, "when {0} = {1} then {2} {3}");
add(Ops.CASE_EQ_ELSE, "else {0}");
add(Ops.INSTANCE_OF, "type({0}) = {1}");
//CHECKSTYLE:ON
}
public boolean wrapElements(Operator<?> operator){
return false;
}
public boolean wrapConstant(Constant<?> expr) {
return false;
}
public boolean isTypeAsString() {
// TODO : get rid of this when Hibernate supports type(alias)
return false;
}
}

View File

@ -28,6 +28,7 @@ import com.mysema.query.QueryModifiers;
import com.mysema.query.SearchResults;
import com.mysema.query.hql.HQLQueryBase;
import com.mysema.query.hql.HQLTemplates;
import com.mysema.query.hql.JPQLTemplates;
import com.mysema.query.types.EConstructor;
import com.mysema.query.types.Expr;
import com.mysema.query.types.Path;
@ -59,7 +60,7 @@ public abstract class AbstractHibernateQuery<Q extends AbstractHibernateQuery<Q>
this(new DefaultSessionHolder(session), HQLTemplates.DEFAULT, new DefaultQueryMetadata());
}
public AbstractHibernateQuery(SessionHolder session, HQLTemplates patterns, QueryMetadata metadata) {
public AbstractHibernateQuery(SessionHolder session, JPQLTemplates patterns, QueryMetadata metadata) {
super(metadata, patterns);
this.session = session;
}

View File

@ -17,6 +17,7 @@ import com.mysema.query.QueryMetadata;
import com.mysema.query.dml.DeleteClause;
import com.mysema.query.hql.HQLSerializer;
import com.mysema.query.hql.HQLTemplates;
import com.mysema.query.hql.JPQLTemplates;
import com.mysema.query.types.expr.EBoolean;
import com.mysema.query.types.path.PEntity;
@ -32,7 +33,7 @@ public class HibernateDeleteClause implements DeleteClause<HibernateDeleteClause
private final SessionHolder session;
private final HQLTemplates templates;
private final JPQLTemplates templates;
public HibernateDeleteClause(Session session, PEntity<?> entity){
this(new DefaultSessionHolder(session), entity, HQLTemplates.DEFAULT);
@ -42,7 +43,7 @@ public class HibernateDeleteClause implements DeleteClause<HibernateDeleteClause
this(new StatelessSessionHolder(session), entity, HQLTemplates.DEFAULT);
}
public HibernateDeleteClause(SessionHolder session, PEntity<?> entity, HQLTemplates templates){
public HibernateDeleteClause(SessionHolder session, PEntity<?> entity, JPQLTemplates templates){
this.session = session;
this.templates = templates;
md.addJoin(JoinType.DEFAULT, entity);

View File

@ -12,6 +12,7 @@ import com.mysema.query.DefaultQueryMetadata;
import com.mysema.query.QueryMetadata;
import com.mysema.query.hql.HQLQuery;
import com.mysema.query.hql.HQLTemplates;
import com.mysema.query.hql.JPQLTemplates;
/**
@ -45,7 +46,7 @@ public final class HibernateQuery extends AbstractHibernateQuery<HibernateQuery>
* @param session
* @param templates
*/
public HibernateQuery(Session session, HQLTemplates templates) {
public HibernateQuery(Session session, JPQLTemplates templates) {
this(new DefaultSessionHolder(session), templates);
}
@ -63,7 +64,7 @@ public final class HibernateQuery extends AbstractHibernateQuery<HibernateQuery>
* @param session
* @param templates
*/
public HibernateQuery(SessionHolder session, HQLTemplates templates) {
public HibernateQuery(SessionHolder session, JPQLTemplates templates) {
super(session, templates, new DefaultQueryMetadata());
}
@ -72,7 +73,7 @@ public final class HibernateQuery extends AbstractHibernateQuery<HibernateQuery>
* @param templates
* @param metadata
*/
protected HibernateQuery(SessionHolder session, HQLTemplates templates, QueryMetadata metadata) {
protected HibernateQuery(SessionHolder session, JPQLTemplates templates, QueryMetadata metadata) {
super(session, templates, metadata);
}

View File

@ -18,6 +18,7 @@ import com.mysema.query.QueryMetadata;
import com.mysema.query.dml.UpdateClause;
import com.mysema.query.hql.HQLSerializer;
import com.mysema.query.hql.HQLTemplates;
import com.mysema.query.hql.JPQLTemplates;
import com.mysema.query.types.Expr;
import com.mysema.query.types.Path;
import com.mysema.query.types.expr.EBoolean;
@ -36,7 +37,7 @@ public class HibernateUpdateClause implements
private final SessionHolder session;
private final HQLTemplates templates;
private final JPQLTemplates templates;
public HibernateUpdateClause(Session session, PEntity<?> entity) {
this(new DefaultSessionHolder(session), entity, HQLTemplates.DEFAULT);
@ -46,8 +47,7 @@ public class HibernateUpdateClause implements
this(new StatelessSessionHolder(session), entity, HQLTemplates.DEFAULT);
}
public HibernateUpdateClause(SessionHolder session, PEntity<?> entity,
HQLTemplates templates) {
public HibernateUpdateClause(SessionHolder session, PEntity<?> entity, JPQLTemplates templates) {
this.session = session;
this.templates = templates;
metadata.addJoin(JoinType.DEFAULT, entity);

View File

@ -22,6 +22,7 @@ import com.mysema.query.QueryModifiers;
import com.mysema.query.SearchResults;
import com.mysema.query.hql.HQLQueryBase;
import com.mysema.query.hql.HQLTemplates;
import com.mysema.query.hql.JPQLTemplates;
import com.mysema.query.types.Expr;
/**
@ -41,7 +42,7 @@ public abstract class AbstractJPAQuery<Q extends AbstractJPAQuery<Q>> extends HQ
this(new DefaultSessionHolder(em), HQLTemplates.DEFAULT, new DefaultQueryMetadata());
}
public AbstractJPAQuery(JPASessionHolder sessionHolder, HQLTemplates patterns, QueryMetadata metadata) {
public AbstractJPAQuery(JPASessionHolder sessionHolder, JPQLTemplates patterns, QueryMetadata metadata) {
super(metadata, patterns);
this.sessionHolder = sessionHolder;
}

View File

@ -16,6 +16,7 @@ import com.mysema.query.QueryMetadata;
import com.mysema.query.dml.DeleteClause;
import com.mysema.query.hql.HQLSerializer;
import com.mysema.query.hql.HQLTemplates;
import com.mysema.query.hql.JPQLTemplates;
import com.mysema.query.types.expr.EBoolean;
import com.mysema.query.types.path.PEntity;
@ -31,13 +32,13 @@ public class JPADeleteClause implements DeleteClause<JPADeleteClause>{
private final EntityManager entityManager;
private final HQLTemplates templates;
private final JPQLTemplates templates;
public JPADeleteClause(EntityManager em, PEntity<?> entity){
this(em, entity, HQLTemplates.DEFAULT);
}
public JPADeleteClause(EntityManager entityManager, PEntity<?> entity, HQLTemplates templates){
public JPADeleteClause(EntityManager entityManager, PEntity<?> entity, JPQLTemplates templates){
this.entityManager = entityManager;
this.templates = templates;
metadata.addJoin(JoinType.DEFAULT, entity);

View File

@ -11,6 +11,7 @@ import com.mysema.query.DefaultQueryMetadata;
import com.mysema.query.QueryMetadata;
import com.mysema.query.hql.HQLQuery;
import com.mysema.query.hql.HQLTemplates;
import com.mysema.query.hql.JPQLTemplates;
/**
* JPAQuery is the default implementation of the HQLQuery interface for JPA
@ -43,7 +44,7 @@ public final class JPAQuery extends AbstractJPAQuery<JPAQuery> implements HQLQue
* @param entityManager
* @param patterns
*/
public JPAQuery(EntityManager entityManager, HQLTemplates patterns) {
public JPAQuery(EntityManager entityManager, JPQLTemplates patterns) {
super(new DefaultSessionHolder(entityManager), patterns, new DefaultQueryMetadata());
}
@ -52,7 +53,7 @@ public final class JPAQuery extends AbstractJPAQuery<JPAQuery> implements HQLQue
* @param templates
* @param metadata
*/
protected JPAQuery(JPASessionHolder session, HQLTemplates templates, QueryMetadata metadata) {
protected JPAQuery(JPASessionHolder session, JPQLTemplates templates, QueryMetadata metadata) {
super(session, templates, metadata);
}

View File

@ -17,7 +17,7 @@ import com.mysema.query.QueryMetadata;
import com.mysema.query.dml.UpdateClause;
import com.mysema.query.hql.HQLSerializer;
import com.mysema.query.hql.HQLTemplates;
import com.mysema.query.hql.hibernate.HibernateUpdateClause;
import com.mysema.query.hql.JPQLTemplates;
import com.mysema.query.types.Expr;
import com.mysema.query.types.Path;
import com.mysema.query.types.expr.EBoolean;
@ -35,13 +35,13 @@ public class JPAUpdateClause implements UpdateClause<JPAUpdateClause>{
private final EntityManager entityManager;
private final HQLTemplates templates;
private final JPQLTemplates templates;
public JPAUpdateClause(EntityManager session, PEntity<?> entity){
this(session, entity, HQLTemplates.DEFAULT);
}
public JPAUpdateClause(EntityManager em, PEntity<?> entity, HQLTemplates templates){
public JPAUpdateClause(EntityManager em, PEntity<?> entity, JPQLTemplates templates){
this.entityManager = em;
this.templates = templates;
metadata.addJoin(JoinType.DEFAULT, entity);

View File

@ -19,6 +19,7 @@ import org.junit.Test;
import com.mysema.commons.lang.CloseableIterator;
import com.mysema.query.hql.HQLTemplates;
import com.mysema.query.hql.JPQLTemplates;
import com.mysema.query.hql.domain.Cat;
import com.mysema.query.hql.domain.QCat;
import com.mysema.query.hql.hibernate.HibernateQuery;
@ -36,7 +37,7 @@ public abstract class AbstractHibernateTest extends AbstractStandardTest{
return new HibernateQuery(session, getTemplates());
}
protected HQLTemplates getTemplates(){
protected JPQLTemplates getTemplates(){
return HQLTemplates.DEFAULT;
}

View File

@ -15,6 +15,7 @@ import javax.persistence.EntityManager;
import org.junit.Test;
import com.mysema.query.hql.HQLTemplates;
import com.mysema.query.hql.JPQLTemplates;
import com.mysema.query.hql.domain.Cat;
import com.mysema.query.hql.domain.QCat;
import com.mysema.query.hql.jpa.JPAQuery;
@ -31,7 +32,7 @@ public abstract class AbstractJPATest extends AbstractStandardTest{
return new JPAQuery(entityManager, getTemplates());
}
protected HQLTemplates getTemplates(){
protected JPQLTemplates getTemplates(){
return HQLTemplates.DEFAULT;
}

View File

@ -8,9 +8,9 @@ package com.mysema.query._derby;
import org.junit.runner.RunWith;
import com.mysema.query.AbstractJPATest;
import com.mysema.query.EclipseLinkTemplates;
import com.mysema.query.Target;
import com.mysema.query.hql.HQLTemplates;
import com.mysema.query.hql.EclipseLinkTemplates;
import com.mysema.query.hql.JPQLTemplates;
import com.mysema.testutil.JPAConfig;
import com.mysema.testutil.JPATestRunner;
@ -22,7 +22,7 @@ import com.mysema.testutil.JPATestRunner;
@JPAConfig("derby-eclipselink")
public abstract class DerbyJPAEclipseLinkTest extends AbstractJPATest{
protected HQLTemplates getTemplates(){
protected JPQLTemplates getTemplates(){
return EclipseLinkTemplates.DEFAULT;
}

View File

@ -8,9 +8,9 @@ package com.mysema.query._h2;
import org.junit.runner.RunWith;
import com.mysema.query.AbstractJPATest;
import com.mysema.query.EclipseLinkTemplates;
import com.mysema.query.Target;
import com.mysema.query.hql.HQLTemplates;
import com.mysema.query.hql.EclipseLinkTemplates;
import com.mysema.query.hql.JPQLTemplates;
import com.mysema.testutil.JPAConfig;
import com.mysema.testutil.JPATestRunner;
@ -22,7 +22,7 @@ import com.mysema.testutil.JPATestRunner;
@JPAConfig("h2-eclipselink")
public abstract class H2JPAEclipseLinkTest extends AbstractJPATest{
protected HQLTemplates getTemplates(){
protected JPQLTemplates getTemplates(){
return EclipseLinkTemplates.DEFAULT;
}

View File

@ -8,9 +8,9 @@ package com.mysema.query._hsqldb;
import org.junit.runner.RunWith;
import com.mysema.query.AbstractJPATest;
import com.mysema.query.EclipseLinkTemplates;
import com.mysema.query.Target;
import com.mysema.query.hql.HQLTemplates;
import com.mysema.query.hql.EclipseLinkTemplates;
import com.mysema.query.hql.JPQLTemplates;
import com.mysema.testutil.JPAConfig;
import com.mysema.testutil.JPATestRunner;
@ -24,7 +24,7 @@ import com.mysema.testutil.JPATestRunner;
@JPAConfig("hsqldb-eclipselink")
public abstract class HSQLDBJPAEclipseLinkStandardTest extends AbstractJPATest{
protected HQLTemplates getTemplates(){
protected JPQLTemplates getTemplates(){
return EclipseLinkTemplates.DEFAULT;
}

View File

@ -13,11 +13,11 @@ public class CollectionTest extends AbstractQueryTest{
@Test
public void test(){
assertToString(":a1 member of cat.kittensSet", cat.kittensSet.contains(new Cat()));
assertToString(":a1 member of cat.kittens", cat.kittens.contains(new Cat()));
assertToString(":a1 in elements(cat.kittensSet)", cat.kittensSet.contains(new Cat()));
assertToString(":a1 in elements(cat.kittens)", cat.kittens.contains(new Cat()));
assertToString("cat member of cat1.kittens", cat.in(cat1.kittens));
assertToString("cat member of cat1.kittensSet", cat.in(cat1.kittensSet));
assertToString("cat in elements(cat1.kittens)", cat.in(cat1.kittens));
assertToString("cat in elements(cat1.kittensSet)", cat.in(cat1.kittensSet));
}
@Test

View File

@ -115,7 +115,7 @@ public class FeaturesTest extends AbstractQueryTest {
// toString("cat.bodyWeight as bw", cat.bodyWeight.as("bw"));
assertToString("kitten member of cat.kittens", kitten.in(cat.kittens));
assertToString("kitten in elements(cat.kittens)", kitten.in(cat.kittens));
// toString("distinct cat.bodyWeight", distinct(cat.bodyWeight));
}