diff --git a/querydsl-collections/src/main/java/com/mysema/query/collections/impl/ColQueryImpl.java b/querydsl-collections/src/main/java/com/mysema/query/collections/impl/ColQueryImpl.java index da781169e..94c5484de 100644 --- a/querydsl-collections/src/main/java/com/mysema/query/collections/impl/ColQueryImpl.java +++ b/querydsl-collections/src/main/java/com/mysema/query/collections/impl/ColQueryImpl.java @@ -18,6 +18,11 @@ import com.mysema.query.collections.ColQuery; */ public class ColQueryImpl extends AbstractColQuery implements ColQuery{ + + public ColQueryImpl() { + super(new DefaultQueryMetadata(), EvaluatorFactory.DEFAULT); + } + public ColQueryImpl(EvaluatorFactory evaluatorFactory) { super(new DefaultQueryMetadata(), evaluatorFactory); } diff --git a/querydsl-collections/src/main/java/com/mysema/query/collections/impl/EvaluatorFactory.java b/querydsl-collections/src/main/java/com/mysema/query/collections/impl/EvaluatorFactory.java index e93c90391..c56206576 100644 --- a/querydsl-collections/src/main/java/com/mysema/query/collections/impl/EvaluatorFactory.java +++ b/querydsl-collections/src/main/java/com/mysema/query/collections/impl/EvaluatorFactory.java @@ -36,6 +36,7 @@ public class EvaluatorFactory { this.templates = templates; } + @SuppressWarnings("unchecked") public Evaluator create(List> sources, final Expr projection) { ColQuerySerializer serializer = new ColQuerySerializer(templates); serializer.handle(projection); @@ -68,12 +69,9 @@ public class EvaluatorFactory { } try { - // REPLACE START final ExpressionEvaluator evaluator = new ExpressionEvaluator(javaSource, projection.getType(), names, types); - // REPLACE END - return new Evaluator(){ - @SuppressWarnings("unchecked") + Evaluator rv = new Evaluator(){ @Override public T evaluate(Object... args) { try { @@ -94,6 +92,7 @@ public class EvaluatorFactory { } }; + return rv; } catch (CompileException e) { throw new RuntimeException(e.getMessage() + " with source " + javaSource, e); diff --git a/querydsl-collections/src/test/java/com/mysema/query/LoadTest.java b/querydsl-collections/src/test/java/com/mysema/query/LoadTest.java new file mode 100644 index 000000000..f53ac0b72 --- /dev/null +++ b/querydsl-collections/src/test/java/com/mysema/query/LoadTest.java @@ -0,0 +1,81 @@ +package com.mysema.query; + +import static org.junit.Assert.assertEquals; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import org.junit.Test; + +import com.mysema.query.animal.Cat; +import com.mysema.query.animal.QCat; +import com.mysema.query.collections.MiniApi; +import com.mysema.query.collections.impl.EvaluatorFactory; + +public class LoadTest { + + private QCat cat = QCat.cat; + + @Test + public void creation(){ + System.out.println("Evaluator creation #1"); + for (int i = 0; i < 5; i++){ + long s = System.currentTimeMillis(); + EvaluatorFactory.DEFAULT.create(Collections.singletonList(cat), cat.name.startsWith("Bob")); + long e = System.currentTimeMillis(); + System.out.println(" " + (e-s)+"ms"); + } + System.out.println(); + + System.out.println("Evaluator creation #2"); + for (int i = 0; i < 5; i++){ + long s = System.currentTimeMillis(); + EvaluatorFactory.DEFAULT.create(Collections.singletonList(cat), cat.name.startsWith("Bob" + i)); + long e = System.currentTimeMillis(); + System.out.println(" " + (e-s)+"ms"); + } + System.out.println(); + } + + @Test + public void test(){ + List data = new ArrayList(5000); + for (int i = 0; i < 1000; i++){ + data.addAll(Arrays.asList( + new Cat("Bob" + i), + new Cat("Ruth" + i), + new Cat("Felix" + i), + new Cat("Allen" + i), + new Cat("Mary" + i) + )); + } + + // #1 + System.out.println("Querydsl iteration"); + for (int i = 0; i < 5; i++){ + long s1 = System.currentTimeMillis(); + List bobs1 = MiniApi.from(cat, data).where(cat.name.startsWith("Bob")).list(cat); + assertEquals(1000, bobs1.size()); + long e1 = System.currentTimeMillis(); + System.out.println(" " + (e1-s1)+"ms"); + } + System.out.println(); + + // #2 + System.out.println("Normal iteration"); + for (int i = 0; i < 5; i++){ + long s2 = System.currentTimeMillis(); + List bobs2 = new ArrayList(); + for (Cat c : data){ + if (c.getName().startsWith("Bob")) bobs2.add(c); + } + assertEquals(1000, bobs2.size()); + long e2 = System.currentTimeMillis(); + System.out.println(" " + (e2-s2)+"ms"); + } + System.out.println(); + } + +}