EMPIREDB-359
Allow multiple occurrences of column placeholder
diff --git a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBAbstractFuncExpr.java b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBAbstractFuncExpr.java
index 1a2e7f8..100ecd0 100644
--- a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBAbstractFuncExpr.java
+++ b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBAbstractFuncExpr.java
@@ -209,20 +209,26 @@
// template = template.replaceAll("\\{" + String.valueOf(i) + "\\}", value);
template = StringUtils.replaceAll(template, ph, paramAsString);
}
- }
- // Get Prefix and Postfix
- String prefix = template;
- String postfix = "";
- int sep = template.indexOf("?");
- if (sep >= 0)
+ }
+ // Assemble SQL
+ int beg = 0;
+ while (true)
{
- prefix = template.substring(0, sep);
- postfix = template.substring(sep + 1);
- }
- // append
- sql.append(prefix);
- expr.addSQL(sql, (context & ~CTX_ALIAS));
- sql.append(postfix);
+ int end = template.indexOf("?", beg);
+ if (end < 0)
+ break;
+ // part
+ sql.append(template.substring(beg, end));
+ expr.addSQL(sql, (context & ~CTX_ALIAS));
+ beg = end + 1;
+ }
+ if (beg < template.length())
+ { // add the rest
+ sql.append(template.substring(beg));
+ // special case: Nothing added yet
+ if (beg==0)
+ log.warn("No Placeholder for Column found in function template.");
+ }
}
@Override