diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/Properties4Test.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/Properties4Test.java new file mode 100644 index 000000000..c0ebcc9c3 --- /dev/null +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/Properties4Test.java @@ -0,0 +1,22 @@ +package com.querydsl.apt.domain; + +import static org.junit.Assert.assertEquals; + +import javax.persistence.MappedSuperclass; + +import org.junit.Test; + +public class Properties4Test extends AbstractTest { + + @MappedSuperclass + public abstract static class Naming { + + public abstract boolean is8FRecord(); + + } + + @Test + public void test() { + assertEquals("8FRecord", QProperties4Test_Naming.naming._8FRecord.getMetadata().getName()); + } +} diff --git a/querydsl-codegen/src/main/java/com/querydsl/codegen/Property.java b/querydsl-codegen/src/main/java/com/querydsl/codegen/Property.java index 094e8922e..3334a52e6 100644 --- a/querydsl-codegen/src/main/java/com/querydsl/codegen/Property.java +++ b/querydsl-codegen/src/main/java/com/querydsl/codegen/Property.java @@ -51,8 +51,7 @@ public final class Property implements Comparable { public Property(EntityType declaringType, String name, Type type, List inits, boolean inherited) { - this(declaringType, name, JavaSyntaxUtils.isReserved(name) ? (name + "$") : name, type, - inits, inherited); + this(declaringType, name, escapeName(name), type, inits, inherited); } public Property(EntityType declaringType, String name, String escapedName, Type type, @@ -65,6 +64,15 @@ public final class Property implements Comparable { this.inherited = inherited; } + private static String escapeName(String name) { + if (JavaSyntaxUtils.isReserved(name)) { + name = name + "$"; + } else if (!Character.isJavaIdentifierStart(name.charAt(0))) { + name = "_" + name; + } + return name; + } + public void addAnnotation(Annotation annotation) { annotations.put(annotation.annotationType(), annotation); } diff --git a/querydsl-jdo/src/main/java/com/querydsl/jdo/AbstractJDOQuery.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/AbstractJDOQuery.java index a78ac6fb8..4d5b23149 100644 --- a/querydsl-jdo/src/main/java/com/querydsl/jdo/AbstractJDOQuery.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/AbstractJDOQuery.java @@ -162,10 +162,10 @@ public abstract class AbstractJDOQuery> exte } protected void logQuery(String queryString, Map parameters) { - String normalizedQuery = queryString.replace('\n', ' '); - MDC.put(MDC_QUERY, normalizedQuery); - MDC.put(MDC_PARAMETERS, String.valueOf(parameters)); if (logger.isDebugEnabled()) { + String normalizedQuery = queryString.replace('\n', ' '); + MDC.put(MDC_QUERY, normalizedQuery); + MDC.put(MDC_PARAMETERS, String.valueOf(parameters)); logger.debug(normalizedQuery); } } diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/AbstractHibernateQuery.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/AbstractHibernateQuery.java index 604c6c6a1..a4cc7fe87 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/AbstractHibernateQuery.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/AbstractHibernateQuery.java @@ -198,10 +198,10 @@ public abstract class AbstractHibernateQuery parameters) { - String normalizedQuery = queryString.replace('\n', ' '); - MDC.put(MDC_QUERY, normalizedQuery); - MDC.put(MDC_PARAMETERS, String.valueOf(parameters)); if (logger.isDebugEnabled()) { + String normalizedQuery = queryString.replace('\n', ' '); + MDC.put(MDC_QUERY, normalizedQuery); + MDC.put(MDC_PARAMETERS, String.valueOf(parameters)); logger.debug(normalizedQuery); } } diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/sql/AbstractHibernateSQLQuery.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/sql/AbstractHibernateSQLQuery.java index a9d12dc27..af4f42ee8 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/sql/AbstractHibernateSQLQuery.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/sql/AbstractHibernateSQLQuery.java @@ -192,10 +192,10 @@ public abstract class AbstractHibernateSQLQuery parameters) { - String normalizedQuery = queryString.replace('\n', ' '); - MDC.put(MDC_QUERY, normalizedQuery); - MDC.put(MDC_PARAMETERS, String.valueOf(parameters)); if (logger.isDebugEnabled()) { + String normalizedQuery = queryString.replace('\n', ' '); + MDC.put(MDC_QUERY, normalizedQuery); + MDC.put(MDC_PARAMETERS, String.valueOf(parameters)); logger.debug(normalizedQuery); } } diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/AbstractJPAQuery.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/AbstractJPAQuery.java index 53e975587..3476900a5 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/AbstractJPAQuery.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/AbstractJPAQuery.java @@ -226,10 +226,10 @@ public abstract class AbstractJPAQuery> exte } protected void logQuery(String queryString, Map parameters) { - String normalizedQuery = queryString.replace('\n', ' '); - MDC.put(MDC_QUERY, normalizedQuery); - MDC.put(MDC_PARAMETERS, String.valueOf(parameters)); if (logger.isDebugEnabled()) { + String normalizedQuery = queryString.replace('\n', ' '); + MDC.put(MDC_QUERY, normalizedQuery); + MDC.put(MDC_PARAMETERS, String.valueOf(parameters)); logger.debug(normalizedQuery); } } diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/sql/AbstractJPASQLQuery.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/sql/AbstractJPASQLQuery.java index 7c0fae9fe..9604d6317 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/sql/AbstractJPASQLQuery.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/sql/AbstractJPASQLQuery.java @@ -273,10 +273,10 @@ public abstract class AbstractJPASQLQuery } protected void logQuery(String queryString, Map parameters) { - String normalizedQuery = queryString.replace('\n', ' '); - MDC.put(MDC_QUERY, normalizedQuery); - MDC.put(MDC_PARAMETERS, String.valueOf(parameters)); if (logger.isDebugEnabled()) { + String normalizedQuery = queryString.replace('\n', ' '); + MDC.put(MDC_QUERY, normalizedQuery); + MDC.put(MDC_PARAMETERS, String.valueOf(parameters)); logger.debug(normalizedQuery); } } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java index 73b22cb08..7870efb46 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java @@ -1098,6 +1098,13 @@ public abstract class AbstractJPATest { assertEquals(0L, query().from(show).where(show.acts.containsValue("C")).fetchCount()); } + @Test + public void Map_Contains() { + QShow show = QShow.show; + assertEquals(1L, query().from(show).where(show.acts.contains("a", "A")).fetchCount()); + assertEquals(0L, query().from(show).where(show.acts.contains("X", "X")).fetchCount()); + } + @Test @Ignore public void Map_Join() { diff --git a/querydsl-lucene3/src/main/java/com/querydsl/lucene3/LuceneSerializer.java b/querydsl-lucene3/src/main/java/com/querydsl/lucene3/LuceneSerializer.java index a58c6d108..43c676778 100644 --- a/querydsl-lucene3/src/main/java/com/querydsl/lucene3/LuceneSerializer.java +++ b/querydsl-lucene3/src/main/java/com/querydsl/lucene3/LuceneSerializer.java @@ -219,9 +219,16 @@ public class LuceneSerializer { Constant> collConstant = (Constant>) operation.getArg(1); Collection values = collConstant.getConstant(); BooleanQuery bq = new BooleanQuery(); - for (Object value : values) { - String[] str = convert(path, value); - bq.add(eq(field, str, ignoreCase), Occur.SHOULD); + if (Number.class.isAssignableFrom(path.getType())) { + for (Object value : values) { + TermQuery eq = new TermQuery(new Term(field, convertNumber((Number) value))); + bq.add(eq, Occur.SHOULD); + } + } else { + for (Object value : values) { + String[] str = convert(path, value); + bq.add(eq(field, str, ignoreCase), Occur.SHOULD); + } } return bq; } diff --git a/querydsl-lucene3/src/test/java/com/querydsl/lucene3/LuceneQueryTest.java b/querydsl-lucene3/src/test/java/com/querydsl/lucene3/LuceneQueryTest.java index 0ea2f6d5d..7a908c778 100644 --- a/querydsl-lucene3/src/test/java/com/querydsl/lucene3/LuceneQueryTest.java +++ b/querydsl-lucene3/src/test/java/com/querydsl/lucene3/LuceneQueryTest.java @@ -179,6 +179,16 @@ public class LuceneQueryTest { assertEquals(3, query.distinct().fetchCount()); } + @Test + public void In() { + assertEquals(2, query.where(title.in("Jurassic Park", "Nummisuutarit")).fetchCount()); + } + + @Test + public void In2() { + assertEquals(3, query.where(year.in(1990, 1864)).fetchCount()); + } + @Test public void List_Sorted_By_Year_Ascending() { query.where(year.between(1800, 2000)); diff --git a/querydsl-lucene4/src/main/java/com/querydsl/lucene4/LuceneSerializer.java b/querydsl-lucene4/src/main/java/com/querydsl/lucene4/LuceneSerializer.java index 34128b27b..a052b6414 100644 --- a/querydsl-lucene4/src/main/java/com/querydsl/lucene4/LuceneSerializer.java +++ b/querydsl-lucene4/src/main/java/com/querydsl/lucene4/LuceneSerializer.java @@ -222,9 +222,16 @@ public class LuceneSerializer { Constant> expectedConstant = (Constant>) operation.getArg(1); Collection values = expectedConstant.getConstant(); BooleanQuery bq = new BooleanQuery(); - for (Object value : values) { - String[] str = convert(path, value); - bq.add(eq(field, str, ignoreCase), Occur.SHOULD); + if (Number.class.isAssignableFrom(path.getType())) { + for (Object value : values) { + TermQuery eq = new TermQuery(new Term(field, convertNumber((Number) value))); + bq.add(eq, Occur.SHOULD); + } + } else { + for (Object value : values) { + String[] str = convert(path, value); + bq.add(eq(field, str, ignoreCase), Occur.SHOULD); + } } return bq; } diff --git a/querydsl-lucene4/src/test/java/com/querydsl/lucene4/LuceneQueryTest.java b/querydsl-lucene4/src/test/java/com/querydsl/lucene4/LuceneQueryTest.java index 5cd3fc5d5..02ea1f680 100644 --- a/querydsl-lucene4/src/test/java/com/querydsl/lucene4/LuceneQueryTest.java +++ b/querydsl-lucene4/src/test/java/com/querydsl/lucene4/LuceneQueryTest.java @@ -177,6 +177,16 @@ public class LuceneQueryTest { assertEquals(3, query.distinct().fetchCount()); } + @Test + public void In() { + assertEquals(2, query.where(title.in("Jurassic Park", "Nummisuutarit")).fetchCount()); + } + + @Test + public void In2() { + assertEquals(3, query.where(year.in(1990, 1864)).fetchCount()); + } + @Test public void List_Sorted_By_Year_Ascending() { query.where(year.between(1800, 2000)); diff --git a/querydsl-lucene5/src/main/java/com/querydsl/lucene5/LuceneSerializer.java b/querydsl-lucene5/src/main/java/com/querydsl/lucene5/LuceneSerializer.java index b483fdccd..e8c7548e6 100644 --- a/querydsl-lucene5/src/main/java/com/querydsl/lucene5/LuceneSerializer.java +++ b/querydsl-lucene5/src/main/java/com/querydsl/lucene5/LuceneSerializer.java @@ -269,9 +269,16 @@ public class LuceneSerializer { .getArg(1); Collection values = expectedConstant.getConstant(); BooleanQuery bq = new BooleanQuery(); - for (Object value : values) { - String[] str = convert(path, value); - bq.add(eq(field, str, ignoreCase), Occur.SHOULD); + if (Number.class.isAssignableFrom(path.getType())) { + for (Object value : values) { + TermQuery eq = new TermQuery(new Term(field, convertNumber((Number) value))); + bq.add(eq, Occur.SHOULD); + } + } else { + for (Object value : values) { + String[] str = convert(path, value); + bq.add(eq(field, str, ignoreCase), Occur.SHOULD); + } } return bq; } diff --git a/querydsl-lucene5/src/test/java/com/querydsl/lucene5/LuceneQueryTest.java b/querydsl-lucene5/src/test/java/com/querydsl/lucene5/LuceneQueryTest.java index 28b809135..0cd54bff0 100644 --- a/querydsl-lucene5/src/test/java/com/querydsl/lucene5/LuceneQueryTest.java +++ b/querydsl-lucene5/src/test/java/com/querydsl/lucene5/LuceneQueryTest.java @@ -253,6 +253,16 @@ public class LuceneQueryTest { assertEquals(3, query.distinct().fetchCount()); } + @Test + public void In() { + assertEquals(2, query.where(title.in("Jurassic Park", "Nummisuutarit")).fetchCount()); + } + + @Test + public void In2() { + assertEquals(3, query.where(year.in(1990, 1864)).fetchCount()); + } + @Test public void List_Sorted_By_Year_Ascending() { query.where(year.between(1800, 2000)); diff --git a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java index 1499943d2..578fcc3e3 100644 --- a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java +++ b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java @@ -330,13 +330,16 @@ public abstract class MongodbSerializer implements Visitor { public String visit(Path expr, Void context) { PathMetadata metadata = expr.getMetadata(); if (metadata.getParent() != null) { + Path parent = metadata.getParent(); + if (parent.getMetadata().getPathType() == PathType.DELEGATE) { + parent = parent.getMetadata().getParent(); + } if (metadata.getPathType() == PathType.COLLECTION_ANY) { - return visit(metadata.getParent(), context); - } else if (metadata.getParent().getMetadata().getPathType() != PathType.VARIABLE - && metadata.getParent().getMetadata().getPathType() != PathType.DELEGATE) { + return visit(parent, context); + } else if (parent.getMetadata().getPathType() != PathType.VARIABLE) { String rv = getKeyForPath(expr, metadata); - String parent = visit(metadata.getParent(), context); - return rv != null ? parent + "." + rv : parent; + String parentStr = visit(parent, context); + return rv != null ? parentStr + "." + rv : parentStr; } } return getKeyForPath(expr, metadata); diff --git a/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java b/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java index 90b23dcd7..b5a68b63b 100644 --- a/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java +++ b/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java @@ -30,6 +30,7 @@ import com.mongodb.DBObject; import com.querydsl.core.types.Expression; import com.querydsl.core.types.OrderSpecifier; import com.querydsl.core.types.dsl.*; +import com.querydsl.mongodb.domain.QAddress; import com.querydsl.mongodb.domain.QDummyEntity; import com.querydsl.mongodb.domain.QPerson; import com.querydsl.mongodb.domain.QUser; @@ -263,6 +264,15 @@ public class MongodbSerializerTest { assertQuery(person.addressId.eq(id), dbo("addressId",id)); } + @Test + public void Path() { + QUser user = QUser.user; + assertEquals("firstName", serializer.visit(user.firstName, null)); + assertEquals("firstName", serializer.visit(user.as(QUser.class).firstName, null)); + assertEquals("mainAddress.street", serializer.visit(user.mainAddress().street, null)); + assertEquals("mainAddress.street", serializer.visit(user.mainAddress().as(QAddress.class).street, null)); + } + private List> sortList(OrderSpecifier ... order) { return Arrays.asList(order); diff --git a/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/DefaultNamingStrategyTest.java b/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/DefaultNamingStrategyTest.java index 519327e7a..53439a640 100644 --- a/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/DefaultNamingStrategyTest.java +++ b/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/DefaultNamingStrategyTest.java @@ -110,4 +110,10 @@ public class DefaultNamingStrategyTest { assertEquals("a_b", namingStrategy.getPropertyName("a b", entityModel)); } + @Test + public void ValidName() { + assertEquals("8FRecord", namingStrategy.normalizeColumnName("8FRecord")); + assertEquals("_8FRecord", namingStrategy.getPropertyName("8FRecord", entityModel)); + } + } diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/AbstractSQLQuery.java b/querydsl-sql/src/main/java/com/querydsl/sql/AbstractSQLQuery.java index bbe951937..cf62e3fbf 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/AbstractSQLQuery.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/AbstractSQLQuery.java @@ -609,10 +609,10 @@ public abstract class AbstractSQLQuery> exte } protected void logQuery(String queryString, Collection parameters) { - String normalizedQuery = queryString.replace('\n', ' '); - MDC.put(MDC_QUERY, normalizedQuery); - MDC.put(MDC_PARAMETERS, String.valueOf(parameters)); if (logger.isDebugEnabled()) { + String normalizedQuery = queryString.replace('\n', ' '); + MDC.put(MDC_QUERY, normalizedQuery); + MDC.put(MDC_PARAMETERS, String.valueOf(parameters)); logger.debug(normalizedQuery); } } diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/dml/AbstractSQLClause.java b/querydsl-sql/src/main/java/com/querydsl/sql/dml/AbstractSQLClause.java index 38a0c36fb..a8bcd2c79 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/dml/AbstractSQLClause.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/dml/AbstractSQLClause.java @@ -203,10 +203,10 @@ public abstract class AbstractSQLClause> implemen } protected void logQuery(Logger logger, String queryString, Collection parameters) { - String normalizedQuery = queryString.replace('\n', ' '); - MDC.put(QueryBase.MDC_QUERY, normalizedQuery); - MDC.put(QueryBase.MDC_PARAMETERS, String.valueOf(parameters)); if (logger.isDebugEnabled()) { + String normalizedQuery = queryString.replace('\n', ' '); + MDC.put(QueryBase.MDC_QUERY, normalizedQuery); + MDC.put(QueryBase.MDC_PARAMETERS, String.valueOf(parameters)); logger.debug(normalizedQuery); } }