Author: mgentry
Date: Tue Sep 16 07:24:11 2008
New Revision: 695898
URL: http://svn.apache.org/viewvc?rev=695898&view=rev
Log:
Updated Expression.fromString to cache the parsed expressions
instead of
re-parsing them every time.
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/
java/org/apache/cayenne/exp/Expression.java
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/
java/org/apache/cayenne/exp/Expression.java
URL:
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/Expression.java?rev=695898&r1=695897&r2=695898&view=diff
=
=
=
=
=
=
=
=
=
=
=
===================================================================
---
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/
java/org/apache/cayenne/exp/Expression.java
(original)
+++
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/
java/org/apache/cayenne/exp/Expression.java
Tue Sep 16 07:24:11 2008
@@ -26,6 +26,7 @@
import java.io.StringWriter;
import java.util.Collection;
import java.util.Collections;
+import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -119,21 +120,36 @@
protected int type;
+ private static Map<String, Expression> expressionCache =
+ Collections.synchronizedMap(new HashMap<String,
Expression>(32));
+
/**
* Parses string, converting it to Expression. If string does not
represent a
* semantically correct expression, an ExpressionException is
thrown.
*
* @since 1.1
*/
- // TODO: cache expression strings, since this operation is
pretty
slow
public static Expression fromString(String expressionString) {
if (expressionString == null) {
throw new NullPointerException("Null expression string.");
}
- Reader reader = new StringReader(expressionString);
+ // Retrieve, if possible, the expression from the cache.
+ Expression expression =
expressionCache.get(expressionString);
+
+ // If the expression was cached, return it immediately
without
parsing.
+ if (expression != null)
+ return expression;
+
+ // Couldn't find expression, parse, cache, and return it.
try {
- return new ExpressionParser(reader).expression();
+ Reader reader = new StringReader(expressionString);
+
+ expression = new
ExpressionParser(reader).expression();
+
+ expressionCache.put(expressionString, expression);
+
+ return expression;
}
catch (ParseException ex) {
throw new ExpressionException(ex.getMessage(), ex);