Skip to content

Commit

Permalink
Fix bug in SQLQuery that values could not be used to replace paramete…
Browse files Browse the repository at this point in the history
…r placeholders if containing a dollar sign

Signed-off-by: Benjamin Rögner <[email protected]>
  • Loading branch information
roegi committed Oct 10, 2024
1 parent c684888 commit 003202b
Showing 1 changed file with 18 additions and 13 deletions.
31 changes: 18 additions & 13 deletions xyz-util/src/main/java/com/here/xyz/util/db/SQLQuery.java
Original file line number Diff line number Diff line change
Expand Up @@ -230,8 +230,8 @@ private String replaceUnnamedParametersForLogging() {
private String paramValueToString(Object paramValue) {
if (paramValue == null)
return "NULL";
if (paramValue instanceof String)
return TEXT_QUOTE + paramValue + TEXT_QUOTE;
if (paramValue instanceof String stringParam)
return TEXT_QUOTE + stringParam.replaceAll("\\$", "\\\\\\$") + TEXT_QUOTE;
if (paramValue instanceof Long)
return paramValue + "::BIGINT";
if (paramValue instanceof Number)
Expand Down Expand Up @@ -363,19 +363,24 @@ private void replaceNamedParametersInt(boolean usePlaceholders) {
Pattern p = Pattern.compile("#\\{\\s*([^\\s\\}]+)\\s*\\}");
Matcher m = p.matcher(text());

while (m.find()) {
String nParam = m.group(1);
if (!namedParameters.containsKey(nParam))
throw new IllegalArgumentException("sql: named Parameter ["+ nParam +"] missing");
if (!namedParams2Positions.containsKey(nParam))
namedParams2Positions.put(nParam, new ArrayList<>());
namedParams2Positions.get(nParam).add(parameters.size());
parameters.add(namedParameters.get(nParam));
if (!usePlaceholders) {
statement = m.replaceFirst(paramValueToString(namedParameters.get(nParam)));
m = p.matcher(text());
try {
while (m.find()) {
String nParam = m.group(1);
if (!namedParameters.containsKey(nParam))
throw new IllegalArgumentException("sql: named Parameter [" + nParam + "] missing");
if (!namedParams2Positions.containsKey(nParam))
namedParams2Positions.put(nParam, new ArrayList<>());
namedParams2Positions.get(nParam).add(parameters.size());
parameters.add(namedParameters.get(nParam));
if (!usePlaceholders) {
statement = m.replaceFirst(paramValueToString(namedParameters.get(nParam)));
m = p.matcher(text());
}
}
}
catch (Exception e) {
System.out.println(e.getMessage());
}

if (usePlaceholders)
statement = m.replaceAll("?");
Expand Down

0 comments on commit 003202b

Please sign in to comment.