"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "spring-jdbc/src/main/java/org/springframework/jdbc/core/namedparam/NamedParameterUtils.java" between
spring-framework-5.3.23.tar.gz and spring-framework-5.3.24.tar.gz

About: Spring Framework is an application framework for the Java platform and .NET Framework. Community edition.

NamedParameterUtils.java  (spring-framework-5.3.23):NamedParameterUtils.java  (spring-framework-5.3.24)
/* /*
* Copyright 2002-2021 the original author or authors. * Copyright 2002-2022 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* https://www.apache.org/licenses/LICENSE-2.0 * https://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
skipping to change at line 80 skipping to change at line 80
} }
//----------------------------------------------------------------------- -- //----------------------------------------------------------------------- --
// Core methods used by NamedParameterJdbcTemplate and SqlQuery/SqlUpdate // Core methods used by NamedParameterJdbcTemplate and SqlQuery/SqlUpdate
//----------------------------------------------------------------------- -- //----------------------------------------------------------------------- --
/** /**
* Parse the SQL statement and locate any placeholders or named parameter s. * Parse the SQL statement and locate any placeholders or named parameter s.
* Named parameters are substituted for a JDBC placeholder. * Named parameters are substituted for a JDBC placeholder.
* @param sql the SQL statement * @param sql the SQL statement
* @return the parsed statement, represented as ParsedSql instance * @return the parsed statement, represented as {@link ParsedSql} instanc e
*/ */
public static ParsedSql parseSqlStatement(final String sql) { public static ParsedSql parseSqlStatement(String sql) {
Assert.notNull(sql, "SQL must not be null"); Assert.notNull(sql, "SQL must not be null");
Set<String> namedParameters = new HashSet<>(); Set<String> namedParameters = new HashSet<>();
StringBuilder sqlToUse = new StringBuilder(sql); StringBuilder sqlToUse = new StringBuilder(sql);
List<ParameterHolder> parameterList = new ArrayList<>(); List<ParameterHolder> parameterList = new ArrayList<>();
char[] statement = sql.toCharArray(); char[] statement = sql.toCharArray();
int namedParameterCount = 0; int namedParameterCount = 0;
int unnamedParameterCount = 0; int unnamedParameterCount = 0;
int totalParameterCount = 0; int totalParameterCount = 0;
skipping to change at line 124 skipping to change at line 124
// Postgres-style "::" casting operator s hould be skipped // Postgres-style "::" casting operator s hould be skipped
i = i + 2; i = i + 2;
continue; continue;
} }
String parameter = null; String parameter = null;
if (c == ':' && j < statement.length && statement [j] == '{') { if (c == ':' && j < statement.length && statement [j] == '{') {
// :{x} style parameter // :{x} style parameter
while (statement[j] != '}') { while (statement[j] != '}') {
j++; j++;
if (j >= statement.length) { if (j >= statement.length) {
throw new InvalidDataAcce throw new InvalidDataAcce
ssApiUsageException("Non-terminated named parameter declaration " + ssApiUsageException(
"at posit "Non-term
ion " + i + " in statement: " + sql); inated named parameter declaration at position " + i +
" in stat
ement: " + sql);
} }
if (statement[j] == ':' || statem ent[j] == '{') { if (statement[j] == ':' || statem ent[j] == '{') {
throw new InvalidDataAcce throw new InvalidDataAcce
ssApiUsageException("Parameter name contains invalid character '" + ssApiUsageException(
statement "Paramete
[j] + "' at position " + i + " in statement: " + sql); r name contains invalid character '" + statement[j] +
"' at pos
ition " + i + " in statement: " + sql);
} }
} }
if (j - i > 2) { if (j - i > 2) {
parameter = sql.substring(i + 2, j); parameter = sql.substring(i + 2, j);
namedParameterCount = addNewNamed namedParameterCount = addNewNamed
Parameter(namedParameters, namedParameterCount, parameter); Parameter(
namedParameters,
namedParameterCount, parameter);
totalParameterCount = addNamedPar ameter( totalParameterCount = addNamedPar ameter(
parameterList, to talParameterCount, escapes, i, j + 1, parameter); parameterList, to talParameterCount, escapes, i, j + 1, parameter);
} }
j++; j++;
} }
else { else {
while (j < statement.length && !isParamet erSeparator(statement[j])) { while (j < statement.length && !isParamet erSeparator(statement[j])) {
j++; j++;
} }
if (j - i > 1) { if (j - i > 1) {
parameter = sql.substring(i + 1, j); parameter = sql.substring(i + 1, j);
namedParameterCount = addNewNamed namedParameterCount = addNewNamed
Parameter(namedParameters, namedParameterCount, parameter); Parameter(
namedParameters,
namedParameterCount, parameter);
totalParameterCount = addNamedPar ameter( totalParameterCount = addNamedPar ameter(
parameterList, to talParameterCount, escapes, i, j, parameter); parameterList, to talParameterCount, escapes, i, j, parameter);
} }
} }
i = j - 1; i = j - 1;
} }
else { else {
if (c == '\\') { if (c == '\\') {
int j = i + 1; int j = i + 1;
if (j < statement.length && statement[j] == ':') { if (j < statement.length && statement[j] == ':') {
skipping to change at line 187 skipping to change at line 191
ParsedSql parsedSql = new ParsedSql(sqlToUse.toString()); ParsedSql parsedSql = new ParsedSql(sqlToUse.toString());
for (ParameterHolder ph : parameterList) { for (ParameterHolder ph : parameterList) {
parsedSql.addNamedParameter(ph.getParameterName(), ph.get StartIndex(), ph.getEndIndex()); parsedSql.addNamedParameter(ph.getParameterName(), ph.get StartIndex(), ph.getEndIndex());
} }
parsedSql.setNamedParameterCount(namedParameterCount); parsedSql.setNamedParameterCount(namedParameterCount);
parsedSql.setUnnamedParameterCount(unnamedParameterCount); parsedSql.setUnnamedParameterCount(unnamedParameterCount);
parsedSql.setTotalParameterCount(totalParameterCount); parsedSql.setTotalParameterCount(totalParameterCount);
return parsedSql; return parsedSql;
} }
private static int addNamedParameter( private static int addNamedParameter(List<ParameterHolder> parameterList,
List<ParameterHolder> parameterList, int totalParameterCo int totalParameterCount, int escapes, int i, int j, Strin
unt, int escapes, int i, int j, String parameter) { g 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;
} }
private static int addNewNamedParameter(Set<String> namedParameters, int namedParameterCount, String parameter) { private static int addNewNamedParameter(Set<String> namedParameters, int namedParameterCount, String parameter) {
if (!namedParameters.contains(parameter)) { if (!namedParameters.contains(parameter)) {
namedParameters.add(parameter); namedParameters.add(parameter);
namedParameterCount++; namedParameterCount++;
skipping to change at line 273 skipping to change at line 277
* @param paramSource the source for named parameters * @param paramSource the source for named parameters
* @return the SQL statement with substituted parameters * @return the SQL statement with substituted parameters
* @see #parseSqlStatement * @see #parseSqlStatement
*/ */
public static String substituteNamedParameters(ParsedSql parsedSql, @Null able SqlParameterSource paramSource) { public static String substituteNamedParameters(ParsedSql parsedSql, @Null able SqlParameterSource paramSource) {
String originalSql = parsedSql.getOriginalSql(); String originalSql = parsedSql.getOriginalSql();
List<String> paramNames = parsedSql.getParameterNames(); List<String> paramNames = parsedSql.getParameterNames();
if (paramNames.isEmpty()) { if (paramNames.isEmpty()) {
return originalSql; return originalSql;
} }
StringBuilder actualSql = new StringBuilder(originalSql.length()) ; StringBuilder actualSql = new StringBuilder(originalSql.length()) ;
int lastIndex = 0; int lastIndex = 0;
for (int i = 0; i < paramNames.size(); i++) { for (int i = 0; i < paramNames.size(); i++) {
String paramName = paramNames.get(i); String paramName = paramNames.get(i);
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, 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);
 End of changes. 9 change blocks. 
18 lines changed or deleted 27 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)