Skip to content

Commit 003202b

Browse files
committed
Fix bug in SQLQuery that values could not be used to replace parameter placeholders if containing a dollar sign
Signed-off-by: Benjamin Rögner <[email protected]>
1 parent c684888 commit 003202b

File tree

1 file changed

+18
-13
lines changed

1 file changed

+18
-13
lines changed

xyz-util/src/main/java/com/here/xyz/util/db/SQLQuery.java

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -230,8 +230,8 @@ private String replaceUnnamedParametersForLogging() {
230230
private String paramValueToString(Object paramValue) {
231231
if (paramValue == null)
232232
return "NULL";
233-
if (paramValue instanceof String)
234-
return TEXT_QUOTE + paramValue + TEXT_QUOTE;
233+
if (paramValue instanceof String stringParam)
234+
return TEXT_QUOTE + stringParam.replaceAll("\\$", "\\\\\\$") + TEXT_QUOTE;
235235
if (paramValue instanceof Long)
236236
return paramValue + "::BIGINT";
237237
if (paramValue instanceof Number)
@@ -363,19 +363,24 @@ private void replaceNamedParametersInt(boolean usePlaceholders) {
363363
Pattern p = Pattern.compile("#\\{\\s*([^\\s\\}]+)\\s*\\}");
364364
Matcher m = p.matcher(text());
365365

366-
while (m.find()) {
367-
String nParam = m.group(1);
368-
if (!namedParameters.containsKey(nParam))
369-
throw new IllegalArgumentException("sql: named Parameter ["+ nParam +"] missing");
370-
if (!namedParams2Positions.containsKey(nParam))
371-
namedParams2Positions.put(nParam, new ArrayList<>());
372-
namedParams2Positions.get(nParam).add(parameters.size());
373-
parameters.add(namedParameters.get(nParam));
374-
if (!usePlaceholders) {
375-
statement = m.replaceFirst(paramValueToString(namedParameters.get(nParam)));
376-
m = p.matcher(text());
366+
try {
367+
while (m.find()) {
368+
String nParam = m.group(1);
369+
if (!namedParameters.containsKey(nParam))
370+
throw new IllegalArgumentException("sql: named Parameter [" + nParam + "] missing");
371+
if (!namedParams2Positions.containsKey(nParam))
372+
namedParams2Positions.put(nParam, new ArrayList<>());
373+
namedParams2Positions.get(nParam).add(parameters.size());
374+
parameters.add(namedParameters.get(nParam));
375+
if (!usePlaceholders) {
376+
statement = m.replaceFirst(paramValueToString(namedParameters.get(nParam)));
377+
m = p.matcher(text());
378+
}
377379
}
378380
}
381+
catch (Exception e) {
382+
System.out.println(e.getMessage());
383+
}
379384

380385
if (usePlaceholders)
381386
statement = m.replaceAll("?");

0 commit comments

Comments
 (0)