1.1 --- a/java/sql-dk/src/info/globalcode/sql/dk/SQLCommandNamed.java Tue Dec 24 01:42:24 2013 +0100
1.2 +++ b/java/sql-dk/src/info/globalcode/sql/dk/SQLCommandNamed.java Tue Dec 24 11:54:58 2013 +0100
1.3 @@ -18,13 +18,14 @@
1.4 package info.globalcode.sql.dk;
1.5
1.6 import static info.globalcode.sql.dk.Functions.notNull;
1.7 -import static info.globalcode.sql.dk.Functions.escapeRegEx;
1.8 import static info.globalcode.sql.dk.Functions.findByName;
1.9 import java.sql.Connection;
1.10 import java.sql.PreparedStatement;
1.11 import java.sql.SQLException;
1.12 import java.util.ArrayList;
1.13 import java.util.List;
1.14 +import java.util.logging.Level;
1.15 +import java.util.logging.Logger;
1.16 import java.util.regex.Matcher;
1.17 import java.util.regex.Pattern;
1.18
1.19 @@ -34,7 +35,7 @@
1.20 */
1.21 public class SQLCommandNamed extends SQLCommand {
1.22
1.23 - private static final String PROBLEM_MARK = "<OMG>";
1.24 + private static final Logger log = Logger.getLogger(SQLCommandNamed.class.getName());
1.25 private String namePrefix;
1.26 private String nameSuffix;
1.27 private List<NamedParameter> parameters;
1.28 @@ -54,6 +55,7 @@
1.29 public PreparedStatement prepareStatement(Connection c) throws SQLException {
1.30 buildPattern();
1.31 placeParametersAndUpdateQuery();
1.32 + logPossiblyMissingParameters();
1.33 return c.prepareStatement(updatedQuery.toString());
1.34 }
1.35
1.36 @@ -72,16 +74,16 @@
1.37 private void buildPattern() {
1.38 StringBuilder patternString = new StringBuilder();
1.39
1.40 - patternString.append(escapeRegEx(namePrefix));
1.41 + patternString.append(Pattern.quote(namePrefix));
1.42 patternString.append("(");
1.43 for (int i = 0; i < parameters.size(); i++) {
1.44 - patternString.append(escapeRegEx(parameters.get(i).getName()));
1.45 - if (i < parameters.size()) {
1.46 + patternString.append(Pattern.quote(parameters.get(i).getName()));
1.47 + if (i < parameters.size() - 1) {
1.48 patternString.append("|");
1.49 }
1.50 }
1.51 patternString.append(")");
1.52 - patternString.append(escapeRegEx(nameSuffix));
1.53 + patternString.append(Pattern.quote(nameSuffix));
1.54
1.55 pattern = Pattern.compile(patternString.toString());
1.56 }
1.57 @@ -95,13 +97,6 @@
1.58 String name = m.group(1);
1.59
1.60 updatedQuery.append(originalQuery.substring(lastPosition, m.start()));
1.61 -
1.62 - if (name.isEmpty()) {
1.63 - updatedQuery.append(PROBLEM_MARK);
1.64 - updatedQuery.append(originalQuery.substring(m.end(), originalQuery.length()));
1.65 - throw new SQLException("Named parameter (near " + PROBLEM_MARK + ") is not defined: „" + updatedQuery + "“");
1.66 - }
1.67 -
1.68 updatedQuery.append("?");
1.69
1.70 parametersUsed.add(findByName(parameters, name));
1.71 @@ -117,6 +112,17 @@
1.72 }
1.73 }
1.74
1.75 + private void logPossiblyMissingParameters() {
1.76 + Pattern p = Pattern.compile(Pattern.quote(namePrefix) + ".*?" + Pattern.quote(nameSuffix));
1.77 + Matcher m = p.matcher(updatedQuery);
1.78 + int lastPosition = 0;
1.79 + while (m.find(lastPosition)) {
1.80 +
1.81 + log.log(Level.WARNING, "Possibly missing parameter: {0}", m.group());
1.82 + lastPosition = m.end();
1.83 + }
1.84 + }
1.85 +
1.86 @Override
1.87 public List<NamedParameter> getParameters() {
1.88 return parameters;