From 67cca1814761620b9ecc8947a7f0ed08d56def4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 14 Apr 2014 23:47:54 +0300 Subject: [PATCH 01/20] Change class hierarchy --- .../query/jdo/sql/AbstractSQLQuery.java | 453 ++++++++---------- .../com/mysema/query/jdo/sql/JDOSQLQuery.java | 253 +--------- .../query/jpa/sql/AbstractJPASQLQuery.java | 31 +- 3 files changed, 231 insertions(+), 506 deletions(-) diff --git a/querydsl-jdo/src/main/java/com/mysema/query/jdo/sql/AbstractSQLQuery.java b/querydsl-jdo/src/main/java/com/mysema/query/jdo/sql/AbstractSQLQuery.java index 69cfc89d8..2067b92cf 100644 --- a/querydsl-jdo/src/main/java/com/mysema/query/jdo/sql/AbstractSQLQuery.java +++ b/querydsl-jdo/src/main/java/com/mysema/query/jdo/sql/AbstractSQLQuery.java @@ -13,37 +13,28 @@ */ package com.mysema.query.jdo.sql; -import javax.annotation.Nullable; - -import com.mysema.query.JoinFlag; -import com.mysema.query.QueryFlag; -import com.mysema.query.QueryFlag.Position; -import com.mysema.query.QueryMetadata; +import com.google.common.collect.Lists; +import com.mysema.commons.lang.CloseableIterator; +import com.mysema.commons.lang.IteratorAdapter; +import com.mysema.query.*; import com.mysema.query.sql.Configuration; -import com.mysema.query.sql.ForeignKey; -import com.mysema.query.sql.RelationalFunctionCall; -import com.mysema.query.sql.RelationalPath; -import com.mysema.query.sql.SQLCommonQuery; -import com.mysema.query.sql.SQLOps; -import com.mysema.query.sql.SQLTemplates; -import com.mysema.query.sql.Union; -import com.mysema.query.sql.UnionImpl; -import com.mysema.query.sql.UnionUtils; -import com.mysema.query.sql.WithBuilder; -import com.mysema.query.support.Expressions; -import com.mysema.query.support.ProjectableQuery; +import com.mysema.query.sql.ProjectableSQLQuery; +import com.mysema.query.sql.SQLSerializer; import com.mysema.query.support.QueryMixin; -import com.mysema.query.types.EntityPath; import com.mysema.query.types.Expression; -import com.mysema.query.types.ExpressionUtils; -import com.mysema.query.types.OperationImpl; -import com.mysema.query.types.Path; -import com.mysema.query.types.Predicate; -import com.mysema.query.types.SubQueryExpression; -import com.mysema.query.types.expr.Wildcard; -import com.mysema.query.types.query.ListSubQuery; -import com.mysema.query.types.template.NumberTemplate; -import com.mysema.query.types.template.SimpleTemplate; +import com.mysema.query.types.FactoryExpression; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.annotation.Nullable; +import javax.jdo.PersistenceManager; +import javax.jdo.Query; +import java.io.Closeable; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; /** * Base class for JDO based SQLQuery implementations @@ -53,7 +44,29 @@ import com.mysema.query.types.template.SimpleTemplate; * @param */ @SuppressWarnings("rawtypes") -public abstract class AbstractSQLQuery & com.mysema.query.Query> extends ProjectableQuery implements SQLCommonQuery { +public abstract class AbstractSQLQuery & com.mysema.query.Query> extends ProjectableSQLQuery { + + + private static final Logger logger = LoggerFactory.getLogger(JDOSQLQuery.class); + + private final Closeable closeable = new Closeable() { + @Override + public void close() throws IOException { + AbstractSQLQuery.this.close(); + } + }; + + protected final boolean detach; + + private List orderedConstants = new ArrayList(); + + @Nullable + protected final PersistenceManager persistenceManager; + + protected List queries = new ArrayList(2); + + @Nullable + protected FactoryExpression projection; protected final QueryMixin queryMixin; @@ -62,261 +75,213 @@ public abstract class AbstractSQLQuery & com.mysem protected boolean unionAll; - protected final Configuration configuration; - @SuppressWarnings("unchecked") - public AbstractSQLQuery(QueryMetadata metadata, Configuration conf) { - super(new QueryMixin(metadata, false)); - this.configuration = conf; + public AbstractSQLQuery(QueryMetadata metadata, Configuration conf, PersistenceManager persistenceManager, + boolean detach) { + super(new QueryMixin(metadata, false), conf); this.queryMixin = super.queryMixin; this.queryMixin.setSelf((T)this); + this.persistenceManager = persistenceManager; + this.detach = detach; + } + + public void close() { + for (Query query : queries) { + query.closeAll(); + } } @Override public long count() { - return uniqueResult(Wildcard.countAsInt); + Query query = createQuery(true); + query.setUnique(true); + reset(); + Long rv = (Long) execute(query, true); + if (rv != null) { + return rv.longValue(); + } else { + throw new QueryException("Query returned null"); + } } - @Override - public boolean exists() { - return limit(1).uniqueResult(NumberTemplate.ONE) != null; + private Query createQuery(boolean forCount) { + SQLSerializer serializer = new SQLSerializer(configuration); + if (union != null) { + serializer.serializeUnion(union, queryMixin.getMetadata(), unionAll); + } else { + serializer.serialize(queryMixin.getMetadata(), forCount); + } + + + // create Query + if (logger.isDebugEnabled()) { + logger.debug(serializer.toString()); + } + Query query = persistenceManager.newQuery("javax.jdo.query.SQL",serializer.toString()); + orderedConstants = serializer.getConstants(); + queries.add(query); + + if (!forCount) { + List> projection = queryMixin.getMetadata().getProjection(); + if (projection.get(0) instanceof FactoryExpression) { + this.projection = (FactoryExpression)projection.get(0); + } + } else { + query.setResultClass(Long.class); + } + + return query; } - public T from(Expression arg) { - return queryMixin.from(arg); - } - - @Override - public T from(Expression... args) { - return queryMixin.from(args); - } - - @Override @SuppressWarnings("unchecked") - public T from(SubQueryExpression subQuery, Path alias) { - return queryMixin.from(ExpressionUtils.as((Expression) subQuery, alias)); + private T detach(T results) { + if (results instanceof Collection) { + return (T) persistenceManager.detachCopyAll(results); + } else { + return persistenceManager.detachCopy(results); + } + } + + private Object project(FactoryExpression expr, Object row) { + if (row == null) { + return null; + } else if (row.getClass().isArray()) { + return expr.newInstance((Object[])row); + } else { + return expr.newInstance(new Object[]{row}); + } + } + + private Object execute(Query query, boolean forCount) { + Object rv; + if (!orderedConstants.isEmpty()) { + rv = query.executeWithArray(orderedConstants.toArray()); + } else { + rv = query.execute(); + } + if (isDetach()) { + rv = detach(rv); + } + if (projection != null && !forCount) { + if (rv instanceof List) { + List original = (List)rv; + rv = Lists.newArrayList(); + for (Object o : original) { + ((List)rv).add(project(projection, o)); + } + } else { + rv = project(projection, rv); + } + } + return rv; } @Override - public T fullJoin(EntityPath o) { - return queryMixin.fullJoin(o); - } - - @Override - public T fullJoin(RelationalFunctionCall target, Path alias) { - return queryMixin.fullJoin(target, alias); - } - - @Override - public T fullJoin(ForeignKey key, RelationalPath entity) { - return queryMixin.fullJoin(entity).on(key.on(entity)); - } - - @Override - public T fullJoin(SubQueryExpression o, Path alias) { - return queryMixin.fullJoin(o, alias); - } - public QueryMetadata getMetadata() { return queryMixin.getMetadata(); } - @Override - public T innerJoin(EntityPath o) { - return queryMixin.innerJoin(o); + public boolean isDetach() { + return detach; } @Override - public T innerJoin(RelationalFunctionCall target, Path alias) { - return queryMixin.innerJoin(target, alias); + public CloseableIterator iterate(Expression... args) { + return iterate(queryMixin.createProjection(args)); } @Override - public T innerJoin(ForeignKey key, RelationalPath entity) { - return queryMixin.innerJoin(entity).on(key.on(entity)); + public CloseableIterator iterate(Expression projection) { + return new IteratorAdapter(list(projection).iterator(), closeable); } @Override - public T innerJoin(SubQueryExpression o, Path alias) { - return queryMixin.innerJoin(o, alias); - } - - @Override - public T join(EntityPath o) { - return queryMixin.join(o); - } - - @Override - public T join(RelationalFunctionCall target, Path alias) { - return queryMixin.join(target, alias); - } - - @Override - public T join(ForeignKey key, RelationalPath entity) { - return queryMixin.join(entity).on(key.on(entity)); - } - - @Override - public T join(SubQueryExpression o, Path alias) { - return queryMixin.join(o, alias); - } - - @Override - public T leftJoin(EntityPath o) { - return queryMixin.leftJoin(o); - } - - @Override - public T leftJoin(RelationalFunctionCall target, Path alias) { - return queryMixin.leftJoin(target, alias); - } - - @Override - public T leftJoin(ForeignKey key, RelationalPath entity) { - return queryMixin.leftJoin(entity).on(key.on(entity)); - } - - @Override - public T leftJoin(SubQueryExpression o, Path alias) { - return queryMixin.leftJoin(o, alias); - } - - public T on(Predicate condition) { - return queryMixin.on(condition); - } - - @Override - public T on(Predicate... conditions) { - return queryMixin.on(conditions); - } - - @Override - public T rightJoin(EntityPath o) { - return queryMixin.rightJoin(o); - } - - @Override - public T rightJoin(RelationalFunctionCall target, Path alias) { - return queryMixin.rightJoin(target, alias); - } - - @Override - public T rightJoin(ForeignKey key, RelationalPath entity) { - return queryMixin.rightJoin(entity).on(key.on(entity)); - } - - @Override - public T rightJoin(SubQueryExpression o, Path alias) { - return queryMixin.rightJoin(o, alias); - } - - @Override - public T addJoinFlag(String flag) { - return addJoinFlag(flag, JoinFlag.Position.BEFORE_TARGET); + public List list(Expression... args) { + return list(queryMixin.createProjection(args)); } @Override @SuppressWarnings("unchecked") - public T addJoinFlag(String flag, JoinFlag.Position position) { - queryMixin.addJoinFlag(new JoinFlag(flag, position)); - return (T)this; + public List list(Expression expr) { + queryMixin.addProjection(expr); + Object rv = execute(createQuery(false), false); + reset(); + return rv instanceof List ? (List)rv : Collections.singletonList((RT) rv); } @Override - public T addFlag(Position position, String prefix, Expression expr) { - Expression flag = SimpleTemplate.create(expr.getType(), prefix + "{0}", expr); - return queryMixin.addFlag(new QueryFlag(position, flag)); + public SearchResults listResults(Expression... args) { + return listResults(queryMixin.createProjection(args)); } @Override - public T addFlag(Position position, String flag) { - return queryMixin.addFlag(new QueryFlag(position, flag)); - } - - @Override - public T addFlag(Position position, Expression flag) { - return queryMixin.addFlag(new QueryFlag(position, flag)); - } - - public Union union(ListSubQuery... sq) { - return innerUnion(sq); - } - - public Union union(SubQueryExpression... sq) { - return innerUnion(sq); - } - - public Union unionAll(ListSubQuery... sq) { - unionAll = true; - return innerUnion(sq); - } - - public Union unionAll(SubQueryExpression... sq) { - unionAll = true; - return innerUnion(sq); - } - - public T union(Path alias, ListSubQuery... sq) { - return from(UnionUtils.union(sq, alias, false)); - } - - public T union(Path alias, SubQueryExpression... sq) { - return from(UnionUtils.union(sq, alias, false)); - } - - public T unionAll(Path alias, ListSubQuery... sq) { - return from(UnionUtils.union(sq, alias, true)); - } - - public T unionAll(Path alias, SubQueryExpression... sq) { - return from(UnionUtils.union(sq, alias, true)); - } - - @Override - public T withRecursive(Path alias, SubQueryExpression query) { - queryMixin.addFlag(new QueryFlag(QueryFlag.Position.WITH, SQLTemplates.RECURSIVE)); - return with(alias, query); - } - - @Override - public T withRecursive(Path alias, Expression query) { - queryMixin.addFlag(new QueryFlag(QueryFlag.Position.WITH, SQLTemplates.RECURSIVE)); - return with(alias, query); - } - - @Override - public WithBuilder withRecursive(Path alias, Path... columns) { - queryMixin.addFlag(new QueryFlag(QueryFlag.Position.WITH, SQLTemplates.RECURSIVE)); - return with(alias, columns); - } - - @Override - public T with(Path alias, SubQueryExpression query) { - Expression expr = OperationImpl.create(alias.getType(), SQLOps.WITH_ALIAS, alias, query); - return queryMixin.addFlag(new QueryFlag(QueryFlag.Position.WITH, expr)); - } - - @Override - public T with(Path alias, Expression query) { - Expression expr = OperationImpl.create(alias.getType(), SQLOps.WITH_ALIAS, alias, query); - return queryMixin.addFlag(new QueryFlag(QueryFlag.Position.WITH, expr)); - } - - @Override - public WithBuilder with(Path alias, Path... columns) { - Expression columnsCombined = ExpressionUtils.list(Object.class, columns); - Expression aliasCombined = Expressions.operation(alias.getType(), SQLOps.WITH_COLUMNS, alias, columnsCombined); - return new WithBuilder(queryMixin, aliasCombined); - } - @SuppressWarnings("unchecked") - private Union innerUnion(SubQueryExpression... sq) { - queryMixin.getMetadata().setValidate(false); - if (!queryMixin.getMetadata().getJoins().isEmpty()) { - throw new IllegalArgumentException("Don't mix union and from"); + public SearchResults listResults(Expression expr) { + queryMixin.addProjection(expr); + Query countQuery = createQuery(true); + countQuery.setUnique(true); + long total = (Long) execute(countQuery, true); + if (total > 0) { + QueryModifiers modifiers = queryMixin.getMetadata().getModifiers(); + Query query = createQuery(false); + reset(); + return new SearchResults((List) execute(query, false), modifiers, total); + } else { + reset(); + return SearchResults.emptyResults(); } - this.union = UnionUtils.union(sq, unionAll); - return new UnionImpl((T)this, sq[0].getMetadata().getProjection()); } + private void reset() { + queryMixin.getMetadata().reset(); + } + + @Override + public String toString() { + if (!queryMixin.getMetadata().getJoins().isEmpty()) { + SQLSerializer serializer = new SQLSerializer(configuration); + serializer.serialize(queryMixin.getMetadata(), false); + return serializer.toString().trim(); + } else { + return super.toString(); + } + } + + + @Override + @Nullable + public Tuple uniqueResult(Expression... args) { + return uniqueResult(queryMixin.createProjection(args)); + } + + @Override + @SuppressWarnings("unchecked") + @Nullable + public RT uniqueResult(Expression expr) { + queryMixin.addProjection(expr); + return (RT)uniqueResult(); + } + + @Nullable + private Object uniqueResult() { + if (getMetadata().getModifiers().getLimit() == null) { + limit(2); + } + Query query = createQuery(false); + reset(); + Object rv = execute(query, false); + if (rv instanceof List) { + List list = (List)rv; + if (!list.isEmpty()) { + if (list.size() > 1) { + throw new NonUniqueResultException(); + } + return list.get(0); + } else { + return null; + } + } else { + return rv; + } + } } diff --git a/querydsl-jdo/src/main/java/com/mysema/query/jdo/sql/JDOSQLQuery.java b/querydsl-jdo/src/main/java/com/mysema/query/jdo/sql/JDOSQLQuery.java index 7744b72c3..23321a299 100644 --- a/querydsl-jdo/src/main/java/com/mysema/query/jdo/sql/JDOSQLQuery.java +++ b/querydsl-jdo/src/main/java/com/mysema/query/jdo/sql/JDOSQLQuery.java @@ -13,35 +13,14 @@ */ package com.mysema.query.jdo.sql; -import java.io.Closeable; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; - -import javax.annotation.Nullable; -import javax.jdo.PersistenceManager; -import javax.jdo.Query; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.common.collect.Lists; -import com.mysema.commons.lang.CloseableIterator; -import com.mysema.commons.lang.IteratorAdapter; import com.mysema.query.DefaultQueryMetadata; -import com.mysema.query.NonUniqueResultException; -import com.mysema.query.QueryException; import com.mysema.query.QueryMetadata; -import com.mysema.query.QueryModifiers; -import com.mysema.query.SearchResults; -import com.mysema.query.Tuple; import com.mysema.query.sql.Configuration; import com.mysema.query.sql.SQLSerializer; import com.mysema.query.sql.SQLTemplates; -import com.mysema.query.types.Expression; -import com.mysema.query.types.FactoryExpression; + +import javax.annotation.Nullable; +import javax.jdo.PersistenceManager; /** * JDOSQLQuery is an SQLQuery implementation that uses JDO's SQL query functionality @@ -52,28 +31,6 @@ import com.mysema.query.types.FactoryExpression; */ public final class JDOSQLQuery extends AbstractSQLQuery { - private static final Logger logger = LoggerFactory.getLogger(JDOSQLQuery.class); - - private final Closeable closeable = new Closeable() { - @Override - public void close() throws IOException { - JDOSQLQuery.this.close(); - } - }; - - private final boolean detach; - - private List orderedConstants = new ArrayList(); - - @Nullable - private final PersistenceManager persistenceManager; - - private List queries = new ArrayList(2); - - @Nullable - private FactoryExpression projection; - - public JDOSQLQuery(@Nullable PersistenceManager persistenceManager, SQLTemplates templates) { this(persistenceManager, new Configuration(templates), new DefaultQueryMetadata().noValidate(), false); } @@ -86,210 +43,18 @@ public final class JDOSQLQuery extends AbstractSQLQuery { @Nullable PersistenceManager persistenceManager, Configuration configuration, QueryMetadata metadata, boolean detach) { - super(metadata, configuration); - this.persistenceManager = persistenceManager; - this.detach = detach; - } - - public void close() { - for (Query query : queries) { - query.closeAll(); - } + super(metadata, configuration, persistenceManager, detach); } @Override - public long count() { - Query query = createQuery(true); - query.setUnique(true); - reset(); - Long rv = (Long) execute(query, true); - if (rv != null) { - return rv.longValue(); - } else { - throw new QueryException("Query returned null"); - } - } - - private Query createQuery(boolean forCount) { - SQLSerializer serializer = new SQLSerializer(configuration); - if (union != null) { - serializer.serializeUnion(union, queryMixin.getMetadata(), unionAll); - } else { - serializer.serialize(queryMixin.getMetadata(), forCount); - } - - - // create Query - if (logger.isDebugEnabled()) { - logger.debug(serializer.toString()); - } - Query query = persistenceManager.newQuery("javax.jdo.query.SQL",serializer.toString()); - orderedConstants = serializer.getConstants(); - queries.add(query); - - if (!forCount) { - List> projection = queryMixin.getMetadata().getProjection(); - if (projection.get(0) instanceof FactoryExpression) { - this.projection = (FactoryExpression)projection.get(0); - } - } else { - query.setResultClass(Long.class); - } - + public JDOSQLQuery clone() { + JDOSQLQuery query = new JDOSQLQuery(persistenceManager, configuration, getMetadata().clone(), detach); + query.clone(this); return query; } - @SuppressWarnings("unchecked") - private T detach(T results) { - if (results instanceof Collection) { - return (T) persistenceManager.detachCopyAll(results); - } else { - return persistenceManager.detachCopy(results); - } - } - - private Object project(FactoryExpression expr, Object row) { - if (row == null) { - return null; - } else if (row.getClass().isArray()) { - return expr.newInstance((Object[])row); - } else { - return expr.newInstance(new Object[]{row}); - } - } - - private Object execute(Query query, boolean forCount) { - Object rv; - if (!orderedConstants.isEmpty()) { - rv = query.executeWithArray(orderedConstants.toArray()); - } else { - rv = query.execute(); - } - if (isDetach()) { - rv = detach(rv); - } - if (projection != null && !forCount) { - if (rv instanceof List) { - List original = (List)rv; - rv = Lists.newArrayList(); - for (Object o : original) { - ((List)rv).add(project(projection, o)); - } - } else { - rv = project(projection, rv); - } - } - return rv; - } - @Override - public QueryMetadata getMetadata() { - return queryMixin.getMetadata(); + protected SQLSerializer createSerializer() { + return new SQLSerializer(configuration); } - - public boolean isDetach() { - return detach; - } - - @Override - public CloseableIterator iterate(Expression... args) { - return iterate(queryMixin.createProjection(args)); - } - - @Override - public CloseableIterator iterate(Expression projection) { - return new IteratorAdapter(list(projection).iterator(), closeable); - } - - @Override - public List list(Expression... args) { - return list(queryMixin.createProjection(args)); - } - - @Override - @SuppressWarnings("unchecked") - public List list(Expression expr) { - queryMixin.addProjection(expr); - Object rv = execute(createQuery(false), false); - reset(); - return rv instanceof List ? (List)rv : Collections.singletonList((RT)rv); - } - - @Override - public SearchResults listResults(Expression... args) { - return listResults(queryMixin.createProjection(args)); - } - - @Override - @SuppressWarnings("unchecked") - public SearchResults listResults(Expression expr) { - queryMixin.addProjection(expr); - Query countQuery = createQuery(true); - countQuery.setUnique(true); - long total = (Long) execute(countQuery, true); - if (total > 0) { - QueryModifiers modifiers = queryMixin.getMetadata().getModifiers(); - Query query = createQuery(false); - reset(); - return new SearchResults((List) execute(query, false), modifiers, total); - } else { - reset(); - return SearchResults.emptyResults(); - } - } - - private void reset() { - queryMixin.getMetadata().reset(); - } - - @Override - public String toString() { - if (!queryMixin.getMetadata().getJoins().isEmpty()) { - SQLSerializer serializer = new SQLSerializer(configuration); - serializer.serialize(queryMixin.getMetadata(), false); - return serializer.toString().trim(); - } else { - return super.toString(); - } - } - - - @Override - @Nullable - public Tuple uniqueResult(Expression... args) { - return uniqueResult(queryMixin.createProjection(args)); - } - - @Override - @SuppressWarnings("unchecked") - @Nullable - public RT uniqueResult(Expression expr) { - queryMixin.addProjection(expr); - return (RT)uniqueResult(); - } - - @Nullable - private Object uniqueResult() { - if (getMetadata().getModifiers().getLimit() == null) { - limit(2); - } - Query query = createQuery(false); - reset(); - Object rv = execute(query, false); - if (rv instanceof List) { - List list = (List)rv; - if (!list.isEmpty()) { - if (list.size() > 1) { - throw new NonUniqueResultException(); - } - return list.get(0); - } else { - return null; - } - } else { - return rv; - } - } - - } diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/sql/AbstractJPASQLQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/sql/AbstractJPASQLQuery.java index c06033302..aeb8c077a 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/sql/AbstractJPASQLQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/sql/AbstractJPASQLQuery.java @@ -13,27 +13,10 @@ */ package com.mysema.query.jpa.sql; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import javax.annotation.Nullable; -import javax.persistence.EntityManager; -import javax.persistence.FlushModeType; -import javax.persistence.LockModeType; -import javax.persistence.Query; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import com.mysema.commons.lang.CloseableIterator; -import com.mysema.query.DefaultQueryMetadata; -import com.mysema.query.NonUniqueResultException; -import com.mysema.query.QueryMetadata; -import com.mysema.query.QueryModifiers; -import com.mysema.query.SearchResults; +import com.mysema.query.*; import com.mysema.query.jpa.AbstractSQLQuery; import com.mysema.query.jpa.NativeSQLSerializer; import com.mysema.query.jpa.QueryHandler; @@ -43,6 +26,17 @@ import com.mysema.query.sql.Configuration; import com.mysema.query.types.Expression; import com.mysema.query.types.FactoryExpression; import com.mysema.query.types.FactoryExpressionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.annotation.Nullable; +import javax.persistence.EntityManager; +import javax.persistence.FlushModeType; +import javax.persistence.LockModeType; +import javax.persistence.Query; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; /** * AbstractJPASQLQuery is the base class for JPA Native SQL queries @@ -70,6 +64,7 @@ public abstract class AbstractJPASQLQuery> exte @Nullable protected FactoryExpression projection; + public AbstractJPASQLQuery(EntityManager em, Configuration configuration) { this(em, configuration, new DefaultQueryMetadata().noValidate()); } From b2c986c2f11d3090b86ef0833b6b666a0769cea2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 15 Apr 2014 22:06:45 +0300 Subject: [PATCH 02/20] Add enforcer config --- .../mysema/query/types/expr/CaseBuilder.java | 15 ++++++++++ querydsl-root/pom.xml | 29 +++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/querydsl-core/src/main/java/com/mysema/query/types/expr/CaseBuilder.java b/querydsl-core/src/main/java/com/mysema/query/types/expr/CaseBuilder.java index cdf4a19fd..6a3827d8e 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/expr/CaseBuilder.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/expr/CaseBuilder.java @@ -259,6 +259,11 @@ public final class CaseBuilder { return thenDate(ConstantImpl.create(date)); } + @Deprecated + public Cases> thenDate(java.sql.Date date) { + return then(date); + } + // DateTime public Cases> then(DateTimeExpression expr) { @@ -279,10 +284,20 @@ public final class CaseBuilder { return thenDateTime(ConstantImpl.create(ts)); } + @Deprecated + public Cases> thenDateTime(Timestamp ts) { + return then(ts); + } + public Cases> then(java.util.Date date) { return thenDateTime(ConstantImpl.create(date)); } + @Deprecated + public Cases> thenDateTime(java.util.Date date) { + return then(date); + } + // Enum public > Cases> then(EnumExpression expr) { diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 3e3f220d3..b2bca7c4f 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -183,6 +183,35 @@ + + org.apache.maven.plugins + maven-enforcer-plugin + 1.3.1 + + + check + verify + + enforce + + + + + BACKWARD_COMPATIBLE_USER + true + + + + + + + + org.semver + enforcer-rule + 0.9.22 + + + maven-assembly-plugin From cc86014125d4e51850869d726055a0b42387eda0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 15 Apr 2014 22:47:00 +0300 Subject: [PATCH 03/20] Add semantic versioning rule --- querydsl-root/pom.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index b2bca7c4f..2c625f6ef 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -200,6 +200,9 @@ BACKWARD_COMPATIBLE_USER true + + true + From 4cf4b8ff1993c55a159213f71fbc36e1197bb362 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 16 Apr 2014 22:52:09 +0300 Subject: [PATCH 04/20] Improve backwards compatibility --- .../src/main/java/com/mysema/query/jpa/AbstractSQLQuery.java | 4 ++-- .../src/main/java/com/mysema/query/sql/AbstractSQLQuery.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/AbstractSQLQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/AbstractSQLQuery.java index 0cb4b354f..f253c24d2 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/AbstractSQLQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/AbstractSQLQuery.java @@ -50,11 +50,11 @@ public abstract class AbstractSQLQuery> extends Pr this.queryMixin.setSelf((Q) this); } - protected static boolean isEntityExpression(Expression expr) { + protected boolean isEntityExpression(Expression expr) { return expr instanceof EntityPath || expr.getType().isAnnotationPresent(Entity.class); } - protected static Expression extractEntityExpression(Expression expr) { + protected Expression extractEntityExpression(Expression expr) { if (expr instanceof Operation) { return ((Operation)expr).getArg(0); } else if (expr instanceof TemplateExpression) { diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java b/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java index 008c67f8b..293a52a5f 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java @@ -165,7 +165,7 @@ public abstract class AbstractSQLQuery> extends Pr } @Override - public final CloseableIterator iterate(Expression expr) { + public CloseableIterator iterate(Expression expr) { expr = queryMixin.addProjection(expr); return iterateSingle(queryMixin.getMetadata(), expr); } From 67753fd4cdf817625dc9895b7dd601f4225c276a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 16 Apr 2014 22:52:26 +0300 Subject: [PATCH 05/20] Use patched version of semantic versioning --- querydsl-root/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 2c625f6ef..78ea1f822 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -211,7 +211,7 @@ org.semver enforcer-rule - 0.9.22 + 0.9.23-SNAPSHOT From 71df39f3cd6a1d946f6988d284277d5eaf7dbc07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 17 Apr 2014 14:16:16 +0300 Subject: [PATCH 06/20] Remove enforcer config --- querydsl-root/pom.xml | 32 -------------------------------- 1 file changed, 32 deletions(-) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 78ea1f822..3e3f220d3 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -183,38 +183,6 @@ - - org.apache.maven.plugins - maven-enforcer-plugin - 1.3.1 - - - check - verify - - enforce - - - - - BACKWARD_COMPATIBLE_USER - true - - - true - - - - - - - - org.semver - enforcer-rule - 0.9.23-SNAPSHOT - - - maven-assembly-plugin From 47bf704919ec7bab5f10d18a563e5517c7e5fb64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 17 Apr 2014 16:23:54 +0300 Subject: [PATCH 07/20] Extend JDBC Type to provide literal serialization --- querydsl-sql/pom.xml | 424 +++++++++--------- .../com/mysema/query/sql/Configuration.java | 15 + .../com/mysema/query/sql/DerbyTemplates.java | 19 +- .../com/mysema/query/sql/OracleTemplates.java | 16 +- .../com/mysema/query/sql/SQLSerializer.java | 34 +- .../mysema/query/sql/SQLServerTemplates.java | 19 +- .../com/mysema/query/sql/SQLTemplates.java | 92 +--- .../com/mysema/query/sql/SQLiteTemplates.java | 32 +- .../sql/teradata/SetQueryBandClause.java | 18 +- .../query/sql/types/AbstractDateTimeType.java | 51 +++ .../mysema/query/sql/types/AbstractType.java | 17 +- .../mysema/query/sql/types/CalendarType.java | 7 +- .../mysema/query/sql/types/DateTimeType.java | 15 +- .../com/mysema/query/sql/types/DateType.java | 13 +- .../query/sql/types/LocalDateTimeType.java | 15 +- .../mysema/query/sql/types/LocalDateType.java | 15 +- .../mysema/query/sql/types/LocalTimeType.java | 15 +- .../com/mysema/query/sql/types/TimeType.java | 13 +- .../mysema/query/sql/types/TimestampType.java | 13 +- .../java/com/mysema/query/sql/types/Type.java | 11 +- .../mysema/query/sql/types/UtilDateType.java | 7 +- .../java/com/mysema/query/SelectBase.java | 2 +- .../mysema/query/sql/SQLTemplatesTest.java | 39 +- 23 files changed, 463 insertions(+), 439 deletions(-) create mode 100644 querydsl-sql/src/main/java/com/mysema/query/sql/types/AbstractDateTimeType.java diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index 60facda97..360321fd8 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -1,214 +1,214 @@ - - 4.0.0 - - - com.mysema.querydsl - querydsl-root - 3.3.3.BUILD-SNAPSHOT - ../querydsl-root/pom.xml - - - com.mysema.querydsl - querydsl-sql - Querydsl - SQL support - SQL support for Querydsl - jar - - - - com.mysema.querydsl - querydsl-core - ${project.version} - - - joda-time - joda-time - 1.6 - - - javax.validation - validation-api - 1.0.0.GA - - - - org.slf4j - slf4j-api - - - org.slf4j - slf4j-log4j12 - provided - - - - javax.inject - javax.inject - 1 - - - - - org.hsqldb - hsqldb - ${hsqldb.version} - test - - - - org.apache.derby - derby - ${derby.version} - test - - - mysql - mysql-connector-java - ${mysql.version} - test - - - postgresql - postgresql - ${postgresql.version} - test - - - - com.oracle - ojdbc6 - ${oracle.version} - test - - - net.sourceforge.jtds - jtds - ${jtds.version} - test - - - com.h2database - h2 - ${h2.version} - test - - - - cubrid - cubrid-jdbc - ${cubrid.version} - test - - - - org.xerial - sqlite-jdbc - ${sqlite.version} - test - - - - com.teradata - teradata-jdbc - ${teradata.version} - test - - - com.teradata - teradata-config - ${teradata.version} - test - - - - com.mysema.querydsl - querydsl-core - ${project.version} - test - test-jar - - - - jdepend - jdepend - 2.9.1 - test - - - - - - - - com.springsource.bundlor - com.springsource.bundlor.maven - - - - org.apache.maven.plugins - maven-jar-plugin - - - test-jar - - test-jar - - - - - - maven-source-plugin - - - package - - test-jar - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - - derby.stream.error.file - target/derby.log - - - - - - - - - + + 4.0.0 + + + com.mysema.querydsl + querydsl-root + 3.3.3.BUILD-SNAPSHOT + ../querydsl-root/pom.xml + + + com.mysema.querydsl + querydsl-sql + Querydsl - SQL support + SQL support for Querydsl + jar + + + + com.mysema.querydsl + querydsl-core + ${project.version} + + + joda-time + joda-time + 1.6 + + + javax.validation + validation-api + 1.0.0.GA + + + + org.slf4j + slf4j-api + + + org.slf4j + slf4j-log4j12 + provided + + + + javax.inject + javax.inject + 1 + + + + + org.hsqldb + hsqldb + ${hsqldb.version} + test + + + + org.apache.derby + derby + ${derby.version} + test + + + mysql + mysql-connector-java + ${mysql.version} + test + + + postgresql + postgresql + ${postgresql.version} + test + + + + com.oracle + ojdbc6 + ${oracle.version} + test + + + net.sourceforge.jtds + jtds + ${jtds.version} + test + + + com.h2database + h2 + ${h2.version} + test + + + + cubrid + cubrid-jdbc + ${cubrid.version} + test + + + + org.xerial + sqlite-jdbc + ${sqlite.version} + test + + + + com.teradata + teradata-jdbc + ${teradata.version} + test + + + com.teradata + teradata-config + ${teradata.version} + test + + + + com.mysema.querydsl + querydsl-core + ${project.version} + test + test-jar + + + + jdepend + jdepend + 2.9.1 + test + + + + + + + + com.springsource.bundlor + com.springsource.bundlor.maven + + + + org.apache.maven.plugins + maven-jar-plugin + + + test-jar + + test-jar + + + + + + maven-source-plugin + + + package + + test-jar + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + + derby.stream.error.file + target/derby.log + + + + + + + + + diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java b/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java index 0cdbe03d8..0b508def3 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java @@ -73,6 +73,21 @@ public final class Configuration { } } + /** + * Get the literal representation of the given constant + * + * @param o + * @return + */ + public String asLiteral(Object o) { + Type type = javaTypeMapping.getType(o.getClass()); + if (type != null) { + return templates.serialize(type.getLiteral(o), type.getSQLTypes()[0]); + } else { + throw new IllegalArgumentException("Unsupported literal type " + o.getClass().getName()); + } + } + public SQLTemplates getTemplates() { return templates; } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/DerbyTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/DerbyTemplates.java index 513aa0b3e..17c53fd73 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/DerbyTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/DerbyTemplates.java @@ -17,6 +17,8 @@ import com.mysema.query.QueryMetadata; import com.mysema.query.QueryModifiers; import com.mysema.query.types.Ops; +import java.sql.Types; + /** * DerbyTemplates is an SQL dialect for Derby * @@ -107,15 +109,16 @@ public class DerbyTemplates extends SQLTemplates { } @Override - public String asLiteral(DateTimeType type, String literal) { - // JDBC escape syntax - String keyword = "ts"; - if (type == DateTimeType.DATE) { - keyword = "d"; - } else if (type == DateTimeType.TIME) { - keyword = "t"; + public String serialize(String literal, int jdbcType) { + if (jdbcType == Types.TIMESTAMP) { + return "{ts '" + literal + "'}"; + } else if (jdbcType == Types.DATE) { + return "{d '" + literal + "'}"; + } else if (jdbcType == Types.TIME) { + return "{t '" + literal + "'}"; + } else { + return super.serialize(literal, jdbcType); } - return "{" + keyword + " '" + literal + "'}"; } @Override diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/OracleTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/OracleTemplates.java index 2d5199d36..92988d5ce 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/OracleTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/OracleTemplates.java @@ -13,9 +13,6 @@ */ package com.mysema.query.sql; -import java.math.BigInteger; -import java.util.List; - import com.mysema.commons.lang.Pair; import com.mysema.query.QueryFlag.Position; import com.mysema.query.QueryMetadata; @@ -24,6 +21,10 @@ import com.mysema.query.types.Expression; import com.mysema.query.types.Ops; import com.mysema.query.types.Path; +import java.math.BigInteger; +import java.sql.Types; +import java.util.List; + /** * OracleTemplates is an SQL dialect for Oracle * @@ -134,12 +135,11 @@ public class OracleTemplates extends SQLTemplates { } @Override - public String asLiteral(DateTimeType type, String literal) { - if (type == DateTimeType.TIME) { - // Oracle doesn't support the time type - return "(timestamp '1970-01-01 " + literal + "')"; + public String serialize(String literal, int jdbcType) { + if (jdbcType == Types.TIME) { + return "(timestamp '1970-01-01 " + literal + "'}"; } else { - return super.asLiteral(type, literal); + return super.serialize(literal, jdbcType); } } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java index e13315ef1..7a0b65808 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java @@ -13,15 +13,6 @@ */ package com.mysema.query.sql; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Set; - -import javax.annotation.Nullable; - import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; @@ -32,24 +23,11 @@ import com.mysema.query.QueryFlag; import com.mysema.query.QueryFlag.Position; import com.mysema.query.QueryMetadata; import com.mysema.query.support.SerializerBase; -import com.mysema.query.types.Constant; -import com.mysema.query.types.ConstantImpl; -import com.mysema.query.types.Expression; -import com.mysema.query.types.ExpressionUtils; -import com.mysema.query.types.FactoryExpression; -import com.mysema.query.types.Operator; -import com.mysema.query.types.Ops; -import com.mysema.query.types.Order; -import com.mysema.query.types.OrderSpecifier; -import com.mysema.query.types.ParamExpression; -import com.mysema.query.types.Path; -import com.mysema.query.types.PathMetadata; -import com.mysema.query.types.Predicate; -import com.mysema.query.types.SubQueryExpression; -import com.mysema.query.types.Template; +import com.mysema.query.types.*; import com.mysema.query.types.Template.Element; -import com.mysema.query.types.TemplateExpression; -import com.mysema.query.types.TemplateFactory; + +import javax.annotation.Nullable; +import java.util.*; /** * SqlSerializer serializes Querydsl queries into SQL @@ -705,12 +683,12 @@ public class SQLSerializer extends SerializerBase { if (!first) { append(COMMA); } - append(templates.asLiteral(o)); + append(configuration.asLiteral(o)); first = false; } append(")"); } else { - append(templates.asLiteral(constant)); + append(configuration.asLiteral(constant)); } } else if (constant instanceof Collection) { append("("); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java index b7cc5dbf2..a0af71a05 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java @@ -20,6 +20,8 @@ import com.mysema.query.QueryModifiers; import com.mysema.query.support.Expressions; import com.mysema.query.types.Ops; +import java.sql.Types; + /** * SQLServerTemplates is an SQL dialect for Microsoft SQL Server * @@ -115,15 +117,16 @@ public class SQLServerTemplates extends SQLTemplates { } @Override - public String asLiteral(DateTimeType type, String literal) { - // JDBC escape syntax - String keyword = "ts"; - if (type == DateTimeType.DATE) { - keyword = "d"; - } else if (type == DateTimeType.TIME) { - keyword = "t"; + public String serialize(String literal, int jdbcType) { + if (jdbcType == Types.TIMESTAMP) { + return "{ts '" + literal + "'}"; + } else if (jdbcType == Types.DATE) { + return "{d '" + literal + "'}"; + } else if (jdbcType == Types.TIME) { + return "{t '" + literal + "'}"; + } else { + return super.serialize(literal, jdbcType); } - return "{" + keyword + " '" + literal + "'}"; } @Override diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java index e73db54e8..818c71fbd 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java @@ -13,20 +13,6 @@ */ package com.mysema.query.sql; -import java.lang.reflect.Field; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; - -import org.joda.time.LocalDate; -import org.joda.time.LocalTime; -import org.joda.time.ReadableInstant; -import org.joda.time.ReadablePartial; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; - import com.google.common.primitives.Primitives; import com.mysema.commons.lang.Pair; import com.mysema.query.JoinType; @@ -34,12 +20,11 @@ import com.mysema.query.QueryException; import com.mysema.query.QueryFlag.Position; import com.mysema.query.QueryMetadata; import com.mysema.query.QueryModifiers; -import com.mysema.query.types.Expression; -import com.mysema.query.types.Ops; -import com.mysema.query.types.Path; -import com.mysema.query.types.SubQueryExpression; -import com.mysema.query.types.TemplateExpressionImpl; -import com.mysema.query.types.Templates; +import com.mysema.query.types.*; + +import java.lang.reflect.Field; +import java.sql.Types; +import java.util.*; /** * SQLTemplates extends Templates to provides SQL specific extensions @@ -49,8 +34,6 @@ import com.mysema.query.types.Templates; */ public class SQLTemplates extends Templates { - enum DateTimeType {DATE, TIME, DATETIME}; - public static final Expression RECURSIVE = TemplateExpressionImpl.create(Object.class, ""); public static final SQLTemplates DEFAULT = new SQLTemplates("\"",'\\',false); @@ -94,12 +77,6 @@ public class SQLTemplates extends Templates { } - private static final DateTimeFormatter dateFormatter = DateTimeFormat.forPattern("yyyy-MM-dd"); - - private static final DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); - - private static final DateTimeFormatter timeFormatter = DateTimeFormat.forPattern("HH:mm:ss"); - private final Map, String> class2type = new HashMap, String>(); private final String quoteStr; @@ -365,35 +342,25 @@ public class SQLTemplates extends Templates { class2type.put(java.sql.Timestamp.class, "timestamp"); } - public String asLiteral(Object o) { - if (o instanceof Character) { - return "'" + escapeLiteral(o.toString()) + "'"; - } else if (o instanceof String) { - return "'" + escapeLiteral(o.toString()) + "'"; - // java.util.Date - } else if (o instanceof java.util.Date) { - java.util.Date date = (java.util.Date)o; - if (o instanceof java.sql.Date) { - return asLiteral(DateTimeType.DATE, dateFormatter.print(date.getTime())); - } else if (o instanceof java.sql.Time) { - return asLiteral(DateTimeType.TIME, timeFormatter.print(date.getTime())); - } else { - return asLiteral(DateTimeType.DATETIME, dateTimeFormatter.print(date.getTime())); - } - // Joda time - } else if (o instanceof ReadablePartial) { - ReadablePartial partial = (ReadablePartial)o; - if (o instanceof LocalDate) { - return asLiteral(DateTimeType.DATE, dateFormatter.print(partial)); - } else if (o instanceof LocalTime) { - return asLiteral(DateTimeType.TIME, timeFormatter.print(partial)); - } else { - return asLiteral(DateTimeType.DATETIME, dateTimeFormatter.print(partial)); - } - } else if (o instanceof ReadableInstant) { - return asLiteral(DateTimeType.DATETIME, dateTimeFormatter.print((ReadableInstant)o)); - } else { - return o.toString(); + public String serialize(String literal, int jdbcType) { + switch (jdbcType) { + case Types.TIMESTAMP: + return "(timestamp '" + literal + "')"; + case Types.DATE: + return "(date '" + literal + "')"; + case Types.TIME: + return "(time '" + literal + "')"; + case Types.CHAR: + case Types.CLOB: + case Types.LONGNVARCHAR: + case Types.LONGVARCHAR: + case Types.NCHAR: + case Types.NCLOB: + case Types.NVARCHAR: + case Types.VARCHAR: + return "'" + escapeLiteral(literal) + "'"; + default: + return literal; } } @@ -417,17 +384,6 @@ public class SQLTemplates extends Templates { return builder.toString(); } - public String asLiteral(DateTimeType type, String literal) { - // SQL 92 standard - String keyword = "timestamp"; - if (type == DateTimeType.DATE) { - keyword = "date"; - } else if (type == DateTimeType.TIME) { - keyword = "time"; - } - return "(" + keyword + " '" + literal + "')"; - } - protected void addClass2TypeMappings(String type, Class... classes) { for (Class cl : classes) { class2type.put(cl, type); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLiteTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLiteTemplates.java index 734760d67..77d264ce9 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLiteTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLiteTemplates.java @@ -14,7 +14,10 @@ package com.mysema.query.sql; import com.mysema.query.types.Ops; -import org.joda.time.*; +import org.joda.time.format.DateTimeFormat; +import org.joda.time.format.DateTimeFormatter; + +import java.sql.Types; /** * SQLiteTemplates is a SQL dialect for SQLite @@ -24,6 +27,12 @@ import org.joda.time.*; */ public class SQLiteTemplates extends SQLTemplates { + private static final DateTimeFormatter dateFormatter = DateTimeFormat.forPattern("yyyy-MM-dd"); + + private static final DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); + + private static final DateTimeFormatter timeFormatter = DateTimeFormat.forPattern("HH:mm:ss"); + public static Builder builder() { return new Builder() { @Override @@ -87,19 +96,16 @@ public class SQLiteTemplates extends SQLTemplates { } @Override - public String asLiteral(Object o) { - if (o instanceof java.util.Date) { - return String.valueOf(((java.util.Date)o).getTime()); - } else if (o instanceof ReadableInstant) { - return String.valueOf(((ReadableInstant) o).getMillis()); - } else if (o instanceof LocalDate) { - return String.valueOf(((LocalDate) o).toDateTimeAtStartOfDay(DateTimeZone.UTC).getMillis()); - } else if (o instanceof LocalDateTime) { - return String.valueOf(((LocalDateTime) o).toDateTime(DateTimeZone.UTC).getMillis()); - } else if (o instanceof LocalTime) { - return String.valueOf(((LocalTime) o).getMillisOfDay()); + public String serialize(String literal, int jdbcType) { + // XXX doesn't work with LocalDate, LocalDateTime and LocalTime + if (jdbcType == Types.TIMESTAMP) { + return String.valueOf(dateTimeFormatter.parseDateTime(literal).getMillis()); + } else if (jdbcType == Types.DATE) { + return String.valueOf(dateFormatter.parseDateTime(literal).getMillis()); + } else if (jdbcType == Types.TIME) { + return String.valueOf(timeFormatter.parseDateTime(literal).getMillis()); } else { - return super.asLiteral(o); + return super.serialize(literal, jdbcType); } } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/teradata/SetQueryBandClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/teradata/SetQueryBandClause.java index 4fb090deb..8e7e11fbc 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/teradata/SetQueryBandClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/teradata/SetQueryBandClause.java @@ -13,12 +13,6 @@ */ package com.mysema.query.sql.teradata; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.SQLException; -import java.util.List; -import java.util.Map; - import com.google.common.collect.ImmutableList; import com.google.common.collect.Maps; import com.mysema.query.sql.Configuration; @@ -26,6 +20,12 @@ import com.mysema.query.sql.SQLBindings; import com.mysema.query.sql.SQLTemplates; import com.mysema.query.sql.dml.AbstractSQLClause; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + /** * SetQueryBandClause provides support for Teradata specific set query_band executions. * @@ -116,9 +116,9 @@ public class SetQueryBandClause extends AbstractSQLClause { builder.append(";"); } if (configuration.getUseLiterals() || forSession) { - queryString = "set query_band=" - + configuration.getTemplates().asLiteral(builder.toString()) - + (forSession ? " for session" : " for transaction"); + queryString = "set query_band='" + + configuration.getTemplates().escapeLiteral(builder.toString()) + + (forSession ? "' for session" : "' for transaction"); parameter = null; } else { queryString = "set query_band=?" + (forSession ? " for session" : " for transaction"); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/AbstractDateTimeType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/AbstractDateTimeType.java new file mode 100644 index 000000000..7e0ec7e3c --- /dev/null +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/AbstractDateTimeType.java @@ -0,0 +1,51 @@ +/* + * Copyright 2014, Mysema Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.mysema.query.sql.types; + +import org.joda.time.format.DateTimeFormat; +import org.joda.time.format.DateTimeFormatter; + +import java.util.Calendar; +import java.util.TimeZone; + +/** + * Common abstract superclass for Type implementations + * + * @author tiwe + * + * @param + */ +public abstract class AbstractDateTimeType extends AbstractType { + + private static final Calendar UTC = Calendar.getInstance(TimeZone.getTimeZone("UTC")); + + static { + UTC.setTimeInMillis(0); + } + + protected static Calendar utc() { + return (Calendar) UTC.clone(); + } + + protected static final DateTimeFormatter dateFormatter = DateTimeFormat.forPattern("yyyy-MM-dd"); + + protected static final DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); + + protected static final DateTimeFormatter timeFormatter = DateTimeFormat.forPattern("HH:mm:ss"); + + public AbstractDateTimeType(int type) { + super(type); + } + +} diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/AbstractType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/AbstractType.java index 46d0ca506..e248a472d 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/types/AbstractType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/AbstractType.java @@ -13,9 +13,6 @@ */ package com.mysema.query.sql.types; -import java.util.Calendar; -import java.util.TimeZone; - /** * Common abstract superclass for Type implementations * @@ -25,16 +22,6 @@ import java.util.TimeZone; */ public abstract class AbstractType implements Type { - private static final Calendar UTC = Calendar.getInstance(TimeZone.getTimeZone("UTC")); - - static { - UTC.setTimeInMillis(0); - } - - protected static Calendar utc() { - return (Calendar) UTC.clone(); - } - private final int type; public AbstractType(int type) { @@ -46,4 +33,8 @@ public abstract class AbstractType implements Type { return new int[]{type}; } + public String getLiteral(T value) { + return value.toString(); + } + } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/CalendarType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/CalendarType.java index a726d5c15..3dd628942 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/types/CalendarType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/CalendarType.java @@ -26,7 +26,7 @@ import java.util.Calendar; * @author tiwe * */ -public class CalendarType extends AbstractType { +public class CalendarType extends AbstractDateTimeType { public CalendarType() { super(Types.TIMESTAMP); @@ -36,6 +36,11 @@ public class CalendarType extends AbstractType { super(type); } + @Override + public String getLiteral(Calendar value) { + return dateTimeFormatter.print(value.getTimeInMillis()); + } + @Override public Calendar getValue(ResultSet rs, int startIndex) throws SQLException { Timestamp ts = rs.getTimestamp(startIndex); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/DateTimeType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/DateTimeType.java index fdb720971..3b004681e 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/types/DateTimeType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/DateTimeType.java @@ -13,21 +13,17 @@ */ package com.mysema.query.sql.types; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Timestamp; -import java.sql.Types; - import org.joda.time.DateTime; +import java.sql.*; + /** * DateTimeType maps DateTime to Timestamp on the JDBC level * * @author tiwe * */ -public class DateTimeType extends AbstractType { +public class DateTimeType extends AbstractDateTimeType { public DateTimeType() { super(Types.TIMESTAMP); @@ -37,6 +33,11 @@ public class DateTimeType extends AbstractType { super(type); } + @Override + public String getLiteral(DateTime value) { + return dateTimeFormatter.print(value); + } + @Override public Class getReturnedClass() { return DateTime.class; diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/DateType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/DateType.java index 2d1fdadf2..e2dd345f7 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/types/DateType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/DateType.java @@ -13,11 +13,7 @@ */ package com.mysema.query.sql.types; -import java.sql.Date; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Types; +import java.sql.*; /** * DateType maps Date to Date on the JDBC level @@ -25,7 +21,7 @@ import java.sql.Types; * @author tiwe * */ -public class DateType extends AbstractType { +public class DateType extends AbstractDateTimeType { public DateType() { super(Types.DATE); @@ -35,6 +31,11 @@ public class DateType extends AbstractType { super(type); } + @Override + public String getLiteral(Date value) { + return dateFormatter.print(value.getTime()); + } + @Override public Date getValue(ResultSet rs, int startIndex) throws SQLException { return rs.getDate(startIndex); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/LocalDateTimeType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/LocalDateTimeType.java index b8c67d788..89827c478 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/types/LocalDateTimeType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/LocalDateTimeType.java @@ -13,23 +13,19 @@ */ package com.mysema.query.sql.types; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Timestamp; -import java.sql.Types; - import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.joda.time.LocalDateTime; +import java.sql.*; + /** * LocalDateTimeType maps LocalDateTime to Timestamp on the JDBC level * * @author tiwe * */ -public class LocalDateTimeType extends AbstractType { +public class LocalDateTimeType extends AbstractDateTimeType { public LocalDateTimeType() { super(Types.TIMESTAMP); @@ -39,6 +35,11 @@ public class LocalDateTimeType extends AbstractType { super(type); } + @Override + public String getLiteral(LocalDateTime value) { + return dateTimeFormatter.print(value); + } + @Override public Class getReturnedClass() { return LocalDateTime.class; diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/LocalDateType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/LocalDateType.java index f8247cd39..ff2a6e87d 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/types/LocalDateType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/LocalDateType.java @@ -13,22 +13,18 @@ */ package com.mysema.query.sql.types; -import java.sql.Date; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Types; - import org.joda.time.DateTimeZone; import org.joda.time.LocalDate; +import java.sql.*; + /** * LocalDateType maps LocalDate to Date on the JDBC level * * @author tiwe * */ -public class LocalDateType extends AbstractType { +public class LocalDateType extends AbstractDateTimeType { public LocalDateType() { super(Types.DATE); @@ -38,6 +34,11 @@ public class LocalDateType extends AbstractType { super(type); } + @Override + public String getLiteral(LocalDate value) { + return dateFormatter.print(value); + } + @Override public Class getReturnedClass() { return LocalDate.class; diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/LocalTimeType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/LocalTimeType.java index 4eae179e8..ec7ea96ce 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/types/LocalTimeType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/LocalTimeType.java @@ -13,22 +13,18 @@ */ package com.mysema.query.sql.types; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Time; -import java.sql.Types; - import org.joda.time.DateTimeZone; import org.joda.time.LocalTime; +import java.sql.*; + /** * LocalTimeType maps LocalTime to Time on the JDBC level * * @author tiwe * */ -public class LocalTimeType extends AbstractType { +public class LocalTimeType extends AbstractDateTimeType { public LocalTimeType() { super(Types.TIME); @@ -38,6 +34,11 @@ public class LocalTimeType extends AbstractType { super(type); } + @Override + public String getLiteral(LocalTime value) { + return timeFormatter.print(value); + } + @Override public Class getReturnedClass() { return LocalTime.class; diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/TimeType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/TimeType.java index 040096b53..cee289505 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/types/TimeType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/TimeType.java @@ -13,11 +13,7 @@ */ package com.mysema.query.sql.types; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Time; -import java.sql.Types; +import java.sql.*; /** * TimeType maps Time to Time on the JDBC level @@ -25,7 +21,7 @@ import java.sql.Types; * @author tiwe * */ -public class TimeType extends AbstractType diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQueryFactory.java b/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQueryFactory.java index e08a7e744..dd045ae17 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQueryFactory.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQueryFactory.java @@ -17,6 +17,7 @@ import java.sql.Connection; import javax.inject.Provider; +import com.infradna.tool.bridge_method_injector.WithBridgeMethods; import com.mysema.query.sql.dml.SQLDeleteClause; import com.mysema.query.sql.dml.SQLInsertClause; import com.mysema.query.sql.dml.SQLMergeClause; @@ -78,11 +79,13 @@ public abstract class AbstractSQLQueryFactory, SQ ex @SuppressWarnings("unchecked") @Override + @WithBridgeMethods(value=SQLSubQuery.class, castRequired=true) public SQ subQuery() { return (SQ) new SQLSubQuery(); } @Override + @WithBridgeMethods(value=SQLSubQuery.class, castRequired=true) public final SQ subQuery(Expression from) { return subQuery().from(from); } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/DetachableSQLQuery.java b/querydsl-sql/src/main/java/com/mysema/query/sql/DetachableSQLQuery.java index 890abe2ed..5cdf8bc70 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/DetachableSQLQuery.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/DetachableSQLQuery.java @@ -18,6 +18,7 @@ import java.util.List; import java.util.Map; import com.google.common.collect.ImmutableList; +import com.infradna.tool.bridge_method_injector.WithBridgeMethods; import com.mysema.query.DefaultQueryMetadata; import com.mysema.query.JoinFlag; import com.mysema.query.QueryFlag; @@ -78,6 +79,7 @@ public abstract class DetachableSQLQuery> extend * @return */ @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q addFlag(Position position, String prefix, Expression expr) { Expression flag = TemplateExpressionImpl.create(expr.getType(), prefix + "{0}", expr); return queryMixin.addFlag(new QueryFlag(position, flag)); @@ -91,6 +93,7 @@ public abstract class DetachableSQLQuery> extend * @return */ @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q addFlag(Position position, String flag) { return queryMixin.addFlag(new QueryFlag(position, flag)); } @@ -103,6 +106,7 @@ public abstract class DetachableSQLQuery> extend * @return */ @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q addFlag(Position position, Expression flag) { return queryMixin.addFlag(new QueryFlag(position, flag)); } @@ -115,6 +119,7 @@ public abstract class DetachableSQLQuery> extend * @return */ @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q addJoinFlag(String flag) { return addJoinFlag(flag, JoinFlag.Position.BEFORE_TARGET); } @@ -127,6 +132,7 @@ public abstract class DetachableSQLQuery> extend * @return */ @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) @SuppressWarnings("unchecked") public Q addJoinFlag(String flag, JoinFlag.Position position) { queryMixin.addJoinFlag(new JoinFlag(flag, position)); @@ -143,131 +149,154 @@ public abstract class DetachableSQLQuery> extend return exists().not(); } + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q from(Expression arg) { return queryMixin.from(arg); } @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q from(Expression... args) { return queryMixin.from(args); } @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) @SuppressWarnings({ "unchecked", "rawtypes" }) public Q from(SubQueryExpression subQuery, Path alias) { return queryMixin.from(ExpressionUtils.as((Expression)subQuery, alias)); } @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q fullJoin(EntityPath target) { return queryMixin.fullJoin(target); } @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q fullJoin(RelationalFunctionCall target, Path alias) { return queryMixin.fullJoin(target, alias); } @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q fullJoin(ForeignKey key, RelationalPath entity) { return queryMixin.fullJoin(entity).on(key.on(entity)); } @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q fullJoin(SubQueryExpression target, Path alias) { return queryMixin.fullJoin(target, alias); } @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q innerJoin(EntityPath target) { return queryMixin.innerJoin(target); } @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q innerJoin(RelationalFunctionCall target, Path alias) { return queryMixin.innerJoin(target, alias); } @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q innerJoin(ForeignKey key, RelationalPath entity) { return queryMixin.innerJoin(entity).on(key.on(entity)); } @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q innerJoin(SubQueryExpression target, Path alias) { return queryMixin.innerJoin(target, alias); } @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q join(EntityPath target) { return queryMixin.join(target); } @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q join(RelationalFunctionCall target, Path alias) { return queryMixin.join(target, alias); } @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q join(ForeignKey key, RelationalPath entity) { return queryMixin.join(entity).on(key.on(entity)); } @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q join(SubQueryExpression target, Path alias) { return queryMixin.join(target, alias); } @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q leftJoin(EntityPath target) { return queryMixin.leftJoin(target); } @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q leftJoin(RelationalFunctionCall target, Path alias) { return queryMixin.leftJoin(target, alias); } @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q leftJoin(ForeignKey key, RelationalPath entity) { return queryMixin.leftJoin(entity).on(key.on(entity)); } @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q leftJoin(SubQueryExpression target, Path alias) { return queryMixin.leftJoin(target, alias); } + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q on(Predicate condition) { return queryMixin.on(condition); } @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q on(Predicate... conditions) { return queryMixin.on(conditions); } @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q rightJoin(EntityPath target) { return queryMixin.rightJoin(target); } @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q rightJoin(RelationalFunctionCall target, Path alias) { return queryMixin.fullJoin(target, alias); } @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q rightJoin(ForeignKey key, RelationalPath entity) { return queryMixin.rightJoin(entity).on(key.on(entity)); } @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q rightJoin(SubQueryExpression target, Path alias) { return queryMixin.rightJoin(target, alias); } - - @SuppressWarnings({ "unchecked", "rawtypes" }) private CollectionExpressionBase union(Operator op, List> sq) { @@ -311,30 +340,35 @@ public abstract class DetachableSQLQuery> extend } @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q withRecursive(Path alias, SubQueryExpression query) { queryMixin.addFlag(new QueryFlag(QueryFlag.Position.WITH, SQLTemplates.RECURSIVE)); return with(alias, query); } @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q withRecursive(Path alias, Expression query) { queryMixin.addFlag(new QueryFlag(QueryFlag.Position.WITH, SQLTemplates.RECURSIVE)); return with(alias, query); } @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public WithBuilder withRecursive(Path alias, Path... columns) { queryMixin.addFlag(new QueryFlag(QueryFlag.Position.WITH, SQLTemplates.RECURSIVE)); return with(alias, columns); } @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q with(Path alias, SubQueryExpression target) { Expression expr = OperationImpl.create(alias.getType(), SQLOps.WITH_ALIAS, alias, target); return queryMixin.addFlag(new QueryFlag(QueryFlag.Position.WITH, expr)); } @Override + @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q with(Path alias, Expression query) { Expression expr = OperationImpl.create(alias.getType(), SQLOps.WITH_ALIAS, alias, query); return queryMixin.addFlag(new QueryFlag(QueryFlag.Position.WITH, expr)); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/ProjectableSQLQuery.java b/querydsl-sql/src/main/java/com/mysema/query/sql/ProjectableSQLQuery.java index 8dfe76328..e3365475f 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/ProjectableSQLQuery.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/ProjectableSQLQuery.java @@ -13,32 +13,19 @@ */ package com.mysema.query.sql; +import javax.annotation.Nullable; import java.util.List; import java.util.Map; -import javax.annotation.Nullable; - import com.google.common.collect.ImmutableList; +import com.infradna.tool.bridge_method_injector.WithBridgeMethods; import com.mysema.commons.lang.CloseableIterator; -import com.mysema.query.JoinFlag; -import com.mysema.query.Query; -import com.mysema.query.QueryFlag; +import com.mysema.query.*; import com.mysema.query.QueryFlag.Position; -import com.mysema.query.QueryMetadata; -import com.mysema.query.SearchResults; -import com.mysema.query.Tuple; import com.mysema.query.support.Expressions; import com.mysema.query.support.ProjectableQuery; import com.mysema.query.support.QueryMixin; -import com.mysema.query.types.EntityPath; -import com.mysema.query.types.Expression; -import com.mysema.query.types.ExpressionUtils; -import com.mysema.query.types.OperationImpl; -import com.mysema.query.types.ParamExpression; -import com.mysema.query.types.ParamNotSetException; -import com.mysema.query.types.Path; -import com.mysema.query.types.Predicate; -import com.mysema.query.types.SubQueryExpression; +import com.mysema.query.types.*; import com.mysema.query.types.expr.Wildcard; import com.mysema.query.types.query.ListSubQuery; import com.mysema.query.types.template.NumberTemplate; @@ -73,6 +60,7 @@ public abstract class ProjectableSQLQuery & Que * @return */ @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q addJoinFlag(String flag) { return addJoinFlag(flag, JoinFlag.Position.BEFORE_TARGET); } @@ -85,6 +73,7 @@ public abstract class ProjectableSQLQuery & Que * @return */ @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) @SuppressWarnings("unchecked") public Q addJoinFlag(String flag, JoinFlag.Position position) { queryMixin.addJoinFlag(new JoinFlag(flag, position)); @@ -100,6 +89,7 @@ public abstract class ProjectableSQLQuery & Que * @return */ @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q addFlag(Position position, String prefix, Expression expr) { Expression flag = SimpleTemplate.create(expr.getType(), prefix + "{0}", expr); return queryMixin.addFlag(new QueryFlag(position, flag)); @@ -111,6 +101,7 @@ public abstract class ProjectableSQLQuery & Que * @param flag * @return */ + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q addFlag(QueryFlag flag) { return queryMixin.addFlag(flag); } @@ -123,6 +114,7 @@ public abstract class ProjectableSQLQuery & Que * @return */ @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q addFlag(Position position, String flag) { return queryMixin.addFlag(new QueryFlag(position, flag)); } @@ -135,6 +127,7 @@ public abstract class ProjectableSQLQuery & Que * @return */ @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q addFlag(Position position, Expression flag) { return queryMixin.addFlag(new QueryFlag(position, flag)); } @@ -150,117 +143,140 @@ public abstract class ProjectableSQLQuery & Que return limit(1).singleResult(NumberTemplate.ONE) != null; } + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q from(Expression arg) { return queryMixin.from(arg); } @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q from(Expression... args) { return queryMixin.from(args); } @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) @SuppressWarnings({ "unchecked", "rawtypes" }) public Q from(SubQueryExpression subQuery, Path alias) { return queryMixin.from(ExpressionUtils.as((Expression) subQuery, alias)); } @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q fullJoin(EntityPath target) { return queryMixin.fullJoin(target); } @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q fullJoin(RelationalFunctionCall target, Path alias) { return queryMixin.fullJoin(target, alias); } @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q fullJoin(SubQueryExpression target, Path alias) { return queryMixin.fullJoin(target, alias); } @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q fullJoin(ForeignKey key, RelationalPath entity) { return queryMixin.fullJoin(entity).on(key.on(entity)); } @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q innerJoin(EntityPath target) { return queryMixin.innerJoin(target); } @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q innerJoin(RelationalFunctionCall target, Path alias) { return queryMixin.innerJoin(target, alias); } @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q innerJoin(SubQueryExpression target, Path alias) { return queryMixin.innerJoin(target, alias); } @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q innerJoin(ForeignKey key, RelationalPath entity) { return queryMixin.innerJoin(entity).on(key.on(entity)); } @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q join(EntityPath target) { return queryMixin.join(target); } @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q join(RelationalFunctionCall target, Path alias) { return queryMixin.join(target, alias); } @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q join(SubQueryExpression target, Path alias) { return queryMixin.join(target, alias); } @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q join(ForeignKey key, RelationalPath entity) { return queryMixin.join(entity).on(key.on(entity)); } @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q leftJoin(EntityPath target) { return queryMixin.leftJoin(target); } @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q leftJoin(RelationalFunctionCall target, Path alias) { return queryMixin.leftJoin(target, alias); } @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q leftJoin(SubQueryExpression target, Path alias) { return queryMixin.leftJoin(target, alias); } @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q leftJoin(ForeignKey key, RelationalPath entity) { return queryMixin.leftJoin(entity).on(key.on(entity)); } @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q rightJoin(EntityPath target) { return queryMixin.rightJoin(target); } @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q rightJoin(RelationalFunctionCall target, Path alias) { return queryMixin.rightJoin(target, alias); } @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q rightJoin(SubQueryExpression target, Path alias) { return queryMixin.rightJoin(target, alias); } @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q rightJoin(ForeignKey key, RelationalPath entity) { return queryMixin.rightJoin(entity).on(key.on(entity)); } @@ -294,11 +310,13 @@ public abstract class ProjectableSQLQuery & Que return listResults(queryMixin.createProjection(args)); } + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q on(Predicate condition) { return queryMixin.on(condition); } @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q on(Predicate... conditions) { return queryMixin.on(conditions); } @@ -321,6 +339,7 @@ public abstract class ProjectableSQLQuery & Que * @param sq * @return */ + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q union(Path alias, ListSubQuery... sq) { return from(UnionUtils.union(sq, alias, false)); } @@ -343,6 +362,7 @@ public abstract class ProjectableSQLQuery & Que * @param sq * @return */ + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q union(Path alias, SubQueryExpression... sq) { return from(UnionUtils.union(sq, alias, false)); } @@ -366,6 +386,7 @@ public abstract class ProjectableSQLQuery & Que * @param sq * @return */ + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q unionAll(Path alias, ListSubQuery... sq) { return from(UnionUtils.union(sq, alias, true)); } @@ -389,6 +410,7 @@ public abstract class ProjectableSQLQuery & Que * @param sq * @return */ + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q unionAll(Path alias, SubQueryExpression... sq) { return from(UnionUtils.union(sq, alias, true)); } @@ -409,12 +431,14 @@ public abstract class ProjectableSQLQuery & Que } @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q withRecursive(Path alias, SubQueryExpression query) { queryMixin.addFlag(new QueryFlag(QueryFlag.Position.WITH, SQLTemplates.RECURSIVE)); return with(alias, query); } @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q withRecursive(Path alias, Expression query) { queryMixin.addFlag(new QueryFlag(QueryFlag.Position.WITH, SQLTemplates.RECURSIVE)); return with(alias, query); @@ -427,12 +451,14 @@ public abstract class ProjectableSQLQuery & Que } @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q with(Path alias, SubQueryExpression query) { Expression expr = OperationImpl.create(alias.getType(), SQLOps.WITH_ALIAS, alias, query); return queryMixin.addFlag(new QueryFlag(QueryFlag.Position.WITH, expr)); } @Override + @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q with(Path alias, Expression query) { Expression expr = OperationImpl.create(alias.getType(), SQLOps.WITH_ALIAS, alias, query); return queryMixin.addFlag(new QueryFlag(QueryFlag.Position.WITH, expr)); diff --git a/querydsl-sql/template.mf b/querydsl-sql/template.mf index 70ceffcde..be7f130c6 100644 --- a/querydsl-sql/template.mf +++ b/querydsl-sql/template.mf @@ -2,6 +2,7 @@ Bundle-SymbolicName: com.mysema.querydsl.sql Bundle-Name: Querydsl SQL Bundle-Vendor: Mysema Bundle-ManifestVersion: 2 +Excluded-Imports: com.infradna.tool.bridge_method_injector Import-Template: com.mysema.commons.lang.*;version="${mysema.lang.version}", com.mysema.query.*;version="${project.version}", From 867989aafb156c3c3a8d95bc9375e2c1373f2a0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 24 Apr 2014 22:50:55 +0300 Subject: [PATCH 09/20] Add enforcer config back --- querydsl-root/pom.xml | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 3e3f220d3..5155eb679 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -183,6 +183,35 @@ + + org.apache.maven.plugins + maven-enforcer-plugin + 1.3.1 + + + check + verify + + enforce + + + + + BACKWARD_COMPATIBLE_USER + true + + + + + + + + org.semver + enforcer-rule + 0.9.23 + + + maven-assembly-plugin From b66848e10a7e1ec2b8206e335d76a08418641029 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 25 Apr 2014 11:24:45 +0300 Subject: [PATCH 10/20] Simplify signature --- .../query/jdo/sql/AbstractSQLQuery.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/querydsl-jdo/src/main/java/com/mysema/query/jdo/sql/AbstractSQLQuery.java b/querydsl-jdo/src/main/java/com/mysema/query/jdo/sql/AbstractSQLQuery.java index 2067b92cf..f220ce32a 100644 --- a/querydsl-jdo/src/main/java/com/mysema/query/jdo/sql/AbstractSQLQuery.java +++ b/querydsl-jdo/src/main/java/com/mysema/query/jdo/sql/AbstractSQLQuery.java @@ -13,6 +13,16 @@ */ package com.mysema.query.jdo.sql; +import javax.annotation.Nullable; +import javax.jdo.PersistenceManager; +import javax.jdo.Query; +import java.io.Closeable; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + import com.google.common.collect.Lists; import com.mysema.commons.lang.CloseableIterator; import com.mysema.commons.lang.IteratorAdapter; @@ -26,16 +36,6 @@ import com.mysema.query.types.FactoryExpression; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.annotation.Nullable; -import javax.jdo.PersistenceManager; -import javax.jdo.Query; -import java.io.Closeable; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; - /** * Base class for JDO based SQLQuery implementations * @@ -44,7 +44,7 @@ import java.util.List; * @param */ @SuppressWarnings("rawtypes") -public abstract class AbstractSQLQuery & com.mysema.query.Query> extends ProjectableSQLQuery { +public abstract class AbstractSQLQuery> extends ProjectableSQLQuery { private static final Logger logger = LoggerFactory.getLogger(JDOSQLQuery.class); From 44fc34735be84a99b35d7f1a028d7d504bd827b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 30 Apr 2014 17:38:56 +0300 Subject: [PATCH 11/20] Run only on jdk7 for the moment --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index b88e9ce91..1a6f5120a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,5 @@ language: java jdk: - - oraclejdk8 - oraclejdk7 services: - mongodb From 92007d1d7d867ccf1d34c6ea938e1c078c58df53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 30 Apr 2014 17:40:07 +0300 Subject: [PATCH 12/20] Run only on jdk7 for the moment --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index b88e9ce91..1a6f5120a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,5 @@ language: java jdk: - - oraclejdk8 - oraclejdk7 services: - mongodb From 261d3c1c1e9dcb334727f6cfae0c77b1a3b1f0a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 30 Apr 2014 20:34:41 +0300 Subject: [PATCH 13/20] Comment enforcer plugin out --- querydsl-root/pom.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 4b818edfc..6670fa07d 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -183,6 +183,7 @@ + maven-assembly-plugin From f8eea76efb039dffade11f2319101fd1e58ec2dc Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Thu, 1 May 2014 22:42:33 +0200 Subject: [PATCH 14/20] Log a more user friendly version of the elapsed time for benchmarks. --- .../test/java/com/mysema/testutil/Runner.java | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/querydsl-core/src/test/java/com/mysema/testutil/Runner.java b/querydsl-core/src/test/java/com/mysema/testutil/Runner.java index 1054cebdb..fb0b05fbd 100644 --- a/querydsl-core/src/test/java/com/mysema/testutil/Runner.java +++ b/querydsl-core/src/test/java/com/mysema/testutil/Runner.java @@ -13,24 +13,28 @@ */ package com.mysema.testutil; +import com.google.common.base.Stopwatch; + public final class Runner { - + + private static final int WARMUP = 50000; + private static final int BENCHMARK = 1000000; + public static void run(String label, Benchmark benchmark) throws Exception { // warmup - benchmark.run(50000); + benchmark.run(WARMUP); System.err.print("- "); // run garbage collection System.gc(); System.err.print("- "); - + // perform timing - long start = System.nanoTime(); - benchmark.run(1000000); - long end = System.nanoTime(); - System.err.println(label + " " + ((end-start) / 1000000)); + Stopwatch stopwatch = new Stopwatch().start(); + benchmark.run(BENCHMARK); + System.err.println(label + " " + stopwatch.stop().toString()); } - + private Runner() {} } From 2f03757c8065bf3197ad3740cadff9c664ae50d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 2 May 2014 21:49:14 +0300 Subject: [PATCH 15/20] Simplify signature --- .../jpa/hibernate/sql/AbstractHibernateSQLQuery.java | 10 +++++----- .../query/jpa/hibernate/sql/HibernateSQLQuery.java | 8 +++----- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/sql/AbstractHibernateSQLQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/sql/AbstractHibernateSQLQuery.java index 575a149f4..847b5cf86 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/sql/AbstractHibernateSQLQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/sql/AbstractHibernateSQLQuery.java @@ -13,6 +13,10 @@ */ package com.mysema.query.jpa.hibernate.sql; +import javax.annotation.Nullable; +import java.util.List; +import java.util.Map; + import com.mysema.commons.lang.CloseableIterator; import com.mysema.query.*; import com.mysema.query.NonUniqueResultException; @@ -33,10 +37,6 @@ import org.hibernate.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.annotation.Nullable; -import java.util.List; -import java.util.Map; - /** * AbstractHibernateSQLQuery is the base class for Hibernate Native SQL queries * @@ -44,7 +44,7 @@ import java.util.Map; * * @param */ -public abstract class AbstractHibernateSQLQuery & com.mysema.query.Query> extends AbstractSQLQuery { +public abstract class AbstractHibernateSQLQuery> extends AbstractSQLQuery { private static final Logger logger = LoggerFactory.getLogger(AbstractHibernateSQLQuery.class); diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/sql/HibernateSQLQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/sql/HibernateSQLQuery.java index a71eb2909..697406976 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/sql/HibernateSQLQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/sql/HibernateSQLQuery.java @@ -13,14 +13,12 @@ */ package com.mysema.query.jpa.hibernate.sql; -import org.hibernate.Session; -import org.hibernate.StatelessSession; - import com.mysema.query.QueryMetadata; import com.mysema.query.jpa.hibernate.SessionHolder; import com.mysema.query.sql.Configuration; -import com.mysema.query.sql.SQLCommonQuery; import com.mysema.query.sql.SQLTemplates; +import org.hibernate.Session; +import org.hibernate.StatelessSession; /** * HibernateSQLQuery is an SQLQuery implementation that uses Hibernate's Native SQL functionality @@ -29,7 +27,7 @@ import com.mysema.query.sql.SQLTemplates; * @author tiwe * */ -public final class HibernateSQLQuery extends AbstractHibernateSQLQuery implements SQLCommonQuery { +public final class HibernateSQLQuery extends AbstractHibernateSQLQuery { public HibernateSQLQuery(Session session, SQLTemplates sqlTemplates) { super(session, new Configuration(sqlTemplates)); From 0b72e42151b7d5e7784b8bbdc68ee0973b30fd1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 2 May 2014 22:14:27 +0300 Subject: [PATCH 16/20] Bump version --- querydsl-apt/pom.xml | 6 +- querydsl-codegen/pom.xml | 2 +- querydsl-collections/pom.xml | 2 +- querydsl-core/pom.xml | 2 +- .../main/docbook/en-US/Querydsl_Reference.xml | 2 +- querydsl-hibernate-search/pom.xml | 2 +- querydsl-jdo/pom.xml | 6 +- querydsl-jpa-codegen/pom.xml | 2 +- querydsl-jpa/pom.xml | 6 +- querydsl-lucene3/pom.xml | 2 +- querydsl-lucene4/pom.xml | 2 +- querydsl-maven-plugin/pom.xml | 2 +- querydsl-mongodb/pom.xml | 6 +- querydsl-root/pom.xml | 1028 ++++++++--------- querydsl-scala/pom.xml | 2 +- querydsl-sql-codegen/pom.xml | 2 +- querydsl-sql/pom.xml | 6 +- 17 files changed, 540 insertions(+), 540 deletions(-) diff --git a/querydsl-apt/pom.xml b/querydsl-apt/pom.xml index 5b3b555cc..1b2100748 100644 --- a/querydsl-apt/pom.xml +++ b/querydsl-apt/pom.xml @@ -1,11 +1,11 @@ - + 4.0.0 com.mysema.querydsl querydsl-root - 3.3.3.BUILD-SNAPSHOT + 3.3.3 ../querydsl-root/pom.xml @@ -225,4 +225,4 @@ - + diff --git a/querydsl-codegen/pom.xml b/querydsl-codegen/pom.xml index 6da6fb496..00dd431bc 100644 --- a/querydsl-codegen/pom.xml +++ b/querydsl-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.3.3.BUILD-SNAPSHOT + 3.3.3 ../querydsl-root/pom.xml diff --git a/querydsl-collections/pom.xml b/querydsl-collections/pom.xml index f752ca1b4..54517b9f9 100644 --- a/querydsl-collections/pom.xml +++ b/querydsl-collections/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.3.3.BUILD-SNAPSHOT + 3.3.3 ../querydsl-root/pom.xml diff --git a/querydsl-core/pom.xml b/querydsl-core/pom.xml index 5dcc15370..fe1f76108 100644 --- a/querydsl-core/pom.xml +++ b/querydsl-core/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.3.3.BUILD-SNAPSHOT + 3.3.3 ../querydsl-root/pom.xml diff --git a/querydsl-docs/src/main/docbook/en-US/Querydsl_Reference.xml b/querydsl-docs/src/main/docbook/en-US/Querydsl_Reference.xml index 0ba79e343..955ddcd8b 100644 --- a/querydsl-docs/src/main/docbook/en-US/Querydsl_Reference.xml +++ b/querydsl-docs/src/main/docbook/en-US/Querydsl_Reference.xml @@ -1,6 +1,6 @@ + ]> diff --git a/querydsl-hibernate-search/pom.xml b/querydsl-hibernate-search/pom.xml index a43f84b62..727b240b8 100644 --- a/querydsl-hibernate-search/pom.xml +++ b/querydsl-hibernate-search/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.3.3.BUILD-SNAPSHOT + 3.3.3 ../querydsl-root/pom.xml diff --git a/querydsl-jdo/pom.xml b/querydsl-jdo/pom.xml index 22ad57fb9..eaa9d04a1 100644 --- a/querydsl-jdo/pom.xml +++ b/querydsl-jdo/pom.xml @@ -1,11 +1,11 @@ - + 4.0.0 com.mysema.querydsl querydsl-root - 3.3.3.BUILD-SNAPSHOT + 3.3.3 ../querydsl-root/pom.xml @@ -282,4 +282,4 @@ - + diff --git a/querydsl-jpa-codegen/pom.xml b/querydsl-jpa-codegen/pom.xml index b2f744c36..1696b5b9e 100644 --- a/querydsl-jpa-codegen/pom.xml +++ b/querydsl-jpa-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.3.3.BUILD-SNAPSHOT + 3.3.3 ../querydsl-root/pom.xml diff --git a/querydsl-jpa/pom.xml b/querydsl-jpa/pom.xml index ff64ea009..2c4e96fc5 100644 --- a/querydsl-jpa/pom.xml +++ b/querydsl-jpa/pom.xml @@ -1,11 +1,11 @@ - + 4.0.0 com.mysema.querydsl querydsl-root - 3.3.3.BUILD-SNAPSHOT + 3.3.3 ../querydsl-root/pom.xml @@ -350,4 +350,4 @@ - + diff --git a/querydsl-lucene3/pom.xml b/querydsl-lucene3/pom.xml index d02d67736..62cf8f1d4 100644 --- a/querydsl-lucene3/pom.xml +++ b/querydsl-lucene3/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.3.3.BUILD-SNAPSHOT + 3.3.3 ../querydsl-root/pom.xml diff --git a/querydsl-lucene4/pom.xml b/querydsl-lucene4/pom.xml index a932e8b17..8ceea9a35 100644 --- a/querydsl-lucene4/pom.xml +++ b/querydsl-lucene4/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.3.3.BUILD-SNAPSHOT + 3.3.3 ../querydsl-root/pom.xml diff --git a/querydsl-maven-plugin/pom.xml b/querydsl-maven-plugin/pom.xml index bf3d3be61..c16a29454 100644 --- a/querydsl-maven-plugin/pom.xml +++ b/querydsl-maven-plugin/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.3.3.BUILD-SNAPSHOT + 3.3.3 ../querydsl-root/pom.xml diff --git a/querydsl-mongodb/pom.xml b/querydsl-mongodb/pom.xml index 837f66691..c40bfaf30 100644 --- a/querydsl-mongodb/pom.xml +++ b/querydsl-mongodb/pom.xml @@ -1,11 +1,11 @@ - + 4.0.0 com.mysema.querydsl querydsl-root - 3.3.3.BUILD-SNAPSHOT + 3.3.3 ../querydsl-root/pom.xml @@ -148,4 +148,4 @@ - + diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 6670fa07d..f25496595 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -1,516 +1,516 @@ - - - 4.0.0 - com.mysema.querydsl - querydsl-root - 3.3.3.BUILD-SNAPSHOT - Querydsl - parent project for Querydsl modules - http://www.querydsl.com - - - com.mysema.home - mysema-source - 0.3.1 - - - pom - - 2007 - - - false - UTF-8 - - - 10.10.1.1 - 2.3.1 - 1.3.174 - 9.1-901.jdbc4 - 11.1.0.7.0 - 5.1.18 - 1.3.1 - 8.4.0 - 3.7.2 - 13.10.00.35 - - 13.0.1 - 0.6.2 - 0.2.4 - 2.2.2 - 1.3.2 - 1.6.1 - - - - - junit - junit - 4.8.1 - test - - - javax.servlet - servlet-api - - - - - - org.easymock - easymock - 3.0 - test - - - cglib - cglib-nodep - - - - - - - - - org.slf4j - slf4j-api - ${slf4j.version} - - - org.slf4j - slf4j-log4j12 - ${slf4j.version} - provided - - - - - - Mysema Ltd - http://www.mysema.com - - - - scm:git:git@github.com:mysema/querydsl.git - scm:git:git@github.com:mysema/querydsl.git - git@github.com:mysema/querydsl.git - - - - - tiwe - Timo Westkämper - timo.westkamper@mysema.com - Mysema Ltd - - Project Manager - Architect - - - - sasa - Samppa Saarela - samppa.saarela@mysema.com - Mysema Ltd - - Developer - - - - vema - Vesa Marttila - vesa.marttila@mysema.com - Mysema Ltd - - Developer - - - - laim - Lassi Immonen - lassi.immonen@mysema.com - Mysema Ltd - - Developer - - - - - - - Apache License, Version 2.0 - LICENSE.txt - - - - - - - - org.apache.maven.plugins - maven-assembly-plugin - 2.4 - - - com.mysema.maven - apt-maven-plugin - 1.0.9 - - - org.apache.maven.plugins - maven-surefire-plugin - 2.16 - - - com.springsource.bundlor - com.springsource.bundlor.maven - 1.0.0.RELEASE - - - bundlor - - bundlor - - - - - true - - - - - - - - - maven-assembly-plugin - - - ../querydsl-root/src/main/assembly.xml - - ../querydsl-root/target/dist - - - - org.apache.maven.plugins - maven-javadoc-plugin - 2.9.1 - - ${project.build.directory}/dist/apidocs - ${project.build.directory}/dist/apidocs - - - Core - com.mysema.query:com.mysema.query.alias:com.mysema.query.annotations:com.mysema.query.codegen:com.mysema.query.dml:com.mysema.query.functions:com.mysema.query.serialization:com.mysema.query.support:com.mysema.query.types* - - - APT - com.mysema.query.apt* - - - Collections - com.mysema.query.collections* - - - JPA - com.mysema.query.jpa* - - - JDO - com.mysema.query.jdo* - - - SQL - com.mysema.query.sql* - - - Lucene - com.mysema.query.lucene - - - Hibernate Search - com.mysema.query.search - - - Mongodb - com.mysema.query.mongodb* - - - - - - com.mysema.maven - maven-version-plugin - 0.1.0 - - - org.apache.maven.plugins - maven-pmd-plugin - 2.3 - - 1.6 - true - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.1 - - 1.6 - 1.6 - - - - org.apache.maven.plugins - maven-source-plugin - 2.2.1 - - - package - - jar - - - - - - org.apache.maven.plugins - maven-jar-plugin - 2.4 - - true - - - - org.apache.maven.plugins - maven-surefire-plugin - - -Xms256m -Xmx512m -XX:MaxPermSize=512m - com.mysema.testutil.ExternalDB - - - - org.apache.maven.surefire - surefire-junit47 - 2.16 - - - - - - - - - jahia - http://maven.jahia.org/maven2 - - - com.springsource.repository.bundles.release - http://repository.springsource.com/maven/bundles/release - - - - - - com.springsource.repository.bundles.release - http://repository.springsource.com/maven/bundles/release - - - com.springsource.repository.bundles.external - http://repository.springsource.com/maven/bundles/external - - - - - - all - true - - ../querydsl-core - ../querydsl-codegen - ../querydsl-apt - ../querydsl-collections - ../querydsl-sql - ../querydsl-sql-codegen - ../querydsl-maven-plugin - ../querydsl-jpa - ../querydsl-jpa-codegen - ../querydsl-jdo - - - ../querydsl-lucene3 - ../querydsl-lucene4 - ../querydsl-hibernate-search - - - ../querydsl-mongodb - - - ../querydsl-scala - - - - - hibernate-search - - ../querydsl-core - ../querydsl-codegen - ../querydsl-lucene3 - ../querydsl-hibernate-search - - - - - jpa - - ../querydsl-core - ../querydsl-codegen - ../querydsl-apt - ../querydsl-sql - ../querydsl-sql-codegen - ../querydsl-maven-plugin - ../querydsl-jpa - ../querydsl-jpa-codegen - - - - - jdo - - ../querydsl-core - ../querydsl-codegen - ../querydsl-apt - ../querydsl-sql - ../querydsl-sql-codegen - ../querydsl-maven-plugin - ../querydsl-jdo - - - - - lucene - - ../querydsl-core - ../querydsl-codegen - ../querydsl-apt - ../querydsl-lucene3 - ../querydsl-lucene4 - - - - - mongodb - - ../querydsl-core - ../querydsl-codegen - ../querydsl-apt - ../querydsl-mongodb - - - - - sql - - ../querydsl-core - ../querydsl-codegen - ../querydsl-sql - ../querydsl-sql-codegen - ../querydsl-maven-plugin - - - - - collections - - ../querydsl-core - ../querydsl-codegen - ../querydsl-apt - ../querydsl-collections - - - - - jenkins - - - - org.apache.maven.plugins - maven-surefire-plugin - - com.mysema.testutil.DummyInterface - - **/*$* - **/MSSQLSuiteTest.java - **/TeradataSuiteTest.java - - - - - - - - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 2.9.1 - - true - - - - org.codehaus.mojo - junit-report-maven-plugin - devel - - true - - - - org.apache.maven.plugins - maven-jxr-plugin - 2.3 - - true - - - - - + + + 4.0.0 + com.mysema.querydsl + querydsl-root + 3.3.3 + Querydsl + parent project for Querydsl modules + http://www.querydsl.com + + + com.mysema.home + mysema-source + 0.3.1 + + + pom + + 2007 + + + false + UTF-8 + + + 10.10.1.1 + 2.3.1 + 1.3.174 + 9.1-901.jdbc4 + 11.1.0.7.0 + 5.1.18 + 1.3.1 + 8.4.0 + 3.7.2 + 13.10.00.35 + + 13.0.1 + 0.6.2 + 0.2.4 + 2.2.2 + 1.3.2 + 1.6.1 + + + + + junit + junit + 4.8.1 + test + + + javax.servlet + servlet-api + + + + + + org.easymock + easymock + 3.0 + test + + + cglib + cglib-nodep + + + + + + + + + org.slf4j + slf4j-api + ${slf4j.version} + + + org.slf4j + slf4j-log4j12 + ${slf4j.version} + provided + + + + + + Mysema Ltd + http://www.mysema.com + + + + scm:git:git@github.com:mysema/querydsl.git + scm:git:git@github.com:mysema/querydsl.git + git@github.com:mysema/querydsl.git + + + + + tiwe + Timo Westkämper + timo.westkamper@mysema.com + Mysema Ltd + + Project Manager + Architect + + + + sasa + Samppa Saarela + samppa.saarela@mysema.com + Mysema Ltd + + Developer + + + + vema + Vesa Marttila + vesa.marttila@mysema.com + Mysema Ltd + + Developer + + + + laim + Lassi Immonen + lassi.immonen@mysema.com + Mysema Ltd + + Developer + + + + + + + Apache License, Version 2.0 + LICENSE.txt + + + + + + + + org.apache.maven.plugins + maven-assembly-plugin + 2.4 + + + com.mysema.maven + apt-maven-plugin + 1.0.9 + + + org.apache.maven.plugins + maven-surefire-plugin + 2.16 + + + com.springsource.bundlor + com.springsource.bundlor.maven + 1.0.0.RELEASE + + + bundlor + + bundlor + + + + + true + + + + + + + + + maven-assembly-plugin + + + ../querydsl-root/src/main/assembly.xml + + ../querydsl-root/target/dist + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.9.1 + + ${project.build.directory}/dist/apidocs + ${project.build.directory}/dist/apidocs + + + Core + com.mysema.query:com.mysema.query.alias:com.mysema.query.annotations:com.mysema.query.codegen:com.mysema.query.dml:com.mysema.query.functions:com.mysema.query.serialization:com.mysema.query.support:com.mysema.query.types* + + + APT + com.mysema.query.apt* + + + Collections + com.mysema.query.collections* + + + JPA + com.mysema.query.jpa* + + + JDO + com.mysema.query.jdo* + + + SQL + com.mysema.query.sql* + + + Lucene + com.mysema.query.lucene + + + Hibernate Search + com.mysema.query.search + + + Mongodb + com.mysema.query.mongodb* + + + + + + com.mysema.maven + maven-version-plugin + 0.1.0 + + + org.apache.maven.plugins + maven-pmd-plugin + 2.3 + + 1.6 + true + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + 1.6 + 1.6 + + + + org.apache.maven.plugins + maven-source-plugin + 2.2.1 + + + package + + jar + + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.4 + + true + + + + org.apache.maven.plugins + maven-surefire-plugin + + -Xms256m -Xmx512m -XX:MaxPermSize=512m + com.mysema.testutil.ExternalDB + + + + org.apache.maven.surefire + surefire-junit47 + 2.16 + + + + + + + + + jahia + http://maven.jahia.org/maven2 + + + com.springsource.repository.bundles.release + http://repository.springsource.com/maven/bundles/release + + + + + + com.springsource.repository.bundles.release + http://repository.springsource.com/maven/bundles/release + + + com.springsource.repository.bundles.external + http://repository.springsource.com/maven/bundles/external + + + + + + all + true + + ../querydsl-core + ../querydsl-codegen + ../querydsl-apt + ../querydsl-collections + ../querydsl-sql + ../querydsl-sql-codegen + ../querydsl-maven-plugin + ../querydsl-jpa + ../querydsl-jpa-codegen + ../querydsl-jdo + + + ../querydsl-lucene3 + ../querydsl-lucene4 + ../querydsl-hibernate-search + + + ../querydsl-mongodb + + + ../querydsl-scala + + + + + hibernate-search + + ../querydsl-core + ../querydsl-codegen + ../querydsl-lucene3 + ../querydsl-hibernate-search + + + + + jpa + + ../querydsl-core + ../querydsl-codegen + ../querydsl-apt + ../querydsl-sql + ../querydsl-sql-codegen + ../querydsl-maven-plugin + ../querydsl-jpa + ../querydsl-jpa-codegen + + + + + jdo + + ../querydsl-core + ../querydsl-codegen + ../querydsl-apt + ../querydsl-sql + ../querydsl-sql-codegen + ../querydsl-maven-plugin + ../querydsl-jdo + + + + + lucene + + ../querydsl-core + ../querydsl-codegen + ../querydsl-apt + ../querydsl-lucene3 + ../querydsl-lucene4 + + + + + mongodb + + ../querydsl-core + ../querydsl-codegen + ../querydsl-apt + ../querydsl-mongodb + + + + + sql + + ../querydsl-core + ../querydsl-codegen + ../querydsl-sql + ../querydsl-sql-codegen + ../querydsl-maven-plugin + + + + + collections + + ../querydsl-core + ../querydsl-codegen + ../querydsl-apt + ../querydsl-collections + + + + + jenkins + + + + org.apache.maven.plugins + maven-surefire-plugin + + com.mysema.testutil.DummyInterface + + **/*$* + **/MSSQLSuiteTest.java + **/TeradataSuiteTest.java + + + + + + + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.9.1 + + true + + + + org.codehaus.mojo + junit-report-maven-plugin + devel + + true + + + + org.apache.maven.plugins + maven-jxr-plugin + 2.3 + + true + + + + + diff --git a/querydsl-scala/pom.xml b/querydsl-scala/pom.xml index e91fb9483..86ee0d885 100644 --- a/querydsl-scala/pom.xml +++ b/querydsl-scala/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.3.3.BUILD-SNAPSHOT + 3.3.3 ../querydsl-root/pom.xml diff --git a/querydsl-sql-codegen/pom.xml b/querydsl-sql-codegen/pom.xml index 68a9e3bd1..3d9b575c3 100644 --- a/querydsl-sql-codegen/pom.xml +++ b/querydsl-sql-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.3.3.BUILD-SNAPSHOT + 3.3.3 ../querydsl-root/pom.xml diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index 960bebec0..39ed2e003 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -1,11 +1,11 @@ - + 4.0.0 com.mysema.querydsl querydsl-root - 3.3.3.BUILD-SNAPSHOT + 3.3.3 ../querydsl-root/pom.xml @@ -287,4 +287,4 @@ - + From 09206d452c61dc2d58eb0df7daa3590ba5ed6a8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 2 May 2014 22:16:20 +0300 Subject: [PATCH 17/20] Bump version --- querydsl-apt/pom.xml | 2 +- querydsl-codegen/pom.xml | 2 +- querydsl-collections/pom.xml | 2 +- querydsl-core/pom.xml | 2 +- querydsl-hibernate-search/pom.xml | 2 +- querydsl-jdo/pom.xml | 2 +- querydsl-jpa-codegen/pom.xml | 2 +- querydsl-jpa/pom.xml | 2 +- querydsl-lucene3/pom.xml | 2 +- querydsl-lucene4/pom.xml | 2 +- querydsl-maven-plugin/pom.xml | 2 +- querydsl-mongodb/pom.xml | 2 +- querydsl-root/pom.xml | 2 +- querydsl-scala/pom.xml | 2 +- querydsl-sql-codegen/pom.xml | 2 +- querydsl-sql/pom.xml | 2 +- 16 files changed, 16 insertions(+), 16 deletions(-) diff --git a/querydsl-apt/pom.xml b/querydsl-apt/pom.xml index 1b2100748..d41fc83c2 100644 --- a/querydsl-apt/pom.xml +++ b/querydsl-apt/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.3.3 + 3.3.4.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-codegen/pom.xml b/querydsl-codegen/pom.xml index 00dd431bc..24f4ebd25 100644 --- a/querydsl-codegen/pom.xml +++ b/querydsl-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.3.3 + 3.3.4.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-collections/pom.xml b/querydsl-collections/pom.xml index 54517b9f9..f1cd23241 100644 --- a/querydsl-collections/pom.xml +++ b/querydsl-collections/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.3.3 + 3.3.4.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-core/pom.xml b/querydsl-core/pom.xml index fe1f76108..7cc6aea70 100644 --- a/querydsl-core/pom.xml +++ b/querydsl-core/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.3.3 + 3.3.4.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-hibernate-search/pom.xml b/querydsl-hibernate-search/pom.xml index 727b240b8..2e3d26f88 100644 --- a/querydsl-hibernate-search/pom.xml +++ b/querydsl-hibernate-search/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.3.3 + 3.3.4.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-jdo/pom.xml b/querydsl-jdo/pom.xml index eaa9d04a1..022ae93a6 100644 --- a/querydsl-jdo/pom.xml +++ b/querydsl-jdo/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.3.3 + 3.3.4.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-jpa-codegen/pom.xml b/querydsl-jpa-codegen/pom.xml index 1696b5b9e..e5926d023 100644 --- a/querydsl-jpa-codegen/pom.xml +++ b/querydsl-jpa-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.3.3 + 3.3.4.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-jpa/pom.xml b/querydsl-jpa/pom.xml index 2c4e96fc5..f524f1e8e 100644 --- a/querydsl-jpa/pom.xml +++ b/querydsl-jpa/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.3.3 + 3.3.4.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-lucene3/pom.xml b/querydsl-lucene3/pom.xml index 62cf8f1d4..0ba880afd 100644 --- a/querydsl-lucene3/pom.xml +++ b/querydsl-lucene3/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.3.3 + 3.3.4.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-lucene4/pom.xml b/querydsl-lucene4/pom.xml index 8ceea9a35..39ec8d2c9 100644 --- a/querydsl-lucene4/pom.xml +++ b/querydsl-lucene4/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.3.3 + 3.3.4.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-maven-plugin/pom.xml b/querydsl-maven-plugin/pom.xml index c16a29454..2fdf3cac5 100644 --- a/querydsl-maven-plugin/pom.xml +++ b/querydsl-maven-plugin/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.3.3 + 3.3.4.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-mongodb/pom.xml b/querydsl-mongodb/pom.xml index c40bfaf30..d2297fe15 100644 --- a/querydsl-mongodb/pom.xml +++ b/querydsl-mongodb/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.3.3 + 3.3.4.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index f25496595..c8159db02 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.querydsl querydsl-root - 3.3.3 + 3.3.4.BUILD-SNAPSHOT Querydsl parent project for Querydsl modules http://www.querydsl.com diff --git a/querydsl-scala/pom.xml b/querydsl-scala/pom.xml index 86ee0d885..1b9c5da31 100644 --- a/querydsl-scala/pom.xml +++ b/querydsl-scala/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.3.3 + 3.3.4.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-sql-codegen/pom.xml b/querydsl-sql-codegen/pom.xml index 3d9b575c3..659b07670 100644 --- a/querydsl-sql-codegen/pom.xml +++ b/querydsl-sql-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.3.3 + 3.3.4.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index 39ed2e003..662932cba 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.3.3 + 3.3.4.BUILD-SNAPSHOT ../querydsl-root/pom.xml From 1cd43d69687571557135be4b850cbe3d08b4c413 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Fri, 2 May 2014 23:58:30 +0200 Subject: [PATCH 18/20] Simplify signature. --- .../src/test/java/com/mysema/query/ExtendedSQLQuery.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/querydsl-sql/src/test/java/com/mysema/query/ExtendedSQLQuery.java b/querydsl-sql/src/test/java/com/mysema/query/ExtendedSQLQuery.java index c92dde24e..7e3d96a4e 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/ExtendedSQLQuery.java +++ b/querydsl-sql/src/test/java/com/mysema/query/ExtendedSQLQuery.java @@ -19,7 +19,6 @@ import java.util.List; import com.mysema.commons.lang.CloseableIterator; import com.mysema.query.sql.AbstractSQLQuery; import com.mysema.query.sql.Configuration; -import com.mysema.query.sql.SQLCommonQuery; import com.mysema.query.sql.SQLTemplates; import com.mysema.query.types.Expression; import com.mysema.query.types.FactoryExpression; @@ -29,7 +28,7 @@ import com.mysema.query.types.QBean; * @author tiwe * */ -public class ExtendedSQLQuery extends AbstractSQLQuery implements SQLCommonQuery { +public class ExtendedSQLQuery extends AbstractSQLQuery { public ExtendedSQLQuery(SQLTemplates templates) { super(null, new Configuration(templates), new DefaultQueryMetadata()); From 5d8a60ae963d672909658a6ddb28576cbea1249f Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Sat, 3 May 2014 00:08:42 +0200 Subject: [PATCH 19/20] Use of EnumMaps instead of HashMaps for enums. --- .../java/com/mysema/query/jpa/JPQLSerializer.java | 4 ++-- .../java/com/mysema/query/sql/SQLExpressions.java | 11 +++++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLSerializer.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLSerializer.java index 0d2cc5790..c1fddf7ce 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLSerializer.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLSerializer.java @@ -15,7 +15,7 @@ package com.mysema.query.jpa; import java.util.ArrayList; import java.util.Collection; -import java.util.HashMap; +import java.util.EnumMap; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -98,7 +98,7 @@ public class JPQLSerializer extends SerializerBase { private static final String ON = " on "; - private static final Map joinTypes = new HashMap(); + private static final Map joinTypes = new EnumMap(JoinType.class); private final JPQLTemplates templates; diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLExpressions.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLExpressions.java index 1735e1d06..f76bd0040 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLExpressions.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLExpressions.java @@ -13,7 +13,7 @@ */ package com.mysema.query.sql; -import java.util.HashMap; +import java.util.EnumMap; import java.util.Map; import com.mysema.query.types.ConstantImpl; @@ -43,11 +43,14 @@ import com.mysema.query.types.expr.Wildcard; @SuppressWarnings("rawtypes") public final class SQLExpressions { - private static final Map DATE_ADD_OPS = new HashMap(); + private static final Map DATE_ADD_OPS + = new EnumMap(DatePart.class); - private static final Map DATE_DIFF_OPS = new HashMap(); + private static final Map DATE_DIFF_OPS + = new EnumMap(DatePart.class); - private static final Map DATE_TRUNC_OPS = new HashMap(); + private static final Map DATE_TRUNC_OPS + = new EnumMap(DatePart.class); static { DATE_ADD_OPS.put(DatePart.year, Ops.DateTimeOps.ADD_YEARS); From aea01551e9d8e677f708efa9f34d7bba0eac9a9f Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Sat, 3 May 2014 11:27:24 +0200 Subject: [PATCH 20/20] Use of EnumMaps instead of HashMaps for enums. --- .../java/com/mysema/query/codegen/TypeMappings.java | 10 +++++++--- .../mysema/query/codegen/EmbeddableSerializerTest.java | 8 +++++--- .../com/mysema/query/codegen/EntitySerializerTest.java | 6 +++--- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/querydsl-codegen/src/main/java/com/mysema/query/codegen/TypeMappings.java b/querydsl-codegen/src/main/java/com/mysema/query/codegen/TypeMappings.java index 526f20e6a..f3ba67c19 100644 --- a/querydsl-codegen/src/main/java/com/mysema/query/codegen/TypeMappings.java +++ b/querydsl-codegen/src/main/java/com/mysema/query/codegen/TypeMappings.java @@ -14,6 +14,7 @@ package com.mysema.query.codegen; import java.util.HashMap; +import java.util.EnumMap; import java.util.Map; import javax.annotation.Nullable; @@ -38,11 +39,14 @@ public abstract class TypeMappings { private final Map queryTypes = new HashMap(); - private final Map exprTypes = new HashMap(); + private final Map exprTypes + = new EnumMap(TypeCategory.class); - private final Map pathTypes = new HashMap(); + private final Map pathTypes + = new EnumMap(TypeCategory.class); - private final Map templateTypes = new HashMap(); + private final Map templateTypes + = new EnumMap(TypeCategory.class); public Type getTemplateType(Type type, EntityType model, boolean raw) { return getTemplateType(type, model, raw, false, false); diff --git a/querydsl-codegen/src/test/java/com/mysema/query/codegen/EmbeddableSerializerTest.java b/querydsl-codegen/src/test/java/com/mysema/query/codegen/EmbeddableSerializerTest.java index 277ff5d8b..bc0f1acb3 100644 --- a/querydsl-codegen/src/test/java/com/mysema/query/codegen/EmbeddableSerializerTest.java +++ b/querydsl-codegen/src/test/java/com/mysema/query/codegen/EmbeddableSerializerTest.java @@ -13,19 +13,20 @@ */ package com.mysema.query.codegen; +import static org.junit.Assert.assertTrue; + import java.io.IOException; import java.io.StringWriter; import java.sql.Time; import java.util.Collections; import java.util.Date; -import java.util.HashMap; +import java.util.EnumMap; import java.util.Map; import com.mysema.codegen.JavaWriter; import com.mysema.codegen.model.*; import com.mysema.query.annotations.PropertyType; import org.junit.Test; -import static org.junit.Assert.assertTrue; public class EmbeddableSerializerTest { @@ -57,7 +58,8 @@ public class EmbeddableSerializerTest { @Test public void OriginalCategory() throws IOException{ - Map categoryToSuperClass = new HashMap(); + Map categoryToSuperClass + = new EnumMap(TypeCategory.class); categoryToSuperClass.put(TypeCategory.COMPARABLE, "ComparablePath"); categoryToSuperClass.put(TypeCategory.ENUM, "EnumPath"); categoryToSuperClass.put(TypeCategory.DATE, "DatePath"); diff --git a/querydsl-codegen/src/test/java/com/mysema/query/codegen/EntitySerializerTest.java b/querydsl-codegen/src/test/java/com/mysema/query/codegen/EntitySerializerTest.java index c6c2f56ce..58c5a2baa 100644 --- a/querydsl-codegen/src/test/java/com/mysema/query/codegen/EntitySerializerTest.java +++ b/querydsl-codegen/src/test/java/com/mysema/query/codegen/EntitySerializerTest.java @@ -20,7 +20,7 @@ import java.io.StringWriter; import java.sql.Time; import java.util.Collections; import java.util.Date; -import java.util.HashMap; +import java.util.EnumMap; import java.util.Map; import org.junit.Test; @@ -69,7 +69,6 @@ public class EntitySerializerTest { "extends EntityPathBase")); } - @Test public void No_Package() throws IOException { SimpleType type = new SimpleType(TypeCategory.ENTITY, "Entity", "", "Entity",false,false); @@ -82,7 +81,8 @@ public class EntitySerializerTest { @Test public void OriginalCategory() throws IOException{ - Map categoryToSuperClass = new HashMap(); + Map categoryToSuperClass + = new EnumMap(TypeCategory.class); categoryToSuperClass.put(TypeCategory.COMPARABLE, "ComparablePath"); categoryToSuperClass.put(TypeCategory.ENUM, "EnumPath"); categoryToSuperClass.put(TypeCategory.DATE, "DatePath");