diff --git a/spring-r2dbc/src/main/java/org/springframework/r2dbc/core/NamedParameterExpander.java b/spring-r2dbc/src/main/java/org/springframework/r2dbc/core/NamedParameterExpander.java index d630cb4d34..6713baba2a 100644 --- a/spring-r2dbc/src/main/java/org/springframework/r2dbc/core/NamedParameterExpander.java +++ b/spring-r2dbc/src/main/java/org/springframework/r2dbc/core/NamedParameterExpander.java @@ -16,14 +16,10 @@ package org.springframework.r2dbc.core; -import java.util.LinkedHashMap; import java.util.List; -import java.util.Map; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.springframework.r2dbc.core.binding.BindMarkersFactory; +import org.springframework.util.ConcurrentLruCache; /** @@ -40,6 +36,7 @@ import org.springframework.r2dbc.core.binding.BindMarkersFactory; *
NOTE: An instance of this class is thread-safe once configured.
*
* @author Mark Paluch
+ * @author Juergen Hoeller
*/
class NamedParameterExpander {
@@ -48,68 +45,19 @@ class NamedParameterExpander {
*/
public static final int DEFAULT_CACHE_LIMIT = 256;
+ /** Cache of original SQL String to ParsedSql representation. */
+ private final ConcurrentLruCache
- * The default implementation uses an LRU cache with an upper limit of 256 entries.
- *
+ * The default implementation uses an LRU cache with an upper limit of 256 entries.
* @param sql the original SQL statement
* @return a representation of the parsed SQL statement
*/
private ParsedSql getParsedSql(String sql) {
-
- if (getCacheLimit() <= 0) {
- return NamedParameterUtils.parseSqlStatement(sql);
- }
-
- synchronized (this.parsedSqlCache) {
-
- ParsedSql parsedSql = this.parsedSqlCache.get(sql);
- if (parsedSql == null) {
-
- parsedSql = NamedParameterUtils.parseSqlStatement(sql);
- this.parsedSqlCache.put(sql, parsedSql);
- }
- return parsedSql;
- }
+ return this.parsedSqlCache.get(sql);
}
/**
@@ -119,11 +67,9 @@ class NamedParameterExpander {
* lists may contain an array of objects, and in that case the placeholders
* will be grouped and enclosed with parentheses. This allows for the use of
* "expression lists" in the SQL statement like:
- *
* The parameter values passed in are used to determine the number of
* placeholders to be used for a select list. Select lists should be limited
* to 100 or fewer elements. A larger number of elements is not guaranteed to be
@@ -134,26 +80,17 @@ class NamedParameterExpander {
* @return the expanded sql that accepts bind parameters and allows for execution
* without further translation wrapped as {@link PreparedOperation}.
*/
- public PreparedOperation
* select id, name, state from table where (name, age) in (('John', 35), ('Ann', 50))
*
- *
*