Skip to content

Commit 13fd49a

Browse files
committed
SqlIdentifierParameterSource now sanitizes identifier names
1 parent e6986da commit 13fd49a

File tree

3 files changed

+28
-9
lines changed

3 files changed

+28
-9
lines changed

spring-data-jdbc-plus-sql/src/main/java/com/navercorp/spring/data/jdbc/plus/sql/convert/SqlGenerator.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import java.util.Set;
3030
import java.util.TreeSet;
3131
import java.util.function.Function;
32-
import java.util.regex.Pattern;
3332
import java.util.stream.Collectors;
3433
import java.util.stream.Stream;
3534

@@ -88,6 +87,7 @@
8887
import org.springframework.util.Assert;
8988

9089
import com.navercorp.spring.data.jdbc.plus.sql.annotation.SqlFunction;
90+
import com.navercorp.spring.data.jdbc.plus.sql.parametersource.BindParameterNameSanitizer;
9191

9292
/**
9393
* Generates SQL statements to be used by {@link org.springframework.data.jdbc.repository.support.SimpleJdbcRepository}
@@ -113,8 +113,6 @@ class SqlGenerator {
113113
static final SqlIdentifier IDS_SQL_PARAMETER = SqlIdentifier.unquoted("ids");
114114
static final SqlIdentifier ROOT_ID_PARAMETER = SqlIdentifier.unquoted("rootId");
115115

116-
private static final Pattern parameterPattern = Pattern.compile("\\W");
117-
118116
private final RelationalPersistentEntity<?> entity;
119117
private final MappingContext<RelationalPersistentEntity<?>, RelationalPersistentProperty> mappingContext;
120118
private final RenderContext renderContext;
@@ -236,7 +234,7 @@ private Condition getSubselectCondition(PersistentPropertyPathExtension path,
236234
}
237235

238236
private BindMarker getBindMarker(SqlIdentifier columnName) {
239-
return SQL.bindMarker(":" + parameterPattern.matcher(renderReference(columnName)).replaceAll(""));
237+
return SQL.bindMarker(":" + BindParameterNameSanitizer.sanitize(renderReference(columnName)));
240238
}
241239

242240
/**
@@ -887,7 +885,7 @@ private String createUpdateWithVersionSql() {
887885

888886
Update update = createBaseUpdate() //
889887
.and(getVersionColumn().isEqualTo(
890-
SQL.bindMarker(":" + renderReference(VERSION_SQL_PARAMETER)))) //
888+
getBindMarker(VERSION_SQL_PARAMETER))) //
891889
.build();
892890

893891
return render(update);
@@ -950,7 +948,7 @@ private String createDeleteByIdAndVersionSql() {
950948

951949
Delete delete = createBaseDeleteById(getDmlTable()) //
952950
.and(getVersionColumn().isEqualTo(
953-
SQL.bindMarker(":" + renderReference(VERSION_SQL_PARAMETER)))) //
951+
getBindMarker(VERSION_SQL_PARAMETER))) //
954952
.build();
955953

956954
return render(delete);
@@ -959,13 +957,13 @@ private String createDeleteByIdAndVersionSql() {
959957
private DeleteBuilder.DeleteWhereAndOr createBaseDeleteById(Table table) {
960958
return Delete.builder().from(table)
961959
.where(getIdColumn().isEqualTo(
962-
SQL.bindMarker(":" + renderReference(ID_SQL_PARAMETER))));
960+
getBindMarker(ID_SQL_PARAMETER)));
963961
}
964962

965963
private DeleteBuilder.DeleteWhereAndOr createBaseDeleteByIdIn(Table table) {
966964

967965
return Delete.builder().from(table)
968-
.where(getIdColumn().in(SQL.bindMarker(":" + renderReference(IDS_SQL_PARAMETER))));
966+
.where(getIdColumn().in(getBindMarker(IDS_SQL_PARAMETER)));
969967
}
970968

971969
private String createDeleteByPathAndCriteria(PersistentPropertyPathExtension path,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.navercorp.spring.data.jdbc.plus.sql.parametersource;
2+
3+
import java.util.regex.Pattern;
4+
5+
/**
6+
* Sanitizes the name of bind parameters, so they don't contain any illegal characters.
7+
*
8+
* @author Jens Schauder
9+
*
10+
* @since 3.0.2
11+
*
12+
* COPY: org.springframework.data.jdbc.core.convert.BindParameterNameSanitizer
13+
*/
14+
public abstract class BindParameterNameSanitizer {
15+
16+
private static final Pattern parameterPattern = Pattern.compile("\\W");
17+
18+
public static String sanitize(String rawName) {
19+
return parameterPattern.matcher(rawName).replaceAll("");
20+
}
21+
}

spring-data-jdbc-plus-sql/src/main/java/com/navercorp/spring/data/jdbc/plus/sql/parametersource/SqlIdentifierParameterSource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ void addValue(SqlIdentifier name, Object value) {
7474
void addValue(SqlIdentifier identifier, Object value, int sqlType) {
7575

7676
identifiers.add(identifier);
77-
String name = identifier.getReference(identifierProcessing);
77+
String name = BindParameterNameSanitizer.sanitize(identifier.getReference(identifierProcessing));
7878
namesToValues.put(name, value);
7979
registerSqlType(name, sqlType);
8080
}

0 commit comments

Comments
 (0)