Avoid unnecessary char[] allocation in NamedParameterUtils
Issue: SPR-11042
This commit is contained in:
@@ -113,11 +113,13 @@ public abstract class NamedParameterUtils {
|
|||||||
while (j < statement.length && !('}' == statement[j])) {
|
while (j < statement.length && !('}' == statement[j])) {
|
||||||
j++;
|
j++;
|
||||||
if (':' == statement[j] || '{' == statement[j]) {
|
if (':' == statement[j] || '{' == statement[j]) {
|
||||||
throw new InvalidDataAccessApiUsageException("Parameter name contains invalid character '" + statement[j] + "' at position " + i + " in statement " + sql);
|
throw new InvalidDataAccessApiUsageException("Parameter name contains invalid character '" +
|
||||||
|
statement[j] + "' at position " + i + " in statement " + sql);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (j >= statement.length) {
|
if (j >= statement.length) {
|
||||||
throw new InvalidDataAccessApiUsageException("Non-terminated named parameter declaration at position " + i + " in statement " + sql);
|
throw new InvalidDataAccessApiUsageException(
|
||||||
|
"Non-terminated named parameter declaration at position " + i + " in statement: " + sql);
|
||||||
}
|
}
|
||||||
if (j - i > 3) {
|
if (j - i > 3) {
|
||||||
parameter = sql.substring(i + 2, j);
|
parameter = sql.substring(i + 2, j);
|
||||||
@@ -166,8 +168,9 @@ public abstract class NamedParameterUtils {
|
|||||||
return parsedSql;
|
return parsedSql;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int addNamedParameter(List<ParameterHolder> parameterList, int totalParameterCount, int escapes, int i, int j,
|
private static int addNamedParameter(
|
||||||
String parameter) {
|
List<ParameterHolder> parameterList, int totalParameterCount, int escapes, int i, int j, String parameter) {
|
||||||
|
|
||||||
parameterList.add(new ParameterHolder(parameter, i - escapes, j - escapes));
|
parameterList.add(new ParameterHolder(parameter, i - escapes, j - escapes));
|
||||||
totalParameterCount++;
|
totalParameterCount++;
|
||||||
return totalParameterCount;
|
return totalParameterCount;
|
||||||
@@ -256,7 +259,7 @@ public abstract class NamedParameterUtils {
|
|||||||
int[] indexes = parsedSql.getParameterIndexes(i);
|
int[] indexes = parsedSql.getParameterIndexes(i);
|
||||||
int startIndex = indexes[0];
|
int startIndex = indexes[0];
|
||||||
int endIndex = indexes[1];
|
int endIndex = indexes[1];
|
||||||
actualSql.append(originalSql.substring(lastIndex, startIndex));
|
actualSql.append(originalSql, lastIndex, startIndex);
|
||||||
if (paramSource != null && paramSource.hasValue(paramName)) {
|
if (paramSource != null && paramSource.hasValue(paramName)) {
|
||||||
Object value = paramSource.getValue(paramName);
|
Object value = paramSource.getValue(paramName);
|
||||||
if (value instanceof SqlParameterValue) {
|
if (value instanceof SqlParameterValue) {
|
||||||
@@ -296,7 +299,7 @@ public abstract class NamedParameterUtils {
|
|||||||
}
|
}
|
||||||
lastIndex = endIndex;
|
lastIndex = endIndex;
|
||||||
}
|
}
|
||||||
actualSql.append(originalSql.substring(lastIndex, originalSql.length()));
|
actualSql.append(originalSql, lastIndex, originalSql.length());
|
||||||
return actualSql.toString();
|
return actualSql.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -409,15 +412,12 @@ public abstract class NamedParameterUtils {
|
|||||||
List<String> paramNames = parsedSql.getParameterNames();
|
List<String> paramNames = parsedSql.getParameterNames();
|
||||||
List<SqlParameter> params = new LinkedList<SqlParameter>();
|
List<SqlParameter> params = new LinkedList<SqlParameter>();
|
||||||
for (String paramName : paramNames) {
|
for (String paramName : paramNames) {
|
||||||
SqlParameter param = new SqlParameter(
|
params.add(new SqlParameter(paramName, paramSource.getSqlType(paramName), paramSource.getTypeName(paramName)));
|
||||||
paramName,
|
|
||||||
paramSource.getSqlType(paramName),
|
|
||||||
paramSource.getTypeName(paramName));
|
|
||||||
params.add(param);
|
|
||||||
}
|
}
|
||||||
return params;
|
return params;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
// Convenience methods operating on a plain SQL String
|
// Convenience methods operating on a plain SQL String
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
@@ -464,28 +464,32 @@ public abstract class NamedParameterUtils {
|
|||||||
return buildValueArray(parsedSql, new MapSqlParameterSource(paramMap), null);
|
return buildValueArray(parsedSql, new MapSqlParameterSource(paramMap), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static class ParameterHolder {
|
private static class ParameterHolder {
|
||||||
private String parameterName;
|
|
||||||
private int startIndex;
|
private final String parameterName;
|
||||||
private int endIndex;
|
|
||||||
|
private final int startIndex;
|
||||||
|
|
||||||
|
private final int endIndex;
|
||||||
|
|
||||||
public ParameterHolder(String parameterName, int startIndex, int endIndex) {
|
public ParameterHolder(String parameterName, int startIndex, int endIndex) {
|
||||||
super();
|
|
||||||
this.parameterName = parameterName;
|
this.parameterName = parameterName;
|
||||||
this.startIndex = startIndex;
|
this.startIndex = startIndex;
|
||||||
this.endIndex = endIndex;
|
this.endIndex = endIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getParameterName() {
|
public String getParameterName() {
|
||||||
return parameterName;
|
return this.parameterName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getStartIndex() {
|
public int getStartIndex() {
|
||||||
return startIndex;
|
return this.startIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getEndIndex() {
|
public int getEndIndex() {
|
||||||
return endIndex;
|
return this.endIndex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user