From 97e9564ad6efb1312f4704b9cefce30671fedd95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 21 Apr 2009 09:53:09 +0000 Subject: [PATCH] added caching of Class constants --- .../query/grammar/types/ExprFactory.java | 2 + .../grammar/types/SimpleExprFactory.java | 46 +++++++++++++------ 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/grammar/types/ExprFactory.java b/querydsl-core/src/main/java/com/mysema/query/grammar/types/ExprFactory.java index b58d62e96..1eabe48b8 100644 --- a/querydsl-core/src/main/java/com/mysema/query/grammar/types/ExprFactory.java +++ b/querydsl-core/src/main/java/com/mysema/query/grammar/types/ExprFactory.java @@ -21,6 +21,8 @@ public interface ExprFactory { Expr createConstant(int i); + Expr> createConstant(Class obj); + Expr createConstant(A obj); EBoolean createBoolean(Op operator, Expr... args); diff --git a/querydsl-core/src/main/java/com/mysema/query/grammar/types/SimpleExprFactory.java b/querydsl-core/src/main/java/com/mysema/query/grammar/types/SimpleExprFactory.java index 8f87f91dd..c48424141 100644 --- a/querydsl-core/src/main/java/com/mysema/query/grammar/types/SimpleExprFactory.java +++ b/querydsl-core/src/main/java/com/mysema/query/grammar/types/SimpleExprFactory.java @@ -5,6 +5,9 @@ */ package com.mysema.query.grammar.types; +import java.util.HashMap; +import java.util.Map; + import com.mysema.query.grammar.Ops.Op; import com.mysema.query.grammar.types.Expr.EBoolean; import com.mysema.query.grammar.types.Expr.EComparable; @@ -29,9 +32,7 @@ public class SimpleExprFactory implements ExprFactory{ private static final ExprFactory instance = new SimpleExprFactory(); - public static ExprFactory getInstance(){ - return instance; - } + private final Map,Expr> classToExpr = new HashMap,Expr>(); @SuppressWarnings("unchecked") private final Expr[] integers = new Expr[256]; @@ -42,12 +43,16 @@ public class SimpleExprFactory implements ExprFactory{ } } - public Expr createConstant(int i){ - if (i >= -128 && i <= 127) { - return integers[i+128]; - }else{ - return new EConstant(i); - } + public static ExprFactory getInstance(){ + return instance; + } + + public EBoolean createBoolean(Op operator, Expr... args) { + return new OBoolean(Assert.notNull(operator), Assert.notNull(args)); + } + + public > EComparable createComparable(Class type, Op operator, Expr... args) { + return new OComparable(type, Assert.notNull(operator), Assert.notNull(args)); } @SuppressWarnings("unchecked") @@ -59,22 +64,33 @@ public class SimpleExprFactory implements ExprFactory{ } } - public EBoolean createBoolean(Op operator, Expr... args) { - return new OBoolean(Assert.notNull(operator), Assert.notNull(args)); + @SuppressWarnings("unchecked") + public Expr> createConstant(Class obj) { + if (classToExpr.containsKey(obj)){ + return (Expr>) classToExpr.get(obj); + }else{ + Expr> expr = new EConstant>(obj); + classToExpr.put(obj, expr); + return expr; + } } - public > EComparable createComparable(Class type, Op operator, Expr... args) { - return new OComparable(type, Assert.notNull(operator), Assert.notNull(args)); + public Expr createConstant(int i){ + if (i >= -128 && i <= 127) { + return integers[i+128]; + }else{ + return new EConstant(i); + } } public > ENumber createNumber(Class type, Op operator, Expr... args) { return new ONumber(type, Assert.notNull(operator), Assert.notNull(args)); } - + public EString createString(Op operator, Expr... args) { return new OString(Assert.notNull(operator), Assert.notNull(args)); } - + public Expr createStringArray(Op operator, Expr... args) { return new OStringArray(Assert.notNull(operator), Assert.notNull(args)); }