Skip to content

Commit 6a53af3

Browse files
author
Fedorov, Mikhail
committed
Fix performance bug with large number of unnamed parameters
On some occasions where col in (:args) contain a really lot args, 10k+ for instance, this commit fixes a performance (high CPU) bug by NOT traversing the whole map in basically O(n^2) manner Signed-off-by: Mikhail Fedorov <[email protected]>
1 parent abb3b68 commit 6a53af3

File tree

1 file changed

+8
-5
lines changed
  • spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert

1 file changed

+8
-5
lines changed

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/QueryMapper.java

+8-5
Original file line numberDiff line numberDiff line change
@@ -625,16 +625,19 @@ private Expression bind(@Nullable Object mappedValue, SQLType sqlType, MapSqlPar
625625
}
626626

627627
private static String getUniqueName(MapSqlParameterSource parameterSource, String name) {
628-
Map<String, Object> parameters = parameterSource.getValues();
629-
Object existingName = parameters.get(name);
630-
if (existingName == null) {
628+
629+
Map<String, Object> values = parameterSource.getValues();
630+
631+
if (!values.containsKey(name)) {
631632
return name;
632633
}
633-
int counter = parameters.size();
634+
635+
int counter = values.size();
634636
String uniqueName;
637+
635638
do {
636639
uniqueName = name + (counter++);
637-
} while (parameters.containsKey(uniqueName));
640+
} while (values.containsKey(uniqueName));
638641
return uniqueName;
639642
}
640643

0 commit comments

Comments
 (0)