From 684e932a1d5be0fab29ddcd910afaa3996049854 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 28 Jun 2012 23:40:36 +0300 Subject: [PATCH] #182 disallowed joins to subqueries in JPA module --- .../query/collections/AbstractColQuery.java | 5 ++- .../mysema/query/collections/ColQuery.java | 5 ++- .../query/collections/ColQueryMixin.java | 15 +------- .../com/mysema/query/support/QueryMixin.java | 38 ++++++++++++------- .../query/jdo/AbstractJDOQLSubQuery.java | 6 ++- .../com/mysema/query/jdo/JDOQLQueryMixin.java | 13 +------ .../query/jpa/AbstractJPQLSubQuery.java | 23 +++++------ .../com/mysema/query/jpa/JPQLCommonQuery.java | 22 ++++++----- .../com/mysema/query/jpa/JPQLQueryBase.java | 22 +++++------ .../com/mysema/query/jpa/JPQLQueryMixin.java | 13 +------ 10 files changed, 75 insertions(+), 87 deletions(-) diff --git a/querydsl-collections/src/main/java/com/mysema/query/collections/AbstractColQuery.java b/querydsl-collections/src/main/java/com/mysema/query/collections/AbstractColQuery.java index 91104b136..f4eac2f57 100644 --- a/querydsl-collections/src/main/java/com/mysema/query/collections/AbstractColQuery.java +++ b/querydsl-collections/src/main/java/com/mysema/query/collections/AbstractColQuery.java @@ -13,6 +13,7 @@ */ package com.mysema.query.collections; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -81,7 +82,7 @@ public abstract class AbstractColQuery> extends P } } - private Expression createAlias(CollectionExpression target, Path alias){ + private Expression createAlias(Path> target, Path alias){ return OperationImpl.create(alias.getType(), Ops.ALIAS, target, alias); } @@ -109,7 +110,7 @@ public abstract class AbstractColQuery> extends P } @SuppressWarnings("unchecked") - public

Q innerJoin(CollectionExpression target, Path

alias) { + public

Q innerJoin(Path> target, Path

alias) { getMetadata().addJoin(JoinType.INNERJOIN, createAlias(target, alias)); return (Q)this; } diff --git a/querydsl-collections/src/main/java/com/mysema/query/collections/ColQuery.java b/querydsl-collections/src/main/java/com/mysema/query/collections/ColQuery.java index fbc658867..4ffc88d34 100644 --- a/querydsl-collections/src/main/java/com/mysema/query/collections/ColQuery.java +++ b/querydsl-collections/src/main/java/com/mysema/query/collections/ColQuery.java @@ -13,9 +13,10 @@ */ package com.mysema.query.collections; +import java.util.Collection; + import com.mysema.query.Projectable; import com.mysema.query.SimpleQuery; -import com.mysema.query.types.CollectionExpression; import com.mysema.query.types.MapExpression; import com.mysema.query.types.Path; @@ -61,7 +62,7 @@ public interface ColQuery extends SimpleQuery, Projectable { * @param alias * @return */ -

ColQuery innerJoin(CollectionExpression collectionPath, Path

alias); +

ColQuery innerJoin(Path> collectionPath, Path

alias); /** * Define an inner join from the Map typed path to the alias diff --git a/querydsl-collections/src/main/java/com/mysema/query/collections/ColQueryMixin.java b/querydsl-collections/src/main/java/com/mysema/query/collections/ColQueryMixin.java index 78afcb78d..db9a04cf7 100644 --- a/querydsl-collections/src/main/java/com/mysema/query/collections/ColQueryMixin.java +++ b/querydsl-collections/src/main/java/com/mysema/query/collections/ColQueryMixin.java @@ -18,7 +18,6 @@ import com.mysema.query.QueryMetadata; import com.mysema.query.support.CollectionAnyVisitor; import com.mysema.query.support.Context; import com.mysema.query.support.QueryMixin; -import com.mysema.query.types.CollectionExpression; import com.mysema.query.types.Path; import com.mysema.query.types.Predicate; import com.mysema.query.types.template.BooleanTemplate; @@ -44,18 +43,8 @@ public class ColQueryMixin extends QueryMixin { super(self, metadata); } - @Override - protected Predicate[] normalize(Predicate[] conditions, boolean where) { - for (int i = 0; i < conditions.length; i++) { - if (conditions[i] != null) { - conditions[i] = normalize(conditions[i], where); - } - } - return conditions; - } - @SuppressWarnings("unchecked") - private Predicate normalize(Predicate predicate, boolean where) { + protected Predicate normalize(Predicate predicate, boolean where) { if (predicate instanceof BooleanBuilder && ((BooleanBuilder)predicate).getValue() == null) { return predicate; } else { @@ -63,7 +52,7 @@ public class ColQueryMixin extends QueryMixin { Predicate transformed = (Predicate) predicate.accept(CollectionAnyVisitor.DEFAULT, context); for (int i = 0; i < context.paths.size(); i++) { innerJoin( - (CollectionExpression)context.paths.get(i).getMetadata().getParent(), + (Path)context.paths.get(i).getMetadata().getParent(), (Path)context.replacements.get(i)); on(ANY); } diff --git a/querydsl-core/src/main/java/com/mysema/query/support/QueryMixin.java b/querydsl-core/src/main/java/com/mysema/query/support/QueryMixin.java index 8e8857b84..99a977eb7 100644 --- a/querydsl-core/src/main/java/com/mysema/query/support/QueryMixin.java +++ b/querydsl-core/src/main/java/com/mysema/query/support/QueryMixin.java @@ -13,6 +13,7 @@ */ package com.mysema.query.support; +import java.util.Collection; import java.util.UUID; import com.mysema.commons.lang.Assert; @@ -94,7 +95,7 @@ public class QueryMixin { String suffix = UUID.randomUUID().toString().replace("-", "").substring(0,5); String name = uncapitalize(path.getType().getSimpleName()) + suffix; Path joined = new PathImpl(path.getType(), name); - this.innerJoin((CollectionExpression)path.getMetadata().getParent(), joined); + this.innerJoin((Path)path.getMetadata().getParent(), joined); return joined; } else if (expr instanceof ProjectionRole) { return convert(((ProjectionRole) expr).getProjection()); @@ -105,7 +106,7 @@ public class QueryMixin { } } - public Expression[] convert(Expression[] exprs){ + public final Expression[] convert(Expression[] exprs){ for (int i = 0; i < exprs.length; i++) { exprs[i] = convert(exprs[i]); } @@ -118,7 +119,7 @@ public class QueryMixin { return ExpressionUtils.as(path, alias); } - protected Expression createAlias(CollectionExpression target, Path alias){ + protected Expression createAlias(Path> target, Path alias){ assertRoot(alias); return OperationImpl.create(alias.getType(), Ops.ALIAS, target, alias); } @@ -162,12 +163,12 @@ public class QueryMixin { return self; } - public

T fullJoin(CollectionExpression target) { + public

T fullJoin(Path> target) { metadata.addJoin(JoinType.FULLJOIN, target); return self; } - public

T fullJoin(CollectionExpression target, Path

alias) { + public

T fullJoin(Path> target, Path

alias) { metadata.addJoin(JoinType.FULLJOIN, createAlias(target, alias)); return self; } @@ -216,12 +217,12 @@ public class QueryMixin { return self; } - public

T innerJoin(CollectionExpression target) { + public

T innerJoin(Path> target) { metadata.addJoin(JoinType.INNERJOIN, target); return self; } - public

T innerJoin(CollectionExpressiontarget, Path

alias) { + public

T innerJoin(Path>target, Path

alias) { metadata.addJoin(JoinType.INNERJOIN, createAlias(target, alias)); return self; } @@ -260,12 +261,12 @@ public class QueryMixin { return getSelf(); } - public

T join(CollectionExpression target) { + public

T join(Path> target) { metadata.addJoin(JoinType.JOIN, target); return getSelf(); } - public

T join(CollectionExpression target, Path

alias) { + public

T join(Path> target, Path

alias) { metadata.addJoin(JoinType.JOIN, createAlias(target, alias)); return getSelf(); } @@ -296,12 +297,12 @@ public class QueryMixin { return getSelf(); } - public

T leftJoin(CollectionExpression target) { + public

T leftJoin(Path> target) { metadata.addJoin(JoinType.LEFTJOIN, target); return getSelf(); } - public

T leftJoin(CollectionExpression target, Path

alias) { + public

T leftJoin(Path> target, Path

alias) { metadata.addJoin(JoinType.LEFTJOIN, createAlias(target, alias)); return getSelf(); } @@ -359,12 +360,12 @@ public class QueryMixin { return getSelf(); } - public

T rightJoin(CollectionExpression target) { + public

T rightJoin(Path> target) { metadata.addJoin(JoinType.RIGHTJOIN, target); return getSelf(); } - public

T rightJoin(CollectionExpression target, Path

alias) { + public

T rightJoin(Path> target, Path

alias) { metadata.addJoin(JoinType.RIGHTJOIN, createAlias(target, alias)); return getSelf(); } @@ -407,7 +408,16 @@ public class QueryMixin { return self; } - protected Predicate[] normalize(Predicate[] conditions, boolean where) { + protected Predicate normalize(Predicate condition, boolean where) { + return condition; + } + + protected final Predicate[] normalize(Predicate[] conditions, boolean where) { + for (int i = 0; i < conditions.length; i++) { + if (conditions[i] != null) { + conditions[i] = normalize(conditions[i], where); + } + } return conditions; } diff --git a/querydsl-jdo/src/main/java/com/mysema/query/jdo/AbstractJDOQLSubQuery.java b/querydsl-jdo/src/main/java/com/mysema/query/jdo/AbstractJDOQLSubQuery.java index d2f73497a..4c7088410 100644 --- a/querydsl-jdo/src/main/java/com/mysema/query/jdo/AbstractJDOQLSubQuery.java +++ b/querydsl-jdo/src/main/java/com/mysema/query/jdo/AbstractJDOQLSubQuery.java @@ -13,12 +13,14 @@ */ package com.mysema.query.jdo; +import java.util.Collection; + import com.mysema.query.DefaultQueryMetadata; import com.mysema.query.QueryMetadata; import com.mysema.query.support.DetachableQuery; -import com.mysema.query.types.CollectionExpression; import com.mysema.query.types.EntityPath; import com.mysema.query.types.Expression; +import com.mysema.query.types.Path; /** * Abstract superclass for SubQuery implementations @@ -43,7 +45,7 @@ public class AbstractJDOQLSubQuery> extends D return queryMixin.from(args); } - public

Q from(CollectionExpression target, EntityPath

alias) { + public

Q from(Path> target, EntityPath

alias) { return queryMixin.join(target, alias); } diff --git a/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQLQueryMixin.java b/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQLQueryMixin.java index 502cced33..183e9bf4a 100644 --- a/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQLQueryMixin.java +++ b/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQLQueryMixin.java @@ -42,18 +42,9 @@ public class JDOQLQueryMixin extends QueryMixin { public JDOQLQueryMixin(T self, QueryMetadata metadata) { super(self, metadata); } - + @Override - protected Predicate[] normalize(Predicate[] conditions, boolean where) { - for (int i = 0; i < conditions.length; i++) { - if (conditions[i] != null) { - conditions[i] = normalize(conditions[i], where); - } - } - return conditions; - } - - private Predicate normalize(Predicate predicate, boolean where) { + protected Predicate normalize(Predicate predicate, boolean where) { if (predicate instanceof BooleanBuilder && ((BooleanBuilder)predicate).getValue() == null) { return predicate; } else { diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/AbstractJPQLSubQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/AbstractJPQLSubQuery.java index d1287f5ca..48b4f4f66 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/AbstractJPQLSubQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/AbstractJPQLSubQuery.java @@ -13,12 +13,13 @@ */ package com.mysema.query.jpa; +import java.util.Collection; + import com.mysema.query.DefaultQueryMetadata; import com.mysema.query.JoinExpression; import com.mysema.query.JoinType; import com.mysema.query.QueryMetadata; import com.mysema.query.support.DetachableQuery; -import com.mysema.query.types.CollectionExpression; import com.mysema.query.types.EntityPath; import com.mysema.query.types.MapExpression; import com.mysema.query.types.Path; @@ -65,11 +66,11 @@ public class AbstractJPQLSubQuery> extends Det return queryMixin.from(o); } - public

Q fullJoin(CollectionExpression target) { + public

Q fullJoin(Path> target) { return queryMixin.fullJoin(target); } - public

Q fullJoin(CollectionExpression target, Path

alias) { + public

Q fullJoin(Path> target, Path

alias) { return queryMixin.fullJoin(target, alias); } @@ -89,11 +90,11 @@ public class AbstractJPQLSubQuery> extends Det return queryMixin.fullJoin(target, alias); } - public

Q innerJoin(CollectionExpression target) { + public

Q innerJoin(Path> target) { return queryMixin.innerJoin(target); } - public

Q innerJoin(CollectionExpression target, Path

alias) { + public

Q innerJoin(Path> target, Path

alias) { return queryMixin.innerJoin(target, alias); } @@ -113,11 +114,11 @@ public class AbstractJPQLSubQuery> extends Det return queryMixin.innerJoin(target, alias); } - public

Q join(CollectionExpression target) { + public

Q join(Path> target) { return queryMixin.join(target); } - public

Q join(CollectionExpression target, Path

alias) { + public

Q join(Path> target, Path

alias) { return queryMixin.join(target, alias); } @@ -137,11 +138,11 @@ public class AbstractJPQLSubQuery> extends Det return queryMixin.join(target, alias); } - public

Q leftJoin(CollectionExpression target) { + public

Q leftJoin(Path> target) { return queryMixin.leftJoin(target); } - public

Q leftJoin(CollectionExpression target, Path

alias) { + public

Q leftJoin(Path> target, Path

alias) { return queryMixin.leftJoin(target, alias); } @@ -161,11 +162,11 @@ public class AbstractJPQLSubQuery> extends Det return queryMixin.leftJoin(target, alias); } - public

Q rightJoin(CollectionExpression target) { + public

Q rightJoin(Path> target) { return queryMixin.rightJoin(target); } - public

Q rightJoin(CollectionExpression target, Path

alias) { + public

Q rightJoin(Path> target, Path

alias) { return queryMixin.rightJoin(target, alias); } diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLCommonQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLCommonQuery.java index 5c9c87c07..18571ff78 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLCommonQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLCommonQuery.java @@ -13,6 +13,8 @@ */ package com.mysema.query.jpa; +import java.util.Collection; + import com.mysema.query.Query; import com.mysema.query.types.CollectionExpression; import com.mysema.query.types.EntityPath; @@ -66,7 +68,7 @@ public interface JPQLCommonQuery> extends Query * @param target * @return */ -

Q innerJoin(CollectionExpression target); +

Q innerJoin(Path> target); /** * Create a inner join with the given target and alias. @@ -76,7 +78,7 @@ public interface JPQLCommonQuery> extends Query * @param alias * @return */ -

Q innerJoin(CollectionExpression target, Path

alias); +

Q innerJoin(Path> target, Path

alias); /** * Create a inner join with the given target. @@ -126,7 +128,7 @@ public interface JPQLCommonQuery> extends Query * @param target * @return */ -

Q join(CollectionExpression target); +

Q join(Path> target); /** * @param

@@ -134,7 +136,7 @@ public interface JPQLCommonQuery> extends Query * @param alias * @return */ -

Q join(CollectionExpression target, Path

alias); +

Q join(Path> target, Path

alias); /** * Create a join with the given target. @@ -184,7 +186,7 @@ public interface JPQLCommonQuery> extends Query * @param target * @return */ -

Q leftJoin(CollectionExpression target); +

Q leftJoin(Path> target); /** * Create a left join with the given target and alias. @@ -194,7 +196,7 @@ public interface JPQLCommonQuery> extends Query * @param alias * @return */ -

Q leftJoin(CollectionExpression target, Path

alias); +

Q leftJoin(Path> target, Path

alias); /** * Create a left join with the given target. @@ -244,7 +246,7 @@ public interface JPQLCommonQuery> extends Query * @param target * @return */ -

Q rightJoin(CollectionExpression target); +

Q rightJoin(Path> target); /** * Create a right join with the given target and alias. @@ -254,7 +256,7 @@ public interface JPQLCommonQuery> extends Query * @param alias * @return */ -

Q rightJoin(CollectionExpression target, Path

alias); +

Q rightJoin(Path> target, Path

alias); /** * Create a right join with the given target. @@ -305,7 +307,7 @@ public interface JPQLCommonQuery> extends Query * @param target * @return */ -

Q fullJoin(CollectionExpression target); +

Q fullJoin(Path> target); /** * Create a full join with the given target and alias. @@ -315,7 +317,7 @@ public interface JPQLCommonQuery> extends Query * @param alias * @return */ -

Q fullJoin(CollectionExpression target, Path

alias); +

Q fullJoin(Path> target, Path

alias); /** * Create a full join with the given target. diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLQueryBase.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLQueryBase.java index bff2c2284..edbe74835 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLQueryBase.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLQueryBase.java @@ -13,6 +13,7 @@ */ package com.mysema.query.jpa; +import java.util.Collection; import java.util.Map; import javax.annotation.Nullable; @@ -20,7 +21,6 @@ import javax.persistence.EntityManager; import com.mysema.query.QueryMetadata; import com.mysema.query.support.ProjectableQuery; -import com.mysema.query.types.CollectionExpression; import com.mysema.query.types.EntityPath; import com.mysema.query.types.MapExpression; import com.mysema.query.types.Path; @@ -96,11 +96,11 @@ public abstract class JPQLQueryBase> extends Projecta return queryMixin.from(args); } - public

Q fullJoin(CollectionExpression target) { + public

Q fullJoin(Path> target) { return queryMixin.fullJoin(target); } - public

Q fullJoin(CollectionExpression target, Path

alias) { + public

Q fullJoin(Path> target, Path

alias) { return queryMixin.fullJoin(target, alias); } @@ -124,11 +124,11 @@ public abstract class JPQLQueryBase> extends Projecta return constants; } - public

Q innerJoin(CollectionExpression target) { + public

Q innerJoin(Path> target) { return queryMixin.innerJoin(target); } - public

Q innerJoin(CollectionExpressiontarget, Path

alias) { + public

Q innerJoin(Path>target, Path

alias) { return queryMixin.innerJoin(target, alias); } @@ -148,11 +148,11 @@ public abstract class JPQLQueryBase> extends Projecta return queryMixin.innerJoin(target, alias); } - public

Q join(CollectionExpression target) { + public

Q join(Path> target) { return queryMixin.join(target); } - public

Q join(CollectionExpression target, Path

alias) { + public

Q join(Path> target, Path

alias) { return queryMixin.join(target, alias); } @@ -172,11 +172,11 @@ public abstract class JPQLQueryBase> extends Projecta return queryMixin.join(target, alias); } - public

Q leftJoin(CollectionExpression target) { + public

Q leftJoin(Path> target) { return queryMixin.leftJoin(target); } - public

Q leftJoin(CollectionExpression target, Path

alias) { + public

Q leftJoin(Path> target, Path

alias) { return queryMixin.leftJoin(target, alias); } @@ -196,11 +196,11 @@ public abstract class JPQLQueryBase> extends Projecta return queryMixin.leftJoin(target, alias); } - public

Q rightJoin(CollectionExpression target) { + public

Q rightJoin(Path> target) { return queryMixin.rightJoin(target); } - public

Q rightJoin(CollectionExpression target, Path

alias) { + public

Q rightJoin(Path> target, Path

alias) { return queryMixin.rightJoin(target, alias); } diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLQueryMixin.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLQueryMixin.java index a54abf3b0..0babc8c07 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLQueryMixin.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLQueryMixin.java @@ -76,17 +76,8 @@ public class JPQLQueryMixin extends QueryMixin { return getSelf(); } - @Override - protected Predicate[] normalize(Predicate[] conditions, boolean where) { - for (int i = 0; i < conditions.length; i++){ - if (conditions[i] != null) { - conditions[i] = normalize(conditions[i], where); - } - } - return conditions; - } - - private Predicate normalize(Predicate predicate, boolean where) { + @Override + protected Predicate normalize(Predicate predicate, boolean where) { if (predicate instanceof BooleanBuilder && ((BooleanBuilder)predicate).getValue() == null){ return predicate; } else {