From 37f50c0cd3ad90e317ed7465b3b0bc6ade683045 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 8 Dec 2012 00:09:26 +0200 Subject: [PATCH] #304 add single arg alternatives to varargs methods --- .../java/com/mysema/query/FilteredClause.java | 2 +- .../com/mysema/query/support/QueryBase.java | 16 +++++++ .../com/mysema/query/support/QueryMixin.java | 42 ++++++++++++++++--- .../com/mysema/query/jpa/JPQLQueryBase.java | 8 ++++ .../query/lucene/AbstractLuceneQuery.java | 8 ++++ .../mysema/query/mongodb/MongodbQuery.java | 8 ++++ .../mysema/query/sql/AbstractSQLQuery.java | 8 ++++ .../mysema/query/sql/dml/SQLDeleteClause.java | 5 +++ .../mysema/query/sql/dml/SQLUpdateClause.java | 5 +++ .../mysema/query/QueryPerformanceTest.java | 36 ++++++++-------- 10 files changed, 113 insertions(+), 25 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/FilteredClause.java b/querydsl-core/src/main/java/com/mysema/query/FilteredClause.java index 29f80acdb..1ff80be3d 100644 --- a/querydsl-core/src/main/java/com/mysema/query/FilteredClause.java +++ b/querydsl-core/src/main/java/com/mysema/query/FilteredClause.java @@ -23,7 +23,7 @@ import com.mysema.query.types.Predicate; * @param concrete subtype */ public interface FilteredClause> { - + /** * Adds the given filter conditions * diff --git a/querydsl-core/src/main/java/com/mysema/query/support/QueryBase.java b/querydsl-core/src/main/java/com/mysema/query/support/QueryBase.java index 357474de6..3acb6bf25 100644 --- a/querydsl-core/src/main/java/com/mysema/query/support/QueryBase.java +++ b/querydsl-core/src/main/java/com/mysema/query/support/QueryBase.java @@ -36,17 +36,33 @@ public abstract class QueryBase> { return queryMixin.distinct(); } + public Q groupBy(Expression e) { + return queryMixin.groupBy(e); + } + public Q groupBy(Expression... o) { return queryMixin.groupBy(o); } + + public Q having(Predicate e) { + return queryMixin.having(e); + } public Q having(Predicate... o) { return queryMixin.having(o); } + + public Q orderBy(OrderSpecifier o) { + return queryMixin.orderBy(o); + } public Q orderBy(OrderSpecifier... o) { return queryMixin.orderBy(o); } + + public Q where(Predicate o) { + return queryMixin.where(o); + } public Q where(Predicate... o) { return queryMixin.where(o); diff --git a/querydsl-core/src/main/java/com/mysema/query/support/QueryMixin.java b/querydsl-core/src/main/java/com/mysema/query/support/QueryMixin.java index cd44440bd..8871cab27 100644 --- a/querydsl-core/src/main/java/com/mysema/query/support/QueryMixin.java +++ b/querydsl-core/src/main/java/com/mysema/query/support/QueryMixin.java @@ -156,6 +156,11 @@ public class QueryMixin { return self; } + public final T from(Expression arg) { + metadata.addJoin(JoinType.DEFAULT, arg); + return self; + } + public final T from(Expression... args) { for (Expression arg : args) { metadata.addJoin(JoinType.DEFAULT, arg); @@ -207,12 +212,22 @@ public class QueryMixin { return self; } + public final T groupBy(Expression e) { + metadata.addGroupBy(e); + return self; + } + public final T groupBy(Expression... o) { for (Expression e : o) { metadata.addGroupBy(e); } return self; } + + public final T having(Predicate e) { + metadata.addHaving(normalize(e, false)); + return self; + } public final T having(Predicate... o) { for (Predicate e : o) { @@ -346,6 +361,11 @@ public class QueryMixin { metadata.setOffset(offset); return self; } + + public final T on(Predicate condition) { + metadata.addJoinCondition(normalize(condition, false)); + return self; + } public final T on(Predicate... conditions){ for (Predicate condition : conditions) { @@ -354,14 +374,19 @@ public class QueryMixin { return self; } + public final T orderBy(OrderSpecifier spec) { + Expression e = convert(spec.getTarget()); + if (!spec.getTarget().equals(e)) { + metadata.addOrderBy(new OrderSpecifier(spec.getOrder(), e)); + } else { + metadata.addOrderBy(spec); + } + return self; + } + public final T orderBy(OrderSpecifier... o) { for (OrderSpecifier spec : o) { - Expression e = convert(spec.getTarget()); - if (!spec.getTarget().equals(e)) { - metadata.addOrderBy(new OrderSpecifier(spec.getOrder(), e)); - } else { - metadata.addOrderBy(spec); - } + orderBy(spec); } return self; } @@ -424,6 +449,11 @@ public class QueryMixin { metadata.setUnique(unique); } + public final T where(Predicate e) { + metadata.addWhere(normalize(e, true)); + return self; + } + public final T where(Predicate... o) { for (Predicate e : o) { metadata.addWhere(normalize(e, true)); diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLQueryBase.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLQueryBase.java index c8c9ccbb5..ad69926d2 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLQueryBase.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLQueryBase.java @@ -88,6 +88,10 @@ public abstract class JPQLQueryBase> extends Projecta return queryMixin.fetchAll(); } + public Q from(EntityPath arg) { + return queryMixin.from(arg); + } + public Q from(EntityPath... args) { return queryMixin.from(args); } @@ -216,6 +220,10 @@ public abstract class JPQLQueryBase> extends Projecta return queryMixin.rightJoin(target, alias); } + public Q on(Predicate condition) { + return queryMixin.on(condition); + } + public Q on(Predicate... conditions) { return queryMixin.on(conditions); } diff --git a/querydsl-lucene/src/main/java/com/mysema/query/lucene/AbstractLuceneQuery.java b/querydsl-lucene/src/main/java/com/mysema/query/lucene/AbstractLuceneQuery.java index 126df6a6a..fec7ad0bd 100644 --- a/querydsl-lucene/src/main/java/com/mysema/query/lucene/AbstractLuceneQuery.java +++ b/querydsl-lucene/src/main/java/com/mysema/query/lucene/AbstractLuceneQuery.java @@ -271,6 +271,10 @@ SimpleProjectable { return queryMixin.offset(offset); } + public Q orderBy(OrderSpecifier o) { + return queryMixin.orderBy(o); + } + @Override public Q orderBy(OrderSpecifier... o) { return queryMixin.orderBy(o); @@ -335,6 +339,10 @@ SimpleProjectable { public T uniqueResult() { return oneResult(true); } + + public Q where(Predicate e) { + return queryMixin.where(e); + } @Override public Q where(Predicate... e) { diff --git a/querydsl-mongodb/src/main/java/com/mysema/query/mongodb/MongodbQuery.java b/querydsl-mongodb/src/main/java/com/mysema/query/mongodb/MongodbQuery.java index ef9934a33..7d245f0f7 100644 --- a/querydsl-mongodb/src/main/java/com/mysema/query/mongodb/MongodbQuery.java +++ b/querydsl-mongodb/src/main/java/com/mysema/query/mongodb/MongodbQuery.java @@ -189,6 +189,10 @@ public abstract class MongodbQuery implements SimpleQuery>, S return queryMixin.distinct(); } + public MongodbQuery where(Predicate e) { + return queryMixin.where(e); + } + @Override public MongodbQuery where(Predicate... e) { return queryMixin.where(e); @@ -209,6 +213,10 @@ public abstract class MongodbQuery implements SimpleQuery>, S return queryMixin.restrict(modifiers); } + public MongodbQuery orderBy(OrderSpecifier o) { + return queryMixin.orderBy(o); + } + @Override public MongodbQuery orderBy(OrderSpecifier... o) { return queryMixin.orderBy(o); 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 4952ece66..29d890d87 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 @@ -192,6 +192,10 @@ public abstract class AbstractSQLQuery & Query> ex return new SQLSerializer(configuration.getTemplates()); } + public Q from(Expression arg) { + return queryMixin.from(arg); + } + public Q from(Expression... args) { return queryMixin.from(args); } @@ -482,6 +486,10 @@ public abstract class AbstractSQLQuery & Query> ex } return c.newInstance(args); } + + public Q on(Predicate condition) { + return queryMixin.on(condition); + } public Q on(Predicate... conditions) { return queryMixin.on(conditions); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java index a56dbe515..96d2681fd 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java @@ -155,6 +155,11 @@ public class SQLDeleteClause extends AbstractSQLClause implemen } } + public SQLDeleteClause where(Predicate p) { + metadata.addWhere(p); + return this; + } + @Override public SQLDeleteClause where(Predicate... o) { for (Predicate p : o) { diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java index 106d2106a..4ce6d9781 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java @@ -213,6 +213,11 @@ public class SQLUpdateClause extends AbstractSQLClause implemen return this; } + public SQLUpdateClause where(Predicate p) { + metadata.addWhere(p); + return this; + } + @Override public SQLUpdateClause where(Predicate... o) { for (Predicate p : o) { diff --git a/querydsl-sql/src/test/java/com/mysema/query/QueryPerformanceTest.java b/querydsl-sql/src/test/java/com/mysema/query/QueryPerformanceTest.java index 0875f8ba2..68f4b5aad 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/QueryPerformanceTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/QueryPerformanceTest.java @@ -15,11 +15,9 @@ import org.junit.Test; import com.mysema.commons.lang.CloseableIterator; import com.mysema.query.sql.Configuration; import com.mysema.query.sql.H2Templates; -import com.mysema.query.sql.SQLQuery; import com.mysema.query.sql.SQLQueryImpl; import com.mysema.query.sql.SQLSerializer; import com.mysema.query.sql.SQLTemplates; -import com.mysema.query.types.EntityPath; public class QueryPerformanceTest { @@ -56,7 +54,8 @@ public class QueryPerformanceTest { Connection conn = Connections.getConnection(); long start = System.currentTimeMillis(); for (int i = 0; i < iterations; i++) { - PreparedStatement stmt = conn.prepareStatement("select COMPANIES.NAME from COMPANIES COMPANIES where COMPANIES.ID = ?"); + PreparedStatement stmt = conn.prepareStatement( + "select COMPANIES.NAME from COMPANIES COMPANIES where COMPANIES.ID = ?"); try { stmt.setInt(1, i); ResultSet rs = stmt.executeQuery(); @@ -80,7 +79,8 @@ public class QueryPerformanceTest { Connection conn = Connections.getConnection(); long start = System.currentTimeMillis(); for (int i = 0; i < iterations; i++) { - PreparedStatement stmt = conn.prepareStatement("select COMPANIES.ID from COMPANIES COMPANIES where COMPANIES.NAME = ?"); + PreparedStatement stmt = conn.prepareStatement( + "select COMPANIES.ID from COMPANIES COMPANIES where COMPANIES.NAME = ?"); try { stmt.setString(1, String.valueOf(i)); ResultSet rs = stmt.executeQuery(); @@ -107,7 +107,7 @@ public class QueryPerformanceTest { long start = System.currentTimeMillis(); for (int i = 0; i < iterations; i++) { QCompanies companies = QCompanies.companies; - SQLQuery query = new SQLQueryImpl(conn, conf); + SQLQueryImpl query = new SQLQueryImpl(conn, conf); query.from(companies).where(companies.id.eq((long)i)).list(companies.name); } System.err.println("qdsl by id " + (System.currentTimeMillis() - start)); @@ -121,8 +121,9 @@ public class QueryPerformanceTest { long start = System.currentTimeMillis(); for (int i = 0; i < iterations; i++) { QCompanies companies = QCompanies.companies; - SQLQuery query = new SQLQueryImpl(conn, conf); - CloseableIterator it = query.from(companies).where(companies.id.eq((long)i)).iterate(companies.name); + SQLQueryImpl query = new SQLQueryImpl(conn, conf); + CloseableIterator it = query.from(companies) + .where(companies.id.eq((long)i)).iterate(companies.name); try { while (it.hasNext()) { it.next(); @@ -142,26 +143,24 @@ public class QueryPerformanceTest { long start = System.currentTimeMillis(); for (int i = 0; i < iterations; i++) { QCompanies companies = QCompanies.companies; - SQLQuery query = new SQLQueryImpl(conn, conf, new DefaultQueryMetadata().noValidate()); + SQLQueryImpl query = new SQLQueryImpl(conn, conf, new DefaultQueryMetadata().noValidate()); query.from(companies).where(companies.id.eq((long)i)).list(companies.name); } System.err.println("qdsl by id " + (System.currentTimeMillis() - start) + " (no validation)"); } - + @Test public void Querydsl14() { Connection conn = Connections.getConnection(); Configuration conf = new Configuration(new H2Templates()); QCompanies companies = QCompanies.companies; - EntityPath[] companies_ = new EntityPath[]{companies}; -// Path[] name_ = new Path[]{companies.name}; long start = System.currentTimeMillis(); for (int i = 0; i < iterations; i++) { - SQLQuery query = new SQLQueryImpl(conn, conf); - query.from(companies_).where(companies.id.eq((long)i)).list(companies.name); + SQLQueryImpl query = new SQLQueryImpl(conn, conf); + query.from(companies).where(companies.id.eq((long)i)).list(companies.id, companies.name); } - System.err.println("qdsl by id " + (System.currentTimeMillis() - start) + " (less varargs)"); + System.err.println("qdsl by id " + (System.currentTimeMillis() - start) + " (two cols)"); } @Test @@ -172,7 +171,7 @@ public class QueryPerformanceTest { long start = System.currentTimeMillis(); for (int i = 0; i < iterations; i++) { QCompanies companies = QCompanies.companies; - SQLQuery query = new SQLQueryImpl(conn, conf); + SQLQueryImpl query = new SQLQueryImpl(conn, conf); query.from(companies).where(companies.name.eq(String.valueOf(i))).list(companies.name); } System.err.println("qdsl by name " + (System.currentTimeMillis() - start)); @@ -186,8 +185,9 @@ public class QueryPerformanceTest { long start = System.currentTimeMillis(); for (int i = 0; i < iterations; i++) { QCompanies companies = QCompanies.companies; - SQLQuery query = new SQLQueryImpl(conn, conf); - CloseableIterator it = query.from(companies).where(companies.name.eq(String.valueOf(i))).iterate(companies.name); + SQLQueryImpl query = new SQLQueryImpl(conn, conf); + CloseableIterator it = query.from(companies) + .where(companies.name.eq(String.valueOf(i))).iterate(companies.name); try { while (it.hasNext()) { it.next(); @@ -207,7 +207,7 @@ public class QueryPerformanceTest { long start = System.currentTimeMillis(); for (int i = 0; i < iterations; i++) { QCompanies companies = QCompanies.companies; - SQLQuery query = new SQLQueryImpl(conn, conf, new DefaultQueryMetadata().noValidate()); + SQLQueryImpl query = new SQLQueryImpl(conn, conf, new DefaultQueryMetadata().noValidate()); query.from(companies).where(companies.name.eq(String.valueOf(i))).list(companies.name); } System.err.println("qdsl by name " + (System.currentTimeMillis() - start) + " (no validation)");